You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Common Lisp中的类型为何属于一等对象?需结合SICP准则说明

Common Lisp中的一等类型:基于SICP判定条件的演示

彼得·诺维格曾提出著名观点:许多OOP设计模式在Lisp中多余或无关紧要,其相关文档第10页指出,一等类型可替代其中诸多模式。

Common Lisp中的类型在何种意义上属于一等对象?我们参考《计算机程序的构造和解释》(SICP)中一等对象的判定条件:

  • 可被变量命名
  • 可作为参数传递给过程
  • 可作为过程的返回结果
  • 可被包含在数据结构中

下面我们逐个演示Common Lisp类型如何满足这些条件:

1. 可被变量命名

在Common Lisp中,类型可以直接赋值给变量,比如将内置类型integer绑定到变量my-type:

(defvar my-type 'integer)
;; 验证变量指向的类型
(typep 42 my-type) ; 返回 T

2. 可作为参数传递给过程

类型可以作为参数传给自定义或内置过程,比如写一个检查值是否属于指定类型的函数:

(defun check-type-match (value target-type)
  (typep value target-type))

(check-type-match "hello" 'string) ; 返回 T
(check-type-match 100 'float)      ; 返回 NIL

3. 可作为过程的返回结果

过程可以将类型作为返回值,比如根据输入值动态返回对应的类型:

(defun get-value-type (value)
  (type-of value))

(get-value-type 3.14) ; 返回 SINGLE-FLOAT
(get-value-type '(a b c)) ; 返回 CONS

4. 可被包含在数据结构中

类型可以存入列表、哈希表等数据结构中,比如创建一个包含多种类型的列表:

(defvar type-collection '(integer string cons hash-table))
;; 遍历列表检查类型
(dolist (type type-collection)
  (print (typep 123 type)))
;; 输出依次为 T、NIL、NIL、NIL

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:52:14