Lisp “理解原初”;foldl";吵闹
我是一个初学者,我试图理解原始函数foldl/foldr。我读了这本书,试了一些东西。 但是,在这种情况下,我无法理解它的行为:Lisp “理解原初”;foldl";吵闹,lisp,racket,fold,Lisp,Racket,Fold,我是一个初学者,我试图理解原始函数foldl/foldr。我读了这本书,试了一些东西。 但是,在这种情况下,我无法理解它的行为: (foldl expt 2 '(1 2 3 4)) >> 262144 我认为结果应该是一样的: (expt (expt (expt (expt 2 1) 2) 3) 4) >> 16777216 我无法跟踪foldl,因为该函数是原语。我看不出这个程序是如何达到这个结果的。我正在使用Racket和Dr.Racket。你对foldl的理解是
(foldl expt 2 '(1 2 3 4))
>> 262144
我认为结果应该是一样的:
(expt (expt (expt (expt 2 1) 2) 3) 4)
>> 16777216
我无法跟踪foldl,因为该函数是原语。我看不出这个程序是如何达到这个结果的。我正在使用Racket和Dr.Racket。你对
foldl
的理解是参数顺序向后的(尽管这是可以理解的,因为fold/reduce的参数顺序倾向于向后)。正确的等效性如下所示:
> (foldl expt 2 '(1 2 3 4))
262144
> (expt 4 (expt 3 (expt 2 (expt 1 2))))
262144
顺便说一句,
foldl
内置于#lang racket/base
,但它不是在运行时实现的原语。如果您正在使用DrRacket,您可以右键单击使用foldl
,然后选择“打开定义文件”以打开实现该文件的模块,在这种情况下,该模块是racket/private/list
。此帖子也可能有帮助: