在Netlogo环境中的if-elseif-else实现

在Netlogo环境中的if-elseif-else实现,netlogo,Netlogo,我希望在NetLogo中声明-if elseif。我怎样才能有效地做到这一点?我检查了NetLogo文档,但没有执行此操作的命令。没有直接回答,而是在上下文中解决 一个简单的解决方案是: let flag true if(condition1) [ ... set flag false ] if(flag and condition2) ;else if statement [ ... set flag fals

我希望在NetLogo中声明-
if elseif
。我怎样才能有效地做到这一点?我检查了NetLogo文档,但没有执行此操作的命令。没有直接回答,而是在上下文中解决

一个简单的解决方案是:

    let flag true
    if(condition1)
    [
    ...
    set flag false
    ]
    if(flag and condition2)   ;else if statement
    [
    ...
    set flag false
    ]
    if(flag)  ;else statement
    [

    ...
    ]
我正在寻找其他更有效率的

编辑:
根据Nicolas的建议,在第二个if条件中添加了标志。

我唯一能全心全意推荐的方法是:

ifelse condition1
  [ ... ]
  [ ifelse condition2
      [ ... ]
      [ ifelse condition3
        [ ... ]
        [ ifelse ...

但是,缩进和可读性都不是很好。有关可能的最终改进的想法,请参阅和。

我发现此表单最具可读性,尽管末尾的“]”堆栈有点令人不快

ifelse item cur brain = 0 [sit][
ifelse item cur brain = 1 [eat][
ifelse item cur brain = 2 [steal][
ifelse item cur brain = 3 [birth][
ifelse item cur brain = 4 [hunger][
ifelse item cur brain = 5 [smell][
]]]]]]

它的优点是简洁,读起来像“C”风格的开关语句

如果/
elseif
/
/
:如果条件1和
条件2
都是呢?您需要将第二个
if
更改为
if(标志和条件2)
。但这很快就会变得一团糟。在找到更好的解决方案之前(可能比你想象的要快…),我会建议坚持塞思在书中描述的模式。是的,我不知道我怎么会错过这个。我想赛斯的方法是唯一的解决办法。但这会使代码的可读性降低,尤其是当代码块包含更多代码时。我们知道应该有更好的方法。正如尼古拉斯所暗示的,一个解决方案正在到来。事实上,我刚刚为此编写了一个扩展,尽管我还没有准备好发布它。如果你想在那之前检查它,你可以在这里找到:随时打开任何问题,并提出建议!谢谢这个扩展也适用于windows吗?虽然这似乎是一个微不足道的问题,你能解释一下如何使用它吗。我只是将它粘贴到“与NetLogo应用程序位于同一位置的extensions文件夹”中,然后使用extensions[ControlFlowExtension master]将它导入模型中。但它似乎不起作用。请打开一个新问题。永远不要说“它不起作用”,始终准确地说出发生了什么,包括任何错误消息的完整和准确文本。感谢您的建议。对不起,我应该提供更多的细节。请在这里查一下-