我是Lisp中的新手,我正在尝试返回所有列表元素的第一个元素列表 一个给定的列表,在表面层面上有奇数个元素。 示例:(1 2(3(4 5)(6 7))8(9 10 11))=> (1 3 9)。
这就是我想出来的:
(defun firstEl(L1)
(cond
((null L1)
nil
)
((LISTP (List L1))
(firstEl (rest L1))
(append (List L2) (first L1))
)
(t
(firstEl (rest L1) L2)
)
)
)
非常感谢。
答案 0 :(得分:1)
我经常发现mapcan
等函数对递归列表处理很有用:
(defun firstEl (value)
;;(print value)
(if (listp value)
(let ((first-value (first value))
(tail (mapcan #'firstEl value)))
(if (and (numberp first-value)
(oddp first-value))
(cons first-value tail)
tail))
'()))