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).