Ci sono due modi per
inserire il |
2) Scaricare da qui albero12.pl e, dopo averlo salvato sul pc, caricarlo in tuProlog cliccando sull'icona Load Theory e prelevando dal computer il file appena salvato.
Dopo aver caricato il programma, scrivi l'interrogazione nella riga sottostante che inizia con ?- Es.: la domanda "Chi può partecipare, per legge, all'impresa familiare di d?" deve essere così formulata: findall(W,impresa(d,W),L). La risposta sarà la seguente: yes. L / [a,a1,h,l,r,s,t,v,z,c,g,h1,l1,w,w1,j,c1,k,d1] Solution: findall(W,impresa(d,W),[a,a1,h,l,r,s,t,v,z,c,g,h1,l1,w,w1,j,c1,k,d1]) Le lettere indicate tra le parentesi quadre rappresentano i parenti fino al 3° grado e gli affini fino al 2° grado che possono partecipare all'impresa familiare, identificabili attraverso l'albero genealogico.
Scarica qui il file di testo con alcune possibili interrogazioni.
|
1)
Copiare (Ctrl+c) il seguente codice e incollarlo
(Ctrl+v) in tuProlog: %%<inizio codice> madre(a,c). madre(a,d). madre(c,g). madre(d,h). madre(d,l). madre(g,p). madre(g,q). madre(h,r). madre(h,s). madre(h,t). madre(l,v). madre(l,z). madre(w,d1). madre(w,k). madre(k,y). madre(nn,j). padre(a1,c). padre(a1,d). padre(d1,h). padre(d1,l). padre(w1,d1). padre(w1,k). padre(d1,j). padre(c1,g). padre(g1,p). padre(g1,q). padre(k1,y). padre(h1,r). padre(h1,s). padre(h1,t). padre(l1,v). padre(l1,z). maschio(d1). maschio(a1). maschio(w1). maschio(c1). maschio(k1). maschio(g1). maschio(h1). maschio(l1). femmina(a). femmina(w). femmina(c). femmina(d). femmina(k). femmina(y). femmina(g). femmina(h). femmina(l). femmina(p). femmina(q). femmina(r). femmina(j). femmina(s). femmina(t). femmina(v). femmina(z). femmina(nn). coniugato(a,a1). coniugato(d,d1). coniugato(w,w1). coniugato(c,c1). coniugato(g,g1). coniugato(h,h1). coniugato(l,l1). coniugato(k,k1). uguale(X,X). figlia(X,Y):- femmina(X), madre(Y,X);femmina(X),padre(Y,X). figlio(X,Y):- maschio(X),madre(Y,X);maschio(X), padre(Y,X). sorella(X,Y):-femmina(X), madre(A,X),madre(A,Y),padre(B,X),padre(B,Y), not(uguale(X,Y)). sorella(X,Y):-madre(A,X),madre(A1,Y),padre(B,X),padre(B,Y), not(uguale(A,A1)),not(uguale(X,Y)). sorella(X,Y):-madre(A,X),madre(A,Y),padre(B,X),padre(B1,Y), not(uguale(B,B1)),not(uguale(X,Y)). fratello(X,Y):-maschio(X),madre(A,X),madre(A,Y),padre(B,X),padre(B,Y), not(uguale(X,Y)). fratello(X,Y):-maschio(X),madre(A,X),madre(A1,Y),padre(B,X),padre(B,Y), not(uguale(A,A1)),not(uguale(X,Y)). fratello(X,Y):-maschio(X),madre(A,X),madre(A,Y),padre(B,X),padre(B1,Y), not(uguale(B,B1)),not(uguale(X,Y)). cugina(X,Y):-madre(A,X), madre(B,Y), sorella(A,B). nonna(X,Y):-madre(X,W),madre(W,Y). nonna(X,Y):-madre(X,W),padre(W,Y). nonno(X,Y):-padre(X,W),padre(W,Y). nonno(X,Y):-padre(X,W),madre(W,Y). nipoteN(X,Y):-nonna(Y,X). nipoteZ(X,Y):-madre(A,X),sorella(A,Y). nipoteZ(X,Y):-madre(A,X),fratello(A,Y). nipoteZ(X,Y):-padre(A,X),sorella(A,Y). nipoteZ(X,Y):-padre(A,X),fratello(A,Y). zia(X,Y):-nipoteZ(Y,X). bisnonna(X,Y):-genitore(X,W), genitore(W,Z),genitore(Z,Y). listacugini(X,L):-findall(W,cugina(X,W),L). listanipotiN(X,L):-findall(W,nipoteN(W,X),L). listanipotiZ(X,L):-findall(W,nipoteZ(W,X),L). parente(1,X,Y):-figlio_figlia(X,Y); genitore(X,Y). parente(2,X,Y):-nonna(X,Y);nipoteN(X,Y);sorella(X,Y);fratello(X,Y). parente(3,X,Y):-bisnonna(X,Y);bisnonna(Y,X);zia(X,Y);zia(Y,X). genitore(X,Y):-padre(X,Y). genitore(X,Y):-madre(X,Y). coniuge(X,Y):-coniugato(X,Y). coniuge(X,Y):-coniugato(Y,X). affine(X,Y):-coniuge(X,Y). figlio_figlia(X,Y):-madre(Y,X); padre(Y,X). fratello_sorella(X,Y):-madre(M,X), madre(M,Y), padre(P,X), padre(P,Y), X \= Y. nonno_nonna(X,Y):-genitore(X,Z), genitore(Z,Y). zio_zia(X,Y):-genitore(Z,Y), fratello_sorella(X,Z). parente_affine(1,X,Y):- affine(X,Z), parente(1,Z,Y), not(figlio_figlia(Y,X)). parente_affine(1,Y,X):- affine(X,Z), parente(1,Z,Y), not(figlio_figlia(Y,X)). parente_affine(2,X,Y):- affine(X,Z), parente(2,Z,Y). parente_affine(2,Y,X):- affine(X,Z), parente(2,Z,Y). impresa(X,Y):- parente(1,X,Y);parente(2,X,Y);parente(3,X,Y);parente_affine(1,Y,X);parente_affine(2,Y,X);coniuge(X,Y). impr(X):-findall(Y,impresa(X,Y),L), stampa_lista(L). stampa_lista([]). stampa_lista([T|C]):- not(member(T,C)), write(T), write(' '), stampa_lista(C). stampa_lista([T|C]):- member(T,C),stampa_lista(C). %%<fine codice>
|