Prolog vs. Lisp prin Exemple. Ruxandra Stoean

Documentos relacionados
CURSOS A MEDIDA PARA EMPRESAS Y PARTICULARES CURSURI INDIVIDUALIZATE PENTRU PERSOANE FIZICE SAU JURIDICE

privind calculul Taxei la Fondul pentru mediu pentru emisiile de noxe in atmosfera ale surselor mobile

STUDIU DE CAZ INCALZIRE CU RADIATOARE CU ROCA VULCANICA AMSconvect Germania

Ghid pentru incarcarea in Internet Banking a platilor din fisier

Manualul utilizatorului

Servicii de telefonie PrePay

INDEX ABONAMENTE RETRASE. 1. Abonamente Vodafone Office Complet (valabile până la 15 iunie 2015) p. 2

Manual de Lisp para IACS (Curso 91 92)

Inteligencia Artificial I 3ra. Práctica: Algoritmos de Búsqueda

Ayuntamiento de Coslada

LISP I. Programación recursiva frente a iterativa. Características de la programación recursiva:

Managementul conflictelor şi. tehnici de negociere. Ciprian Tripon. Marius Dodu. Gabriela Penciu

bab.la Frases: Personal Buenos deseos Rumano-Español

Avantajele principale ale Abonament Moldcell. Conectare

In Intampinarea Ramadanului

M AT E R I A L E E L E C T R I C E

1.Informatii utile Accesul in aplicatie Prima logare in BT Logari ulterioare in BT Schimbarea parolei...

Oferta Comerciala Produse si Servicii oferite de Telekom Romania Mobile Communications S.A.

TOPFIELD TF 6000 VI. Manual de utilizare. Receptor digital de satelit. Fabricat de TOPFIELD sub licenţă VIACCESS

Cuprins. Barcelona fotbalului, a jambonului, a traficantilor. Ce n-o sa gasesti niciodata in ghiduri (I)


EGALITATEA DE ȘANSE ÎNTRE FEMEI ȘI BĂRBAȚI. DISCRIMINĂRI POSIBILE ÎN DIFERITE RAMURI DE DREPT

GUÍA BÁSICA DE SCHEME v.4

1. Informatii utile Accesul in aplicatie Prima logare in BT Logari ulterioare in BT Schimbarea parolei...

Sagrada Familia. Cu toate acestea, arhitectii din zilele noastre au o idee clara asupra a ceea ce a vrut sa

Condii de calatorie

de Genera e Genera1 punto-g Revista de información sobre trabajo sexual 2010 # 04

ROMTELECOM DOLCE INTERACTIV

WorldShip Ghid de instalare. Un ghid ușor pentru instalarea și îmbunătăţirea aplicaţiei software WorldShip.

Timbrul de mediu. Ghid de informatii utile Ministerul Mediului si Schimbarilor Climatice

Al patrulea picior al mesei

SPANIOLA, INCEPATORI, CURS 5. # En el aeropuerto de Sevilla = În aeroportul din Sevilla

Ghidul serviciilor și tarifelor UPS 2012

# En un restaurante de mariscos [en un restauránte de maríscos] = Într-un restaurant cu fructe de mare

infoturism.ro Tenerife - Ghid de calatorie Cum ajungi

Andrei Langa [Traducción del rumano al español]

CLASIFICAREA INTERNAŢIONALĂ A PRODUSELOR ŞI SERVICIILOR

primii paşi ghid de resurse pentru imigranţi comunitatea Castilla La Mancha Informaţii de bază pentrutua trăi în

Tema 3.- Predicados y sentencias condicionales

Inteligencia Artificial e Ingeniería del Conocimiento I BÚSQUEDA. Julio J. Rubio García. Área de Ciencias de la Computación e Inteligencia Artificial

net Siempre contigo Guía de Usuario V 2.0

Christian Tour. Povestea unei experienţe

Jakob Lorber. scribul umil al lui Dumnezeu

Expresiones comunes / Entendiéndose el uno al otro /

B E L G I A ISTORIA BERII POVESTEA CIOCOLATEI BRUXELLES LEUVEN ANTWERP LIEGE NAMUR BRUGES GENT

MANUALUL UTILIZATORULUI Acest manual va arata cum sa folositi in mod corect CAMERA DIGITALA FUJIFILM FinePix S1500fd. Urmati instructiunile cu


Usar ordenador y manejar Internet

