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))