OSDN Git Service
Simon Forman [Thu, 22 Aug 2019 22:45:24 +0000 (15:45 -0700)]
Using partial deduction to inline literals, functions, and combinators.
Simon Forman [Wed, 21 Aug 2019 05:00:27 +0000 (22:00 -0700)]
minor cleanup
Simon Forman [Tue, 20 Aug 2019 05:02:06 +0000 (22:02 -0700)]
small func recognizes [] and [X].
Simon Forman [Sun, 18 Aug 2019 23:59:31 +0000 (16:59 -0700)]
Rename bar to korf and some docs.
Simon Forman [Sun, 18 Aug 2019 19:17:37 +0000 (12:17 -0700)]
minor cleanup
Simon Forman [Sun, 18 Aug 2019 18:47:48 +0000 (11:47 -0700)]
reintroduce definition of fork; it doesn't shadow func(fork, ...).
Simon Forman [Sun, 18 Aug 2019 18:09:36 +0000 (11:09 -0700)]
read child output after local thun/3
Simon Forman [Sun, 18 Aug 2019 17:53:25 +0000 (10:53 -0700)]
truly fork, sort of
Simon Forman [Tue, 13 Aug 2019 18:58:31 +0000 (11:58 -0700)]
minor cleanup
Simon Forman [Tue, 13 Aug 2019 18:51:41 +0000 (11:51 -0700)]
Minor cleanup.
Simon Forman [Tue, 13 Aug 2019 18:48:08 +0000 (11:48 -0700)]
Move DCG stuff to own file.
Simon Forman [Tue, 13 Aug 2019 18:29:49 +0000 (11:29 -0700)]
Parse ints; move line/{1,2} to main.pl.
Simon Forman [Tue, 13 Aug 2019 18:24:28 +0000 (11:24 -0700)]
Parse floating point numbers.
Simon Forman [Tue, 13 Aug 2019 05:29:09 +0000 (22:29 -0700)]
minor cleanup
Simon Forman [Tue, 13 Aug 2019 04:59:19 +0000 (21:59 -0700)]
minor cleanup
Simon Forman [Tue, 13 Aug 2019 04:29:26 +0000 (21:29 -0700)]
Numbers can be followed by space or [.
Simon Forman [Tue, 13 Aug 2019 04:13:11 +0000 (21:13 -0700)]
Parse negative numbers.
Simon Forman [Tue, 13 Aug 2019 04:08:35 +0000 (21:08 -0700)]
swapd function
Simon Forman [Tue, 13 Aug 2019 04:08:17 +0000 (21:08 -0700)]
assert_defs/1 got upset about not finding combo/5
Simon Forman [Tue, 13 Aug 2019 03:59:02 +0000 (20:59 -0700)]
Minor cleanup of the parser.
Simon Forman [Tue, 13 Aug 2019 03:12:35 +0000 (20:12 -0700)]
rework parser DCGs
Simon Forman [Tue, 13 Aug 2019 02:25:13 +0000 (19:25 -0700)]
Oops! Regression.
Simon Forman [Tue, 13 Aug 2019 02:17:15 +0000 (19:17 -0700)]
minor cleanup
Simon Forman [Tue, 13 Aug 2019 02:09:49 +0000 (19:09 -0700)]
swoncat and fiddling with parser.
Simon Forman [Mon, 12 Aug 2019 04:30:02 +0000 (21:30 -0700)]
Experiment with putting logic vars on the stack.
Simon Forman [Mon, 12 Aug 2019 03:45:49 +0000 (20:45 -0700)]
Remove a cut that sucked.
Simon Forman [Mon, 12 Aug 2019 02:57:28 +0000 (19:57 -0700)]
unstack, least_fraction
Simon Forman [Mon, 12 Aug 2019 02:41:11 +0000 (19:41 -0700)]
Copyright notices.
Simon Forman [Mon, 12 Aug 2019 02:35:05 +0000 (19:35 -0700)]
The sqrt/1 predicate wasn't working.
Simon Forman [Mon, 12 Aug 2019 01:45:57 +0000 (18:45 -0700)]
Multifile func/3.
Simon Forman [Mon, 12 Aug 2019 00:48:29 +0000 (17:48 -0700)]
Build math & comparision functions.
Simon Forman [Mon, 12 Aug 2019 00:00:38 +0000 (17:00 -0700)]
Clean up REPL formatting.
Simon Forman [Sun, 11 Aug 2019 22:12:56 +0000 (15:12 -0700)]
Don't shadow funcs and combos.
Simon Forman [Sun, 11 Aug 2019 21:56:20 +0000 (14:56 -0700)]
Don't shadow funcs & combos.
Simon Forman [Sun, 11 Aug 2019 21:51:13 +0000 (14:51 -0700)]
Extract mainloop to own file.
Simon Forman [Sun, 11 Aug 2019 05:21:57 +0000 (22:21 -0700)]
Use double-quoted string for codes.
Simon Forman [Sun, 11 Aug 2019 05:07:17 +0000 (22:07 -0700)]
cleanup old files
Simon Forman [Sun, 11 Aug 2019 05:03:44 +0000 (22:03 -0700)]
Build defs.pl from defs.txt.
Simon Forman [Sun, 11 Aug 2019 04:46:48 +0000 (21:46 -0700)]
build defs.pl
Simon Forman [Sun, 11 Aug 2019 04:45:59 +0000 (21:45 -0700)]
build defs.pl
Simon Forman [Sun, 11 Aug 2019 03:57:11 +0000 (20:57 -0700)]
Move parser to own file.
Simon Forman [Sun, 11 Aug 2019 03:42:48 +0000 (20:42 -0700)]
map combo
Simon Forman [Sun, 11 Aug 2019 03:12:41 +0000 (20:12 -0700)]
Bring in funcs and combos.
Simon Forman [Sun, 11 Aug 2019 03:06:12 +0000 (20:06 -0700)]
Omit Prolog toplevel.
Simon Forman [Sun, 11 Aug 2019 03:03:52 +0000 (20:03 -0700)]
Do not need thses files.
Simon Forman [Sun, 11 Aug 2019 02:57:00 +0000 (19:57 -0700)]
Fold in parser, main loop, and support.
Simon Forman [Sun, 11 Aug 2019 02:25:48 +0000 (19:25 -0700)]
Rename foo to thun.
Simon Forman [Sat, 10 Aug 2019 19:19:09 +0000 (12:19 -0700)]
Make a version for GNU Prolog compiler.
Simon Forman [Fri, 9 Aug 2019 23:58:34 +0000 (16:58 -0700)]
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.
Simon Forman [Fri, 9 Aug 2019 23:53:40 +0000 (16:53 -0700)]
Prevent definitions from shadowing functions.
Simon Forman [Fri, 9 Aug 2019 23:37:33 +0000 (16:37 -0700)]
Demo grow/shrink.
Simon Forman [Fri, 9 Aug 2019 16:28:15 +0000 (09:28 -0700)]
Some trailing whitespace or something.
Simon Forman [Fri, 9 Aug 2019 14:26:37 +0000 (07:26 -0700)]
A few more functions.
reverse, shift, shunt, take, split_at
Simon Forman [Thu, 8 Aug 2019 06:36:38 +0000 (23:36 -0700)]
merge
Simon Forman [Thu, 8 Aug 2019 06:28:28 +0000 (23:28 -0700)]
grow/shrink as DCGs.
Simon Forman [Wed, 7 Aug 2019 18:40:49 +0000 (11:40 -0700)]
Integer DCGs that work in both directions.
Simon Forman [Sun, 4 Aug 2019 16:28:01 +0000 (09:28 -0700)]
loop combinator handles ambiguity.
remove some old notes.
Simon Forman [Sun, 4 Aug 2019 02:02:24 +0000 (19:02 -0700)]
Move is_numerical() to joy.gui.utils.
Simon Forman [Sun, 4 Aug 2019 02:01:45 +0000 (19:01 -0700)]
Experiment in formatting stacks for output.
Tracing, sort of...
Simon Forman [Sun, 4 Aug 2019 02:01:00 +0000 (19:01 -0700)]
Minor refactor.
crbo/4 to to_fixed_point/3
Simon Forman [Sun, 4 Aug 2019 00:56:25 +0000 (17:56 -0700)]
Gnarly fun with metaprogramming.
Simon Forman [Sat, 3 Aug 2019 01:30:43 +0000 (18:30 -0700)]
Get the path separator right on windows.
It used to use: C:\Users\sforman/.joypy
which worked, but ew.
Simon Forman [Mon, 22 Jul 2019 17:25:34 +0000 (10:25 -0700)]
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?
Simon Forman [Mon, 22 Jul 2019 17:04:32 +0000 (10:04 -0700)]
Bits of formatting.
Simon Forman [Mon, 22 Jul 2019 01:48:11 +0000 (18:48 -0700)]
Minor cleanup.
Simon Forman [Mon, 22 Jul 2019 00:56:34 +0000 (17:56 -0700)]
Remove write_state/5.
Simon Forman [Mon, 22 Jul 2019 00:55:19 +0000 (17:55 -0700)]
Build a list of the moves taken.
Simon Forman [Mon, 22 Jul 2019 00:25:22 +0000 (17:25 -0700)]
Refactor a bit.
Simon Forman [Sun, 21 Jul 2019 21:13:48 +0000 (14:13 -0700)]
Assert definitions as they are read.
Instead of building a list then asserting them all after parsing.
Simon Forman [Sun, 21 Jul 2019 18:50:27 +0000 (11:50 -0700)]
Messing with TLA+ in Prolog.
Simon Forman [Sun, 21 Jul 2019 15:28:56 +0000 (08:28 -0700)]
Implement map combinator.
Simon Forman [Sun, 21 Jul 2019 14:32:20 +0000 (07:32 -0700)]
Tiny edits. Almost nothing.
Simon Forman [Sun, 21 Jul 2019 02:34:56 +0000 (19:34 -0700)]
Remove cuts from branch combinator.
Simon Forman [Sun, 21 Jul 2019 02:26:11 +0000 (19:26 -0700)]
Add mod, gcd, and hypot; term_expansion for math ops.
Simon Forman [Sun, 21 Jul 2019 00:36:58 +0000 (17:36 -0700)]
Fold try_both_branches/4 into branch combo.
Simon Forman [Sun, 21 Jul 2019 00:32:03 +0000 (17:32 -0700)]
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.)
Simon Forman [Sun, 21 Jul 2019 00:19:35 +0000 (17:19 -0700)]
WTF error handler.
Made it check that the unknown term really isn't a literal, definition, function, or combinator.
Simon Forman [Sat, 20 Jul 2019 23:57:19 +0000 (16:57 -0700)]
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.
Simon Forman [Sat, 20 Jul 2019 23:45:28 +0000 (16:45 -0700)]
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...
Simon Forman [Sat, 20 Jul 2019 23:38:48 +0000 (16:38 -0700)]
Handle exceptions in comparison ops.
You can't compare logic vars, so just bunt.
Simon Forman [Tue, 16 Jul 2019 16:53:48 +0000 (09:53 -0700)]
More readable genrec.
Explicit quoting is slightly more overhead but worth it I think to show what's going on more clearly.
Simon Forman [Tue, 16 Jul 2019 16:46:55 +0000 (09:46 -0700)]
A little helper function to see compiled expressions.
Example from ordered binary tree notebook:
?- sjc(tree_add_Ee, `pop swap rolldown rrest ccons`).
func(tree_add_Ee, [_, [_, _|C], A, B|D], [[A, B|C]|D]).
true .
Simon Forman [Tue, 16 Jul 2019 15:59:24 +0000 (08:59 -0700)]
Clear out CLP(FD) functions.
I like them but then you are constrained (pun intended) to only using integers. I'll probably bring them back at some point, either as an alternate implementation or their own commands.
Simon Forman [Tue, 16 Jul 2019 15:42:45 +0000 (08:42 -0700)]
Opps! Here's the implementation of bool.
Simon Forman [Tue, 16 Jul 2019 15:41:28 +0000 (08:41 -0700)]
Add bool function to mimic Python semantics.
Simon Forman [Tue, 16 Jul 2019 06:02:08 +0000 (23:02 -0700)]
Change comparison ops to not use CLP(FD).
Simon Forman [Tue, 16 Jul 2019 03:55:41 +0000 (20:55 -0700)]
Implement genrec combinator.
Simon Forman [Tue, 16 Jul 2019 03:55:11 +0000 (20:55 -0700)]
Minor cleanup of defs.
Simon Forman [Mon, 15 Jul 2019 23:11:49 +0000 (16:11 -0700)]
Move all definitions to defs.txt.
Simon Forman [Mon, 15 Jul 2019 23:01:59 +0000 (16:01 -0700)]
Retract previous definitions before asserting new ones.
Simon Forman [Mon, 15 Jul 2019 22:53:07 +0000 (15:53 -0700)]
Load definitions from a file.
This paves the way to regularize the defs between Python and Prolog (and and future other) implementations.
Simon Forman [Mon, 15 Jul 2019 22:50:22 +0000 (15:50 -0700)]
Very minor docs change.
Simon Forman [Mon, 15 Jul 2019 19:53:48 +0000 (12:53 -0700)]
Parse joy definitions from text.
This way a definitions file can be shared between Python Joy and Prolog Joy.
Simon Forman [Mon, 15 Jul 2019 19:28:01 +0000 (12:28 -0700)]
New combinator infrst == infra first
Three uses means it's time for a refactor.
Simon Forman [Mon, 15 Jul 2019 18:20:13 +0000 (11:20 -0700)]
nullary combinator as definition.
That eliminates all the recursive calls to thun/3 (outside of thun itself, which is tail recursive.) That means that this Joy interpreter is now fully CPS.
All state is contained in the stack and expression, nothing is hidden in the Prolog "call stack".
Simon Forman [Mon, 15 Jul 2019 06:02:10 +0000 (23:02 -0700)]
Infra as definition.
Simon Forman [Mon, 15 Jul 2019 05:48:18 +0000 (22:48 -0700)]
Reimplement app1 and app2 as definitions.
This eliminates three recursive calls to thun/3.
Simon Forman [Mon, 15 Jul 2019 04:58:20 +0000 (21:58 -0700)]
Got enough definitions, sort them.
Simon Forman [Mon, 15 Jul 2019 04:14:50 +0000 (21:14 -0700)]
Switch to symbolic math (from CLP(FD).)
A wee bit of error reporting of unknown terms.
New functions: pm plus-or-minus and neg negate; new combinator dupdip.
Simon Forman [Wed, 8 May 2019 06:23:53 +0000 (23:23 -0700)]
Docs on Start Up Sequence