具有多个lambda的scheme递归函数

时间:2015-10-15 15:53:17

标签: recursion lambda scheme

如何从一个使程序递归的函数中创建一个过程?

例如,让我们有一个返回过程的函数,返回的过程将带两个参数(x和y)。当使用z作为参数调用时,它将递归调用自身直到z满足某些要求

(define test
  (lambda (x y)
    (lambda z
      (if (> z 100)
          z
          (RecursiveCallToChangeValueOfZ (+ x y z))))))

1 个答案:

答案 0 :(得分:1)

以下是三种变体:

#lang racket

;; use internal definition
(define test
  (lambda (x y)
    (define f
      (lambda z
        (if (> z 100)
            z
            (f (+ x y z)))))
    f))

;; use letrec (which internal definition expands to    
(define test2
  (lambda (x y)
    (letrec ([f (lambda z
                  (if (> z 100)
                      z
                      (f (+ x y z))))])
      f)))

(require mzlib/etc)
;; use rec (a little syntactic sugar that expands to the previous solution)
(define test3
  (lambda (x y)
    (rec f (lambda z
             (if (> z 100)
                 z
                 (f (+ x y z)))))))