【问题标题】:I don't understand lambda in Scheme我不明白 Scheme 中的 lambda
【发布时间】:2013-11-06 12:22:51
【问题描述】:

有人可以解释一下 lambda 在方案中的工作原理吗?例如这里的工作原理:

(define (prepend-every prefix sent)
  (every (lambda (wd) (word prefix wd)) sent))

或者这里:

(define (first-last sent)
  (keep (lambda (wd) (equal? (first wd) (last wd))) sent))

> (first-last '(california ohio nebraska alabama alaska massachusetts))
'(OHIO ALABAMA ALASKA)

【问题讨论】:

    标签: scheme lambda


    【解决方案1】:

    lambda 的特殊形式是一个匿名过程,在显示的示例中,它是避免定义单独的一次性函数的简写。比如第一个sn-p等价于:

    (define (helper wd)
      (word prefix wd))
    
    (define (prepend-every prefix sent)
      (every helper sent))
    

    但是为什么要定义一个只使用一次的新过程呢?这就是我们在这种情况下使用lambda 的原因。另外,最好记住这样写的函数定义:

    (define (f x)
      <body>)
    

    ... 只是这种等效形式的较短语法:

    (define f
      (lambda (x)
        <body>))
    

    所以你看,最终Scheme中的所有过程都是lambdas。还有其他特殊形式可以转换为lambdas,例如letlet*等。请查看theseposts以获得进一步说明。

    【讨论】:

    • @user2925892 我更新了我的答案并解释了更多细节
    • 呵呵,不知什么原因,OP的账号已经不存在了。我猜他们不会接受你的回答。
    • @ChrisJester-Young 一位一次性用户询问一次性功能。多么合适:S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2011-02-17
    相关资源
    最近更新 更多