测试列表上的不等式

Testing inequalities on lists

我使用不同的列表原语尝试了几种不同的方法,但找不到一种方法来测试列表中每一项的不等式。例如,我的列表 [1 2 -1 -2] 可以针对 > 0 进行测试,并给出 [1 2 0 0 ]。有人可以帮忙完成这个简单的任务吗?

有几种方法可以做到这一点,具体取决于您想要的结果。对于您的示例,您可以这样做:

map [ ifelse-value (? > 0) [ ? ] [ 0 ] ] my-list

map creates a new list by applying the given reporter task to each item of the given list. If you haven't used tasks 在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,只是它 returns 运行的块中的值。

如果,你只是想去掉列表中所有不满足不等式的项目,你可以使用filter

filter [ ? < 0 ] my-list

mapfilter 是非常强大的记者,但他们需要一点时间才能掌握。但是,如果您需要对列表做一些花哨的事情,您可以使用 mapfilter 或(在更极端的情况下)reduce 来完成。