Functional programming 关于球拍中foldl函数的问题。(函数式编程)

Functional programming 关于球拍中foldl函数的问题。(函数式编程),functional-programming,scheme,racket,variadic-functions,fold,Functional Programming,Scheme,Racket,Variadic Functions,Fold,我有一行代码: foldl cons“”1 2 3 4 当我运行它时得到的输出是: '4 3 2 1 你能给我解释一下为什么我没有得到1234吗 我阅读了文档,但对foldl的工作原理仍有点困惑。另外,如果我想定义foldl,我将如何在Racket中指定函数可以接受可变数量的列表作为参数 谢谢 是的。根据left fold的定义,使用列表的第一个元素和到目前为止的累积结果调用组合函数,该调用的结果作为到目前为止更新的新累积结果传递给使用相同组合函数和列表其余部分的foldl递归调用: (fold

我有一行代码:

foldl cons“”1 2 3 4

当我运行它时得到的输出是:

'4 3 2 1

你能给我解释一下为什么我没有得到1234吗

我阅读了文档,但对foldl的工作原理仍有点困惑。另外,如果我想定义foldl,我将如何在Racket中指定函数可以接受可变数量的列表作为参数


谢谢

是的。根据left fold的定义,使用列表的第一个元素和到目前为止的累积结果调用组合函数,该调用的结果作为到目前为止更新的新累积结果传递给使用相同组合函数和列表其余部分的foldl递归调用:

(foldl  cons                          '()   '(1 2 3))
=
(foldl  cons                  (cons 1 '())    '(2 3))
=
(foldl  cons          (cons 2 (cons 1 '()))     '(3))
=
(foldl  cons  (cons 3 (cons 2 (cons 1 '())))     '())
=
              (cons 3 (cons 2 (cons 1 '())))
的确

(fold-left (lambda (a b result)
             (* result (- a b)))
           1
           '(1 2 3)
           '(4 5 6))
返回

(fold-left (lambda (a b result)
             (* result (- a b)))
           1
           '(1 2 3)
           '(4 5 6))