LISP 递归配对



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

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

我知道(pairup(cdr L))))))会显示错误,因为这是第三个论点。不知道如何再次添加函数=/

输入:(pairup'(1 2 3 4))

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

这是函数:

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

最新更新