Lambda SICP练习2.33发布
这个练习有点问题。具体来说,“看到”lambda表达式是如何工作的 练习本身就是这样说的Lambda SICP练习2.33发布,lambda,scheme,lisp,sicp,Lambda,Scheme,Lisp,Sicp,这个练习有点问题。具体来说,“看到”lambda表达式是如何工作的 练习本身就是这样说的 (define (map p sequence) (accumulate (lambda (x y) <??>) nil sequence)) 但我不明白。我的意思是,我看到“累积”过程遵循(定义(累积操作初始序列)…形式 那么,这是否意味着(λ(xy)(cons(px)y))是“op”部分?如果是,x和y是什么?它们是如何传递到方程中的 (很好的解释) 首先,让我们看看书中定义的累加< /代
(define (map p sequence)
(accumulate (lambda (x y) <??>) nil sequence))
但我不明白。我的意思是,我看到“累积”过程遵循(定义(累积操作初始序列)…形式
那么,这是否意味着(λ(xy)(cons(px)y))是“op”部分?如果是,x和y是什么?它们是如何传递到方程中的
(很好的解释)
首先,让我们看看书中定义的<代码>累加< /代码>:
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
基本上,它是一种特殊的实现(也称为折叠右键),一种处理输入列表、对每个元素应用特定操作并累积结果的高阶过程
请注意,op
参数是这样一个过程(让我们将x
和y
重命名为更有意义的名称):
你注意到模式了吗?map
与acculate
非常相似,我们只需要:
初始值
值:null
将是完美的op
过程,将p
应用于列表中的当前元素,并将其应用于递归调用的结果accumulate
:
(define (map p sequence)
(accumulate (lambda (element accumulator)
(cons (p element) accumulator))
null
sequence))
需要注意的关键细节是lambda
正文中的这一行:
(cons (p element) accumulator)
与原始地图中的另一行完全相同:
(define (map p sequence)
(if (null? sequence)
null
(cons (p (car sequence))
(map p (cdr sequence)))))
(cons (p (car sequence)) (map p (cdr sequence)))
^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
cons both parts apply `p` on current element all this is the accumulated value
看为什么,使用替换模型并替换<代码> OP>代码>代码>初始代码< >代码>序列> <代码>(在代码<参数>累积/代码>),以我们传递的实际值作为参数。
首先,让我们看看书中定义的<代码>累积/代码>:(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
基本上,它是一种特殊的实现(也称为折叠右键),一种处理输入列表、对每个元素应用特定操作并累积结果的高阶过程
请注意,op
参数是这样一个过程(让我们将x
和y
重命名为更有意义的名称):
你注意到模式了吗?map
与acculate
非常相似,我们只需要:
初始值
值:null
将是完美的op
过程,将p
应用于列表中的当前元素,并将其应用于递归调用的结果accumulate
:
(define (map p sequence)
(accumulate (lambda (element accumulator)
(cons (p element) accumulator))
null
sequence))
需要注意的关键细节是lambda
正文中的这一行:
(cons (p element) accumulator)
与原始地图中的另一行完全相同:
(define (map p sequence)
(if (null? sequence)
null
(cons (p (car sequence))
(map p (cdr sequence)))))
(cons (p (car sequence)) (map p (cdr sequence)))
^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
cons both parts apply `p` on current element all this is the accumulated value
看为什么,使用替换模型并替换<代码> OP>代码>代码>初始代码< >代码>序列> <代码>(在代码<参数>累积/代码>),以我们传递的实际值作为参数。
首先,让我们看看书中定义的<代码>累积/代码>:(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
基本上,它是一种特殊的实现(也称为折叠右键),一种处理输入列表、对每个元素应用特定操作并累积结果的高阶过程
请注意,op
参数是这样一个过程(让我们将x
和y
重命名为更有意义的名称):
你注意到模式了吗?map
与acculate
非常相似,我们只需要:
初始值
值:null
将是完美的op
过程,将p
应用于列表中的当前元素,并将其应用于递归调用的结果accumulate
:
(define (map p sequence)
(accumulate (lambda (element accumulator)
(cons (p element) accumulator))
null
sequence))
需要注意的关键细节是lambda
正文中的这一行:
(cons (p element) accumulator)
与原始地图中的另一行完全相同:
(define (map p sequence)
(if (null? sequence)
null
(cons (p (car sequence))
(map p (cdr sequence)))))
(cons (p (car sequence)) (map p (cdr sequence)))
^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
cons both parts apply `p` on current element all this is the accumulated value
看为什么,使用替换模型并替换<代码> OP>代码>代码>初始代码< >代码>序列> <代码>(在代码<参数>累积/代码>),以我们传递的实际值作为参数。
首先,让我们看看书中定义的<代码>累积/代码>:(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
基本上,它是一种特殊的实现(也称为折叠右键),一种处理输入列表、对每个元素应用特定操作并累积结果的高阶过程
请注意,op
参数是这样一个过程(让我们将x
和y
重命名为更有意义的名称):
你注意到模式了吗?map
与acculate
非常相似,我们只需要:
初始值
值:null
将是完美的op
过程,将p
应用于列表中的当前元素,并将其应用于递归调用的结果accumulate
:
(define (map p sequence)
(accumulate (lambda (element accumulator)
(cons (p element) accumulator))
null
sequence))
需要注意的关键细节是lambda
正文中的这一行:
(cons (p element) accumulator)
与原始地图中的另一行完全相同:
(define (map p sequence)
(if (null? sequence)
null
(cons (p (car sequence))
(map p (cdr sequence)))))
(cons (p (car sequence)) (map p (cdr sequence)))
^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
cons both parts apply `p` on current element all this is the accumulated value
要了解原因,请使用替换模型,并将op
、initial
和sequence
(累积
中的参数)替换为我们作为参数传递的实际值
那么,这是否意味着(λ(xy)(cons(px)y))是“op”部分
对
&如果是,x&y是什么?它们是如何传递到equati的