我想让Netlogo里的乌龟"呆在原地";点击20次,然后继续(只是继续),但我不断得到"预期的命令"。错误。你知道我的括号哪里不对吗?
谢谢!
to solar-battery ;; trying to ask turtles to move forward after being stationary for 20
clicks
ask turtles [
[ifelse (patch-here = destination)
[
if (ticks - ticks-since-here > ticks-to-stay-on-patch patch-here)
[
set ticks-since-here 20
set destination one-of patch]]]
[face destination
forward 1
if [patch-here = destination]
[set ticks-since-here ticks]]]
end
支持思想
由于注释不允许换行和缩进…下面是一个代码格式化的示例。当您变得更加熟练时,您可以尝试其他格式化方案,但在此之前,严格的代码格式化是"自动调试"的一种方法。这可以帮助你避免一些基本的错误——这样你就可以专注于那些棘手的错误。
to do-stuff
ask turtles with [ pxcor > 0 ] ;; this is fine.
[ ;; open of code block
jump 1
if (pcolor = white)
[ ;; open code block
rt 90 jump 1
] ;; close block
] ;; close block
end
在模拟SWITCH结构时,括号的其他安排可以帮助而不是混淆:
进行开关时,保持条件和动作非常短。如果它们很长,将条件包在一个记者中。同样,将操作包装在过程中,除非它非常短。
if-else (condition1) [ action 1 ][
if-else (condition2) [ action 2 ][
if-else (condition3) [ action 3 ][
if-else (condition4) [ action 4 ][
;; OTHERWISE
default-action
]]]] ;; one close bracket for each condition.
这种格式使得添加、删除或重新排序条件非常容易,而不必移动括号、改变缩进或不匹配括号。
的解决方案编辑添加:这里是问题的代码,重新格式化。现在能看到错误了吗?
to solar-battery
;; trying to ask turtles to move forward
;; after being stationary for 20 clicks
ask turtles
[
[ ifelse (patch-here = destination)
[
if (ticks - ticks-since-here > ticks-to-stay-on-patch patch-here)
[
set ticks-since-here 20
set destination one-of patch
]
]
]
[
face destination
forward 1
if [patch-here = destination]
[
set ticks-since-here ticks
]
]
]
end
预期命令提示:
在第一个括号之后,NetLogo需要一个命令。但是你有另一层括号。所以你会得到错误:Expected Command.