Scheme-如何返回函数?

Scheme-如何返回函数?,scheme,Scheme,此函数正在显示正确的内容,但如何使此函数的输出成为另一个函数 ;;generate an Caesar Cipher single word encoders ;;INPUT:a number "n" ;;OUTPUT:a function, whose input=a word, output=encoded word (define encode-n (lambda (n);;"n" is the distance, eg. n=3: a->d,b->e,...z-

此函数正在显示正确的内容,但如何使此函数的输出成为另一个函数

 ;;generate an Caesar Cipher single word encoders
 ;;INPUT:a number "n"
 ;;OUTPUT:a function, whose input=a word, output=encoded word
 (define encode-n
   (lambda (n);;"n" is the distance, eg. n=3: a->d,b->e,...z->c
     (lambda (w);;"w" is the word to be encoded
       (if (not (equal? (car w) '())) 
           (display (vtc (modulo (+ (ctv (car w)) n) 26)) ))
       (if (not (equal? (cdr w) '())) 
           ((encode-n n)(cdr w))  )     
  )))
您已将函数作为输出返回:

(define encode-n
  (lambda (n)
    (lambda (w) ; <- here, you're returning a function!
      (if (not (equal? (car w) '())) 
          (display (vtc (modulo (+ (ctv (car w)) n) 26))))
      (if (not (equal? (cdr w) '())) 
          ((encode-n n)(cdr w))))))
函数加法器接收一个名为n的参数,并返回一个新的lambda作为匿名函数,例如:

(define add-10 (adder 10))
在上面的代码中,我们创建了一个名为add-10的函数,该函数使用加法器返回一个新函数,我将其命名为add-10,该函数将向其参数中添加10:

(add-10 32)
=> 42
我们可以在不显式命名返回函数的情况下获得相同的结果:

((adder 10) 32)
=> 42
还有其他编写加法器的等效方法,也许这种语法更容易理解:

(define (adder n)
  (lambda (x)
    (+ n x)))
一些解释器允许使用更简短的语法来完成完全相同的任务:

(define ((adder n) x)
  (+ n x))
我刚刚演示了和-两个概念的示例,请确保您理解它们,不要让语法混淆您

(define ((adder n) x)
  (+ n x))