Netlogo遗憾地错过了一个c风格的++。你使用了什么工作?
Let x x+1
很好但是当它变成
时Set Goat-drinking-holes Goats-drinking-holes + 1
我渴望C运算符,比如+ =, - =%= etc。
您提出了哪些解决方案?
答案 0 :(得分:2)
唉,set Goat-drinking-holes Goats-drinking-holes + 1
是唯一的方法。但是,对于许多增量的常见用例,有一种更好的方法。例如,可以使用foreach
和map
遍历列表。如果您通过递增来指定您尝试完成的任务,那么人们可能会帮助您找到更简洁和富有表现力的内容。
编辑以回应评论:
为了完整起见,如果真的想要,你可以这样做,但我不推荐它。 NetLogo中明确set
的要求是有意的。 NetLogo(以及其他Logos)从Lisp和其他功能语言中汲取了很多灵感。无论如何,这里是:
to increment [ var-name ]
run (word "set " var-name " " var-name " " + 1")
end
然后你就这样使用它:increment "Goat-drinking-holes"
。这将创建字符串"set Goat-drinking-holes Goat-drinking-holes + 1"
,然后像代码一样运行它。在我看来非常难看,如果在紧密循环中使用它会很慢。请注意,这不会对局部变量起作用,因为它们不在increment
的范围内。如果可以,我真的建议避免这种情况。
如果你发现自己需要增加或使用其他类似的破坏性操作员,那么可能有更好的方法去做你想做的事情。我知道很多人都很乐意提供帮助。 NetLogo有很多东西,C系列语言没有(当然除了整个ABM的东西)经验丰富的程序员通常都不知道要找。 NetLogo缺少那些运营商是有原因的。