Netlogo:"expected a literal value" 在 "ifelse" 块中

Netlogo: "expected a literal value" in a "ifelse" block

我想查看乌龟是羊还是狼,分别设置命令。但是 Netlogo 突出显示 set 并告诉我

expected a literal value

这是经过编辑的代码,我添加了更多基本信息并做了一些简化以便快速理解。

breed [sheep a-sheep]
breed [wolves wolf]


sheep-own [SEnergy]
wolves-own [WEnergy]

to setup
  clear-all
  create-sheep 100
  ask sheep [set SEnergy 100]
  
  create-wolves 100
  ask wolves [set SEnergy 100]
  
  reset-ticks
end

to go
  ask turtles[
    (ifelse
      is-a-sheep? [set SEnergy SEnergy - 1]
      is-wolf? [set WEnergy WEnergy - 1])
  ]
  tick
end

我已经在 Netlogo 字典里给例子加红了

(ifelse boolean1 [ commands1 ] boolean2 [ commands2 ] ... [ elsecommands ])

因此我认为我的代码中的 [set SEnergy SEnergy - 1] 应该是 命令 。为什么 Netlogo 告诉我需要 文字值

提前致谢。

问题出在你的语法 is-a-sheep? is-wolf?声明。 is-breed?接受一个参数,即您正在测试的代理的身份。因此,您的代码应该是

to go 
  ask turtles[
    (ifelse
      is-a-sheep? self [ set SEnergy SEnergy - 1 ]
      is-wolf? self [ set WEnergy WEnergy - 1 ])
  ]
end

然后每只乌龟都在问自己它是什么。

当然,你可以单独询问每个agentset。

ask sheep [set SEnergy SEnergy - 1]
ask wolves [set WEnergy WEnergy -1]

查尔斯