User Tools

Site Tools


laboratoare:07-introducere-in-scheme

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:07-introducere-in-scheme [2015/04/15 11:59]
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 (+ 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 (+ 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)''​
Line 75: Line 88:
   * Implementati rotatia cu ''​n''​ pozitii la stanga/​dreapta a unei liste:   * Implementati rotatia cu ''​n''​ pozitii la stanga/​dreapta a unei liste:
       * Exemplu: o rotatie de ''​3''​ pozitii la stanga pentru '''​(1 2 3 4 5 6 7)''​ produce '''​(4 5 6 7 1 2 3)''​       * Exemplu: o rotatie de ''​3''​ pozitii la stanga pentru '''​(1 2 3 4 5 6 7)''​ produce '''​(4 5 6 7 1 2 3)''​
 +
 +==== Download ====
 +[[http://​download.racket-lang.org/​| DrRacket - Download]]
laboratoare/07-introducere-in-scheme.1429088362.txt.gz · Last modified: 2015/04/15 11:59 by george.muraru