Napíšeme funkciu ktorá ponechá zo zoznamu na ľubovolnej úrovni vždy len 2 prvé prvky (funkcia dva). A potom ju vo funkcií dvojice zavoláme na všetky prvky hlavného zoznamu. Predpokladáme, že vstupom je zoznam zoznamov a atómov.
(defun dva (sv)
(cond ((ATOM sv) sv)
((NULL (rest sv)) (cons (dva (first sv)) NIL))
(T (list (dva (first sv)) (dva (second sv))))
)
)
; Hlavná funkcia.
(defun dvojice (zoz)
(cond ((NULL zoz) NIL)
(T (cons (dva (first zoz)) (dvojice (rest zoz))))
)
)
; Príklady:
(dvojice '(1 (2 3 4) 5 6)) ; -> (1 (2 3) 5 6)
(dvojice '(1 ((2) (3 4 5)) 3)) ; -> (1 ((2) (3 4)) 3)