libertas.sm logo news informazioni san marino rimini romagna
libertas romagna san marino applicazioni mobile apple android
h 11:11 giovedì 24 maggio 2012/1711 d.F.R. english version

Informatica nella didattica utilizzando il linguaggio prolog (Marino Cecchetti)

Condividi:

AUTOMATISMI DI RISOLUZIONE 11

 (Didattica delle scienze e informatica nella scuola,n. 151 e 152, 1991, Editrice la Scuola di Brescia)


                    /*BASE.PRO*/

DOMAINS

  numero=integer

  elemento=symbol

  relazione,descrizione=string

  lista_elementi=elemento*

  lista_relazioni=relazione*

  ff=ff(elemento,elemento,elemento,relazione)

  lf=ff*

  fc=fc(elemento,numero,numero,relazione)

  lc=fc*

DATABASE

  lista_elementi(lista_elementi);condizioni(lista_elementi,lista_elementi)

  contatore(numero)

PREDICATES

  relazione(elemento,elemento,elemento,relazione)

  lista_elementi_incogniti(lista_elementi)

  lista_elementi_noti(lista_elementi);lista_costanti(lista_elementi)

 

  f(elemento,elemento,elemento,relazione)

  t(elemento,lista_elementi,lista_elementi,lista_elementi,lf,lf)

  g(lista_elementi,lista_elementi,lista_elementi,lf,lf)

  scrivi(lf,numero);passo(numero,numero);lista_dati(lista_elementi)

 

  inverti(lf,lf);inver(lf,lf,lf);insieme(lista_elementi,lista_elementi)

  ins(lista_elementi,lista_elementi,lista_elementi)

  concatena(lista_elementi,lista_elementi,lista_elementi)

  fa_parte(elemento,lista_elementi);fa_parte(ff,lf);fa_parte(fc,lc)

  scrivi_lista(lista_elementi);lettura;scelta;opzione(numero);risoluzione

  input_fissi(lista_elementi,lista_elementi);ritorno;c;scritta_finale(numero)

  disc1(lf,lista_elementi);disc(lf,lista_elementi,lista_elementi)

  discussione1(lista_elementi,lista_elementi,lista_elementi)

  discussione(lista_elementi,lista_elementi,lista_elementi,lista_elementi)

  precisazione(lista_elementi)

GOAL

  clearwindow,lettura,scelta.

