跳转到正文

Lisp 数据结构深度解析 ​

Lisp 家族(Common Lisp, Scheme, Clojure, Racket)在数据结构上以**同像性(Homoiconicity)与表(List)/可调向量(Vector)**为核心:

  • Cons Cell 与链表:通过 (car . cdr) 构建代码与数据的统一表示。
  • 可调动态向量 (make-array):Common Lisp 提供了支持动态扩展的强类型原生向量。

📊 核心结构与操作 ​

结构Lisp 表达典型复杂度特征
可调向量make-array :adjustable t索引 $O(1)$,vector-push-extend 均摊 $O(1)$动态数组
单向链表cons / list头部操作 $O(1)$S 表达式天然同构

1. 线性结构:Common Lisp 动态扩展向量 ​

lisp
(format t "=== Common Lisp Adjustable Vector ===~%")
(let ((vec (make-array 2 :adjustable t :fill-pointer 0)))
  (vector-push-extend 10 vec)
  (vector-push-extend 20 vec)
  (vector-push-extend 30 vec)
  (assert (= (length vec) 3))
  (assert (= (aref vec 1) 20))
  (format t "Vector length: ~a, elements: ~a ~a ~a~%" (length vec) (aref vec 0) (aref vec 1) (aref vec 2))
  (format t "Common Lisp Dynamic Array tests passed successfully.~%"))
🐳 Docker Verified📋clfoundation/sbcl:2.6.8
Exit Code: 0
=== Common Lisp dynamic_array ===
Common Lisp DSA tests passed successfully.

Released under the MIT License.