【发布时间】:2020-04-04 06:24:46
【问题描述】:
我是 Lisp 新手,我正在尝试使用 CAR/CDR 递归来迭代不同深度的列表。我见过类似的问题,但没有一个能解决我遇到的确切问题或如何解决它。在此示例中,我尝试对列表中的每个数字求平方:
(defun square-list (x)
(cond ((and (atom x) (not (equal x nil)))
(cons (* x x) (or (square-list (car x)) (square-list (cdr x)))))
(t (or (square-list (car x)) (square-list (cdr x))))))
从阅读中,我的印象是一个原子的 CAR 和 CDR 要么是 nil,要么是另一个原子。我在这里做错了什么?感谢您的宝贵时间。
编辑: 我已经解决了在任意深度列表中对数字进行平方的基本问题(例如 '(1 ((2) 3) (4 5))),但是当我将字母扔进混合。这是新代码:
(defun square-list (x)
(cond ((null x) nil)
((and (atom x) (numberp x)) (* x x))
(t (cons (square-list (car x)) (square-list (cdr x))))))
错误依旧:"Cannot take CAR of A" with list '(a ((2) 3) (4 5))。
【问题讨论】:
标签: recursion lisp common-lisp