如何在嵌套的ifelse语句中做到这一点

时间:2019-01-17 13:05:54

标签: if-statement netlogo

我目前正在从事一个项目,该项目要求以下各项:我希望港口(一个品种)询问存储位置(另一个品种)是否具有一定的价值。如果不是,则继续询问下一个存储位置等,直到他找到具有正确值的位置。如果是这样,则应该采取其他措施(例如构建一些东西)。我现在知道了,它似乎可以工作,但是我认为它太长了,而且过于复杂。

to check-pipeline-26
  ask storage 26
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-27]
  ]
end

to check-pipeline-27
  ask storage 27
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-28]
  ]
end

to check-pipeline-28
  ask storage 28
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-29]
  ]
end

to check-pipeline-29
  ask storage 29
  [ifelse pipeline < 1
    [build-pipeline]
    [check-pipeline-30]
  ]
end

让我知道您是否有任何技巧可以简化或简化此操作。预先感谢!

最大

1 个答案:

答案 0 :(得分:3)

这是一个递归解决方案,而不是我将管道号作为参数传递:

to check-pipeline [n]
    if n <= max [who] of storages
    ask storage n [ifelse pipeline < 1 
     [build-pipeline]
     [check-pipeline n + 1]
]
end

注意:您可能会跟踪变量中的max-who,而不是每次都进行计算。

或者,这可能是一个更好的解决方案,您可以只使用for循环并按代理商的身份对代理商进行排序:

 to check-pipeline
     foreach sort-on  [who] storages
      [astorage -> ask astorage[ if pipeline < 1 [build-pipeline stop]]]
    ]
 end