【问题标题】:scheme recursive function with multiple lambdas具有多个 lambda 的方案递归函数
【发布时间】:2015-10-15 15:53:17
【问题描述】:

如何从使过程递归的函数创建过程?

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

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

【问题讨论】:

    标签: recursion lambda scheme


    【解决方案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)))))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-06
      • 2013-09-22
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多