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

我是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))
以下是函数:

(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))
(我更依赖于答案中的代码并收回我的评论)。感谢您的解释!我终于得到了它=)