【问题标题】:Eliminate lambda in Scheme?消除 Scheme 中的 lambda?
【发布时间】:2012-05-25 20:07:14
【问题描述】:

我需要为我的学校作业消除这个 Scheme lambda 构造。

任何想法如何做到这一点?

(define (foo x)
(letrec
  ((h 
    (lambda (y z)
      (cond
        ((null? y) 'undefined)
        ((null? (cdr y)) (car z))
        (else (h (cddr y) (cdr z)))
        ))))
  (h x x))
)

【问题讨论】:

    标签: lambda functional-programming scheme lambda-calculus


    【解决方案1】:

    好吧,您可以将letrec 中的lambda 表达式替换为内部定义:

    (define (foo x)
      (define (h y z)
        (cond
          ((null? y) 'undefined)
          ((null? (cdr y)) (car z))
          (else (h (cddr y) (cdr z)))))
      (h x x))
    

    ... 或者您可以将h 过程提取到foo 之外,作为辅助过程。无论哪种方式,结果都是一样的。

    【讨论】:

    • 我真的不明白他们为什么会在作业中要求他们这样做。似乎另一种方式(看到内部定义是letrec)更有指导意义
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多