Tarife [i servicii pentru abonamentele Orange

ı CAT ı CAST ı RUM ı La verema La vendimia Culesul viei

Cresterea lichiditatii - cheia in promovarea BVB la statutul de piata emergenta

Durata contractuala: 12 luni 24 luni 36 luni

LA GESTIÓN DE LAS RECLAMACIONES PATRIMONIALES COMO UN ELEMENTO PARA MEJORAR LA CALIDAD DE LA ASISTENCIA SANITARIA

BRD Groupe Société Générale S.A.

Giorgiana Dumitrică, Aurelia NiculAe si Claudia ANcutA, master AAMM anul II, Universitatea Bucuresti

Market CARDIOLOGIE

- ALGERIA, ARABIA SAUDIT,, AFGANISTAN, AFRICA CENTRAL,, BRAZILIA,

Grupul Roman de Lucru pentru Studiul Leucemiei Acute Limfoblastice la adult (RWGALS)

DOCUMENTAŢIA DE ATRIBUIRE

Cuprins. Îţi mulţumim că ai avut încredere în noi. Christian Tour în cifre la finele lui 2011

Plafonul valabil incepand cu pentru diurna si cazare

2 INTRODUCCIÓN A LISP

BLOQUE III: INDICADORES Y RESULTADOS CERTIFICACIÓN N ISO Y OBJETIVOS DEL SEGUIMIENTO ERCA. Dr. Juan Manuel Buades Fuster

523 Guvernul a hotărât suplimentarea secţiilor de vot. Pag. 8. Pag. 8. Clinica Isadora

Pentru Emiratele Arabe Unite - cetățenii români pot călători doar în baza unei vize obținută de la reprezentanța diplomatică a respectivului stat.

Marta Parra Lubary Ester Rebollo Ferrer Margalida Tortella Mateu AR, ER, IR, OR, UR. ar er ir or ur NOMBRE:... CURSO:...

po ta da la te to pa vo ga no de o ca lo ma ca ce me ti to ve po te lo la o so ba te ja to ro po ba ca na ra te os pe sa me al za ca ce ba li

Léete el mundo Literatura Intercultural Escuelas de idiomas

Manual Handycam DCR-SX45E/SX65E/SX85E Cuprins Tehnicile utile de înregistrare Index

Palacio Real. Catedrala Almudena

Iuliana Andronache, CEO Electrica SA: Este absolută nevoie de o continuare a investiţiilor în reţelele de distribuţie

1. Denumirea opţionalului CAPITALELE LUMII. 2. Aria curriculară OM ŞI SOCIETATE. 3. Tipul de opţional OPŢIONAL LA NIVEL DE DISCIPLINĂ

DECISIONES ADOPTADAS CONJUNTAMENTE POR EL PARLAMENTO EUROPEO Y POR EL CONSEJO

SUB 15C 2016 FI GRUPO A 2016 ACADEMIA UNION ESTRELLA ROJA

Sistema vocálico. copíi (niños)-cópii (copias)

* OLIMPIADA DE VARĂ A SPORTULUI MILITAR LICEAL * Deviza Prietenie prin sport! competiţiei:

CONTABILITATE FINANCIAR

'îl,..,'.: '' * CLUBUL BILDERBERG. STĂPÂNII LUMII

BANCO DE FRASES Quiero Aprender Rumano

MANUAL PENTRU FURNIZORII DE INFORMAŢII STATISTICE INTRASTAT. Partea I - Manual de bază INSTITUTUL NAŢIONAL DE STATISTICĂ ROMÂNIA Versiunea 1

infoturism.ro Mallorca - Ghid de calatorie Cum ajungi

MOŢIU PETRICĂ TUDOR ÎNDRUMAR DE LUCRĂRI PRACTICE LA PEDOLOGIE SOLURI FORESTIERE

Eficienta energetica in cladiri. Manualul elevului

Diurna maxima legala si deductibila fiscal de la , in cazul deplasarilor externe

Fray Luis de León insigne exegeta y traductor de la Biblia

Marta Parra Lubary Ester Rebollo Ferrer Margalida Tortella Mateu AL, EL, IL, OL, UL AL EL IL OL UL NOMBRE:... CURSO:...

AHORRO DE ENERGÍA EN SISTEMAS DE BOMBEO

Vană multifuncţională de echilibrare termostatică MTCV

Săptămâna hunedoreană

Instrucciones para el uso Instructiuni de utilizare CO 107 F

Tarife [i servicii pentru abonamentele Orange

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Rolando Burgos Cárdenas MANUAL DE REFERENCIA RAPIDA DE LISP.

Algoritmos de Ordenación

20 iulie, Donald Trump a câștigat detașat nominalizarea ca unic candidat republican pentru președinția SUA

Así somos. Spécimen. Unidad. Qué ves? Communiquer/agir. Écrire, prononcer, accentuer. Lexique. Langue. Découvrir le monde hispanique.

- S o b r e los m o d e l o s de ge s t i ó n y pri v a t i z a c i o n e s.

Alumnos: Familiarizarse con el código y su uso y resolver las cuestiones planteadas utilizando el intérprete de LISP.

CLCANVCLI - Clima y Cambio Climático

Introducción a la Elegía a Ramon Sijé, de Miguel Hernández (En el 70 aniversario de la muerte de Ramón).

Transcripción:

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 coadei 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, M). max1([], Max, Max). max1([p R], Max, M) :- P > Max, max1(r, P, M); max1(r, Max, M).?- 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))))) >(sufix (2 3) (1 2 3)) >(sufix (1 3) (1 2 3)) t nil

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