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
Simon Forman
47ae7b2328
More readable genrec.
...
Explicit quoting is slightly more overhead but worth it I think to show what's going on more clearly.
2019-07-16 09:53:48 -07:00
Simon Forman
efeaa7b8e1
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 .
2019-07-16 09:46:55 -07:00
Simon Forman
6d92b8801f
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.
2019-07-16 08:59:24 -07:00
Simon Forman
731b49973c
Opps! Here's the implementation of bool.
2019-07-16 08:42:45 -07:00
Simon Forman
c4c6ece6d2
Add bool function to mimic Python semantics.
2019-07-16 08:41:28 -07:00
Simon Forman
06b81914eb
Change comparison ops to not use CLP(FD).
2019-07-15 23:02:08 -07:00
Simon Forman
84584a949c
Implement genrec combinator.
2019-07-15 20:55:41 -07:00
Simon Forman
2baf3b89ce
Minor cleanup of defs.
2019-07-15 20:55:11 -07:00
Simon Forman
9ebc64541a
Move all definitions to defs.txt.
2019-07-15 16:11:49 -07:00
Simon Forman
ee395e91f1
Retract previous definitions before asserting new ones.
2019-07-15 16:01:59 -07:00
Simon Forman
4fefc04da3
Load definitions from a file.
...
This paves the way to regularize the defs between Python and Prolog (and and future other) implementations.
2019-07-15 15:53:07 -07:00
Simon Forman
0359cd64c7
Very minor docs change.
2019-07-15 15:50:22 -07:00
Simon Forman
087c141c72
Parse joy definitions from text.
...
This way a definitions file can be shared between Python Joy and Prolog Joy.
2019-07-15 12:53:48 -07:00
Simon Forman
166355dccf
New combinator infrst == infra first
...
Three uses means it's time for a refactor.
2019-07-15 12:28:01 -07:00
Simon Forman
4ea1a5527e
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".
2019-07-15 11:20:13 -07:00
Simon Forman
d3313ce4a7
Infra as definition.
2019-07-14 23:02:10 -07:00
Simon Forman
9f1e75313b
Reimplement app1 and app2 as definitions.
...
This eliminates three recursive calls to thun/3.
2019-07-14 22:48:18 -07:00
Simon Forman
f227cf0a57
Got enough definitions, sort them.
2019-07-14 21:58:20 -07:00
Simon Forman
a90568e208
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.
2019-07-14 21:14:50 -07:00
Simon Forman
e0d8910242
Docs on Start Up Sequence
2019-05-07 23:23:53 -07:00
Simon Forman
21b69ea260
Stop hg ignoring the build dir.
...
I want to include the HTML output of sphinx so you can view it without having to install sphinx.
2019-05-07 17:45:39 -07:00
Simon Forman
4f5caf4ab3
More docs...
2019-05-07 13:49:27 -07:00
Simon Forman
13515b071b
A bit more on the docs.
2019-05-07 10:23:43 -07:00
Simon Forman
028ecc0287
Move VUI package/module graph.
2019-05-07 10:00:52 -07:00
Simon Forman
edda5ed04c
screenshot
2019-05-06 23:06:36 -07:00
Simon Forman
663ddab7a7
A start on docs for VUI.
...
It's hella crude yet.
2019-05-06 23:05:50 -07:00
Simon Forman
3b09f9c356
Welcome to the Sphinx 1.8.5 quickstart utility.
2019-05-06 19:43:36 -07:00
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