Files
ui-cviko1/notebook/cviko4.ipynb
2025-03-12 16:12:25 +01:00

14 KiB

In [3]:
my_string = "bbaccbabba"
In [4]:
print(my_string)
change = True
while change:
    change = False
    #Rule1
    if my_string.find("ba") != -1:
        my_string = my_string.replace("ba", "ab", 1)
        print("Rule1: ", my_string)
        change = True
    if my_string.find("ca") != -1:
        my_string = my_string.replace("ca", "ac", 1)
        print("Rule2: ", my_string)
        change = True
    if my_string.find("cb") != -1:
        my_string = my_string.replace("cb", "bc", 1)
        print("Rule3: ", my_string)
        change = True
bbaccbabba
Rule1:  babccbabba
Rule3:  babcbcabba
Rule1:  abbcbcabba
Rule2:  abbcbacbba
Rule3:  abbbcacbba
Rule1:  abbbcacbab
Rule2:  abbbaccbab
Rule3:  abbbacbcab
Rule1:  abbabcbcab
Rule2:  abbabcbacb
Rule3:  abbabbcacb
Rule1:  ababbbcacb
Rule2:  ababbbaccb
Rule3:  ababbbacbc
Rule1:  aabbbbacbc
Rule3:  aabbbbabcc
Rule1:  aabbbabbcc
Rule1:  aabbabbbcc
Rule1:  aababbbbcc
Rule1:  aaabbbbbcc
In [5]:
%pip install pytholog
Collecting pytholog
  Downloading pytholog-2.4.1-py3-none-any.whl.metadata (12 kB)
Collecting more-itertools (from pytholog)
  Downloading more_itertools-10.6.0-py3-none-any.whl.metadata (37 kB)
Downloading pytholog-2.4.1-py3-none-any.whl (16 kB)
Downloading more_itertools-10.6.0-py3-none-any.whl (63 kB)
Installing collected packages: more-itertools, pytholog
Successfully installed more-itertools-10.6.0 pytholog-2.4.1

[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 [7]:
import pytholog as pl
In [15]:
new_base = pl.KnowledgeBase("persons")
new_base([
    "man(john)",
    "man(jack)",
    "woman(alice)",
    "father(jack, john)",
    "father(jack, alice)"
])
In [16]:
# Je Jack muž?
new_base.query(pl.Expr("man(jack)"))
Out[16]:
['Yes']
In [17]:
# -||- John
new_base.query(pl.Expr("man(john)"))
Out[17]:
['Yes']
In [18]:
# -||- Tom
new_base.query(pl.Expr("man(tom)"))
Out[18]:
['No']
In [19]:
# Je Jack otcom Alice?
new_base.query(pl.Expr("father(jack, alice)"))
Out[19]:
['Yes']
In [20]:
# -||- Anna
new_base.query(pl.Expr("father(jack, anna)"))
Out[20]:
['No']
In [22]:
# Kto je muž?
new_base.query(pl.Expr("man(X)"))
Out[22]:
[{'X': 'jack'}, {'X': 'john'}]
In [24]:
# Kto je otcom Alice?
new_base.query(pl.Expr("father(Who, alice)"))
Out[24]:
[{'Who': 'jack'}]
In [27]:
# Deti Johna
new_base.query(pl.Expr("father(jack, X)"))
Out[27]:
[{'X': 'john'}, {'X': 'alice'}]
In [29]:
new_base = pl.KnowledgeBase("persons")
new_base(
    [   "father(juraj,jozef)",
        "father(jozef,jana)",
        "father(jozef,zuzana)",
        "father(michal,katka)",
        "mother(dana,jana)",
        "mother(dana,zuzana)",
        "mother(dana,katka)",
        "mother(jana,jano)",
        "man(juraj)",
        "man(jozef)",
        "man(michal)",
        "man(jano)",
        "man(miro)",
        "woman(dana)",
        "woman(jana)",
        "woman(zuzana)",
        "woman(katka)"
    ]
)
In [30]:
# Je Jano muž?
new_base.query(pl.Expr("man(jano)"))
Out[30]:
['Yes']
In [32]:
# Kto je otcom Zuzany?
new_base.query(pl.Expr("father(X, zuzana)"))
Out[32]:
[{'X': 'jozef'}]
In [33]:
# Deti Dany
new_base.query(pl.Expr("mother(dana, X)"))
Out[33]:
[{'X': 'jana'}, {'X': 'zuzana'}, {'X': 'katka'}]
In [34]:
# Kto sú ženy?
new_base.query(pl.Expr("woman(X)"))
Out[34]:
[{'X': 'dana'}, {'X': 'jana'}, {'X': 'katka'}, {'X': 'zuzana'}]
In [47]:
new_base = pl.KnowledgeBase("loves")
new_base(["likes(peter,jana)",
        "likes(fero,maria)",
        "likes(jozo,jana)",
        "likes(peter,maria)",
        "likes(jozo,maria)",
        "likes(peter,pavla)",
        "likes(jozo,pavla)",
        "likes(peter,beer)",
        "likes(fero,beer)",
        "likes(peter,vine)",
        "likes(maria,vine)",
        "likes(pavla,beer)",
        "likes(jana,beer)",
        "likes(pavla,peter)",
        "likes(jana,fero)",
        "girl(jana)",
        "girl(pavla)",
        "girl(maria)",
        "boy(peter)",
        "boy(fero)",
        "boy(jozo)"])
In [48]:
# Komu sa páči Pavla?
new_base.query(pl.Expr("likes(Who, pavla)"))
Out[48]:
[{'Who': 'jozo'}, {'Who': 'peter'}]
In [49]:
# Kto a čo sa páči Pavle?
new_base.query(pl.Expr("likes(pavla, X)"))
Out[49]:
[{'X': 'beer'}, {'X': 'peter'}]
In [50]:
# Kto a čo sa páči Petrovi?
new_base.query(pl.Expr("likes(peter, X)"))
Out[50]:
[{'X': 'jana'}, {'X': 'maria'}, {'X': 'pavla'}, {'X': 'beer'}, {'X': 'vine'}]
In [51]:
# Kto a čo sa páči Ferovi?
new_base.query(pl.Expr("likes(fero, X)"))
Out[51]:
[{'X': 'maria'}, {'X': 'beer'}]
In [52]:
# Pridať pravidlo: Jožo má rád dievčatá, ktoré majú radi pivo.
new_base(["likes(jozo, X) :- girl(X), likes(X, beer)"])
In [53]:
# Koho má rad Jožo?
new_base.query(pl.Expr("likes(jozo, D)"))
Out[53]:
[{'D': 'jana'}, {'D': 'maria'}, {'D': 'pavla'}, {'D': 'jana'}, {'D': 'pavla'}]
In [57]:
new_base.clear_cache()
In [61]:
# Pridať pravidlo: Fero má rád divčatá, ktoré majú radi jeho.
new_base(["likes(fero, X) :- girl(X), likes(X, fero)"])
In [63]:
# Kto a čo sa páči Ferovi?
new_base.query(pl.Expr("likes(fero, Dievca)"))
Out[63]:
[{'Dievca': 'maria'}, {'Dievca': 'beer'}, {'Dievca': 'jana'}]
In [64]:
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 [65]:
# Kto je matka Petra?
family.query(pl.Expr("parents(Who, _, peter)"))
Out[65]:
[{'Who': 'jane'}]
In [66]:
# Kto je otec Petra?
family.query(pl.Expr("parents(_, Who, peter)"))
Out[66]:
[{'Who': 'tom'}]
In [ ]: