Load definitions from a file.

This paves the way to regularize the defs between Python and Prolog (and and future other) implementations.
This commit is contained in:
Simon Forman 2019-07-15 15:53:07 -07:00
parent 0359cd64c7
commit 4fefc04da3
2 changed files with 44 additions and 12 deletions

31
thun/defs.txt Normal file
View File

@ -0,0 +1,31 @@
++ == 1 +
anamorphism == [pop []] swap [dip swons] genrec
average == [sum 1.0 *] [size] cleave /
binary == unary popd
cleave == fork [popd] dip
codireco == cons dip rest cons
dinfrirst == dip infra first
disenstacken == ? [uncons ?] loop pop
down_to_zero == [0 >] [dup --] while
dupdipd == dup dipd
enstacken == stack [clear] dip
flatten == [] swap [concat] step
fork == [i] app2
gcd == 1 [tuck modulus dup 0 >] loop pop
make_generator == [codireco] ccons
of == swap at
pam == [i] map
primrec == [i] genrec
product == 1 swap [*] step
quoted == [unit] dip
range == [0 <=] [1 - dup] anamorphism
range_to_zero == unit [down_to_zero] infra
run == [] swap infra
size == 0 swap [pop ++] step
sqr == dup *
step_zero == 0 roll> step
ternary == binary popd
unary == nullary popd
unquoted == [i] dip
while == swap [nullary] cons dup dipd concat loop
x == dup i

View File

@ -20,6 +20,7 @@
:- use_module(library(dcg/basics)).
:- op(990, xfy, ). % for Joy definitions.
:- dynamic func/3.
:- dynamic '≡'/2.
/*
An entry point.
@ -148,24 +149,18 @@ app1 ≡ [grba, infrst].
app2 [[grba, swap, grba, swap], dip, [infrst], cons, ii].
at [drop, first].
b [[i], dip, i].
binary [unary, popd].
ccons [cons, cons].
cleave [fork, [popd], dip].
codireco [cons, dip, rest, cons].
drop [[rest], times].
dupd [[dup], dip].
dupdd [[dup], dipd].
fork [[i], app2].
fourth [rest, third].
grba [[stack, popd], dip].
ifte [[nullary], dipd, swap, branch].
ii [[dip], dupdip, i].
infra [swons, swaack, [i], dip, swaack].
infrst [infra, first].
make_generator [[codireco], ccons].
neg [0, swap, -].
nullary [stack, popd, [i], infrst].
of [swap, at].
pm [[+], [-], cleave, popdd].
popd [[pop], dip].
popdd [[pop], dipd].
@ -175,17 +170,11 @@ popopdd ≡ [[popop], dipd].
product [1, swap, [*], step].
rrest [rest, rest].
second [rest, first].
size [0, swap, [pop, 1, +], step].
sqr [dup, *].
sum [0, swap, [+], step].
swons [swap, cons].
third [rest, second].
trinary [binary, popd].
unary [nullary, popd].
unit [[], cons].
unswons [uncons, swap].
while [swap, [nullary], cons, dup, dipd, concat, loop].
x [dup, i].
/*
@ -239,3 +228,15 @@ contracto, [Def] --> {Def ≡ Body}, Body.
% phrase(expando, ExprIn, ExprOut).
read_defs(DefsFile, Defs) :-
read_file_to_codes(DefsFile, Codes, []),
phrase(joy_defs(Defs), Codes).
assert_defs(DefsFile) :-
read_defs(DefsFile, Defs),
forall(member(Def, Defs), assertz(Def)).
:- assert_defs("defs.txt").
% working_directory(_, 'c:/users/sforman/desktop/src/joypy/thun/'),