Несколько проблем. Во-первых, списки не являются изменяемыми - если вы хотите изменить значение в списке, вы должны создать новый список с этим значением. Во-вторых, вы не можете использовать set
для этого, вы должны использовать replace-item
.
Код самодостаточен - откройте новую модель и попробуйте ее, изменив вызов в процедуре testme на разные реализации. Процедура «изменение намерения» - это то, как вы в настоящее время думаете об этом (в любом случае, моя интерпретация). Процедура изменения-интерпретации2 - это способ реализации вашего подхода, замены каждого элемента и создания нового списка (для устранения выявленных проблем).
Однако, лучший способ сделать это с помощью процедуры map
вместо foreach
, поскольку все значения изменяются сразу, а не циклически перебирают список и обрабатывают каждое из них. Конечно, это не так просто реализовать в вашей реальной модели.
turtles-own [intention]
to testme
clear-all
create-turtles 1
[ set intention [0 0 0]
]
ask turtles [ type "before call:" print intention ]
change-intention2
ask turtles [ type "after call:" print intention ]
reset-ticks
end
to change-intention1
ask turtles
[ foreach intention
[ x ->
print "here"
set intention 1
]
]
end
to change-intention2
ask turtles
[ foreach intention
[ x ->
let pp position x intention
type "here:" print pp
set intention replace-item pp intention 1
]
]
end
to change-intention3
ask turtles
[ set intention map [ x -> 1 ] intention
]
end