Files
ui-cviko1/notebook/cviko5.ipynb
2025-03-19 10:19:34 +01:00

8.6 KiB

In [1]:
%pip install pytholog
Requirement already satisfied: pytholog in /home/br0kenpixel/Documents/ui-cviko1/lib64/python3.13/site-packages (2.4.1)
Requirement already satisfied: more-itertools in /home/br0kenpixel/Documents/ui-cviko1/lib64/python3.13/site-packages (from pytholog) (10.6.0)

[notice] A new release of pip is available: 24.2 -> 25.0.1
[notice] To update, run: pip install --upgrade pip
Note: you may need to restart the kernel to use updated packages.
In [2]:
import pytholog as pl
In [4]:
family = pl.KnowledgeBase("family")
family([
    "parents(susanne,charles,jane)",
    "parents(susanne,charles,diana)",
    "parents(susanne,charles,jack)",
    "parents(jane,tom,peter)",
    "parents(jane,tom,anne)",
    "parents(anne,luis,kate)"])
In [5]:
#who is mother of peter?
family.query(pl.Expr("parents(Who,_,peter)"))
Out[5]:
[{'Who': 'jane'}]
In [6]:
family(["matka(X,Y) :- parents(X,_,Y)"])
In [7]:
family.query(pl.Expr("matka(Kto,peter)"))
Out[7]:
[{'Kto': 'jane'}]
In [8]:
family.query(pl.Expr("matka(X,_)"))
Out[8]:
[{'X': 'anne'},
 {'X': 'jane'},
 {'X': 'jane'},
 {'X': 'susanne'},
 {'X': 'susanne'},
 {'X': 'susanne'}]
In [9]:
family([
    "otec(O,D) :- parents(_,O,D)"])
In [12]:
family.query(pl.Expr("otec(Kto, jack)"))
Out[12]:
[{'Kto': 'charles'}]
In [13]:
family([
    "rodic(R, D) :- otec(R, D)",
    "rodic(R, D) :- matka(R, D)"
])
In [14]:
family.query(pl.Expr("rodic(charles, jack)"))
Out[14]:
['Yes']
In [15]:
family.query(pl.Expr("rodic(Who, jack)"))
Out[15]:
[{'Who': 'charles'}, {'Who': 'susanne'}]
In [16]:
family([
    "dedo(Dedo, Vnuk) :- otec(Dedo, Rodic), rodic(Rodic, Vnuk)",
])
In [20]:
family.query(pl.Expr("dedo(Kto, peter)"))
Out[20]:
[{'Kto': 'charles'}]
In [21]:
family.query(pl.Expr("dedo(charles, Vnuci)"))
Out[21]:
[{'Vnuci': 'peter'}, {'Vnuci': 'anne'}]
In [22]:
family.query(pl.Expr("dedo(tom, Vnuci)"))
Out[22]:
[{'Vnuci': 'kate'}]
In [23]:
family([
    "babka(Babka, Vnuk) :- matka(Babka, Rodic), rodic(Rodic, Vnuk)",
])
In [24]:
family([
    "surodenec(X, Y) :- rodic(R, X), rodic(R, Y)",
])
In [25]:
family.query(pl.Expr("surodenec(diana, S)"))
Out[25]:
[{'S': 'jane'},
 {'S': 'diana'},
 {'S': 'jack'},
 {'S': 'jane'},
 {'S': 'diana'},
 {'S': 'jack'}]
In [26]:
family([
    "surodenec_vlastny(X, Y) :- otec(O, X), otec(O, Y), matka(M, X), matka(M, Y)",
])
In [27]:
family.query(pl.Expr("surodenec_vlastny(diana, S)"))
Out[27]:
[{'S': 'jane'}, {'S': 'diana'}, {'S': 'jack'}]
In [28]:
family([
    "predok(Pred, Pot) :- rodic(Pred, Pot)",
    "predok(Pred, Pot) :- rodic(Pred, Pot1), predok(Pot1, Pot)"
])
In [29]:
family.query(pl.Expr("predok(Kto, kate)"))
Out[29]:
[{'Kto': 'luis'},
 {'Kto': 'anne'},
 {'Kto': 'tom'},
 {'Kto': 'jane'},
 {'Kto': 'charles'},
 {'Kto': 'susanne'}]
In [30]:
family.query(pl.Expr("predok(susanne, peter)"))
Out[30]:
['Yes']