我想从列表中的特定元素开始,将列表的元素相互相乘。这是一个伪代码示例:
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.
答案 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
循环。无论何时处理列表,通常都有一种方法可以使用基本列表基元的组合来执行任何操作,例如reduce
,map
,filter
,sublist
,{ {1}}等等。这些不易出错,更清楚地表达意图。