gpt4 book ai didi

netlogo - 映射任务中的局部变量?

转载 作者:行者123 更新时间:2023-12-02 16:48:01 24 4
gpt4 key购买 nike

有没有办法使用map在内联报告器任务中定义局部变量?

这个

to go
show map [? * ?] [1 2 3]
end

按预期显示[1 4 9]。第一组括号中的是“记者任务”。

如果我想在任务中使用 let 该怎么办?

to go
show map [
let sq ? * ?
sq + 1
]
[1 2 3]
end

错误:“这里应该有一个记者任务,而不是一个列表或 block 。”整个第一个括号表达式会突出显示为产生语法错误的内容。

也许我需要添加task关键字来告诉NetLogo这是一个任务?编程指南说,对于 map 来说“任务原语是可选的”,但值得一试。这有效:

to go
show map (task [? * ?]) [1 2 3]
end

但这不是:

to go
show map (task [
let sq ? * ?
sq + 1
])
[1 2 3]
end

sq 的第二个实例突出显示,并显示错误消息“预期命令”。奇怪的是,这次的错误不同。

也许我需要添加报告

to go
show map (task [
let sq ? * ?
report sq + 1
])
[1 2 3]
end

这在语法上是可以接受的,但是当我运行它时,我收到一个运行时错误:“MAP 预期输入是报告器任务,但得到的是命令任务(命令任务来自:过程 GO)。”

我发现唯一可行的选择是定义一个单独的报告者:

to go
show map square-plus-one [1 2 3]
end

to-report square-plus-one [n]
let sq n * n
report sq + 1
end

这很容易。不过,我很好奇我是否遗漏了一些东西。有没有办法在内联报告器任务中使用局部变量?

最佳答案

目前无法完成复杂记者的记者任务。请参阅编程指南中的“Tasks”下的“限制”部分:

Reporter tasks can't contain commands, only a single reporter expression.

https://github.com/NetLogo/NetLogo/issues/351相关 - 它专门讨论了需要从外部作用域引用 ? 变量的问题。

关于netlogo - 映射任务中的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34141527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com