Похоже, даже вложение stop
в дополнительную процедуру ask
в той же процедуре не помогает. Однако, если вам нужно быстрое исправление, я думаю, что вы можете заменить второй цикл foreach
на отдельную процедуру, которая содержит stop
в качестве обходного пути. Например, эта процедура соответствует формату, аналогичному вашему, и возникает та же проблема - как только stop
называется более широким foreach
завершается.
to nest-foreach-example
ca
crt 1
let xs [ 1 2 3 4 ]
let ys [ 1 2 3 4 ]
foreach xs [
x ->
foreach ys [
y ->
ask turtles [
if y > x [
stop
]
]
print word x y
]
]
end
Это распечатывает 11
.
Однако, если вы сделаете пользовательскую процедуру вместо вашего цикла "y" foreach
, она будет работать (с или без ask turtles
):
to nest-foreach-example-turtles
ca
crt 1
let xs [ 1 2 3 4 ]
let ys [ 1 2 3 4 ]
foreach xs [
x ->
for-y x ys
]
end
to for-y [ x_ ys ]
foreach ys [
y ->
ask turtles [
if y > x_ [
stop
]
]
print word x_ y
]
end
Выходы:
11
21
22
31
32
33
41
42
43
44