Lisp使用acons添加列表元素到关联表返回格式不符问题
问题原因
acons函数的逻辑是接收key、value、关联列表三个参数,返回新的关联列表,新列表的第一个元素是(key . value)格式的点对。
调用第一段代码时,(car list1)取到的是列表(1 2):
(car (car list1))返回的是原子1,符合预期- 但
(cdr (car list1))返回的是包含单个元素的列表(2),不是原子2
因此acons实际构建的点对是(1 . (2)),而Lisp语法中(1 . (2))和列表(1 2)是完全等价的,所以最终返回结果是((1 2))。
直接调用(acons 1 2 env)时,第二个参数是原子2,所以构建的点对是(1 . 2),返回结果自然就是((1 . 2))。
调整方案
只需要把(cdr (car list1))替换为(cadr (car list1))(等价写法为(car (cdr (car list1)))),即可从(1 2)中取出原子2作为value,调整后的代码如下:(acons (car (car list1)) (cadr (car list1)) env)
执行后就会返回预期的((1 . 2))。
内容的提问来源于stack exchange,提问作者AlexG28
相关产品推荐
相关产品推荐

