一个函数可以返回一个不是lambda的函数吗?

1 lisp lambda scheme function racket

每当我看到函数返回函数时,返回的函数总是一个lambda.我想知道我是否可以让我的函数返回一个具有名称的函数.

Ren*_*nzo 5

您尝试使用的语法是正确的,只需使用内部函数的名称作为外部函数返回的值.例如,您可以写:

(define (incrementer x)
  (define (adder y)
    (+ x y))
  adder)

(define incrementer-by-1 (incrementer 1))
(define incrementer-by-2 (incrementer 2))

(incrementer-by-1 3)
(incrementer-by-1 10)
(incrementer-by-2 15)
Run Code Online (Sandbox Code Playgroud)

正如评论所说,记住这(define (f x) y)只是一个缩写(define f (lambda(x) y)),前一个函数相当于:

(define (incrementer x)
  (lambda (y)
    (+ x y)))
Run Code Online (Sandbox Code Playgroud)

作为另一个示例,您可以返回先前定义的函数:

(define (make-positive x)
  (abs x))

(define (make-negative x)
  (- (abs x)))

(define (same-signer x)
  (if (>= x 0)
      make-positive
      make-negative))

((same-signer 3) -2)
Run Code Online (Sandbox Code Playgroud)