<分区>
我是 lisp 的新手,我正在尝试编写一个函数,将带有子列表(例如 (1 2 (3 (4)) 5) 的列表转换为这样的列表 (1 2 3 4 5 ).问题是,我不知道如何在一个条件下放置 2 个订单。例如这里是我的代码
(defun Func1 (x y)
(cond
((null x) y)
((listp (CAR x)) (Func1 (CDR x) (append y (CAR x) )) )
(T (Func1 (CDR x) (CONS (CAR x) y) ) ) ) )
好吧,我知道我需要更改第二个条件,所以如果 x 的第一个元素是一个列表,那么我将调用相同的函数,如 (Func1 (CAR x) y) 但如果我这样做,我会只获取子列表的项目,我将丢失列表的另一部分。所以基本上,我的问题是,我如何告诉 LISP 在完成这一行之后
((listp (CAR x)) (Func1 (CDR x) (append y (CAR x) )) )
它应该继续执行另一行
(T (Func1 (CDR x) (CONS (CAR x) y) ) ) ) )