F0xcr4f7
F0xcr4f7

Reputation: 61

LISP recursive pairing?

I'm new to LISP and I'm trying to create a recursive function that pairs the elements within a list. I'm stuck on the last part of my function with adding in the recursion.

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

I know that (pairup(cdr L)))))) will show an error because its a third argument going into cons. Not sure how to add in the function again =/

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

OUTPUT: ((1 2) (3 4))

Upvotes: 1

Views: 219

Answers (1)

Renzo
Renzo

Reputation: 27424

Here is the function:

(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))

Note that the second branch of the cond is to terminate the recursion when only one element is left, and this is necessary if the initial list has an odd number of elements. The syntax of the cond requires that the first form of a branch be always a condition, and in the last branch the condition is t to catch all the other cases.

Upvotes: 4

Related Questions