This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
laboratoare:07-introducere-in-scheme [2015/04/15 12:20] george.muraru [Exercitii] |
laboratoare:07-introducere-in-scheme [2016/04/18 23:56] (current) mihai_dan.masala |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laborator 7 - Introducere in Scheme ===== | ===== Laborator 7 - Introducere in Scheme ===== | ||
+ | ==== Despre Scheme ===== | ||
+ | * Scheme este un limbaj de programare functional, derivat din Lisp si bazat pe modelul formal al **calcului lambda**. | ||
+ | * Scheme este un limbaj de program de uz general,de nivel inalt cu suport pentru operatii cu numere, caractere, stringuri, liste, vectori. | ||
==== Primitivele limbajului ==== | ==== Primitivele limbajului ==== | ||
=== Structura unui program === | === Structura unui program === | ||
- | * Elementul de baza pentru constructia de programe Scheme este **lista**. Un program este o **succesiune de liste**. Exemple: | + | * Elementul de baza pentru constructia de programe Scheme este **lista**. Un program este o **succesiune de liste**. In Scheme, listele sunt incadrate de **'()**. Simbolul ''''' interpreteaza o lista ca **o structura de date**. Absenta acestuia, interpreteaza lista ca un program. |
- | * '''(1 2 3)'' | + | * Exemple de liste: |
- | * '''(1 (2 3) 4)'' | + | * '''(a b c)'' |
- | * '''(1 (+ 2 4) 5)'' | + | * '''(1 2 3)'' |
- | * '''(+ 1 3)'' | + | * '''(1 a 3.14)'' |
- | * Simbolul ''''' interpreteaza o lista ca **o structura de date**. Absenta acestuia, interpreteaza lista ca un program. Acest lucru se poate observa din exemplele anterioare. | + | * '''(+ 1 2)'' |
+ | * '''(1 (+ 3 4) 2)'' | ||
+ | |||
+ | * Exemple de programe: | ||
+ | * ''(+ 1 3)'' (= 4) | ||
+ | * ''(+ 1 (- 1 2))'' (= 0) | ||
+ | |||
* Simbolii ''`'' (quasiquote) si '','' (comma), se pot folosi in tandem pentru a crea combinatii de liste-program cu liste-structuri de date, ca in exemplul urmator: | * Simbolii ''`'' (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)'' | * ''`(1 ,(+ 2 3) 4)'' | ||
Line 15: | Line 25: | ||
* Definitia unei variabile este o lista de forma: | * Definitia unei variabile este o lista de forma: | ||
* ''(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). | * ''(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). | ||
+ | * Setarea/schimbarea valorii unei variabile este o lista de forma: | ||
+ | * ''(set! <var_name> <expr>)'' unde ''<var_name>'' si ''<expr>'' au aceleasi semnificatie ca in cazul definirii unei variabile | ||
* **Exercitiu**: Scrieti un program in Scheme care verifica existenta efectelor laterale. | * **Exercitiu**: Scrieti un program in Scheme care verifica existenta efectelor laterale. | ||
Line 41: | Line 53: | ||
* constructie (exemplu): ''(cons 1 '(2 3))'' | * constructie (exemplu): ''(cons 1 '(2 3))'' | ||
* explorare (exemple): ''(car '(1 2 3))'', ''(cdr '(1 2 3))'', ''(caar '(1 2 3))'', ''(cddr '(1 2 3))'' | * explorare (exemple): ''(car '(1 2 3))'', ''(cdr '(1 2 3))'', ''(caar '(1 2 3))'', ''(cddr '(1 2 3))'' | ||
+ | * **Exercitiu**: definiti comportamentul functiilor de mai sus(+ bonus: cadr, cdar) | ||
* lista vida (exemple): ''(empty? '(1 2 3))'' si ''(empty? '())'' | * lista vida (exemple): ''(empty? '(1 2 3))'' si ''(empty? '())'' | ||
* egalitate: ''(eq? 1 2)'' | * egalitate: ''(eq? 1 2)'' |