Commit Graph

440 Commits

Author SHA1 Message Date
Simon Forman cd60816429 Build math & comparision functions. 2019-08-11 17:48:29 -07:00
Simon Forman ab454375c0 Clean up REPL formatting. 2019-08-11 17:00:38 -07:00
Simon Forman 4d33f32674 Don't shadow funcs and combos. 2019-08-11 15:12:56 -07:00
Simon Forman adf0e96f84 Don't shadow funcs & combos. 2019-08-11 14:56:20 -07:00
Simon Forman 9e180e8173 Extract mainloop to own file. 2019-08-11 14:51:13 -07:00
Simon Forman 6bc1b5ec8b Use double-quoted string for codes. 2019-08-10 22:21:57 -07:00
Simon Forman f6705f3fa0 cleanup old files 2019-08-10 22:07:17 -07:00
Simon Forman e49b0b70cb Build defs.pl from defs.txt. 2019-08-10 22:03:44 -07:00
Simon Forman 90bccece6a build defs.pl 2019-08-10 21:46:48 -07:00
Simon Forman 731c59088e build defs.pl 2019-08-10 21:45:59 -07:00
Simon Forman 32e77f6d73 Move parser to own file. 2019-08-10 20:57:11 -07:00
Simon Forman 3af9e7e174 map combo 2019-08-10 20:42:48 -07:00
Simon Forman c8c1df8d88 Bring in funcs and combos. 2019-08-10 20:12:41 -07:00
Simon Forman ab587beaa9 Omit Prolog toplevel. 2019-08-10 20:06:12 -07:00
Simon Forman dc5737eb45 Do not need thses files. 2019-08-10 20:03:52 -07:00
Simon Forman 1d31ca99c3 Fold in parser, main loop, and support. 2019-08-10 19:57:00 -07:00
Simon Forman fd5f54992a Rename foo to thun. 2019-08-10 19:25:48 -07:00
Simon Forman 1ce9544bcc Make a version for GNU Prolog compiler. 2019-08-10 12:19:09 -07:00
Simon Forman 10a23c5c68 Also don't shadow combinators.
(I realized that the way defs are parsed now means that each def
(but the last) is first asserted with the wrong definition expression
(it includes the symbol of the following definition at the end) and
then the parser figures out that there's another defintion following
and re-asserts the correct expression.  It would be nice to fix that
but it's kind of a PITA.  I used to build a list of definitions and
then assert them all at the end.  For now there aren't enough defs to
justify the extra work.
2019-08-09 16:58:34 -07:00
Simon Forman cbf2af18e5 Prevent definitions from shadowing functions. 2019-08-09 16:53:40 -07:00
Simon Forman 49491bceef Demo grow/shrink. 2019-08-09 16:37:33 -07:00
Simon Forman df5ddb8ad9 Some trailing whitespace or something. 2019-08-09 09:28:15 -07:00
Simon Forman b9ae00cecb A few more functions.
reverse, shift, shunt, take, split_at
2019-08-09 07:26:37 -07:00
Simon Forman 712f0a0267 merge 2019-08-07 23:36:38 -07:00
Simon Forman 976b8302be grow/shrink as DCGs. 2019-08-07 23:28:28 -07:00
Simon Forman 4ea77cf1be Integer DCGs that work in both directions. 2019-08-07 11:40:49 -07:00
Simon Forman 0048ee212d loop combinator handles ambiguity.
remove some old notes.
2019-08-04 09:28:01 -07:00
Simon Forman a3f863ff18 Move is_numerical() to joy.gui.utils. 2019-08-03 19:02:24 -07:00
Simon Forman 177d6cd433 Experiment in formatting stacks for output.
Tracing, sort of...
2019-08-03 19:01:45 -07:00
Simon Forman 3b1a89d1c4 Minor refactor.
crbo/4 to to_fixed_point/3
2019-08-03 19:01:00 -07:00
Simon Forman cb0078f3bc Gnarly fun with metaprogramming. 2019-08-03 17:56:25 -07:00
Simon Forman 6a94c12b9b Get the path separator right on windows.
It used to use: C:\Users\sforman/.joypy

which worked, but ew.
2019-08-02 18:30:43 -07:00
Simon Forman 2ba9242b76 Comparisions are literals too.
Also a bunch of reformatting.

Maybe I can modify the term_expansion/2 to also write the literal/1 clauses for math and comps?
2019-07-22 10:25:34 -07:00
Simon Forman 97a99ac3c4 Bits of formatting. 2019-07-22 10:04:32 -07:00
Simon Forman df94c8feed Minor cleanup. 2019-07-21 18:48:11 -07:00
Simon Forman 66d8a3be47 Remove write_state/5. 2019-07-21 17:56:34 -07:00
Simon Forman 6818abb3ce Build a list of the moves taken. 2019-07-21 17:55:19 -07:00
Simon Forman 523cb3913b Refactor a bit. 2019-07-21 17:25:22 -07:00
Simon Forman c1442945a6 Assert definitions as they are read.
Instead of building a list then asserting them all after parsing.
2019-07-21 14:13:48 -07:00
Simon Forman 482ac3023e Messing with TLA+ in Prolog. 2019-07-21 11:50:27 -07:00
Simon Forman 32d5953f29 Implement map combinator. 2019-07-21 08:28:56 -07:00
Simon Forman 84a2de7790 Tiny edits. Almost nothing. 2019-07-21 07:32:20 -07:00
Simon Forman 1b5d1c0b82 Remove cuts from branch combinator. 2019-07-20 19:34:56 -07:00
Simon Forman 206f49598e Add mod, gcd, and hypot; term_expansion for math ops. 2019-07-20 19:26:11 -07:00
Simon Forman ae769d2341 Fold try_both_branches/4 into branch combo. 2019-07-20 17:36:58 -07:00
Simon Forman 230288c02c Replace ? with plain ol' def/2.
As much fun as it was using ? as an operator, now that all the defs live in a text file you don't see it in the Prolog code anymore.

This way I get to use sweet sweet ASCII (except for the ? symbol in the copyright notice.)
2019-07-20 17:32:03 -07:00
Simon Forman 7354911d05 WTF error handler.
Made it check that the unknown term really isn't a literal, definition, function, or combinator.
2019-07-20 17:19:35 -07:00
Simon Forman 2a66e7fb47 If I comment out the WTF handler...
...then the branch combinator works as intended.  (Although the constraint-based stuff was also cool, it would have captured information from the comparison.)


?- joy(`[32 >] [++] [--] ifte`, Si, So).
Si = [_6598|_6600],
So = [_6598+1|_6600] ;
Si = [_6598|_6600],
So = [_6598-1|_6600] ;
false.

?- sjc(hmm, `[32 >] [++] [--] ifte`).
func(hmm, [A|B], [A+1|B]).
true ;
func(hmm, [A|B], [A-1|B]).
true ;
false.
2019-07-20 16:57:19 -07:00
Simon Forman 714bf2cab6 Try to handle expressions in branch combinator.
If the expression isn't 'true' or 'false' atoms then we assume it's a comparison expression and try to check its truth value.

If this fails then it will try both branches, to allow for e.g. compilation.  THis almost works, but there's a choice point or something that gets hit before it tries the false path,

?- joy(` [32 >] [++] [--] ifte`, Si, So).
Si = [_2076|_2078],
So = [_2076+1|_2078] ;
wtf? +
Si = [_2076|_2078],
So = [[+], 1, _2076|_2078] ;
Si = [_2076|_2078],
So = [_2076-1|_2078] ;
wtf? -
Si = [_2076|_2078],
So = [[-], 1, _2076|_2078] ;
wtf? branch
Si = [_2076|_2078],
So = [[branch], [++], [--], _2076>32, _2076|_2078] ;
wtf? swap
Si = [_2076|_2078],
So = [[swap, branch], [--], [++], _2076>32, _2076|_2078] ;
wtf? first
Si = [_2076|_2078],
So = [[first, [++], [--], swap, branch], [_2076>32|_2078], _2076|_2078]


etc...
2019-07-20 16:45:28 -07:00
Simon Forman c676dce2f9 Handle exceptions in comparison ops.
You can't compare logic vars, so just bunt.
2019-07-20 16:38:48 -07:00