Cflp Laborator |
Facultatea de Automatica şi Calculatoare Departamentul de Calculatoare |
Home | Lucrarea 1 | Lucrarea 2 | Lucrarea 3 | Lucrarea 4 | Lucrarea 5 | Lucrarea 6 | Lucrarea 7 | ||
Lucrarea 8 | Lucrarea 9 | Lucrarea 10 | Lucrarea 11 | Lucrarea 12 | Lucrarea 13 | Proiect | Orar |
Lucrarea 10 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subiecte
|
MLML (Meta-Language) este un set de limbaje de programare avansată,
făcând parte din familia limbajelor de programare funcţionale.
Limbajul este o combinaţiie a proprietăţilor LISP şi
Algol, şi este primul limbaj care include tipizarea polimorfică.
ML a fost proiectată la universitatea Edinburgh în 1973. Proprietăţi CAML
Pornire CAML Sub sistemul de operare Linux, CAML poate rula în
emacs ca process inferior asemănator interpretorului xlispstat. Pentru
rularea interpretorului trebuie să porniţi procesul inferior caml
cu M-x run-caml. (Necesită acceptarea interpretorului ocaml prin apăsarea
tastei Enter). Sub sistemul de operare Windows CAML nu are facilităţi de interfaţare
cu emacs. CAML se rulează doar ca interpretor care citeşte linie cu
line comenzile. Puteţi porni caml prin selectarea iconului Objective
Caml de pe desktop. După porninire apare interpretorul ML în mod
interactiv: într-un ciclu de citire – evaluare – afişare, utilizatorul
introducând o expresie, aceasta va fi evaluată iar rezultatul este
afişat. # semnifică prompterul după care pot fi scrise
funcţii ML. Interpretorul va tipării răspunsul pe o linie
nouă. În laborator sub Windows Caml este instalat doar pe calculatoarele Taurus, Cancer, Aquarius, Pisces din cauza limitării spaţiului pe disk.
O expresie putem să scriem pe mai multe linii; expresia terminând cu ;;, care determină evaluarea expresiei şi afişarea rezultatului. Tipuri primitiveNumere întregi şi realeÎn CAML există două tipuri de numere: numere întregi şi numere
reale. Cele două sunt tipuri diferite, fiecare având un set
operaţii diferite:
Numere reale:
Tipurile de caracter şi şir de caractereCaractere sunt coduri ASCI între 0 şi
255. Ele sunt specificate între semnele de apostrof.
Tipul booleanTipul boolean are valoare true sau false.
Operatorii logici evaluează argumentele doar până când rezultatul operaţiei poate fi determinată. Restul parametrilor nu sunt evaluate. Operatori de comparareOperatori =, <, <=, >, >=, <> sunt polimorfi, ele pot să compare numere, caractere sau şiruri.
ListeListele sunt structuri de date infinite: sunt vide sau formate din elementul din capul listei şi lista restul elementelor. Toate elementele unei liste sunt de acelaşi tip.
Observaţie: int list semnifică că rezultatul este o listă de întregi, iar ‘a list semnifică că rezultatul este o listă de tip nespecificat. Tipul elementului putând să fie orice.
Alte operaţii asupra listelor sunt definite în biblioteca List. Funcţiile hd şi tl returnează primul element a listei respectiv coada listei fără primul element.
N-tupleAgregarea valorilor a mai multor tipuri pot forma n-tuple. N-tupele se scriu sub forma unei enumerare de valori despărţite prin virgule în interiorul unei paranteze rotunde.
Structuri condiţionaleLa fel ca şi în alte limbaje şi în ML există structuri
condiţionale. Spre deosebire de limbajele iterative evaluarea unei
expresii condiţionate ML rezultă o valoare.
Variabile globaleFolosirea primitivei let determină legarea valori rezultate a unei expresii la o variabilă.
Declarări paralele pot fi făcute folosind sintaxa:
Este posibil şi declararea secvenţială a variabilelor, ele având acces la toate declaraţiile anterioare. În acest caz scriem mai multe instrucţiuni let unul după celălalt. Secvenţia de declaraţie va terminată de ;;.
Declaraţii localeDeclaraţiile locale au rolul de a limita domeniul de existenţă
a variabilelor.
FuncţiiO funcţie se defineşte după sintaxa:
Expresia la rândul ei poate să fie o altă funcţie.
Pentru compactitate în CAML poate fi folosită cuvântul cheie fun.
În declaraţiile de mai sus funcţiile nu aveau asignată o nume, o expresie function returnează o funcţie, care cu let poate fi legat de o nume:
Este permisă şi o scriere mai compactă:
În cazul în care vrem să definim funcţii recursive atunci numele asignată funcţiei cu un let trebuie să fie precedată de cuvântul cheie rec.
Instare OCAMLPuteţi obţine ultima distribuţie de de ocaml de aici. Versiunile 3.07, instalate în laborator, pentru Linux RH7.3 şi Windows se găsesc şi pe acest site. Sub WindowsAduceţi arhiva ocaml de pe siteul INRA sau versiunea de la serverul local. Porniţi arhiva şi urmăriţi paşii de instalare. Sub Windows nu există posibilitatea de interfaţare cu emacs! Sub LinuxAduceţi arhiva precompilartă sau sursele de la INRA. Versiunea precompilată RPM pentru Linux Redhat 7.3 se găseşte local aici. Instalaţi arhiva adusă. Pentru interfaţara cu emacs trebui sa adăugaţi următoarele linii în fişierul .emacs din directorul home a utilizatorului: (setq auto-mode-alist (cons '("\\.ml[iylp]?" . caml-mode) Aici găsiţi fişierul .emacs care conţine liniile adiţionale necesare pentru xlispstat şi ocaml. ProblemeProblema 1. Operaţii cu tipuri numerice Problema 2. Operaţii logice Problema 3. Operaţii cu liste Problema 4. Funcţia lui Fibonacii Problema 5. Funcţia lui Ackerman Problema 6. Generator de liste Problema 7. Operatori logici Problema 8. Numere mari Problema 9. Maximul unei list Problema 10. Cel mai mare divizor comun |