/*---------------------------------------------------------------

   CMSC 330 Project 6 - Maze Solver and SAT in Prolog

   NAME:

*/


%%%%%%%%%%%%%%%%%%%%%%
% Part 1 - Recursion %
%%%%%%%%%%%%%%%%%%%%%%

% ackermann - M and N are the two arguments, and R is the result. Cf http://mathworld.wolfram.com/AckermannFunction.html for the definition of the ackermann function

ackermann(M,N,R) :- fail.

% prod - R is product of entries in list L

prod(L,R) :- fail.

% fill - R is list of N copies of X

fill(N,X,R) :- fail.

% genN - R is value between 0 and N-1, in order

genN(N,R) :- fail.

% genXY - R is pair of values [X,Y] between 0 and N-1, in lexicographic order

genXY(N,R) :- fail.

% flat(L,R) - R is elements of L concatentated together, in order

flat(L,R) :- fail.

% is_prime(P) - P is an integer; predicate is true if P is prime.

is_prime(P) :- fail.

% in_lang(L) - L is a list of atoms a and b; predicate is true L is in the language accepted by the following CFG:
/*    
CFG 
S -> T | V
T -> UU
U -> aUb | ab
V -> aVb | aWb
W -> bWa | ba
*/

in_lang(L) :- fail.

%%%%%%%%%%%%%%%%%%%%%%%%
% Part 2 - Maze Solver %
%%%%%%%%%%%%%%%%%%%%%%%%

% stats(U,D,L,R) - number of cells w/ openings up, down, left, right
 
stats(U,D,L,R) :- fail.

% validPath(N,W) - W is weight of valid path N rounded to 4 decimal places

validPath(N,W) :- fail.

round4(X,Y) :- T1 is X*10000, T2 is round(T1), Y is T2/10000.

% findDistance(L) - L is list of coordinates of cells at distance D from start

findDistance(L) :- fail.

% solve - True if maze is solvable, fails otherwise.

solve :- fail.



%%%%%%%%%%%%%%%%
% Part 3 - SAT %
%%%%%%%%%%%%%%%%



% eval(F,A,R) - R is t if formula F evaluated with list of 
%                 true variables A is true, false otherwise

eval(F,A,R) :- fail.

% varsOf(F,R) - R is list of free variables in formula F

varsOf(F,R) :- fail.

% sat(F,R) - R is a list of true variables that satisfies F

sat(F,R) :- fail.

% Helper Function
% subset(L, R) - R is a subset of list L, with relative order preserved

subset([], []).
subset([H|T], [H|NewT]) :- subset(T, NewT).
subset([_|T], NewT) :- subset(T, NewT).

