在foreach循环中将列表转换为代理

时间:2017-05-23 12:25:12

标签: foreach netlogo

以下是导致问题的一小部分代码。

to update-trustt
  let rank-tvmratio sort-on [tvmratio] turtles
  foreach rank-tvmratio tvmratio -> ask rank-tvmratio [set trustt (trustt + tvmratio)]
end

在此代码中,"rank-tvmratio"应该带有以下列表: [(龟56)(龟23)......(龟9)]

我想要做的是让每只海龟都更新"trustt"变量 分别写在第3行。

按照布莱恩的建议,我插入了"->"并指定了#34;谁"正在做什么"。

但是,还有一条新的错误消息"Nothing name -> has been defined"

我该如何解决这个问题?我需要你明智的建议。

(实际变量tvmratio来自程序R,使用RNetLogo包。这与此有关吗?)

谢谢

1 个答案:

答案 0 :(得分:1)

我认为这可能是你想要的:

to update-trustt
  let rank-tvmratio sort-on [tvmratio] turtles
  foreach rank-tvmratio [ t ->
    ask t [
      set trustt (trustt + rank-tvmratio)
    ]
  ]
end

您的代码存在一些问题。首先,给foreach的命令需要包含一个参数。您可以使用->语法执行此操作。 t之前的->(对于乌龟)是列表中的每个项目都将作为传递的变量。其次,您需要明确询问t,因为foreachask不同,没有代理运行命令,它只运行命令,其中传递的项目为一段时间作为命令的论据。