从侦听程序大于0开始,将Netlogo中列表的元素相乘

时间:2018-04-18 07:45:00

标签: list netlogo multiplication

我想从列表中的特定元素开始,将列表的元素相互相乘。这是一个伪代码示例:

set mylist (list 1 2 3 4)
let j 0
while [ j < 4 ] [
  ; set desired_product multiplication of element j with element j+1
]

使它得到1 * 2 * 3 * 4。我知道我可以用reduce做到这一点,但我并不总是想从第一个元素开始。我有时只需要计算从第一个元素(2 * 3 * 4)开始的产品,或者我只需要为每只乌龟计算元素一和二(2 * 3)的乘积。例如

if age of turtle x = 50 [
   ; start the multiplication from element 1 and stop it before element 3
]

所以我得到2 * 3.

1 个答案:

答案 0 :(得分:2)

  

我知道我可以用reduce来做到这一点,但我并不总是想从第一个元素开始。

问题不在于reduce,那么,它与您的列表有关!幸运的是,有一种简单的方法可以从列表中仅获取所需的元素:sublist

  

我有时只需要计算从第一个元素开始的产品(2 * 3 * 4)

print reduce * sublist mylist 1 length mylist
  

或者我只需要计算元素一和二(2 * 3)的乘积

print reduce * sublist mylist 1 3

作为更一般的评论:在NetLogo中很少需要回退while循环。无论何时处理列表,通常都有一种方法可以使用基本列表基元的组合来执行任何操作,例如reducemapfiltersublist,{ {1}}等等。这些不易出错,更清楚地表达意图。