gpt4 book ai didi

lisp - Common Lisp 中的相互递归

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:39 25 4
gpt4 key购买 nike

这是 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));

最佳答案

为了解释 Sylwester 所说的内容,您的 skip 在 Lisp 和 SML 中都是错误的。应该是

(defun take (L)         ; even-indexed elements of a list L
(if (not (null L))
(cons (car L) (skip (cdr L)))))

(defun skip (L) ; odd-indexed elements of a list L
(if (not (null L))
(take (cdr L))))

fun take(lst) = 
if lst = nil then nil
else hd(lst)::skip(tl(lst))
and
skip(lst) =
if lst = nil then nil
else take(tl(lst));

关于lisp - Common Lisp 中的相互递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20157247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com