if elseif在Netlogo环境中的实现

时间:2015-05-04 20:49:38

标签: netlogo

我希望 - NetLogo中的if elseif else声明。我怎么能有效地这样做?我检查了NetLogo文档没有命令这样做。 Previous similar question没有直接回答,但在上下文中解决了。

一个简单的解决方案是:

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

    ...
    ]

我正在寻找其他更有效率的人。

修改 根据尼古拉斯的建议,在第二个条件中添加了旗帜。

2 个答案:

答案 0 :(得分:4)

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

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

但是,缩进和可读性并不好。有关可能的最终改进的想法,请参阅https://github.com/NetLogo/NetLogo/issues/344https://github.com/qiemem/ControlFlowExtension

答案 1 :(得分:-1)

我发现这个形式最具可读性,虽然最后的“]”堆栈有点令人反感

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”风格开关声明