LISP递归配对?

时间:2016-03-09 00:41:11

标签: lisp common-lisp

我是LISP的新手,我正在尝试创建一个递归函数,将列表中的元素配对。我在函数的最后一部分中加入了递归。

(defun pairup (L)
(cond((null L) nil))
(list (cons (car L) (cadr L)(pairup(cdr L)))))

我知道(pairup(cdr L))))))会显示错误,因为它的第三个参数会进入缺点。不知道如何再次添加函数= /

INPUT:(pairup'(1 2 3 4))

输出:((1 2) (3 4))

1 个答案:

答案 0 :(得分:4)

这是功能:

FILE

请注意,(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以捕获所有其他情况。