Skip to content

Instantly share code, notes, and snippets.

@vsalbaba
Created April 28, 2009 15:50
Show Gist options
  • Save vsalbaba/103221 to your computer and use it in GitHub Desktop.
Save vsalbaba/103221 to your computer and use it in GitHub Desktop.
delta(q0,a,q1). delta(q0,a,q3). delta(q1,b,q0).
delta(q1,c,q1). delta(q2,a,q0). delta(q2,a,q1).
delta(q2,c,q3). delta(q3,b,q3). delta(q3,c,q2).
%% koncove stavy
final(q1). final(q2).
%% definice vypoctu KNA
comp(Q,nil,Q).
comp(Q,a(X),State) :- delta(Q,a,W), comp(W,X,State).
comp(Q,b(X),State) :- delta(Q,b,W), comp(W,X,State).
comp(Q,c(X),State) :- delta(Q,c,W), comp(W,X,State).
accepted(X) :- comp(q0, X, Y), final(Y).
%accepted(a(b(b(c(a(a(nil))))))).
%accepted(a(nil)).
add(+(X,0),X). add(+(0,X),X). mul(*(_,0),0).
mul(*(0,_),0). mul(*(1,X),X). mul(*(X,1),X).
minus(-(X,X), 0).
minus(-(X,0), X).
div(/(0, _), 0).
div(/(X,X), 1).
div(/(X,1), X).
simplify(+(X,Y),Z) :- simplify(X,CX), simplify(Y,CY), add(+(CX,CY),Z).
simplify(*(X,Y),Z) :- simplify(X,CX), simplify(Y,CY), mul(*(CX,CY),Z).
simplify(X,X).
simplify(/(X,Y), Z) :- simplify(X,CX), simplify(Y, CY), div(/(CX, CY), Z).
simplify(-(X,Y), Z) :- simplify(X,CX), simplify(Y, CY), minus(-(X,X), Z).
%simplify(x-x, X).
/*
simplify((x-x)/5, Result).
Result = (x-x)/5 ;
Result = 0 ;
false.
*/
%% priklad spojeni seznamu
spoj([],L2,L2).
spoj([X|L1],L2,[X|Y]) :- spoj(L1,L2,Y).
reverse([], []).
reverse([X], [X]).
reverse([X,Y], [Y, X]).
reverse([X|L], Z) :- reverse(L, Y), spoj(Y, [X], Z).
%reverse([a, b, c, d], X).
revspoj([], L2, L2).
revspoj([X], L2, [X|L2]).
revspoj([X|L1], L2, Z) :- revspoj(L1, [X|L2], Z).
%dodelat 13, 14, 15, 16.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment