Context
对于我的模型,我希望有一个输入,用户可以在其中输入一系列值。
E.g.
我希望从上面显示的输入中得到一个由五个数字组成的列表,例如[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 https://github.com/NetLogo/String-Extension),但我的 Netlogo 版本(6.2.0)不喜欢该扩展中的 API,并且不允许我使用它。
我对 NetLogo 很陌生,如果我的问题很愚蠢或者我没有说清楚的话,我很抱歉!
As per 其上的文档 http://ccl.northwestern.edu/netlogo/docs/dictionary.html#read-from-string, read-from-string
可以解析文字值列表。您遇到的问题是 NetLogo 列表文字必须有方括号来打开和关闭,按照the 常量列表编程指南部分 http://ccl.northwestern.edu/netlogo/docs/programming.html#lists。所以你需要做的就是添加[
and ]
根据您的用户的输入。
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
Output:
observer> test
observer: [0.5 0.2 0 0.2 0.5]
observer: 0
不过,我要提醒大家的是,用户很容易输入不同格式的数字,例如0, 2, 3, 5.0
,使用逗号分隔值。检查转换是否确实有效是明智的做法,因为您会从失败中收到错误消息read-from-string
可能对模型用户没有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)