2015-01-08 4 views
2

Код:Сообщить об ошибке внутренней петли

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, а затем возвращение в конце не является вероятной опцией.

ответ

1

Это несчастливое ограничение языка NetLogo, которое report не может использоваться внутри ask, hatch и аналогичных примитивов.

Но в этом случае, даже если ограничение не было, код все равно будет неправильным, потому что вы хотите убить черепаху на выходе из процедуры, и просто используя report не выполняет что.

Вы можете исправить это следующим образом:

to-report check-wall 
    let result false 
    hatch 1 [ 
    ... 
    while [not result and ...] [ 
     ... 
     if ... [ set result true ] 
    ] 
    die 
    ] 
    report result 
end 
Смежные вопросы