Slide 1

Documente similare
Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

B

Subiectul 1

Programarea şi utilizarea calculatoarelor

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

O NOUA PROBLEMA DE CONCURS OLIMPIADA MUNICIPALA DE INFORMATICA, IASI 2019 V-am promis într-un articol mai vechi ca vom prezenta pe acest blog câteva p

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Diapositive 1

Metode de programare Proiectarea algoritmilor

Slide 1

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Paradigme de Programare

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Paradigme de programare

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

E_d_Informatica_sp_SN_2014_bar_10_LRO

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Microsoft Word - CarteC.doc

Slide 1

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

proiectarea bazelor de date

L7

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word - Rezolvarea Test 16 carte 2015.doc

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Concurs online de informatică Categoria PROGRAMARE Secţiunea 5-6 avansaţi PROBLEMA puncte DANS De 1 Iunie - Ziua Copilului se organizează un spe

Microsoft Word - Curs_07.doc

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Aggregating Data

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

tehnologii web

Managementul Resurselor Umane

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Logică și structuri discrete Mulțimi Casandra Holotescu

BARAJ NR. 1 JUNIORI FRANŢA ianuarie Fie x şi y două numere întregi astfel încât 5x + 6y şi 6x + 5y să fie pătrate perfecte. Arătaţi că

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

ALGORITHMICS

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

Secţiunea 5-6 avansaţi PROBLEMA 1 Concurs online de informatică Categoria PROGRAMARE 100 puncte NR Un număr natural nenul V care se plictisea singur,

Analiză de flux de date 29 octombrie 2012

carte2008.dvi

Slide 1

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Microsoft Word - 2 ES RO.doc

1

Microsoft Word - Lab1a.doc

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 Secţiunea 7-8 avansaţi 100 puncte DEMOCRATIE Arpsod are în curtea sa N copaci foarte băt

O teoremă de reprezentare (II) Marian TETIVA 1 Abstract. In this paper some (in general well-known) results on complete sequences are exposed, with ap

Microsoft Word - IA2-Lisp-stud.doc

09. Informatica 2 - MM 1

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Limbaje de Programare Curs 5 – Siruri de caractere

BAC 2007 Pro Didactica Programa M1 2 Rezolvarea variantei 36 versiune finală Redactia Pro Didactica Suportul pe net:

Performanta in matematica de gimnaziu si liceu-program de pregatire al elevilor olimpici MULTIMI. OPERATII CU MULTIMI Partea I+II Cls. a V-a

Slide 1

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Entrepreneurship and Technological Management

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Microsoft Word - Rezolvarea Test nr. 11.doc

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Slide 1

2

BAC 2007 Pro Didactica Programa M1 2 Rezolvarea variantei 61 versiune finală Redactia Pro Didactica Suportul pe net:

SUBPROGRAME

Lab6LCD

Microsoft Word - Algoritmi genetici.docx

Microsoft Word - O problema cu bits.doc

INSPECTORATUL ŞCOLAR JUDEŢEAN VÂLCEA COLEGIUL NAŢIONAL DE INFORMATICĂ MATEI BASARAB RÂMNICU VÂLCEASTR. HENRI COANDĂ NR.2 TELEFON/FAX:

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

ARTUR BĂLĂUCĂ ARITMETICĂ Teme pentru centre de excelență MODELE DE PROBLEME REZOLVATE DE PROBLEME SEMNIFICATIVE PENTRU OLIMPIADE, CONCURS

Microsoft Word - PCLP2_Curs_4_2019.doc

Nr / STUDIUL PRIVIND GRADUL DE SATISFACŢIE A STUDENŢILOR UNIVERSITĂŢII VASILE ALECSANDRI DIN BACĂU FAŢĂ DE SERVICIILE OFERITE Ancheta

CONCURSUL NAŢIONAL DE MATEMATICA PANAITOPOL EDIŢIA a X-a, TULCEA, 21 aprilie 2018 Clasa a VII - a 1. Se consideră numerele reale x, y şi z, cel puţin

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Prelegerea 3 În această prelegere vom învăţa despre: Clase speciale de latici: complementate. modulare, metrice, distributive şi 3.1 Semi-distributivi

Secţiunea Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 PIEPTBICEPS 100 puncte Mihai este un bodybuilder cunoscut în Romania. El

Capitole Speciale de Informatică Curs 2: Determinarea vocabularului de termeni şi a listelor de postări 4 octombrie 2018 Reamintim că listele de indec

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

PPSD

