gpt4 book ai didi

lisp - 普通口齿不清 : How to quote parenthese in SBCL

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:44 25 4
gpt4 key购买 nike

在 Common Lisp 中,特殊运算符 quote 使得后面跟着未计算的任何内容,例如

(quote a) -> a
(quote {}) -> {}

但为什么表单 (quote ()) 给我 nil?我正在使用 SBCL 1.2.6,这是我在 REPL 中得到的:

CL-USER> (quote ())
NIL

关于这个问题的更多信息:这是 PCL 第 24 章的一些代码

(defun as-keyword (sym)
(intern (string sym) :keyword))

(defun slot->defclass-slot (spec)
(let ((name (first spec)))
`(,name :initarg ,(as-keyword name) :accessor ,name)))

(defmacro define-binary-class (name slots)
`(defclass ,name ()
,(mapcar #'slot->defclass-slot slots)))

当宏扩展为以下代码时:

(define-binary-class id3-tag
((major-version)))

(DEFCLASS ID3-TAG NIL
((MAJOR-VERSION :INITARG :MAJOR-VERSION :ACCESSOR MAJOR-VERSION)))

在类名 ID3-TAG 之后是 NIL 而不是 ()

最佳答案

nil() 是表达同一概念(空列表)的两种方式。

传统上,nil 用于强调 bool 值“false”而不是空列表,而 () 则相反。

通用 LISP HyperSpec says :

() ['nil], n. an alternative notation for writing the symbol nil, used to emphasize the use of nil as an empty list.

关于lisp - 普通口齿不清 : How to quote parenthese in SBCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com