LISP递归配对?
我是LISP新手,我正在尝试创建一个递归函数,将列表中的元素配对。我被困在函数的最后一部分,在递归中添加了LISP递归配对?,lisp,common-lisp,Lisp,Common Lisp,我是LISP新手,我正在尝试创建一个递归函数,将列表中的元素配对。我被困在函数的最后一部分,在递归中添加了 (defun pairup (L) (cond((null L) nil)) (list (cons (car L) (cadr L)(pairup(cdr L))))) 我知道,(pairup(cdr L‘‘‘‘‘‘)’)将显示一个错误,因为这是进入cons的第三个参数。不确定如何再次添加函数=/ 输入:(pairup'(1234)) 输出:((12)(34))以下是函数: (defu
(defun pairup (L)
(cond((null L) nil))
(list (cons (car L) (cadr L)(pairup(cdr L)))))
我知道,(pairup(cdr L‘‘‘‘‘‘)’)
将显示一个错误,因为这是进入cons的第三个参数。不确定如何再次添加函数=/
输入:(pairup'(1234))
输出:((12)(34))
以下是函数:
(defun pairup (l)
(cond ((null l) nil)
((null (cdr l)) (list l))
(t (cons (list (car l) (cadr l))
(pairup (cddr l))))))
(pairup '(1 2 3 4)) ; produces ((1 2) (3 4))
(pairup '(1 2 3)) ; produces ((1 2) (3))
请注意,cond
的第二个分支是在只剩下一个元素时终止递归,如果初始列表中有奇数个元素,这是必要的。cond
的语法要求分支的第一个形式始终是一个条件,在最后一个分支中,条件是t
,以捕获所有其他情况。以下是函数:
(defun pairup (l)
(cond ((null l) nil)
((null (cdr l)) (list l))
(t (cons (list (car l) (cadr l))
(pairup (cddr l))))))
(pairup '(1 2 3 4)) ; produces ((1 2) (3 4))
(pairup '(1 2 3)) ; produces ((1 2) (3))
请注意,
cond
的第二个分支是在只剩下一个元素时终止递归,如果初始列表中有奇数个元素,这是必要的。cond
的语法要求分支的第一个形式始终是一个条件,在最后一个分支中,条件是t
,以捕获所有其他情况。Ah。我懂了。原始代码将生成((1.2)(3))
(配对(1.2)(3)),而您的代码将生成((1.2)(3))
(我更依赖于答案中的代码并收回我的评论)。感谢您的解释!我终于能得到它了()啊。我懂了。原始代码将生成((1.2)(3))
(配对(1.2)(3)),而您的代码将生成((1.2)(3))
(我更依赖于答案中的代码并收回我的评论)。感谢您的解释!我终于得到了它=)