(编辑:我现在还不担心TCO呢)为什么这个函数在一个无限循环中 - 学习lisp
我是(终于开始学习)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)
我会将变量'LST'称为'LIST'。我也会用'FIRST'和'REST'来代替'CAR'和'CDR'。 – 2013-02-26 21:03:11