NetLogo:foreach语法

NetLogo:foreach语法,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,非常基本的问题,我不明白为什么我的foreach代码没有做任何事情(没有错误消息,但没有任何效果)。所以我的海龟们有一个三维变量(意图),它被预设为[0]。我的最后一个问题比这复杂得多,但简单地说,我现在试图让这个向量的每个维度都变为一,即[1] 我创建了一个名为change intention的过程,它使用foreach来生成此过程,但没有任何效果: to change-intention ask turtles [ (foreach intention [ x -> set x

非常基本的问题,我不明白为什么我的foreach代码没有做任何事情(没有错误消息,但没有任何效果)。所以我的海龟们有一个三维变量(意图),它被预设为
[0]
。我的最后一个问题比这复杂得多,但简单地说,我现在试图让这个向量的每个维度都变为一,即
[1]

我创建了一个名为
change intention
的过程,它使用
foreach
来生成此过程,但没有任何效果:

to change-intention
ask turtles [
    (foreach intention [ x -> set x 1])
    ]
end
我已经在observer&turtle命令行以及单个turtle的命令行上尝试过,没有结果也没有错误


谢谢

有几个问题。第一个是列表是不可变的-如果您想更改列表中的值,必须使用该值创建一个新列表。第二,您不能使用
set
来执行此操作,您必须使用
replace item

代码是自包含的——打开一个新模型并进行尝试,将testme过程中的调用更改为不同的实现。程序更改意图1是您当前思考的方式(无论如何,我的解释)。程序change-Translation2是实施您的方法的方法,替换每个项目并创建新列表(解决已识别的问题)

但是,更好的方法是使用
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

再次感谢@JenB,这个很好用——我已经在你写的时候和我自己的模型中测试过了。我知道map会是一种更有效的方法,但却永远找不到正确的语法。我复制了您的以及关于列表的精确性,
替换项
foreach
:)