Lambda SICP练习2.33发布

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是什么?它们是如何传递到方程中的 (很好的解释) 首先,让我们看看书中定义的累加< /代

这个练习有点问题。具体来说,“看到”lambda表达式是如何工作的

练习本身就是这样说的

(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的