Facultatea de Matematica si Informatica Universitatea din Bucuresti Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere - Lectii de pre

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Microsoft Word - cap1p4.doc

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

LUCRAREA NR

Word Pro BH.lwp

Manual de utilizare Room Booking System

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

Secţiunea 7-8 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 ID 100 puncte Calculatoarele trebuie să se recunoască în rețeau

Analiză statică Analiza fluxului de date 23 octombrie 2014

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Transcriere:

Prolog vs. Lisp prin Exemple Ruxandra Stoean http://inf.ucv.ro/~rstoean ruxandra.stoean@inf.ucv.ro

Numarul elementelor dintr-o lista Dacă lista este vidă, numarul elementelor sale este zero: aceasta este condiţia de oprire a recursivităţii. În clauza recursiva, primul element din listă nu ne interesează, vrem doar să îl eliminăm ca să numărăm câte elemente are lista rămasă. Numărul curent va fi, de fiecare data, egal cu 1 plus numărul elementelor din lista rămasă.

Numarul elementelor dintr-o lista PROLOG nr_elem([], 0). nr_elem([_ Rest], N) :- nr_elem(rest, N1), N is N1 + 1.?- nr_elem([1, 2, 3], X). X = 3 LISP (defun lungime(l) (if (null l) 0 (+ 1 (lungime (rest l))) ) ) >(lungime (1 5 6 4)) 4

Suma elementelor dintr-o lista Dacă lista este vidă, suma elementelor sale este zero: aceasta este condiţia de oprire a recursivităţii. În clauza recursiva, primul element din listă ne interesează de data aceasta, dupa care calculam suma elementelor din lista rămasă. Suma curentă va fi, de fiecare data, egală cu elementul curent plus suma elementelor din lista rămasă.

Suma elementelor dintr-o lista PROLOG suma([], 0). suma([p Rest], S) :- suma(rest, S1), S is S1 + P.?- suma([1, 2, 3], X). X = 6 LISP (defun suma (l) (if (null l) 0 (+ (first l) (suma (rest l))) ) ) >(suma (1 5 6 4)) 16

Media elementelor unei liste Media unei liste se calculeaza drept suma elementelor din lista / numarul acestora. Predicatele nr_elem si suma trebuie sa se gaseasca in acelasi fisier. PROLOG media(l) :- nr_elem(l, N), suma(l, S), Media is S/N, write('media este '), write(media).?- media([1, 2, 3]). Media este 2. Functiile suma si lungime trebuie sa se afle in acelasi fisier sau in fisiere diferite si incarcate in cel curent cu (load suma ) (load lungime ) LISP (defun media (l) (/ (suma l) (lungime l)) ) >(media (1 5 6 4)) 4

7/41 Apartenenta unui element la o lista Vom defini predicatul apartine/2, unde primul argument reprezintă elementul pentru care verificăm apartenenţa, iar al doilea este lista. X aparţine listei dacă este capul listei sau dacă aparţine cozii acesteia. 12:15 PM

8/41 Apartenenta unui element la o lista PROLOG apartine(x, [X _]). apartine(x, [Y Rest]) :- apartine(x, Rest).?- apartine (3, [1, 3, 2]). Yes?- apartine (4, [1, 3, 2]). No LISP (defun membru (n l) (cond ((null l) nil) ((eql n (first l)) t) (t (membru n (rest l))) ) ) >(membru 3 (1 4 3 5 6)) T >(membru 3 (1 5 6 8)) NIL 12:15 PM

9/41 Inversarea unei liste Pe langa lista initiala si lista in care depunem rezultatul, se considera si o lista temporara care este initial vida. Capul listei curente se adauga la inceputul listei temporare acesta era initial goala, deci elementele se vor adauga in ordine inversa. Cand lista care trebuie inversata devine vida, unificam lista finala cu cea temporara. 12:15 PM

