/*Programmma Qsort */
/*
  Mettete alla prova il programma con GOAL:  
 qsort([4,8,2,7],RISP).
*/
check_determ
domains
    l = integer*

predicates
    dividi(integer,l,l,l)
    concatena(l,l,l)
    qsort(l,l)

clauses
    concatena([],X,X).
    concatena([H|L],L1,[H|L2]) :-
        concatena(L,L1,L2).

    dividi(_,[],[],[]).
    dividi(H,[A|X],[A|Y],Z) :-
        A <= H,!, dividi(H,X,Y,Z).
    dividi(H,[A|X],Y,[A|Z]) :-
        A > H,!, dividi(H,X,Y,Z).

    qsort([],[]).
    qsort([H|T],S) :-
        dividi(H,T,A,B),
        qsort(A,A1),
        qsort(B,B1),
        concatena(A1,[H|B1],S).

 

 

---------- Dialog ----------+
Goal: qsort([4,8,2,7],RISP).¦
RISP=[2,4,7,8]              ¦
1 Solution                  ¦
Goal: qsort([8,2,5,10],RISP)¦
.                           ¦
RISP=[2,5,8,10]             ¦
1 Solution                  ¦
Goal: qsort([8,3,7,6],RISP).¦
RISP=[3,6,7,8]              ¦
1 Solution                  ¦
Goal:                       ¦
                            ¦

ritorna