NetLogo:foreach 语法
NetLogo: foreach syntax
非常基本的问题,我不明白为什么我的 foreach 代码没有执行任何操作(没有错误消息,但没有任何效果)。所以我的海龟有一个 3 维变量(意图),它被预设为 [0 0 0]
。我的最后一个问题比这复杂得多,但简单来说,我现在试图让这个向量的每个维度都变成一个,即 [1 1 1]
.
我创建了一个名为 change-intention
的过程,它使用 foreach
来生成这个,但没有效果:
to change-intention
ask turtles [
(foreach intention [ x -> set x 1])
]
end
我已经在观察者和海龟命令行以及个别海龟上尝试过这个,没有结果也没有错误..
谢谢!
几个问题。首先是列表是不可变的——如果你想改变列表中的值,你必须用那个值创建一个新列表。第二个是你不能使用 set
来做到这一点,你必须使用 replace-item
.
代码是自包含的 - 打开一个新模型并尝试,将 testme 过程中的调用更改为不同的实现。程序 change-intention1 是您当前考虑的方式(无论如何我的解释)。程序 change-interpretation2 是实施您的方法的方式,替换每个项目并创建新列表(解决已识别的问题)。
但是,更好的方法是使用 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
非常基本的问题,我不明白为什么我的 foreach 代码没有执行任何操作(没有错误消息,但没有任何效果)。所以我的海龟有一个 3 维变量(意图),它被预设为 [0 0 0]
。我的最后一个问题比这复杂得多,但简单来说,我现在试图让这个向量的每个维度都变成一个,即 [1 1 1]
.
我创建了一个名为 change-intention
的过程,它使用 foreach
来生成这个,但没有效果:
to change-intention
ask turtles [
(foreach intention [ x -> set x 1])
]
end
我已经在观察者和海龟命令行以及个别海龟上尝试过这个,没有结果也没有错误..
谢谢!
几个问题。首先是列表是不可变的——如果你想改变列表中的值,你必须用那个值创建一个新列表。第二个是你不能使用 set
来做到这一点,你必须使用 replace-item
.
代码是自包含的 - 打开一个新模型并尝试,将 testme 过程中的调用更改为不同的实现。程序 change-intention1 是您当前考虑的方式(无论如何我的解释)。程序 change-interpretation2 是实施您的方法的方式,替换每个项目并创建新列表(解决已识别的问题)。
但是,更好的方法是使用 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