這是Common Lisp的代碼:相互遞歸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)))))
這裏的想法是,「走」將給所有在輸入列表中的奇數序列的元素和「跳過」將會給所有的甚至是輸入列表中的序列元素。但是,在這兩種情況下,整個列表都會返回。
此代碼中的錯誤是什麼?這與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));
您的'take'不會返回奇怪的索引元素,而是返回偶數個元素。索引從'0'開始,如果它包括'(car L)==(nth 0 L)','take'將返回元素'0','2','4'等。 –