====== Úlohy předmětu FLP ======
( [[courses:a4b33flp:2015::start | domů]] | [[lectures | přednášky]] | [[tutorials | cvičení]] | úlohy )
===== Semestrální úlohy ===== * **Scheme** - [[..:scheme_ukoly#zadani_1_ukolu_ze_schememaze_robot_simulation|Maze Robot Simulation]] - [[http://cw.felk.cvut.cz/courses/a4b33flp/task.php?task=hex_population_evaluator|Population Evaluator]] - [[http://cw.felk.cvut.cz/courses/a4b33flp/task.php?task=hex_automatic_code_synthesis|Automatic Code Synthesis]] * **Prolog** - [[prolog_ukol1|British Royal Family]] - [[prolog_ukol2|Blind Clause Search]] ===== Dobrovolné domácí úlohy ===== ==== Vlastní implementace "select/3" ==== my_select(H, [H|T], T). my_select(X, [H|T], [H|R]) :- my_select(X, T, R). ==== Všechny proměnné termu ==== //Úkol:// Extract variables from a structured term: ?- term_vars(f(a,X,g(c,h(Y)),z), V). V=[X,Y]. //Řešení:// **1)** Pokud je term proměnnou, vrať seznam té jedné proměnné. term_vars(X, [X]) :- var(X), !. **2)** Pokud je term konstantním nebo funkčním symbolem, vrať proměnné ze všech jeho argumentů. term_vars(X, Vars) :- X =.. [_Pred|Args], argsvars(Args,Vars). **3)** Proměnné ze seznamu argumentů: Spoj všechny proměnné v hlavě (která může být složeným termem, proto použijeme ''termvars'') se všemi proměnnými v ocase (pomocí rekurze na ''args_vars''). args_vars([],[]). args_vars([H|T], Out) :- termvars(H, HVars), argsvars(T, Tvars), append(HVars, Tvars, Out). ==== Maticové násobení ==== //Úkol:// Naprogramujte maticové násobení ''mat_prod/3'': ?- mat_prod([[1,2],[3,4]], [[0,1],[2,3]], X). X = [[4,7],[8,15]]. //Tip:// Nejdříve nadefinujte a použijte predikát ''column/3'': ?- column([[1,2,3],[4,5,6]], Col, Rest). Col = [1,4], Rest = [[2,3],[4,5]]. //Řešení:// % Slices a column from a matrix column([], [], []). column([[H|Row]|RowTail], [H|Col], [Row|RowRest]) :- column(RowTail, Col, RowRest). % Scalar product of two vectors sca_prod([], [], 0). sca_prod([H1|T1],[H2|T2], Z) :- sca_prod(T1, T2, Y), Z is Y + H1 * H2. % Multiplies a matrix and a single row row_mult(_, List, []) :- \+ (member(X, List), X \= []), !. row_mult(Row, Matrix, [E|Rest]) :- column(Matrix, Col, MatRst), sca_prod(Row, Col, E), row_mult(Row, MatRst, Rest). % Matrix multiplication mat_mult([], _, []). mat_mult([Row|Rows], Matrix, [Mult|Rest]) :- row_mult(Row, Matrix, Mult), mat_mult(Rows, Matrix, Rest). ==== DFS s cestou ==== append_successors(City, Open, NewOpen) :- findall(Succ, w(City, Succ), List), append(Open, List, NewOpen). bfs1(From, Goal) :- bfs1([From], Goal, []). bfs1([Goal|_], Goal, _). bfs1([From|Open], Goal, Closed) :- \+ member(From, Closed), !, append_successors(From, Open, NewOpen), bfs1(NewOpen, Goal, [From|Closed]). bfs1([_|Open], Goal, Closed) :- bfs1(Open, Goal, Closed). Adaptujte kód DFS výše tak, aby si zapamatoval cestu. Můžete použít již upravený predikát ''append_successors/3'' z [[http://pastebin.com/brYzUyms]].