Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. :- initialization(main).
  2. eval1(Ctx,L,Ctx_,V) :- print_term(L,[]),nl,eval(Ctx,L,Ctx_,V),!.
  3. eval(Ctx,["set",X,E],[X=V|Ctx_],null) :- eval1(Ctx, E, Ctx_, V).
  4. eval(Ctx,["get",X],Ctx,V) :- member(X=V, Ctx).
  5. eval(Ctx,["+",E1,E2],Ctx2,V) :- eval1(Ctx,E1,Ctx1,V1),eval1(Ctx1,E2,Ctx2,V2), V is V1 + V2.
  6. eval(Ctx,["=",E1,E2],Ctx2,V) :- eval1(Ctx,E1,Ctx1,V1),eval1(Ctx1,E2,Ctx2,V2), (V1 = V2,V=true;V=false).
  7. eval(Ctx,["until",E1,E2],Ctx3,null) :-
  8. eval1(Ctx,E1,Ctx1,V1),
  9. (V1=true,Ctx3=Ctx1; eval1(Ctx1,E2,Ctx2,_),eval1(Ctx2,["until",E1,E2],Ctx3,_)).
  10. eval(Ctx,["step"|[]],Ctx,null).
  11. eval(Ctx,["step"|[E1]],Ctx1,V) :- eval1(Ctx,E1,Ctx1,V).
  12. eval(Ctx,["step"|[E1|Es]],Ctx2,V) :- eval1(Ctx,E1,Ctx1,_),eval1(Ctx1,["step"|Es],Ctx2,V).
  13. eval(Ctx,V,Ctx,V).
  14.  
  15. main :-
  16. Source = ["step",
  17. ["set", "i", 10],
  18. ["set", "sum", 0],
  19. ["until", ["=", ["get", "i"], 0], [
  20. "step",
  21. ["set", "sum", ["+", ["get", "sum"], ["get", "i"]]],
  22. ["set", "i", ["+", ["get", "i"], -1]]
  23. ]],
  24. ["get", "sum"]
  25. ],
  26. eval1([],Source,Ctx,V),writeln(V),halt.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement