咨询Lisp表达式(caar '(a (b c d)))的错误原因
错误原因详解
首先明确Lisp里caar的本质:它是个缩写,展开后等价于(car (car 目标表达式))——就是先对目标执行一次car(取列表的第一个元素),再对第一次的结果再执行一次car。
现在一步步拆你的代码:
- 先看你传入的列表:
'(a (b c d)),这是一个有两个元素的列表:第一个元素是符号a,第二个是子列表(b c d)。 - 第一步执行
car '(a (b c d)),得到的是列表的第一个元素——符号a。 - 第二步要对
a执行car操作,但Lisp里car的要求很明确:只能给它传列表类型的参数,而a是个单独的符号,根本不是列表,所以直接触发类型错误,提示你“值A不是LIST类型”。
说白了就是你试图对一个非列表的符号做“取第一个元素”的操作,这在Lisp里是不允许的。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