Inversarea unei liste PROLOG inv(l, Linv) :- inv1(l, [], Linv). inv1([], L, L). inv1([x Rest], Temp, L) :- inv1(rest, [X Temp], L).?- inv([1, 2, 3], L). L = [3, 2, 1] LISP (defun inversa (l) (inv l '()) ) (defun inv(l1 l2) (if (null l1) l2 (inv (rest l1) (cons (first l1) l2)) ) ) >(inversa (1 2 3 4)) (4 3 2 1)

Pozitia i dintr-o lista Enuntul problemei: Dându-se o listă şi un număr întreg pozitiv i, să se găsească elementul aflat pe poziţia i în listă. Avem doua argumente de intrare, o lista si un numar care da pozitia care ne intereseaza. Cum rezolvam problema: scadem i-ul cu cate o unitate si, in acelasi timp, scoatem cate un element din lista. Cand i-ul este 1, primul element din lista este cel cautat.

Pozitia i dintr-o lista PROLOG pozi([x _], 1, X). pozi([_a R], I, X) :- I1 is I - 1, pozi(r, I1, X).? - pozi([mere, portocale, pere, gutui], 2, Ce). Ce = portocale LISP (defun elemi(i l) (if (= i 1) (first l) (elemi (- i 1) (rest l)) ) ) >(elemi 3 (1 4 5 6)) 5

13/41 1 4 6 7 8 9 0 3 2 4 5 6 7 Pozitia unui element intr-o lista Enunt problema: Având date o listă şi un element care aparţine acestei liste, să se specifice pe ce poziţie este situat elementul în lista dată. Avem doua argumente de intrare: Lista in care se gaseste elementul Elementul pentru care trebuie sa gasim pozitia Vom mai construi un predicat care sa contina si o variabila contor care este initial 1.

14/41 Pozitia unui element intr-o lista PROLOG pozx(l, X, P):- pozx(l, X, 1, P). pozx([x _], X, P, P). pozx([_ R], X, C, P) :- C1 is C + 1, pozx(r, X, C1, P).? pozx([ion, petre, marin, olivia], marin, P). P = 3 LISP (defun pozitia (l el p) (if (eql el (first l)) p (pozitia (rest l) el (+ p 1)))) (defun poz (l el) (pozitia l el 1)) >(poz (a b c d e) d 1) 4 1 4 6 7 8 9 0 3 2 4 5 6 7

15/41 Stergerea aparitiilor unui element dintr-o lista Enunt problema: Să se şteargă toate apariţiile unui element dintr-o listă. Avem doua argumente de intrare: Lista din care se vor sterge aparitiile unui element Elementul care trebuie sters Argumentul de iesire va fi noua lista care nu va mai contine elementul dat.

16/41 Stergerea aparitiilor unui element dintr-o lista PROLOG sterg([], _, []). sterg([n Rest], N, Rez) :- sterg(rest, N, Rez). sterg([m Rest], N, [M Rez]) :- sterg(rest, N, Rez).? sterg([1, 4, 6, 8, 6, 12, 6], 6, L). L = [1, 4, 8, 12] LISP (defun sterg (l el) (cond ((null l) ()) ((eql (first l) el) (sterg (rest l) el)) (t (cons (first l) (sterg (rest l) el))) ) >(sterg (1 4 6 8 6 12 6) 6) (1 4 8 12)

Eliminarea duplicatelor dintr-o lista Enunt problema: Să se realizeze eliminarea duplicatelor dintr-o listă dată. Argument de intrare: O lista data Argument de iesire: Lista rezultata prin eliminarea duplicatelor din lista data. Luam fiecare element din prima lista si verificam daca apartine restului listei (adica daca mai apare in lista). Daca nu mai apare, atunci il adaugam in lista rezultat Altfel, nu il adaugam. 12:15 PM

Eliminarea duplicatelor dintr-o lista PROLOG duplicate([], []). duplicate([x R1], L) :- member(x, R1), duplicate(r1, L). duplicate([x R1], [X R2]) :- duplicate(r1, R2).? duplicate([7, 9, 7, 11, 11], L). L = [9, 7, 11] LISP (defun duplicate(l) (cond ((null l) '()) ((member (first l) (rest l)) (duplicate (rest l))) (t (cons (first l) (duplicate (rest l)))) ) )) >(duplicate (7 9 7 11 11)) (9 7 11)

19/41 Maximul unei liste Consideram primul element al listei ca fiind maximul. Apelam un alt program ce are drept argumente lista ramasa si elementul considerat. Parcurgem restul listei; daca gasim un element (capul listei curente) mai mare decat maximul, acesta va deveni noul maxim. Altfel, mergem mai departe in restul listei. Recursivitatea se incheie cand ajungem la lista vida si se intoarce argumentul corespunzator maximului.

20/41 Maximul unei liste PROLOG max([p Rest]) :- Max = P, max1(rest, Max). max1([], Max):- write( Maximul este ), write(max). max1([p R], Max) :- P > Max, max1(r, P); max1(r, Max).?- max([4, 2, 5, 1]). Maximul este 5. LISP (defun maxim1 (l) (maxim2 (rest l) (first l))) (defun maxim2 (l max) (cond ((null l) max) ((> (first l) max) (maxim2 (rest l) (first l))) (t (maxim2 (rest l) max))))

21/41 Pozitia pe care se afla maximul unei liste Consideram primul element al listei ca fiind maximul si stabilim pozitia maximului drept 1. Apelam un alt predicat ce are drept argumente: lista ramasa elementul considerat drept maxim pozitia pe care se afla acesta si un contor care va numara elementele.

22/41 Pozitia pe care se afla maximul unei liste Parcurgem lista; daca gasim un element (capul noii liste) mai mare decat maximul: acesta va deveni noul maxim pozitia pe care se afla maximul ia valoarea contorului curent si se incrementeaza contorul. Altfel, mergem mai departe in restul listei, incrementand contorul. Recursivitatea se incheie cand ajung la lista vida si afisez argumentul corespunzator pozitiei pe care se afla maximul.

23/41 Pozitia maximului unei liste PROLOG poz_max([p Rest]) :- poz_max(rest, P, 1, 1). poz_max([], _, _, Poz) :- write('maximul se gaseste pe pozitia '), write(poz). poz_max([p R], Max, Contor, Poz) :- Contor1 is Contor + 1, Max < P, poz_max(r, P, Contor1, Contor1). poz_max([_ R], Max, Contor, Poz) :- Contor1 is Contor + 1, poz_max(r, Max, Contor1, Poz).?- poz_max([4, 2, 5, 1]). Maximul se gaseste pe pozitia 3

24/41 Pozitia maximului unei liste LISP (defun pozmax(l) (pozm (rest l) (first l) 1 2) ) (defun pozm (l m p c) (cond ((null l) p) ((> (first l) m) (pozm (rest l) (first l) c (+ c 1))) (t (pozm (rest l) m p (+ c 1))) ) ) > (pozmax (4 2 5 1)) 3

25/41 Interclasarea a doua liste Ce presupune interclasarea? Avem doua liste care trebuie unite intr-una singura. Cele doua liste trebuie sa fie ordonate crescator. Elementele listei rezultate trebuie sa fie de asemenea in ordine crescatoare.

26/41 Interclasarea a doua liste Capetele celor doua liste ce trebuie unite se compara. Cel mai mic dintre ele se va adauga la lista rezultat. Daca sunt egale, se adauga doar o data. Daca una dintre ele este vida, lista rezultat este cealalta.

27/41 Interclasarea a doua liste PROLOG interclasez([], L, L). interclasez(l, [], L). interclasez([p1 R1], [P2 R2], [P1 R3]) :- P1 < P2, interclasez(r1, [P2 R2], R3). interclasez([p1 R1], [P1 R2], [P1 R3]) :- interclasez(r1, R2, R3). interclasez(r1, [P2 R2], [P2 R3]) :- interclasez(r1, R2, R3).?- interclasez([1, 3, 7], [2, 3, 4, 8], L). L = [1, 2, 3, 4, 7, 8]

28/41 Interclasarea a doua liste LISP (defun interclasez (l1 l2) (cond ((null l1) l2) ((null l2) l1) ((< (first l1) (first l2)) (cons (first l1) (interclasez (rest l1) l2))) ((= (first l1) (first l2)) (cons (first l1) (interclasez (rest l1) (rest l2)))) (t (cons (first l2) (interclasez l1 (rest l2)))) ) > (interclasez (1 3 7) (2 3 4 8)) (1 2 3 4 7 8)

29/41 Prefixul unei liste Pentru a testa daca o lista e prefixul altei liste, compar element cu element cele doua liste. Adica, verific daca elementul cap al unei liste prefix este egal cu cel al listei complete. Daca raspunsul este afirmativ, merg mai departe. Prima lista e prefix a celei de-a doua daca, la un moment dat, lista prefix se incheie.

30/41 Prefixul unei liste PROLOG prefix([], _L). prefix([x R1], [X R2]) :- prefix(r1, R2).?- prefix([1,2], [1, 2, 3]). Yes?- prefix([1,3], [1, 2,3]). No LISP (defun prefix (l1 l2) (cond ((null l1) t) ((eql (first l1) (first l2)) (prefix (rest l1) (rest l2))) (t nil))) >(prefix (1 2) (1 2 3)) t >(prefix (1 3) (1 2 3)) nil

31/41 Sufixul unei liste Pentru a testa daca o lista e sufixul altei liste, parcurg lista completa pana intalnesc exact lista sufix. Adica, scot elementul cap al listei mari, pana cand cele doua liste sunt egale. Recursivitatea se opreste deci cand cele doua argumente sunt egale.

32/41 Sufixul unei liste PROLOG sufix(l, L). sufix(l, [_Y Rest]) :- sufix(l, Rest).?- sufix([1,2,3],[1,2]). No?- sufix([1, 2, 3], [3]). Yes LISP (defun sufix (l1 l2) (cond ((null l2) nil) ((equal l1 l2) t) (t (sufix l1 (rest l2))))) t >(sufix (2 3) (1 2 3))

Numere pare, numere impare Enunt problema: Se dă o listă: să se obţină două liste din aceasta astfel încât prima din ele să conţină elementele pare iar a doua pe cele impare. Vom avea asadar o singura lista ca argument de intrare si doua liste ca argumente de iesire.

Numere pare, numere impare PROLOG pareimpare([], [], []). pareimpare([x Rest], [X R1], L2):-X1 is X mod 2, X1=0, pareimpare(rest, R1, L2). pareimpare([x Rest], L1, [X R2]):-pareimpare(Rest, L1, R2).?- pareimpare([1, 2, 3, 4, 5, 6], L1, L2). L1=[2, 4, 6] L2=[1, 3, 5]

Numere pare, numere impare LISP (defun pare (l) (cond ((null l) '()) ((= (mod (first l) 2) 0) (cons (first l) (pare (rest l)))) (t (pare (rest l))))) (defun impare (l) (cond ((null l) '()) ((/= (mod (first l) 2) 0) (cons (first l) (impare (rest l)))) (t (impare (rest l))))) (defun pareimpare (l) (cons (pare l) (cons (impare l) '()))) >(pareimpare (1 2 3 4 5 6)) ((2 4 6) (1 3 5))

Pozitii pare, pozitii impare Enunt problema: Se dă o listă: să se obţină două liste din aceasta astfel încât prima din ele să conţină elementele de pe poziţiile pare iar a doua pe cele de pe poziţiile impare. Vom avea asadar o singura lista ca argument de intrare si doua liste ca argumente de iesire.

Pozitii pare, pozitii impare PROLOG parimpar([x], [], [X]). parimpar([x, Y],[Y], [X]). parimpar([x, Y R], [Y R1], [X R2]) :- parimpar(r, R1, R2).? pare([ion, marius, mananca, invata, mere, prolog], P, I). P = [marius, invata, prolog] I = [ion, mananca, mere] LISP (defun pozimpare(l) (if (null l) '() (cons (first l) (pozimpare (rest (rest l)))) )) (defun pozpare(l) (if (null (rest l)) '() (cons (second l) (pozpare (rest (rest l)))) )) (defun pozpareimpare(l) (cons (pozpare l) (cons (pozimpare l) '())) ) >(pozpareimpare (a b c d e)) ((B D) (A C E))

38/41 Ordonarea unui sir de numere Având un şir de numere neordonate, sa se realizeze ordonarea crescatoare a acestora. Pentru ordonarea elementelor unei liste, vom folosi metoda quicksort care utilizeaza mecanismul divide et impera.

39/41 Ordonarea elementelor unei liste PROLOG sortez([], []). sortez([p Rest], Lrez):- selectez(p, Rest, Mici, Mari), sortez(mici, MiciSort), sortez(mari, MariSort), append(micisort, [P MariSort], Lrez). selectez(_, [], [], []). selectez(p, [P1 Rest], [P1 Mici], Mari):- P1 < P, selectez(p, Rest, Mici, Mari). selectez(p, [P1 Rest], Mici, [P1 Mari]):- selectez(p, Rest, Mici, Mari).?-sortez([2, 4, 5, 3, 1], L). L=[1, 2, 3, 4, 5]

40/41 Ordonarea elementelor unei liste LISP (defun sortez (l) (if (null l) '() (append (sortez (selectmici (first l) (rest l))) (list (first l)) (sortez (selectmari (first l) (rest l)))))) (defun selectmari (el l) (cond ((null l) '()) ((< el (first l)) (cons (first l) (selectmari el (rest l)))) (t (selectmari el (rest l))))) (defun selectmici (el l) (cond ((null l) '()) ((> el (first l)) (cons (first l) (selectmici el (rest l)))) (t (selectmici el (rest l))))) >(sortez (1 4 5 3 2)) (1 2 3 4 5)

Pana saptamana viitoare