在Scheme中消除lambda?

时间:2012-05-25 20:07:14

标签: lambda functional-programming scheme lambda-calculus

我需要为学校作业消除这个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))
)

1 个答案:

答案 0 :(得分:3)

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

(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过程,作为帮助程序。无论哪种方式,结果都是一样的。