function - 函数可以返回不是 lambda 的函数吗?

标签 function lambda scheme lisp racket

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

最佳答案

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

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

正如评论所说,请记住 (define (f x) y) 只是 (define f (lambda(x) y)) 的缩写,之前的函数等同于:

(define (incrementer x)
  (lambda (y)
    (+ x y)))

作为另一个例子,你可以返回一个之前定义的函数:

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

关于function - 函数可以返回不是 lambda 的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554883/

上一篇:优化 Lisp 函数调用

下一篇: boolean 运算

相关文章:

scheme - 计划中的时间

Python tkinter 代码在函数内部时不运行

c# - 使用图形的 Azure 函数我得到 "Could not load file or assembly ' System.Text.Json”

tcp - 如何在 Racket 中使用 TCP?

scheme - 从 Scheme 列表中查找最大的 K 个数

java - IntelliJ 更新 -> 通过 lambda 获取错误

function - 为什么我不能用两个 i32 参数调用 gen_range?

javascript - 为什么我的程序不将变量分配给对象,然后根据它进行计算?

c++ - 如何参数化用作另一个 lambda 参数的 lambda

C# 使用 ExpressionTree 将 DataTable 映射到 List<T>