Home Rilevanza giuridica Gradi di parentela e affinità Albero genealogico Programma tuProlog

Ci sono due modi per inserire il
programma nell'applet che si è aperta:

 

 

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.

 

 

Home

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>