我尝试了几种不同的方法,使用不同的列表原语,但无法找到一种方法来测试列表的每个项目的不等式。例如,我的列表[1 2 -1 -2]
可以测试为> 0,并给出[1 2 0 0 ]
。有人能帮我做这个简单的任务吗?
有几种方法可以做到这一点,这取决于您想要的结果。例如,您可以这样做:
map [ ifelse-value (? > 0) [ ? ] [ 0 ] ] my-list
map
通过将给定的报告者任务应用于给定列表中的每个项目来创建一个新列表。如果您以前没有在NetLogo中使用过任务,那么?
表示任务的参数。在本例中,输入:
map [ ifelse-value (? > 0) [ ? ] [ 0 ] ] [1 2 -1 -2]
主要是:
(list ifelse-value (1 > 0) [ 1 ] [ 0 ]
ifelse-value (2 > 0) [ 2 ] [ 0 ]
ifelse-value (-1 > 0) [ -1 ] [ 0 ]
ifelse-value (-2 > 0) [ -2 ] [ 0 ])
ifelse-value
类似于ifelse
,不同之处在于它返回运行块中的值。
如果你只是想去掉列表中所有不符合不等式的项目,你可以使用filter
filter [ ? < 0 ] my-list
map
和filter
是非常强大的报表,但他们可能需要一些时间来掌握。但是,如果您需要使用列表做一些奇特的事情,那么您可以使用map
、filter
或(在更极端的情况下)reduce
。