Common lisp LISP中nil和(nil)的区别
我刚刚开始学习LISP,并试图解决以下问题: (我一直试图解决这个问题,直到我有了这个疑问并陷入困境) 原始清单:((b c)(r p)) 在此列表上执行以下操作并输出结果:Common lisp LISP中nil和(nil)的区别,common-lisp,Common Lisp,我刚刚开始学习LISP,并试图解决以下问题: (我一直试图解决这个问题,直到我有了这个疑问并陷入困境) 原始清单:((b c)(r p)) 在此列表上执行以下操作并输出结果: CDR-((r-p)) CADR-(r-p) CDADR-(p) CDDADR-对于此操作,答案是(nil)还是nil? 它是否应该是(NIL),因为它表示一个空列表?As“D”从列表中提取除第一个元素以外的所有元素。或者零和(零)之间绝对没有区别 谢谢 关于NIL/(NIL): NIL是一个自评估符号(其中symbol
NIL/(NIL)
:
是一个自评估符号(其中NIL
为自身的符号之一)。所有对布尔运算的函数都会将此符号识别为false。所有操作序列或cons单元格的函数都将此符号识别为空列表。事实上,symbol value
用于其他上下文(格式等),您可以定义自己的函数,其中nil
可以表示任何内容(按照惯例,它通常表示为“空”、“零”、“未定义”…)。评估nil
返回(列表)
nil
是一个元素的列表,(NIL)
它可以通过计算NIL
或(cons nil nil)
获得。如果对其应用(list nil)
,则返回1length
((b c)(r p))
。。。您获得的结构与阅读此结构相同:
((b . (c . nil)) . ((r . (p . nil)) . nil))
。。。这与您评估的结构相同:
然后,记住:
(CADR X) = (CAR (CDR X))
。。。并相应地跟踪每个cons单元格。例如:
(CDADR X) = (CDR (CAR (CDR X)))
从内到外求值,并对其先前的结果应用每个函数,该结果将相应地从根元素开始下降到cons单元格树中。
换言之,从根元素开始,进入CDR,获取结果的汽车,等等。我将让您这样做。结果既不是
(NIL)
也不是NIL
您的示例是错误的:
列表:((b c)(r p))
感谢您的澄清,在阅读了更多资料后,我意识到了我的错误,我将更正此问题。@crazyCoder请不要在收到答案反馈后修复此问题(避免),或者至少要非常明确地说明为什么您在问题中编辑了某些内容(例如“更新:”部分)。这将有助于其他读者理解当答案和问题似乎在谈论不同的问题时会发生什么。如果答案帮助你解决了问题的一部分,可以,但不要在编辑中隐藏问题;当然,因为我是StackOverflow的新手,所以我不知道在这个平台上到底是如何工作的。谢谢你的提示。下次一定要记住!你可以试试看。
(CDADR X) = (CDR (CAR (CDR X)))
Operation your example actual result
CDR ((r p)) ((r p))
CADR r (r p)
CDADR (nil) or nil (p)