我在 Emacs Elisp中的编程简介中看到了它,第4.4.1节:
(interactive
(list (read-buffer
"Append to buffer: "
(other-buffer (current-buffer) t))
(region-beginning)
(region-end)))
对于Google来说,“列表”在lisp中意味着什么是令人惊讶的,因为每个页面都很受欢迎。我猜它只是列出了它的参数,在这种情况下,为什么使用它比使用另一组括号“手动”制作列表更好或更清楚?
答案 0 :(得分:4)
那是因为你不能只使用"另一组括号"列表。
这是一个表达式,用于创建包含数字1,2,3,4的列表。
(list 1 2 3 4)
但是,您无法使用(1 2 3 4)
甚至((1 2 3 4))
来表达这一点。
答案 1 :(得分:2)
list
是Lisp的所有主要方言之间共享的基本功能。虽然它本身不是原始的,但它的实际实现是实现具有varargs的能力。自LISP 1.5 from 1962 (page 47)以来一直存在(1960年LISP1将其作为a special form (page 121))
它在Common Lisp和Emacs Lisp中的实现是:
(defun list (&rest args)
args)
Emacs Lisp不能用语法替换它,因为它没有读者宏,但Common Lisp可以引入新的语法代替编写(list ..)
。如何在Common Lisp中执行此操作:
(defun read-list (stream char)
(declare (ignore char))
(cons 'list (read-delimited-list #\} stream t)))
(set-macro-character #\{ #'read-list)
(set-macro-character #\} (get-macro-character #\)))
{(+ 4 5) 'test {1 2 3}}
; expands to: (list (+ 4 5) 'test (list 1 2 3))
; ==> (9 test (1 2 3))
当他们被引入代码时,结果将是其他lispers的混乱,因此它必须非常有价值来抵消这个缺点。 Clojure为数组和地图引入了特殊语法,但still use list
to make lists。