当前位置: 首页 > 知识库问答 >
问题:

if elseif else在Netlogo环境中实现

越扬
2023-03-14

我希望-if elseif else语句在NetLogo中。我怎么能这么有效地做呢?我检查了NetLogo留档没有命令这样做。以前类似的问题没有直接回答,但在上下文中解决了。

一个简单的解决方案是:

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

    ...
    ]

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

编辑:在尼古拉斯的建议下,在第二个条件下添加了标志。

共有2个答案

阎雪峰
2023-03-14

我觉得这个表单最具可读性,尽管结尾的“]”有点令人不快

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”式的转换语句

穆轶
2023-03-14

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

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

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

 类似资料:
  • 因此,这个简单的代码块将在环境中创建黑色补丁集群。 我想知道如何在环境中按程序进行喷漆和重新喷漆。我想要的效果是周期性地消失补丁,并在随机位置重新出现。 我不知道如何应用伪代码逻辑,例如: -netlogo语法中。 非常感谢您的帮助。提前谢谢!

  • 我曾多次使用NetLogo向人们解释基于代理的建模的力量,我发现它非常有效。 我在工作中遇到了一个特殊的商业问题,我认为ABM,尤其是Netlogo,可能有助于在两个观点根深蒂固且相互对立的团体之间就前进的道路达成共识。 我想做的是演示模型和修改参数。更好的是,如果可能的话,我希望他们看到我加入模型。 然而,这是一个企业环境。我不能在我的机器上安装软件,或者任何我可以连接到他们网络的机器上。 有没

  • New in version 1.1. 你完全有可能遇到一些更新包需要通过proxy才能正常获取,或者甚至一部分包需要通过proxy升级而另外一部分包则不需要通过proxy.或者可能你的某个脚本需要调用某个环境变量才能正常运行. Ansible 使用 ‘environment’ 关键字对于环境部署的配置非常简单容易,下面是一个使用案例: - hosts: all remote_user: ro

  • 我在一个由10-20个团队组成的环境中工作。每个团队在单个数据库模式中都有自己的一组数据库表。所有团队都使用JaVersJavaSpring Boot应用程序。我的任务是为我们的应用程序实现一些审计框架。虽然我们不会在这种环境中呆太久,但我们正试图转移到AWS;其他19支队伍将留下来。我需要以一种易于移植的方式实现审计框架,我不想在这些共享表中分割数据,并在迁移过程中冒损坏数据的风险。 我是否可以

  • 我正在docker容器中安装java应用程序。它运行正常,但我在日志中不断发现这个错误: 信息1---[ost-startStop-1]o.a.catalina。果心AprLifecycleListener:java上没有基于APR的Apache Tomcat本机库,该库允许在生产环境中实现最佳性能。图书馆路径:[/usr/java/packages/lib/amd64:/usr/lib/x86\

  • 我将一个NetLogo列表从NetLogo传递到Java(到一个扩展),然后再次将其发送回NetLogo,在那里我想将其用作另一个过程的参数。但当我将其发送回NetLogo时,logolost的Java表示似乎已经改变了它,使其包含逗号,即。 变成了,当我把它传下去时,NetLogo会抱怨。(它说它期望一个常数。) 从ExtensionCode中的参数检索列表时,我使用args[0]。getLis