(编辑:我不会担心 TCO)
我(终于开始)学习 Lisp。我正在尝试编写自己的(天真的)函数来展平列表。我从更简单的案例开始,如果它不起作用,我会建立它来处理更复杂的案例。不幸的是,我现在陷入了无限循环,无法弄清楚原因。
我也不知道如何在 lisp 中使用任何调试方法,所以如果你能指出我的方向,我也会很感激。
(defun flattenizer (lst)
(if (listp (car lst))
(flattenizer (car lst))
(if (null lst)
nil
(cons (car lst) (flattenizer (cdr lst))))))
最终代码:
(defun flattenizer (lst)
(cond
((null lst) nil)
( (consp (car lst))
(nconc (flattenizer (car lst)) (flattenizer (cdr lst)) ))
(T (cons (car lst) (flattenizer (cdr lst))))))
测试:
* (flattenizer '((1 2) (3 4)))
(1 2 3 4)
* (flattenizer '(1 (2 3) (4 5)))
(1 2 3 4 5)
* (flattenizer '((1 2) 3 (4 5) 6))
(1 2 3 4 5 6)
* (flattenizer '(1 2 3 4))
(1 2 3 4)