CLAUSES           

                   /* PREMESSA

                                   Menu' di scelta*/    

  scelta:-nl,nl, write("       OPZIONI  NELL'AMBIENTE STANDARD DEL"),

            write(" TRAPEZIO RETTANGOLO"),nl,

            nl,write("       1) Risoluzione del problema standard"),

            write(" (NOTI:dma,dmi,lo,db; INCOGNITO: p)"), 

            nl,write("       2) Fine lavoro"),

            nl,nl,write("  SCEGLI  UN NUMERO (1-2) "),readint(N), clearwindow, opzione(N).

  scelta:-clearwindow,scelta.

 

  opzione(1):-c,risoluzione,ritorno.

  opzione(2):-c,write("PREMI LA BARRA SPAZIATRICE "),nl,

            contatore(N),retract(contatore(N)).

                        

  c:-assertz(contatore(0)),retract(condizioni(_,_)),!.

  c.

              

  ritorno:- contatore(N),cursor(2,2),scritta_finale(N),

            retract(contatore(N)),cursor(4,2),

            write("Premi un tasto per ritornare a scegliere"),READCHAR(_),

            cursor(2,2),write("                                         "),

            cursor(4,2),write("                                         "),

            scelta. 

                          

  scritta_finale(N):-N=0,write(" NESSUNA PROCEDURA").

  scritta_finale(_):-write(" NESSUN'ALTRA PROCEDURA").

                   /*PRIMA PARTE 

                                   Descrizione dell'ambiente                 

                                   1) Relazioni fra gli elementi*/

  relazione(lp,bmi,dmi,"pitagora dmi").

  relazione(lp,bma,dma,"pitagora dma").

  relazione(lo,db,lp,"pitagora diffb").

  relazione(sb,lp,da,"form. doppia area").

  relazione(da,"2",a,"form. area").

  relazione(sb,sl,p,"form. perimetro").

  relazione(lp,lo,sl,"somma lati").

  relazione(bmi,bma,sb,"somma basi").

  relazione(bma,bmi,db,"differenza basi").

                                   /*2) Lista degli "elementi" costanti*/

  lista_costanti(["2"]).

                   /* SECONDA PARTE 

                                   Descrizione del problema

                                   1) lista degli elementi inizialmente

                                    noti*/                                                  

  lista_elementi_noti([lo,dmi,dma,db]).

                                   /*2) lista degli elementi incogniti*/                                                  

  lista_elementi_incogniti([p]).            

                   /* TERZA PARTE 

                                   Lettura degli elementi e delle relazioni*/

  lettura:-findall(X,relazione(X,_,_,_),Lx),findall(Y,relazione(_,Y,_,_),Ly),

            findall(Z,relazione(_,_,Z,_),Lz),concatena(Lx,Ly,Lp),

            concatena(Lp,Lz,Li),insieme(Li,L),assertz(lista_elementi(L)).

 

  lista_dati(L):- lista_elementi_noti(LL), lista_costanti(Lc),

            concatena(LL,Lc,L).

                   /* QUARTA PARTE 

                                   Meccanismo di risoluzione ed

                                   emissione delle procedure*/

  risoluzione:-input_fissi(Ld,Li),g(Li,Ld,_,[],_),!.

  risoluzione.                  

 

  input_fissi(Ld,Li):-lista_dati(Ld),lista_elementi_incogniti(Li),

            lista_elementi_noti(LLd),!,assertz(condizioni(LLd,Li)).

 

  g([],L,L,LL,LL):- contatore(N),N1=N+1,retract(contatore(N)),

            assertz(contatore(N1)),cursor(19,1),write("Procedura n.",N1),

            inverti(LL,NLL),condizioni(Ld,Li),disc1(LL,NL),        

            cursor(2,1),WRITE("El. noti non utilizzati= "),

            discussione1(Ld,NL,Lf),scrivi_lista(Lf),precisazione(Lf),

            cursor(1,1),write("El.noti =" ),scrivi_lista(Ld),

            cursor(1,50),write("El.inc.=" ),scrivi_lista(Li),                

            cursor(3,1),Write("         TROVO      CON LA REGOLA-RELAZIONE         OPERANDO SUGLI ELEMENTI"), 

            scrivi(NLL,5),   cursor(22,2),

            write( "PREMERE UN TASTO PER EVENTUALI ALTRE PROCEDURE "),

            readchar(_),clearwindow,fail.

  g([Z|Lv],Ld,Ld,Lr,Lr):-t(Z,[Z],Ld,Ldr,Lr,Lrr),g(Lv,Ldr,Ldr,Lrr,Lrr).

 

  t(Z,_,Ld,Ld,Lr,Lr):- fa_parte(Z,Ld),!.

  t(Z,Lv,Ld,[Z|Ld0],Lr,[ff(Z,X,Y,R)|Lr0]):- f(Z,X,Y,R),

            not(fa_parte(ff(Z,X,Y,R),Lr)),not(fa_parte(X,Lv)),

            t(X,[X|Lv],Ld,Ld1,Lr,Lr1),not(fa_parte(Y,Lv)),

            t(Y,[Y|Lv],Ld1,Ld0,Lr1,Lr0).

 

  disc1(L,NL):-disc(L,NL,[]).

  disc([],L,L).

  disc([ff(Z,X,Y,_)|C],Q,P):-disc(C,Q,[Z,X,Y|P]).

      

  discussione1(Ld,L,Lf):-discussione(Ld,L,Lf,[]),!.

  discussione([],_,Lf,Lf).

  discussione([Z|C],L,Q,P):-not(fa_parte(Z,L)),discussione(C,L,Q,[Z|P]).

  discussione([_|C],L,Q,P):-discussione(C,L,Q,P).

 

  precisazione([]):-write("NESSUNO"),!.

  precisazione(_).

 

  scrivi([],_).

  scrivi([ff(T,N1,N2,R)|C],J):- passo(J,NJ),cursor(NJ,12),write(T),

            cursor(NJ,28),write(R),cursor(NJ,63),write(N1,",",N2),

            J1=NJ+1,scrivi(C,J1).

 

  passo(5,NJ):-cursor(5,1),write(" Passo 1"),NJ=5,!.

  passo(J,NJ):-P=J-4,cursor(J,4),write(",,  ",P),NJ=J.

 

  f(X,Y,Z,W):-relazione(X,Y,Z,W).

  f(X,Y,Z,W):-relazione(Y,Z,X,W).

  f(X,Y,Z,W):-relazione(Z,X,Y,W).

                    /* QUINTA PARTE 

                                     Predicati notevoli non di sistema*/

         fa_parte(X,[X|_]).

         fa_parte(X,[_|C]):-fa_parte(X,C).

   

         insieme(VL,NL):-ins(VL,NL,[]),!.

         ins([],L,L).

         ins([Cap|Coda],L,Q):- not(fa_parte(Cap,Q)),ins(Coda,L,[Cap|Q]).

         ins([_|Coda],L,Q):- ins(Coda,L,Q).

 

         concatena([],L,L).

         concatena([Cap|Coda],L,[Cap|NCoda]):-concatena(Coda,L,Ncoda).

 

         scrivi_lista([]).

         scrivi_lista([Z|[]]):-write(Z),scrivi_lista([]),!.

         scrivi_lista([Z|C]):-write(Z,","),scrivi_lista(C).

         

         inverti(VL,NL):-inver(VL,NL,[]).

         inver([],NL,NL).

         inver([Cap|Coda],L,K):-inver(Coda,L,[Cap|K]).

 
AUTOMATISMI DI RISOLUZIONE 11                    

Cerca nel sito

Cerca tra news, articoli e comunicati!


nel sito news e comunicati
Sponsor
Sponsor
Sponsor
Sponsor
Sponsor
Libertas.sm © 2012 by Belcom - testata di informazioni e news sulla Repubblica di San Marino