Netlogo 减少多项式示例

Netlogo reduce polynomial example

在 "reduce" 的 Netlogo 词典中,他们显示了一个带有一个“+”运算符的示例

reduce [?1 + ?2] [1 2 3 4] 

它们扩展为等同于 (((1 + 2) + 3) + 4)。

后来他们举了这个例子:

;; evaluate the polynomial, with given coefficients, at x
to-report evaluate-polynomial [coefficients x]
  report reduce [(x * ?1) + ?2] coefficients
end

;; evaluate 3x^2 + 2x + 1 at x = 4
show evaluate-polynomial [3 2 1] 4
=> 57

该评估的等效扩展(使用括号)是多少?

observer> show (4 * ((4 * 3) + 2)) + 1
observer: 57

理解的关键是一步一步来。 reduce 首先获取列表的前两个元素并将它们插入 ?1?2,因此

(x * ?1) + ?2

变成

(x * 3) + 2

然后整个表达式变为 ?1,列表的最后一个元素 1 变为 ?2。再次替换初始表达式中的 ?1?2,我们得到:

(x * ((x * 3) + 2)) + 1

剩下的就是用4替换x:

(4 * ((4 * 3) + 2)) + 1