这是 Common Lisp 代码:
(defun take (L)
(if (null L) nil
(cons (car L) (skip (cdr L)))))
(defun skip (L)
(if (null L) nil
(cons (car L) (take (cdr L)))))
这里的想法是,“take”将给出输入列表中的所有奇数序列元素,“skip”将给出输入列表中的所有偶数序列元素。但是,在这两种情况下都会返回整个列表。
这段代码有什么错误?这是否与 CL 处理列表的方式有关,因为 SML 中的类似代码提供了所需的输出。
fun take(lst) =
if lst = nil then nil
else hd(lst)::skip(tl(lst))
and
skip(lst) =
if lst = nil then nil
else hd(lst)::take(tl(lst));