Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List lisp是什么;列表“;功能/关键字是什么?_List_Emacs_Lisp_Elisp - Fatal编程技术网

List lisp是什么;列表“;功能/关键字是什么?

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中“列表”的含义是非常困难的,因为每个页面都很成功。我猜它只是列出了它的参数,在这种情况下,为什么它比仅仅用另一组括号“手动”列出更

我在Emacs Elisp中的编程介绍中看到了它,第4.4.1节:

(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()));