DVOP PIT
Bc. Matěj Cajthaml — SSPŠ
©
Prozatím jsme neopužili ani jedno klíčové slovo. kocka, pes a muzeSiHratS
jsou naše fakta.
?-
:- něco jako if v jiných jazycích (implikace zprava
doleva)
, - logický součin (and, a zároveň, ...) - konjunkceMůže existovat více pravidel pro stejné fakta. Kontrolují se v pořadí, v jakém jsou zapsána v programu.
muzeSiHratS(yoko, X). — vypíše všechny kočky, se
kterými si může hrát Yoko
muzeSiHratS(yoko, X), muzeSiHratS(X, myska). — vypíše
všechny věci, se kterými si může hrát yoko, a které si mohou hrát s myškou
'tohle je atom');, :-, ,,
., ...)
[])a(yoko)b(yoko, X)c(yoko, X, [A, yoko]), — logický součin, and; — logický součet, or, menší priorita než ,
:- — implikace, if= — unifikace, equalsis — vyhodnocení aritmetiky na pravé straně a unifikace do
levé
\= — nelze unifikovat=:= — aritmetické porovnáníProlog nemá návratové hodnoty. Jak se tedy vrací výsledek?
=+, -, *, /=, \=, <, >, <=,
>=
writenl vypíše konec řádkusqrtsqrt(4, X)betweenbetween(1, 10, X)Pro výstup používejte proměnnou X.
Sepište program, který znásobí dvě čísla.
Sepište program, který umocní číslo na druhou.
Sepište program, který získá délku úsečky z následujícího zápisu:
delka(usecka(bod(X1, Y1), bod(X2, Y2)), D)
Sepište program, který umocní číslo na libovolnou mocninu.
Sepište program, který zjistí, jestli body tvoří obdelník.
jeObdelnik(bod(X1, Y1), bod(X2, Y2),
bod(X3, Y3), bod(X4, Y4))
Body postupně: levý dolní, levý horní, pravý horní, pravý dolní.
Sepište program, který vypočítá faktoriál čísla $n$.
Sepište program, který vypočítá $n$-tý člen Fibonacciho posloupnosti.
$\text{fib}(0) = 0$
$\text{fib}(1) = 1$
$\text{fib}(n) = \text{fib}(n-1) + \text{fib}(n-2)$
[ 1, 2, 3, [ 4, 5 ], 'a', 'b' ]a([A|T]) získáme:A — první prvekT — zbytek jako lista([_|T]) získáme:T — zbytek jako list
Implementujte následující operace s listy:
length(+List, -Length)reverse(+List, -Reversed)count(+List, +Element, -Count)remove(+List, +Element, -Without)removeAll(+List, +Element, -Without)removeDuplicates(+List, -Without)insert(+List, +Element, +Index, -With)isSorted(+List)concat(+List1, +List2, -Concat)Implementujte program, který získá číslo $n$ a pro něj vrátí seznam prvků $[fib(0), fib(1), \dots, fib(n)]$.
!
Zjistěte, jaký je rozdíl mezi červeným a zeleným řezem.
Napište predikát not, který bude fungovat jako negace.
Graf bude reprezentován strukturou graph(Vertices, Edges), kde Edges je
seznam hran ve tvaru [U, V]
Implementujte následující predikáty:
edge(+Graph, +U, +V) — existuje hrana mezi vrcholy U a V?neighbours(+Graph, +U, -Res) — sousedé vrcholu Upath(+Graph, +U, +V) — existuje cesta mezi vrcholy U a V?bfs a dfs — prohledávání do šířky a do hloubky*