Laborator 3

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