如何解析 Netlogo 中的字符串?

And*_*é.B 3 string parsing numeric netlogo

语境

对于我的模型,我希望有一个输入,用户可以在其中输入一系列值。

例如

在此输入图像描述

我希望从上面显示的输入中得到一个包含五个数字的列表,例如[0.5 0.2 0 0.2 0.5],这样我就可以使用它们输入的数字进行一些计算。

问题

"0.5 0.2 0 0.2 0.5"不幸的是,如果我将类型设置为字符串,则像上面那样设置输入将会出现错误。如果我将类型设置为数字,则只允许输入单个数字。

那么,如何解析以空格为基础的字符串(即“”)?我也对替代方案持开放态度,尽管我更愿意将其保留在 Netlogo 中(例如,不读取值的文本文件)以使其更容易更改,因为我怀疑它会被经常使用。

我尝试过的

我尝试过使用read-from-string,但它也不喜欢像上面那样输入一系列数字。我还尝试使用explode字符串扩展(https://github.com/NetLogo/String-Extension)中的函数,但我的 Netlogo 版本(6.2.0)不喜欢该扩展中的 API,并且不允许我来使用它。

我对 NetLogo 很陌生,如果我的问题很愚蠢或者我没有说清楚的话,我很抱歉!

Jas*_*per 5

根据其上的文档read-from-string可以解析文字值列表。您遇到的问题是,根据《编程指南》的常量列表部分,NetLogo 列表文字必须有方括号来打开和关闭。因此,您所需要做的就是将[和添加]到用户的输入中。

to test
  let s "0.5 0.2 0 0.2 0.5"
  let l read-from-string (word "[" s "]")
  show l
  show item 2 l
end
Run Code Online (Sandbox Code Playgroud)

输出:

observer> test
observer: [0.5 0.2 0 0.2 0.5]
observer: 0
Run Code Online (Sandbox Code Playgroud)

不过,我要提醒您的是,用户可以很容易地输入不同格式的数字,例如0, 2, 3, 5.0使用逗号分隔值。检查转换是否确实有效是明智的做法,因为从失败中获得的错误消息read-from-string可能对模型用户没有帮助。

  • “仔细”对于检查转换是否有效非常有用。 (3认同)