【发布时间】:2014-10-26 00:14:18
【问题描述】:
我试图理解列表并且对为什么第二个示例(如下)编译但第一个没有编译感到困惑。
在这两个示例中,我们(尝试)比较字符列表中的每个元素 (?a ?b ?c) 与 ?a 的相等性,想法是它返回 (t nil nil)。这两个示例之间的唯一区别是第二个示例不使用临时变量来保存列表)。
我做错了什么? (我对照 GNU 文档检查了我的列表赋值语法,我没有发现任何错误......)
编辑:我的错误是没有注意细节;正如 Stefan 指出的那样,编译时错误是由于括号放在了错误的位置。如果您来到这篇文章是为了了解 Elisp 中的列表,很抱歉让您失望。
示例 #1(未编译):
(let (char-to-compare, char-list)
(setq char-to-compare ?a)
(setq char-list '(?a ?b ?c))
(mapcar (lambda(element) (char-equal element char-to-compare)) char-list))
示例#2:(编译和运行正确):
(let (char-to-compare)
(setq char-to-compare ?a)
(mapcar (lambda(element) (char-equal element char-to-compare)) '(?a ?b ?c)))
【问题讨论】:
-
let不仅仅意味着声明变量,还意味着初始化它们。所以使用它:(let ((char-to-compare ?a) (char-to-list '(?a ?b ?c)) ...). -
使用
TAB键来缩进你的代码。这会告诉你出了什么问题。 -
谢谢,红脸,请您将您的评论作为答案,以便我接受:)