首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Lambda 函数表达式

Lambda 函数表达式

原创
作者头像
上海茶芯科技
发布2025-06-21 09:45:50
发布2025-06-21 09:45:50
740
举报
文章被收录于专栏:TVM虚拟机TVM虚拟机
代码语言:txt
复制
λ 演算式: λ x . x+x
Lisp书写式: (lambda (x) (+ x x))
TeaScript书写式: (fn (x) (+ x x))
TeaScript简写式: #(+ %1 %1)

Lambda 表达式求值时,返回自身。它们自身也是常规的列表,可以赋值给变量:

代码语言:txt
复制
​(setq double (lambda (x) (+ x x)))
(setq double (fn (x) (+ x x))) ; 等同上一表达式

Lambda 表达式可以用列表的方式调用:

代码语言:txt
复制
​((fn (x) (+ x x)) 123) → 246

lambda 表达式是列表的特殊子类,它可以用列表函数来组合或拆分。 使用 append 函数,参数从左到右结合:

代码语言:txt
复制
​(append (lambda (x)) '((+ x x))) → (fn (x) (+ x x))

另外,使用cons函数,参数由右向左结合:

代码语言:txt
复制
​(cons '(x) (lambda (+ x x))) → (fn (x) (+ x x))

注意的是,lambda 关键字不是列表中的元素,它仅为函数这种特殊列表的标识符, 说明该列表为

lambda 列表,将其与常规的列表区分开来:

代码语言:txt
复制
​(length (lambda (x) (+ x x))) → 2
(first (lambda (x) (+ x x))) → (x)
(last (lambda (x) (+ x x))) → (+ x x)​

Lambda 表达式也可作为用户定义的匿名函数,将其 apply 或 map 或到其他的参数中:

代码语言:txt
复制
​(apply (lambda (x) (+ x x)) '(123)) → 246
(map (lambda (x) (+ x x)) '(1 2 3)) → (2 4 6)
;; 可以简写为
(apply #(+ %1 %1) '(123)) → 246
(map #(+ %1 %1) '(1 2 3)) → (2 4 6)

lambda 表达式可以作为值,被赋值给符号(变量),赋值后,该符号可以当作函数来调用:

代码语言:txt
复制
(setq double (lambda (x) (+ x x))) → (fn (x) (+ x x))
(double 123) → 246

defun 或 define 函数是一种 将lambda 表达式赋值给符号的简写形式,它们表达方式不同而已:

代码语言:txt
复制
​(defun double (x) (+ x x))) → (fn (x) (+ x x))
(define (double x) (+ x x))) → (fn (x) (+ x x))
(double 123) → 246
(last double) → (+ x x)

作为第一类对象,lambda 表达式可以用其他任何操作列表的函数来处理:

代码语言:txt
复制
​(setf (nth 1 double) '(* 2 x)) → (fn (x) (* 2 x))
double → (fn (x) (* 2 x))
(double 123) → 246

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档