114 lines
2.1 KiB
Plaintext
114 lines
2.1 KiB
Plaintext
?- gronk("fn", `stackd`).
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
return (v1, ((), stack)), expression, dictionary
|
|
|
|
using the func/3
|
|
|
|
func(stackd, [A|B], [A, list(B)|B]).
|
|
|
|
|
|
However, compiling with
|
|
|
|
gronk_fn_list([list(Body), symbol(dip)|Js], ...
|
|
|
|
we get
|
|
|
|
?- gronk("fn", `stackd`).
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
stack = (stack, stack)
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
|
|
What would "[dup] cons dip" compile to?
|
|
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return (v2, (v1, (v1, stack))), expression, dictionary
|
|
|
|
E.g.:
|
|
|
|
?- sjc(fn, `[dup] cons dip`).
|
|
func(fn, [B, A|C], [A, B, B|C]).
|
|
true .
|
|
|
|
Hmm...
|
|
|
|
|
|
|
|
/*
|
|
?- gronk("fn", `[+] step`).
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(s1, (i1, stack)) = stack
|
|
while s1:
|
|
(i2, s1) = s1
|
|
i1 = i1 + i2
|
|
return (i1, stack), expression, dictionary
|
|
|
|
|
|
So just the above works great, but initializing it with a zero leads to
|
|
BS:
|
|
|
|
?- gronk("fn", `0 swap [+] step`).
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(s1, stack) = stack
|
|
while s1:
|
|
(i1, s1) = s1
|
|
0 = 0 + i1
|
|
return (0, stack), expression, dictionary
|
|
|
|
|
|
We want something like this:
|
|
|
|
def fn(stack, expression, dictionary):
|
|
(s1, stack) = stack
|
|
v1 = 0
|
|
while s1:
|
|
(i1, s1) = s1
|
|
v1 = v1 + i1
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
Hmmm....
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
?- gronk("swaack", `swaack`).
|
|
|
|
def swaack(stack, expression, dictionary):
|
|
(s1, stack) = stack
|
|
stack = (stack, s1)
|
|
return stack, expression, dictionary
|
|
|
|
true.
|
|
|
|
?- gronk("swaack", `[swaack] dip`).
|
|
|
|
def swaack(stack, expression, dictionary):
|
|
(v1, (s1, stack)) = stack
|
|
stack = (stack, s1)
|
|
return (v1, stack), expression, dictionary
|
|
|
|
true.
|
|
|
|
|
|
*/
|
|
|
|
['C:/Users/sforman/Desktop/src/PROLOG/Thun/source/thun.pl'].
|
|
['C:/Users/sforman/Desktop/src/PROLOG/Thun/source/joy2py.pl'].
|
|
|
|
@command:editor.action.selectToBracket |