' interpreteaza o lista ca o structura de date. Absenta acestuia, interpreteaza lista ca un program.'(a b c)'(1 2 3)'(1 a 3.14)'(+ 1 2)'(1 (+ 3 4) 2)(+ 1 3) (= 4)(+ 1 (- 1 2)) (= 0)` (quasiquote) si , (comma), se pot folosi in tandem pentru a crea combinatii de liste-program cu liste-structuri de date, ca in exemplul urmator:`(1 ,(+ 2 3) 4)(define <var_name> <expr>) unde <var_name> si <expr> desemneaza un nume de variabila, respectiv expresie. De remarcat este ca <expr> este fie o variabila primitiva, fie o lista (date/program).(set! <var_name> <expr>) unde <var_name> si <expr> au aceleasi semnificatie ca in cazul definirii unei variabile(lambda <p-list> <expr>) unde <p-list> este o lista de parametri formali ai functiei, iar <expr> este corpul functiei. (lambda (x y) (+ x y))(define f (lambda (x y) (+ x y)))(define <f-list> <expr>), unde <f-list> desemneaza o lista al carui prim element este numele functiei, iar elementele urmatoare sunt parametrii functiei si <expr> desemneaza corpul functiei:(define (f x y) (+ x y))(f 1 2)f ce primeste n parametrii este in forma:(lambda (x1) (lambda (x2) (… (lambda(xn) <expr>)…)(lambda (x1 x2 … xn) <expr>)(cons 1 '(2 3))(car '(1 2 3)), (cdr '(1 2 3)), (caar '(1 2 3)), (cddr '(1 2 3))(empty? '(1 2 3)) si (empty? '())(eq? 1 2)(if <bool-expr> <expr1> <expr2>) unde <bool-expr> este un sub-program care se evalueaza la o valoare booleana (#t (true), #f (false)), iar <expr1>, <expr2> sunt expresii.map, filter, foldl, foldr sunt disponibile si functioneaza (aproape) la fel ca in Haskell.(foldl cons '() '(1 2 3))(foldr cons '() '(1 2 3))Rezolvati urmatoarele exercitii (folosind, pe cat posibil, functii de ordin superior):
'(1 (2 3 (4 5) 6) 7 (8 9)) ⇒ '(1 2 3 4 5 6 7 8 9)'(1 1 1 1 1 2 2 2 3 4 5) ⇒ '( (1 1 1 1 1) (2 2 2) (3) (4) (5) ).<element,nr_aparitii>. '(1 1 1 1 1 2 2 2 3 4 5) ⇒ '( (1 4) (2 3) (3 1) (4 1) (5 1) ).<element,nr_aparitii>.'(1 2 3 1 4 2 2 5) ⇒ '( (1 2) (2 3) (3 1) (4 1) (5 1)) ).n pozitii la stanga/dreapta a unei liste:3 pozitii la stanga pentru '(1 2 3 4 5 6 7) produce '(4 5 6 7 1 2 3)