【问题标题】:Problem with NetLogo anonymous proceduresNetLogo 匿名程序的问题
【发布时间】:2020-01-10 20:49:03
【问题描述】:

我在转换旧的 NetLogo 代码以使用 NetLogo 6.0.1 时遇到问题

我遇到的问题如下:

set recv turtle (read-from-string ?)

我知道吗?已更改为->。但我不知道这条线是如何工作的。

整个代码是:

to send [msg]
  let recipients get-receivers msg
  let recv 0
  foreach recipients [
   set recv turtle (read-from-string ?)
   if recv != nobody [without-interruption [ask recv [receive msg]]] ;; read-from-string is required to convert the string to number
  ]
end

【问题讨论】:

  • 能否请您向我们展示整段代码 - 代码在哪里?来自?例如,如果这是在 foreach 循环中,则显示 foreach 循环。

标签: lambda netlogo procedure anonymous


【解决方案1】:

代表recipients 的每个元素的? 现在替换为在foreach 括号内声明的局部变量。在这里,我声明了一个变量recip,但它可以是任何你想要的。

    to send [msg]
      let recipients get-receivers msg
      let recv 0
      foreach recipients [recip ->
       set recv turtle (read-from-string recip)
       if recv != nobody [without-interruption [ask recv [receive msg]]] ;; read-from-string is required to convert the string to number
      ]
    end

这有两个好处:您可以“命名”问号,以便更容易记住它代表什么,并且,如果您要迭代多个列表,您可以声明多个变量,一个用于每个列表。

【讨论】:

  • 感谢您的回答。您能否也帮我完成这部分:to-report get-sender [msg] report remove "sender:" first (filter [not is-number? ? and member? "sender:" ?] msg) end
  • 是同一个想法。只看filter 片,filter [m -> not is-number? m and member? "sender:" m] msg。将问号作为is-number?member? 原语名称的一部分是摆脱它们以表示msg 列表中的项目的另一个原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多