Commit Graph
100 Commits
Author SHA1 Message Date
Simon Forman 5dd13ba8c6 Rebuilt MANIFEST file. 2019-05-06 19:08:48 -07:00
Simon Forman f236be510a Use ~/.thun instead of ~/.joypy as default JOY_HOME.
And some copyright notices I missed.
2019-05-06 13:54:55 -07:00
Simon Forman b3a79df9a9 Well, that seems to work.
python -m joy.vui

With PyGame installed that starts the "VUI" on my system.  Neat.

The initial joy home (~/.joypy) is not quite compatible with the one set up by the GUI code.  One simple way to fix that would be to e,g, make this use ~/.thun instead.
2019-05-06 13:32:08 -07:00
Simon Forman bae676dd42 Update initial joy home dir contents BLOB. 2019-05-06 13:28:44 -07:00
Simon Forman 9292d00534 Update imports, copyright notices. 2019-05-06 13:26:07 -07:00
Simon Forman d3b413493f Some images generated by pyreverse or whatever. 2019-05-06 13:09:45 -07:00
Simon Forman d4fdde50f9 Initial bring over of VUI code. (Won't work yet.) 2019-05-06 13:07:01 -07:00
Simon Forman 67f042cc57 See https://www.metalevel.at/acomip/ 2019-05-06 12:47:30 -07:00
Simon Forman 0da935ed94 Minor cleanup. 2019-05-04 07:53:02 -07:00
Simon Forman 6c94313061 Change name from alpha to tmi. 2019-05-04 06:57:14 -07:00
Simon Forman 8ca86d3d35 A Tracing Meta-Interpreter for Thun 2019-05-03 15:21:29 -07:00
Simon Forman a95c3cec69 Some docs, and a thing to print out the dictionary after compilation. 2019-05-03 15:21:06 -07:00
Simon Forman d083c3b6e6 Minor cleanup and comments. 2019-05-02 20:39:30 -07:00
Simon Forman f5fb01bf69 linker//1 works on ASM not IR. (rename variable) 2019-05-02 12:41:23 -07:00
Simon Forman 12fadfb573 Add some comments, minor rearrangement. 2019-05-02 12:33:52 -07:00
Simon Forman ece12bac00 Make get//1 handle lists of pairs which it passes off to get//2.
(I could remove more punctuation by making the (key, value) pairs implicit.)

Move compile_program//2 to just under do//0.
2019-05-02 10:18:58 -07:00
Simon Forman 4e70fdd67b Minor cleanup.
Remove the pass0//2 DCG rule and unfold it in compile_program//2 rule.  Move init//0 to be with the rest of the state DCG code.
2019-05-02 08:38:15 -07:00
Simon Forman fe795704a6 Minor cleanup.
It turns out that the binary_number relation is used in such a way that it needs to be able to backtrack to preprend leading zeros to the list of bits it constructs to automatically build bitfields of a given width (with the collect//2 DCG.)
2019-05-01 21:55:46 -07:00
Simon Forman d488db6abd binary_number/2 is more efficient if you strip off 0's first. 2019-04-28 08:16:38 -07:00
Simon Forman 67112de952 Bring in the (sort of) compiler. 2019-04-28 07:59:47 -07:00
Simon Forman 36fa5ee151 Very minor cleanup. 2019-04-26 22:13:45 -07:00
Simon Forman 58e46a9809 Treat defs in thun/3 relation.
Allow for "compilation" of new func/3 rules.

Add comment of crude grammar for Joy syntax.

Minor rearrangements.

show_joy_compile uses portray_clause/1.
2019-04-26 21:58:15 -07:00
Simon Forman 343812dac6 I just want to publish this right quick. 2018-08-24 17:05:42 -07:00
Simon Forman e573d7a3dc The Prolog version of Joy. 2018-08-24 16:52:00 -07:00
Simon Forman 3b0b7659b3 A bunch of docs.
Things have kind of run away with me.  I've been working in Prolog for
the last month or so.  I'm not yet sure how to bring it together with the
Python code.
2018-08-24 16:48:15 -07:00
Simon Forman 3e6a49ac27 The version of Python with Anaconda is lightly newer. 2018-08-24 16:46:18 -07:00
Simon Forman c88e00ecd0 Add binary functions. 2018-08-02 14:22:42 -07:00
Simon Forman dae5126bfc In progress.. 2018-08-01 12:26:50 -07:00
Simon Forman 5974c516d1 Working on compiler.
I have a simple dataflow thingy for some Yin and Yang functions.
2018-08-01 10:59:07 -07:00
Simon Forman f2425ae1ae Minor UI bugs.
I should nail this down better.  Command selections like ' []' were
failing to evaluate.
2018-07-22 11:53:02 -07:00
Simon Forman 79a653c08b Oh python, oh unicode. 2018-07-22 11:51:47 -07:00
Simon Forman 4ed8422258 Load JOY_HOME/definitions.txt
You still can't edit other text files from within the UI, but at least
now you have a place to persist your own definitions over restarts.

I thought about having a [definitions] section in the config INI file,
but for some reason I prefer a separate definitions.txt file.  I dunno.
Might change it in future.
2018-07-22 11:50:34 -07:00
Simon Forman 17b9fba65e TEXT_BINDINGS stay in textwidget.py. 2018-07-22 10:14:45 -07:00
Simon Forman f96362a904 Rework the default JOY_HOME contents. 2018-07-21 20:19:38 -07:00
Simon Forman 33a952ff71 Config file and CLI arg parser. 2018-07-21 17:56:53 -07:00
Simon Forman ca06c626e1 Loop and while combinators. 2018-07-20 12:33:06 -07:00
Simon Forman b89754a30b Futzing with types. 2018-07-19 15:37:35 -07:00
Simon Forman 008b74aef8 Getting back to parity after jumble.
Polytypes module folded into types module, with all the actual type
information done when you load the library module.  Some definitions can
be inferred from their body expression, others need to be
CombinatorJoyType wrapped.  Still to do: loop.
2018-07-19 15:18:42 -07:00
Simon Forman dea6cbc8c2 Working to get types right. 2018-07-19 12:38:19 -07:00
Simon Forman 6576e1a431 Fix TextJoyType inheritance. 2018-07-18 17:47:19 -07:00
Simon Forman 49941f9a33 Log types at startup. 2018-07-18 17:06:51 -07:00
Simon Forman 1e8c196c5b Add some logging. 2018-07-18 16:14:32 -07:00
Simon Forman 3c27fab071 Cache the results of type checking. 2018-07-18 16:13:57 -07:00
Simon Forman 8ad4ab791b Removing polytypes; some pylint hints. 2018-07-18 14:55:39 -07:00
Simon Forman 7607ca7650 Definitions infer stack effects.
At start-up defs that DON'T type check are permitted (so you can use e.g.
loop, map, etc.) in the definitions "source", but then the user-facing
inscribe command only allows you to define new commands that DO
type-check.  The ideal solution here is to get inference working for the
loopy words.  (In the meantime you can select and execute their
definition text directly.  That's not (yet!) type-checked.)
2018-07-17 20:52:57 -07:00
Simon Forman c9f405fbe9 Nearly there maybe, maybe not. 2018-07-17 20:09:17 -07:00
Simon Forman 73d19b1f3d Moving right along.
A little clunky but it seems to work so far.
2018-07-17 17:12:27 -07:00
Simon Forman c2dd7cca0a So fra, so good... 2018-07-17 12:43:24 -07:00
Simon Forman 25b7871074 i got used to it, but Jupyter likes 4 2018-07-17 10:49:09 -07:00
Simon Forman 14d67dd7c5 in the middle, just want to 2ify my indents... 2018-07-17 10:47:50 -07:00
Simon Forman 0029656351 TextJoyType and inscribe command.
I took the plunge and added the meta-command "inscribe" to the library.
This is, of course, a very dangerous and powerful command.  Use it
wisely.
2018-07-17 10:35:11 -07:00
Simon Forman d9d52fa224 A few more stack effects. 2018-07-16 20:28:53 -07:00
Simon Forman 3551b6148b expectations_of_definition() and some helper infer funcs. 2018-07-16 19:10:16 -07:00
Simon Forman 043acd685c More stack effects, and modify the key bindings. 2018-07-16 18:43:40 -07:00
Simon Forman 612d48d8cc Update docs. 2018-07-16 09:11:25 -07:00
Simon Forman 230134e6c2 Make sure we've got all the docs, etc. 2018-07-15 20:43:26 -07:00
Simon Forman cf12b9ce17 Fix bugs
Type checking e.g. sum or product.
Any type accepts complex numbers.
Lots of the math functions now just use Number rather than more specific
poly-types.
2018-07-15 20:37:52 -07:00
Simon Forman c4af5682c4 That "fix" wasn't a fix.
It broke other stuff.  What I really wanted to do was change the stack
effect of 'clear'.
2018-07-15 14:06:10 -07:00
Simon Forman 20d87db9d5 Fix up stacks for type checking.
Sometimes (e.g. 'clear') the () at the end of the stack was tripping up
the unify() function.
2018-07-15 13:57:11 -07:00
Simon Forman e169c6aae2 Some integration with Type Checking.
Now the UI highlights commands and numbers as you move the mouse, numbers
are blue, commands that type-check are green, commands that fail to
type-check are orange and will not be interpreted, and if there is no
stack effect information available for a command it is grey but you can
still attempt to execute it.

You can still evaluate whole expressions by selceting them and
right-inter-clicking before you release the left button, or by putting
the cursor on a line and typing ctrl-enter, which will run the whole
line.  These expressions are NOT (yet) type-checked.
2018-07-15 11:48:08 -07:00
Simon Forman 0292e8a297 Much globals. Wow. 2018-07-14 20:58:43 -07:00
Simon Forman 7899d68bab Minor cleanup. 2018-07-14 20:55:34 -07:00
Simon Forman ebb731126d Move load_stack() to StackDisplayWorld. 2018-07-14 20:47:04 -07:00
Simon Forman da03f60dca Move StackDisplayWorld into world.py 2018-07-14 19:51:31 -07:00
Simon Forman ea11fbebda Move reset() to text method.
Rearrange some other stuff.
2018-07-14 19:34:01 -07:00
Simon Forman 8bbf4fc2bf Correct some typo
I accidentally pasted or something.
2018-07-14 19:14:01 -07:00
Simon Forman 6fe83256b1 Move init_text() to Text method. 2018-07-14 19:11:49 -07:00
Simon Forman a84966cf9b Split some code into a utils.py module. 2018-07-14 18:51:22 -07:00
Simon Forman 4fb9e1e003 Minor cleanup.
Improve the behavior of the World.
2018-07-14 18:41:36 -07:00
Simon Forman 9ea0157969 Partial harmonize key commands.
Fix bug cut instead of copy.
2018-07-14 18:25:12 -07:00
Simon Forman 504981e551 Updated manifest file. 2018-07-14 13:01:43 -07:00
Simon Forman 862e0b07a8 It's time to bring in the GUI.
Minimalist (not to say Brutalist) UI based on text windows and mouse
chords.  Experimental.
2018-07-14 12:45:52 -07:00
Simon Forman 691d604bf8 Temporarily ignore the test dir.
It's mostly just notes and crap so far.
2018-07-14 12:32:07 -07:00
Simon Forman c83efb2aee Module dependency graphs.
Made with Snakefood and Dot.  I'm going to have to come through and clean
these up eventually.
2018-07-14 12:30:45 -07:00
Simon Forman 54491f0da2 A little more bit o' docs. 2018-07-14 12:29:25 -07:00
Simon Forman 41b39e5977 A bit more docs. 2018-07-14 12:07:49 -07:00
Simon Forman f8829e25fa A little more documentation. 2018-07-11 07:13:05 -07:00
Simon Forman fcf483af22 Ah, Symbols. 2018-07-11 07:12:14 -07:00
Simon Forman 343a2f8459 Unicode in docstring. 2018-07-11 07:11:56 -07:00
Simon Forman 0980d1b7c9 ifte as definition; "fork" combinator. 2018-07-11 07:10:54 -07:00
Simon Forman d95b92314e Clean up. 2018-07-06 14:20:04 -07:00
Simon Forman 1862ece03e Adding support for type checking. 2018-07-06 14:19:36 -07:00
Simon Forman 531e215ffd Another definition for while. 2018-07-06 14:19:00 -07:00
Simon Forman ab8ec6c95d Minor cleanup.
Renamed update() to reify() and reinstated recursive substitution.
2018-07-04 10:37:43 -07:00
Simon Forman 4fff827338 Extra logging and another lil test. 2018-06-30 23:20:00 -07:00
Simon Forman ab1f5227ba Hmm.
I think update() should be done better...
2018-06-30 12:59:14 -07:00
Simon Forman 4406a6620b Type inference of Joy expressions.
More remains to be done but it seems to work.
2018-06-29 13:19:12 -07:00
Simon Forman 6ca59847ab Gotta update() expression too.
If type vars get into the espression you have to keep them in sync with
the unification or you can lose information.


Some combinators can put symbols on the expression, you have to convert
those to type checkers or, as a hack, just look them up and run them.
This lets definitions work(-ish), ...
2018-06-27 22:26:27 -07:00
Simon Forman fc45727008 Minor cleanup. 2018-06-27 19:03:23 -07:00
Simon Forman 9ee50a6268 Minor edits. 2018-06-27 16:31:00 -07:00
Simon Forman 4321ea874b don't compose lits
It forces the identities of lits to change during relabel().

I think we still have to update() the expression to track changes in the
F function stack effect or we risk losing assoviations between type
variables in the stack effects and type variables in the pending
expression.  Hrmmm.
2018-06-26 22:39:06 -07:00
Simon Forman db28989b64 Trying to add a guard to combinators.
So they can notice if they're given a stack that doesn't match what
they're expecting.

This seems to work, but I realized that type variables in the pending
expression need to be update()'d too.  hmm...
2018-06-26 21:45:58 -07:00
Simon Forman bbc0fae2e9 Minor edits. 2018-06-26 21:44:18 -07:00
Simon Forman 56262fc53e Dropped some HTML docs somehow. 2018-06-26 15:58:18 -07:00
Simon Forman eb739024eb Type checking, initial work. 2018-06-26 15:23:51 -07:00
Simon Forman 705c95ee28 Fix a couple of bug in Kleene Stars.
...and some minor cleanup.
2018-06-25 12:43:05 -07:00
Simon Forman 41d979b233 A bit more text in the Types notebook.
It's still pretty drafty.  I'm working on the code and then I'll write up
the last bit of docs.
2018-06-25 11:32:27 -07:00
Simon Forman f1979f35ce Some more tests.
Damn thing seems to be working.
2018-06-25 06:51:12 -07:00
Simon Forman baae1a5b36 Change name of kav() to infer(). 2018-06-24 18:48:22 -07:00
Simon Forman ad83e1607e Writing tests.
I'm backfilling tests to cover the functionality that I developed
incrementally in the Jupyter notebook and nail it down with concrete
examples.  No doubt I'll uncover some bugs.
2018-06-24 18:44:29 -07:00