【发布时间】:2018-04-28 22:39:47
【问题描述】:
我目前正在练习球拍语言,遇到了一个有趣的问题。我正在尝试比较两个列表的元素。通常,如果我比较两个符号,我会得到以下信息:
> (eq? 'leet 'leet)
#t
> (eq? 'let 'notleet)
#f
由于某种原因,在比较两个列表的第一个元素时,即使它们相等,我也会得到 false。
> (eq? (first '('leet 'a 'f)) (first '('leet 'coder 'a 'f 'f)))
#f
当我基本上比较相同的两件事时,为什么会评估为假?
【问题讨论】:
-
您不是在比较两个符号
'leet和'leet,而是在比较两个列表(list 'quote 'leet)和(list 'quote 'leet)。我建议您避免将quote用于列表并阅读What is the difference between quote and list?。如果您改用list,您的程序就可以工作,例如(first (list 'leet 'a 'f))和(first (list 'leet 'coder 'a 'f 'f))。
标签: scheme racket evaluation quote