报告内循环错误

Report inner loop error

代码:

to-report check-wall
    hatch 1[
    set color grey
    set size ([size] of one-of walls) / 2
    while [distance myself < (2 * ([size] of myself)) and (pycor + ([size] of one-of walls) / 2)  < max-pycor ]
    [

      fd ([size] of one-of walls) / 2
      if any? walls in-radius size
      [
        report true
        ]
      ]
    die
    ]

  report false

错误:

REPORT must be immediately inside a TO-REPORT. error while inboxturtle 260 running REPORT called by procedure CHECK-WALL

请忽略代码的功能。我没有详细说明,因为我认为不需要。 注意: 我希望当内部 if 为真时停止该方法并 return。因此,创建一个变量并将其设置为真,如果然后在最后 returning 不是一个可能的选择。

这是 NetLogo 语言的一个不幸的限制,即 report 不能在 askhatch 和类似的原语中使用。

但在这种情况下,即使不存在限制,代码仍然是不正确的,因为你想在程序结束时杀死乌龟,并且只使用 report 没有做到这一点。

您可以按如下方式修复:

to-report check-wall
  let result false
  hatch 1 [
    ...
    while [not result and ...] [
      ...
      if ... [ set result true ]
    ]
    die
  ]
  report result
end