13.2.2 简单的 Lambda 表达式示例

请看以下示例:

(lambda (a b c) (+ a b c))

我们可以将该函数传递给 funcall 来调用它,示例如下:

(funcall (lambda (a b c) (+ a b c))
         1 2 3)

此次调用会对 lambda 表达式的函数体进行求值,其中变量 a 绑定为 1、b 绑定为 2、c 绑定为 3。 函数体的求值过程会将这三个数字相加,得到结果 6; 因此,该函数调用返回的值为 6。

需注意,参数也可以是其他函数调用的结果,例如以下示例:

(funcall (lambda (a b c) (+ a b c))
         1 (* 2 3) (- 5 4))

该调用会从左到右对参数 1(* 2 3)(- 5 4) 进行求值。 随后将 lambda 表达式作用于参数值 1、6 和 1,最终得到结果 8。

这些示例表明,你可以使用以 lambda 表达式作为其CAR 部分的形式, 来创建局部变量并为其赋值。在早期的 Lisp 版本中,这是绑定并初始化局部变量的唯一方式。 但如今,使用特殊形式 let 来实现此目的会更清晰(see 局部变量)。 Lambda 表达式如今主要用作匿名函数:既可作为参数传递给其他函数(see 匿名函数), 也可作为符号的函数定义存储,从而生成命名函数(see 函数命名)。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike