Laborator 3
Evaluaţi următoarele forme:
(car '((a) (b c) d)) => (a) /* Avem o lista formata din patru elemente. Primul element este o lista formata dintr-un atom simbolic. Al doilea element este o lista formata din doi atomi simbolici.
Ultimul element este un atom simbolic/*
(cdr '((a) (b c) d)) => ( (b c) d)
(car '((a b c) d)) => (a b c)
(cdr '((a b c) d)) => (d)
(car (cdr (car '((a b c) d)))) => (car (cdr '(a b c))) => (car '(b c) ) => b
(caddr '(a (b c) d)) => (cadr '( (b c) d) ) => (car '( d) ) => d
(cdar (last ' (a b (c d)))) => (cdar '( ( c d ) ) ) => (cdr '(c d) ) => d
Evaluaţi şi argumentaţi rezultatul:
(car (cdr (cdr (car '((a b c d) e (f g)) ) ))) => ( car ( cdr ( cdr '( a b c d ) ) ) => (car ( cdr '(b c d) ) => (car '( c d) ) => c
(cdr (car (cdr '((a b) (c d) (e f))))) => (cdr ( car '( ( c d) ( e f) ) ) ) => (cdr '( c d ) ) => (d)
(caddr '((a b) (c d) (e f))) => (cadr' ( ( c d) (e f))) => (car '( (e f) )) => (e f)
(caaddr '((a b) (c d) (e f))) => (caadr '( (c d ) (e f) ) ) => (caar' ( ( e f ) ) => (car' ( e f ) ) => e
(car (cdr (cdr '((car a) (b c) (cdr e))))) => ( car ( cdr ' ( (b c ) (cdr e) ) ) ) => ( car '( (cdr e) )) => (cdr e)
(car (car '((cdr a) b c d))) => (car '( cdr a ) ) => cdr
(car ' (car (cdr (cdr ((a b) (c d) (e f)))))) => car /* Avem mai multe liste in liste. Al doilea "car", respectiv urmatoarele "cdr" sunt elemente ale listelor, nu sunt primitive.*/
(car (car '(cdr (cdr ((a b) (c d) (e f)))))) => (car 'cdr) => Eroare : bad argument type - CDR
'(car (cddr (a b c d))) => (car (cddr (a b c d))) /*Se evalueaza pur si simplu o lista. "car" si "cddr" nu sunt primite aici. Sunt pur si simplu elemente.
Evaluaţi următoarele expresii:
( cons ' the ( cons ' cat ( cons ' sat ' nil ) ) ) => ( cons ' the (cons ' cat ' (sat) ) ) => (cons ' the ' (cat sat) ) => (the cat sat) ||| (list 'the' cat' sat)
( cons ' a ( cons ' b ( cons ' 3 ' d ) ) ) => ( cons' a( cons' b( 3 . d) ) ) => (cons ' a ' ( b 3 . d ) ) => (a b 3 . d) ||| (list 'a' b' 3' .' d )
( cons ( cons ' a ( cons ' b ' n i l ) ) ( cons ' c ( cons ' d ' n i l ) ) ) => ( cons ( cons ' a' ( b) ) ( cons ' c' ( d) ) ) => ( cons' ( a b )' ( c d ) ) => ( (A B) C D) ||| (list '(a b) 'c 'd)
( cons ' nil ' nil ) => (nil) ||| (list nil)
Problema 1
Randul 1: ( car ( cdr ( cdr (cdr '( a b c d) ) ) ) )
Randul 2: (car ( car ( cdr ( cdr '( a (b c) (d e) ) ) ) ) )
Randul 3: (car(car(cdr(cdr(car(cdr'( a (b c (d e) ) )))))))
Randul 4: (car(car(cdr(cdr(cdr'( (a) (b) (c) (d) (e)))))))
Randul 5: (car(car(car(car(cdr(cdr(cdr '( A (B) ((C)) (((D))) ((((E)))) )))) ) ) ))
Randul 6: (car(cdr'( ( ( (A) B) C) D ) ))
Problema 2
(subst' azi' maine(reverse ' (frumoasa zi o este maine))) => (subst' azi' maine( maine este o zi frumoasa)) => (zi este o zi frumoasa)
(length (subst' azi' maine(reverse ' (frumoasa zi o este maine))))
Problema 3
Randul 1: (setq lista ’(a b c (d e) ) ) => lista=(a b c (d e) )
Randul 2: (setq M ’max) => M=max
Randul 3: (cons M lista ) => (max a b c (d e) ) /*Se face inserarea atomului ca prim element in lista*/
Randul 4: (cons lista M) => ( (a b c (d e) ).max) /*Avem doi atomi, primul este o lista si se pune ca prim element al listei. Al doilea element este pus ca
si restul listei*/
Randul 5: (append (list M) (last (cdr lista ) ) ) => ( append '(max) ( last '( b c (d e)))) => (append '(max ) ' ( (d e) ) ) => (max (d e) )
Randul 6: (list ' M (cadr lista)) => ( list 'M( car '(b c (d e)) ) ) => (list 'M 'b ) => (M b) /* " 'M " se evalueaza la " M " . " M " se evalueaza la " max ".
Randul 7: (append lista(list M (last lista))) => (append 'lista(list M( (d e) ) ) ) => (append 'lista( max (d e) ) ) = > (a b c d (d e) max (d e) )
(append ' lista(list M (last lista))) => eroare, pentru ca " 'lista" se evalueala la "lista", care il face atom, nu o lista.
Randul 8: (list (car lista) (cadr lista) (caddr lista) M) => ( a (car (b c (d e) ) ) ( cadr (a b (d e) ) ) M ) => (a b (car ( b (d e) ) ) M) => (a b c)
Problema 4
(setq mare '((A) (B) (C) (D) (E)))
(setq first ( list (car mare) ( cadr mare) (caddr mare ) ))
(setq second ( append first (caadr mare)))
(setq third ( list (caar (last mare)) ( car (cadddr mare)) (caaddr mare)))
(setq fourth (cons second (list third)))
(setq final(append fourth (cadddr mare)))
Problema 5
1)
(setq l1 '( ( ((A) (B)) C) (D) (EF G) ) )
(append (cadr l1) (car (nth '1 l1)) (last l1))
Eroare apare la (car (nth'1 |1)) deoarece : (nth'1 l1) se evalueaza la (D)...iar (car '(D)) =D
Avem append, iar atomul poate fi doar pe ultima pozitie.
Corectare: (append (cadr l1) (last l1) (car (nth '1 l1))) => (D (EF G) . D)
2)
(cons (nth '3 l1) (nthcdr '2 l1)) -> (cons nil (nth '2 '( (EF G) ) ) ) -> ( cons nil nil) -> (nil)
Problema 6
(setq E '(x y ((z) u)) F (last E) G (caar F)) ->(setq f (last E) G (caar F) ) -> (setq G (caar F) ) ->(setq G ( car (z) ) )
-> E=(x y ( (z) u) ) -> f= ( (z) u ) => G=(z)
>(setq X '12 Y '14 Z '22 E (- (+ x y) z)) => (setq E(- ( + 12 14) 22) ) ->(setq E(- 26 22) )
-> X=12 Y=14 Z=22 => E=4
>(setq M (MIN 1 -4 23 56 1) P (* M 10) X (EXPT P 2)) ->(setq P(*M 10) X (EXPT P 2) ) -> (setq X(EXPT P 2) )
-> M= -4 -> P=-40 => X=(-40)2 => X= 1600
Problema 7
1)
(setq l1 '(a b c d ))
(setq one(subst 'a 'd l1))
(setq one(cdr one))
(setq two(last l1))
(setq l1 (append two one))
2)
(setq l1 '(a b c d))
(setq one (reverse l1))
(setq two (reverse (cdr one)))
(setq one (car one))
(setq l1 ( append (list one) two) )