【发布时间】:2021-05-27 14:20:47
【问题描述】:
这是我到目前为止尝试过的,但我遇到了一些错误,我有点困惑
想要做的是:
例如调用 (sub-list((2 3 4 5 6) 2 3)) 将产生一个递归函数,如
x = 1,(子列表('(3 4 5 6) 2 3))
x = 2, cons (car ls) (sub-list((4 5 6) 2 3))
x = 3 ,cons (car ls) (sub-list((5 6) 2 3))
x = 4 , nil 因为 x 现在大于 to。
它应该回溯以返回 (4 5) 类似的东西
(defvar *x* 1)
(defun sub-list(ls from to)
(cond
((<= *x* from) (sub-list((cdr ls) from to)))
((<= from *x* to)
(let (*x* (+ *x* 1))
cons a (sub-list((cdr ls) from to)))))
((> *x* to) nil)))
【问题讨论】:
-
我不认为
(sub-list((2 3 4 5 6) 2 3))是合法的 Lisp。 -
您能解释一下
sub-list应该做什么,而与它如何做到这一点无关? -
对不起,我忘记了撇号 (sub-list('(2 3 4 5 6) 2 3)) 应该返回列表的索引 2 到 3,这将是 (3 4)案例(索引从 1 开始)
-
请注意,
(sub-list lst a b)=(sub-list (cdr lst) (- a 1) (- b 1))(假设 a>1)。 -
"_... 我遇到了一些错误.... _" -- 这些错误是什么?您的问题是
(sub-list('(2 3 4 5 6) 2 3))-->(4 5),但您的最后一条评论说应该返回(3 4):它是哪个?发布的代码不会编译;那是错误吗?如果是这样,请检查括号。您可能不应该在这里为*x*使用动态变量。
标签: common-lisp