Sunteți pe pagina 1din 1

;L1: Programare recursiva in Lisp (1)

; --------------------------------
;L1/5.
; a. Sa se scrie o functie care realizeaza o lista de asociere cu cele doua
; liste pe care le primeste. De ex: (A B C) (X Y Z) --> ((A.X) (B.Y) (C.Z)).
; b. Sa se determine numarul tuturor sublistelor unei liste date, pe orice
; nivel. Prin sublista se intelege fie lista insasi, fie un element de pe
; orice nivel, care este lista. Exemplu: (1 2 (3 (4 5) (6 7)) 8 (9 10)) => 5
; (lista insasi, (3 ...), (4 5), (6 7), (9 10)).
; c. Sa se scrie de doua ori elementul de pe pozitia a n-a a unei liste
; liniare. De exemplu, pentru (10 20 30 40 50) si n=3 se va produce
; (10 20 30 30 40 50).
; d. Sa se construiasca o functie care intoarce numarul atomilor dintr-o
; lista, de la nivel superficial.

;a)

(defun asociere(l1 l2)


(cond
((or (null l1) (null l2)) nil)
(t (cons (cons (car l1) (car l2)) (asociere (cdr l1) (cdr l2))))
)
)

;b)

(defun nlis(l)
(cond
((null l) 1)
((atom (car l)) (nlis (cdr l)))
(t (+ 0 (nlis (car l)) (nlis (cdr l))))
)
)

;c)

(defun dn(l k n)
(cond
((null l) nil)
((not (= k n)) (append (list (car l)) (dn (cdr l) (+ k 1) n)))
(t (append (list (car l)) (list (car l)) (dn (cdr l) (+ k 1) n)))
)
)

;d)

(defun atm (l)


(cond
((null l) 0)
((atom (car l)) (+ 1 (atm (cdr l))))
(t (atm (cdr l)))
)
)

S-ar putea să vă placă și