prolo20
/*Programmma Qsort1 modificato da QSORT */ /* prova GOAL: qsort([4,8,2,7],RISPOSTA). parentesi quadre con ALT 91..ALT 93 viene restituita come risposta lista ordinata 2,4,7,8 in questo esempio */ /* trace */ /* se attivo TRACE eliminando /* */si deve premere il tasto F10 molte volte per vedere i vari passaggi che il programma esegue per ordinare la lista alla fine presenta la lista originaria e la lista ordinata...processo lento.. */
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).
/*Programmma Qsort1 modificato da QSORT */ /* ordina lista albabetica tipo SYMBOL prova GOAL: qsort([luna,sole,aria],RISPOSTA). parentesi quadre con ALT 91..ALT 93 viene restituita come risposta lista ordinata aria,luna,sole in questo esempio */
/* trace */ /* se attivo TRACE si deve premere il tasto F10 molte volte per vedere i vari passaggi che il programma esegue per ordinare la lista alla fine presenta la lista originaria e la lista ordinata...processo lento.. */
check_determ domains l = symbol*
predicates dividi(symbol,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).
/*Programmma Qsort3 modificato da QSORT */ /* ordina lista albabetica tipo STRING prova GOAL: qsort([" g d s","a 1 d"],RISPOSTA). parentesi quadre con ALT 91..ALT 93 viene restituita come risposta lista ordinata "a 1 d","g d s" in questo esempio */
/* trace */ /* se attivo TRACE si deve premere il tasto F10 molte volte per vedere i vari passaggi che il programma esegue per ordinare la lista alla fine presenta la lista originaria e la lista ordinata...processo lento.. */
check_determ domains l = string*
predicates dividi(string,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).
/*Programmma Qsort4 modificato da QSORT */ /* ordina lista albabetica tipo CHAR prova GOAL: qsort(['a','g','b'],RISPOSTA). parentesi quadre con ALT 91..ALT 93 viene restituita come risposta lista ordinata 'a','b','g' in questo esempio */
/* trace */ /* se attivo TRACE si deve premere il tasto F10 molte volte per vedere i vari passaggi che il programma esegue per ordinare la lista alla fine presenta la lista originaria e la lista ordinata...processo lento.. */
check_determ domains l = char*
predicates dividi(char,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).
attivazione di TRACE a inizio programma
TRACE
check_determ domains l = char*
predicates dividi(char,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).