Kdy a kde:
Za co je zapocet:
Napiste predikat spirala(+Matice,-Seznam). Tento predikat dostane za vstup ctvercovou matici (seznam, jehoz prvky jsou seznamy, reprezentujici radky matice), a jeho vystupem je seznam prvku matice v poradi podel spiraly zacinajici v levem hornim rohu matice a koncici ve stredu matice.
Napiste predikat mergesort(+Seznam,-Setrideny). Tento predikat dostane za vstup seznam cisel a setridi je algoritmem mergesort.
Napiste predikat piskvorka(+Stav,+Hrac,-StavPoTahu), ktery hraje piskvorky (4 v rade vyhravaji). Stav je obdelnikova matice (seznam seznamu) udavajici stav hry (prvky teto matice jsou x, o, nebo p pokud je policko prazdne). Hrac je hrac, ktery je na tahu (x nebo o). StavPoTahu by mel byt stav hry po provedeni nejlepsiho tahu (urceneho standardnim minimaxem -- efektivita reseni nehraje roli, nepozaduje se, aby pro jakoukoliv vetsi matici reseni dobehlo v rozumnem case).
Napiste predikat porovnejStrukturu(+Term1, +Term2), ktery uspeje, pokud jsou termy
Term1 a Term2 identicke az na prejmenovani volnych promennych -- tj. mel by mit stejnou
semantiku jako =@= v SWI-Prologu.-- tj. mel by mit skoro stejnou semantiku jako =@= v SWI-Prologu;
z nejakeho duvodu SWI-Prolog tvrdi, ze f(_X,_Y) nema stejnou strukturu jako f(_Y,_Z).
Mejme graf reprezentovany seznamy sousedu:
type Vrchol = Int type Graf = Array Vrchol [Vrchol]
Napiste funkci dfs::Graf->Vrchol->[Vrchol], ktera pro zadany graf G a jeho vrchol v vrati seznam vrcholu G v poradi podle pruchodu do hloubky z vrcholu v.
Obsah cviceni: