mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-08 20:38:47 +00:00
68
samples/Prolog/calc.pl
Normal file
68
samples/Prolog/calc.pl
Normal file
@@ -0,0 +1,68 @@
|
||||
action_module(calculator) .
|
||||
|
||||
|
||||
%[-,-,d1,-] --push(D)--> [-,-,D,-] if mode(init)
|
||||
push(D) < -
|
||||
mode(init),
|
||||
deny([displayed(D1),mode(init)]),
|
||||
affirm([displayed(D),mode(cont)]).
|
||||
|
||||
%[-,-,D1,-] --push(D)--> [-,-,10*D1+D,-] if mode(cont)
|
||||
push(D) < -
|
||||
mode(cont),
|
||||
deny(displayed(D1)),
|
||||
New = 10*D1 + D,
|
||||
affirm(displayed(New)).
|
||||
|
||||
%[a,op,d,m] --push(clear)--> [0,nop,0,0]
|
||||
push(clear) < -
|
||||
deny([accumulator(A),op(O),displayed(D),memory(M),mode(X)]),
|
||||
affirm([accumulator(0),op(nop),displayed(0),memory(0),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(mem_rec)--> [a,op,m,m]
|
||||
push(mem_rec) < -
|
||||
memory(M),
|
||||
deny([displayed(D),mode(X)]),
|
||||
affirm([displayed(M),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(plus)--> [op(a,d),plus,d,m]
|
||||
push(plus) < -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(plus),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(minus)--> [op(a,d,minus,d,m]
|
||||
push(minus) lt -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(minus),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(times)--> [op(a,d),times,d,m]
|
||||
push(times) < -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(times),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(equal)--> [a,nop,op(a,d),m]
|
||||
push(equal) < -
|
||||
accumulator(A),
|
||||
deny([op(O),displayed(D),mode(X)]),
|
||||
eval(O,A,D,V),
|
||||
affirm([op(nop),displayed(V),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(mem_plus)--> [a,nop,v,plus(m,v)] where v=op(a,d)
|
||||
push(mem_plus) < -
|
||||
accumulator(A),
|
||||
deny([op(O),displayed(D),memory(M),mode(X)]),
|
||||
eval(O,A,D,V),
|
||||
eval(plus,M,V,V1),
|
||||
affirm([op(nop),displayed(V),memory(V1),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(plus_minus)--> [a,op,-d,m]
|
||||
push(clear) < -
|
||||
deny([displayed(D),mode(X)]),
|
||||
eval(minus,0,D,V),
|
||||
affirm([displayed(V),mode(init)]).
|
||||
Reference in New Issue
Block a user