NetLogo 中的 if 语句

And if statements in NetLogo

我正在尝试创建蜜蜂传播花粉的模拟,我希望做到这一点,当蜜蜂拜访一朵花时,它会将颜色更改为蓝色,而乌龟 'bee' 的花粉值为+1,然后当它的花粉值为 +3 并拜访一朵花时,颜色变为绿色。

我已经尝试了多种方法来解决这个问题,如果有一个有用的 and if 语句,例如

to pollenate 
ask turtles [
if pollen > 3
and if pcolor = yellow or blue [ 
set pcolor white
set pollen pollen - 3
]
]
end 

不过我不确定是否存在 and 语句。

所以我尝试过当海龟的花粉数高于 3 时它们会改变颜色,然后尝试了下面的代码但不断收到错误消息。

to pollenate
ask turtles with [ color = white ] [
if pcolor = blue
[set pcolor = green
set pollen pollen -3
]
]
end

我一直收到错误 'Set expected 2 inputs'

任何对这两种方法的帮助都将不胜感激,或者如果我做错了整件事请告诉我哈哈。

这就是你的两个问题的答案。

(1) "and if " 可以通过在测试中使用逻辑与来完成。我 HAD 在通过 OR 连接的颜色测试周围使用括号,然后将其与花粉 > 3 测试连接起来。与数学一样,首先计算内部括号。我更喜欢在所有逻辑测试周围使用括号,例如 ( pollen > 3) -- 这不是必需的,但我发现它更容易阅读。

to pollenate 
ask turtles [
    if (pollen > 3) and ((pcolor  = yellow) or (pcolor = blue))
            [ 
               set pcolor white
               set pollen pollen - 3
           ]
]
end 

您也可以像这样使用颜色列表中的 pcolor 测试;

to pollenate 
ask turtles [
    if (pollen > 3) and (member? pcolor [yellow blue] )
            [ 
               set pcolor white
               set pollen pollen - 3
           ]
]
end 

关于你的第二个问题,工作版本是

o pollenate
ask turtles with [ color = white ] [
if pcolor = blue
[set pcolor = green
set pollen pollen - 3
]
]
end

没看出区别?我在减号两边放了一个space,否则Netlogo看到的是三个参数:pollen, pollen, and -3 而不是你想要的两个,即pollen和(pollen - 3).