List lisp是什么;列表“;功能/关键字是什么?
我在Emacs Elisp中的编程介绍中看到了它,第4.4.1节:List lisp是什么;列表“;功能/关键字是什么?,list,emacs,lisp,elisp,List,Emacs,Lisp,Elisp,我在Emacs Elisp中的编程介绍中看到了它,第4.4.1节: (interactive (list (read-buffer "Append to buffer: " (other-buffer (current-buffer) t)) (region-beginning) (region-end))) 用谷歌搜索lisp中“列表”的含义是非常困难的,因为每个页面都很成功。我猜它只是列出了它的参数,在这种情况下,为什么它比仅仅用另一组括号“手动”列出更
(interactive
(list (read-buffer
"Append to buffer: "
(other-buffer (current-buffer) t))
(region-beginning)
(region-end)))
用谷歌搜索lisp中“列表”的含义是非常困难的,因为每个页面都很成功。我猜它只是列出了它的参数,在这种情况下,为什么它比仅仅用另一组括号“手动”列出更好或更清楚呢?这是因为你不能仅仅用“另一组括号”来列出
下面是一个表达式,它创建了一个包含数字1、2、3、4的列表
(list 1 2 3 4)
但是,您不能使用
(1 2 3 4)
甚至((1 2 3 4))
来表达这一点。列表是Lisp所有主要方言之间共享的基本功能。虽然它本身不是一个原语,但它的实际实现是实现具有的能力。自1960年以来,它一直存在(LISP1将其作为)
它在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))
当其他Lisper被引入到代码中时,结果会让他们感到困惑,因此,克服这个缺点确实是非常有价值的。Clojure为数组和映射引入了特殊语法,但是。那么什么是(1 2 3 4)
呢?哦,对了,1将作为一个函数计算,这将失败。'(1234)
也起作用吗?@djechlin'(1234)
是一个基准文本。不能对其中的表达式求值。e、 例如,(+1 2)3 4)
是列表(+1 2)3 4)
的基准文本,而不是(3 3 4)
。Emacs Lisp附带了一个手册:Emacs有联机帮助:control-h flist@RainerJoswig谢谢我只是在阅读了发布的答案后才发现,因为很难在手册中搜索“列表”。这本手册的索引在这里,它有一个列表条目:所以你认为搜索{
会更容易吗?在许多语言中,构造函数也可以做到这一点。例如Java交互式(新的LinkedList(Array.asList(getBuffer(“附加到缓冲区”、OtherBuffer(currentBuffer(),true)、RegionStart(),RegionId()));