Thun/implementations/Prolog/source/more-notes.txt

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