Experiment with putting logic vars on the stack.

This commit is contained in:
Simon Forman 2019-08-11 21:30:02 -07:00
parent 222c472449
commit 2e1f598aa2
4 changed files with 7 additions and 2 deletions

View File

@ -28,6 +28,7 @@ def(grba,[[stack,popd],dip]).
def(hypot,[[sqr],ii,+,sqrt]).
def(ifte,[[nullary],dipd,swap,branch]).
def(ii,[[dip],dupdip,i]).
def(infer,[thunk,dup,rollup,infra]).
def(infra,[swons,swaack,[i],dip,swaack]).
def(infrst,[infra,first]).
def(least_fraction,[dup,[gcd],infra,[div],concat,map]).

View File

@ -30,6 +30,7 @@ grba == [stack popd] dip
hypot == [sqr] ii + sqrt
ifte == [nullary] dipd swap branch
ii == [dip] dupdip i
infer == thunk dup rollup infra
infra == swons swaack [i] dip swaack
infrst == infra first
least_fraction == dup [gcd] infra [div] concat map

View File

@ -100,8 +100,10 @@ format_joy([T]) --> format_term(T), !.
format_joy([T|S]) --> format_term(T), " ", format_joy(S).
format_joy([]) --> [].
format_term(N) --> {number(N), number_codes(N, Codes)}, Codes.
format_term(A) --> { atom(A), atom_codes(A, Codes)}, Codes.
format_term(N) --> {number(N), number_codes(N, Codes)}, Codes.
format_term(A) --> { atom(A), atom_codes(A, Codes)}, Codes.
format_term(V) --> { var(V), write_to_codes(Codes, V)}, Codes.
format_term([A|As]) --> "[", format_joy([A|As]), "]".
format_term(F) --> { write_to_codes(Codes, F)}, Codes.

View File

@ -91,6 +91,7 @@ func(clear, _ , []).
func(first, [[X|_]|S], [X|S]).
func(rest, [[_|X]|S], [X|S]).
func(unit, [X|S], [[X]|S]).
func(thunk, S , [X|S]).
func(rolldown, [A, B, C|S], [B, C, A|S]).
func(dupd, [A, B|S], [A, B, B|S]).