Commit 3ea34c7f authored by Vít Novotný's avatar Vít Novotný
Browse files

added example 1.1_13

parents
% nacteni:
/* ['1.1.1_13.pl']. */
% fakty (DB)
otec(milan,dana).
otec(milan,petr).
otec(jan,david).
matka(pavla,dana).
matka(pavla,petr).
matka(jana,david).
% pravidla
rodic(X,Y):- otec(X,Y).
rodic(X,Y):- matka(X,Y).
sourozenci(X,Y):- otec(O,X), otec(O,Y), X\=Y, matka(M,X), matka(M,Y).
% demonstracni vypis
% abychom se vyhli varovanim "Redefined static procedure ..."
:- dynamic
write_all_X/3,
start/0.
write_all_X(Goal,X,Name):-
call(Goal),write(' '),write(Name),write(' = '),write(X),nl,fail.
write_all_X(_,_,_).
start:-
write('Program predstavuje jednoduchou prologovskou databazi'),nl,
write('s fakty i pravidly o rodinnych vztazich "otec", "matka"'),nl,
write('a "rodic".'),nl,nl,
write('Na databazi muzeme klast pomoci volani prologovskych cilu'),nl,
write('ruzne dotazy. Napr.:'),nl,nl,
write('Vysledek dotazu "otec(X,dana)" je:'),nl,
write_all_X(otec(X,dana),X,'X'),nl,
write('Vysledky dotazu "rodic(X,david)" jsou: '),nl,
write_all_X(rodic(X,david),X,'X'),nl,
write('Vysledek dotazu "sourozenci(dana,Y)" je:'),nl,
write_all_X(sourozenci(dana,Y),Y,'Y'),nl,
write('Sami si vyzkousejte dalsi kombinace.'),nl.
?-start.
:- retractall(write_all_X/3).
:- retractall(start/0).
#!/usr/bin/env python
# encoding=utf-8 (pep 0263)
# fakty (DB)
# klici hasove tabulky jsou jmena potomku, hodnotami jmena rodicu
otec = dict(dana="milan", petr="milan", david="jan")
matka = dict(dana="pavla", petr="pavla", david="jana")
potomci = dict()
def _init_potomci():
for y in otec:
potomci[y] = True
for y in matka:
potomci[y] = True
_init_potomci()
# pravidla
def rodic_testuj(x, y):
return y in otec and otec[y] == x or \
y in matka and matka[y] == x
def rodic_generuj_Xs(y):
xs = []
if y in otec:
xs.append(otec[y])
if y in matka:
xs.append(matka[y])
return xs
def sourozenci_testuj(x, y):
return x in otec and y in otec and otec[x] == otec[y] and x != y and \
x in matka and y in matka and matka[x] == matka[y]
def sourozenci_generuj_Ys(x):
ys = []
for y in potomci:
if sourozenci_testuj(x, y):
ys.append(y)
return ys
# demonstracni vypis
if __name__ == "__main__":
print('Vysledek dotazu otec["dana"] je %s.' % [otec["dana"]])
print('Vysledek dotazu rodic_generuj_Xs("david") je %s.' % \
rodic_generuj_Xs("david"))
print('Vysledek dotazu sourozenci_generuj_Ys("dana") je %s.' % \
sourozenci_generuj_Ys("dana"))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment