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?
=
+
, -
, *
, /
=
, \=
, <
, >
, <=
,
>=
write
nl
vypíše konec řádkusqrt
sqrt(4, X)
between
between(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 U
path(+Graph, +U, +V)
— existuje cesta mezi vrcholy U
a V
?bfs
a dfs
— prohledávání do šířky a do hloubky*