Simon Forman
e0a36eab8b
Remove '==' from definitions. (Bools)
...
I decided that the conceptual simplicity of omitting '==' is more useful
than the cosmetic value of keeping it. The defs.txt file is now just one
definition per line with the first symbol giving the name.
Also, bools are literals.
2020-01-26 09:48:30 -08:00
Simon Forman
ed41395560
Definition for 'not' in terms of 'branch'.
2020-01-26 08:44:57 -08:00
Simon Forman
2aa1765b89
Proper types, checking, inference.
...
When I first translated Joy into Prolog I was so blown away by the Prolog
unification over list structures and Triska's CLP(FD) semantics for math
(both in the sense that he wrote CLP(FD) for SWI Prolog and he suggested
it for Joy-in-Prolog specifically) that I didn't realize that it wasn't
quite type inference.
It's kind of like type inference, in that lists are handled correctly and
the CLP(FD) library creates and maintains a kind of context for
constraints, which are sort-of like "dependent types" if you squint a
little. But you can still do things like 'cons' a number to a number and
get (a Prolog term) like [2|3] which is almost certainly a bug.
So I went through and added type "tags" as Prolog terms: int/1, list/1,
and symbol/1. The parser assigns them and all the primitive functions
and combinators use them (and so all the definitions do too.) With this
information Prolog can e.g. prevent attempts to add numbers and lists, and
so on.
This also allows for the thun/3 relation to be implemented a little more
efficiently (without much loss of beauty) by looking ahead one term in
the pending expression and dispatching on structural "type" in a thun/4
relation. I miss the elegance of the previous version, but this lets
Prolog index on the structural type tags that the parser produces.
(This might mess up tail recursion because now we have a loop between
thun/3 and thun/4 but we can eliminate that problem by partial reduction
on thun/3. TODO.)
Now that literals are tagged by the parser there's no need for literal/1.
2020-01-26 08:43:52 -08:00
Simon Forman
6e6e52d206
Don't assert defs twice.
...
Each definition is getting parsed with the name of the next one as part
of its body, then the next one fails to parse and the thing backtracks.
So each definition (but the last) gets asserted twice.
def(--,[1,-,?])
def(--,[1,-])
def(?,[dup,bool,++])
def(?,[dup,bool])
def(++,[1,+,anamorphism])
def(++,[1,+])
def(anamorphism,[[pop,[]],swap,[dip,swons],genrec,app1])
def(anamorphism,[[pop,[]],swap,[dip,swons],genrec])
def(app1,[grba,infrst,app2])
def(app1,[grba,infrst])
def(app2,[[grba,swap,grba,swap],dip,[infrst],cons,ii,app3])
def(app2,[[grba,swap,grba,swap],dip,[infrst],cons,ii])
...and so on.
2020-01-25 16:13:06 -08:00
Simon Forman
1ecb5be278
Change back to CLP(FD) semantics.
...
Minor changes to parser to make it less logical but a little firmer.
(E.g. ints can't be backtracked into becoming symbols!)
2020-01-25 15:50:50 -08:00
Simon Forman
36ec93e46b
Docs and minor cleanup to the grammar.
2020-01-25 14:35:44 -08:00
Simon Forman
0588496ca5
Minor cleanup.
2019-12-03 08:41:42 -08:00
Simon Forman
fdf0339e16
Make parser REs into module-level "constants".
2019-12-02 14:26:07 -08:00
Simon Forman
39a0e73fac
Some helper scripts for windows.
2019-12-02 14:14:38 -08:00
Simon Forman
57446a1179
Minor docs update.
2019-12-02 14:13:50 -08:00
Simon Forman
eb591d27e0
Debugging this sucks.
...
Even with the RISC emu GUI.
Redesign vm? Add more tooling? Use MetaII?
Happy Thanksgiving!
2019-11-28 07:58:42 -08:00
Simon Forman
ff69046a4c
Emit a sort of symbol table.
2019-11-13 21:15:33 -08:00
Simon Forman
4a1770b1cc
4 is already an offset
2019-11-13 15:07:27 -08:00
Simon Forman
93caa2ed66
Definitions.
2019-11-13 11:41:41 -08:00
Simon Forman
851f212fb2
"swap" word.
2019-11-12 16:09:13 -08:00
Simon Forman
4faebb4551
"new" word.
2019-11-12 15:47:33 -08:00
Simon Forman
4cba943355
Refactor sub_base_merge_and_store.
2019-11-12 11:42:24 -08:00
Simon Forman
89c58d4f5a
dup cons i
2019-11-12 09:23:31 -08:00
Simon Forman
e72fa2585f
Forgot to "return" from i combinator.
2019-11-12 09:18:58 -08:00
Simon Forman
9cfb06c736
Even "nicer".
2019-11-12 09:06:22 -08:00
Simon Forman
54fe7cbab7
Charming.
2019-11-12 09:03:54 -08:00
Simon Forman
f201cd6bb3
dexpr//1
2019-11-12 09:02:19 -08:00
Simon Forman
afea54bf08
The i combinator.
2019-11-12 08:37:20 -08:00
Simon Forman
80d127788e
head_addr
2019-11-11 07:51:58 -08:00
Simon Forman
c3e44e2bf8
Simple push of empty list.
2019-11-11 07:45:22 -08:00
Simon Forman
3126dce307
Dup.
...
ANd portray_clause to stablize output logical variable names.
2019-11-10 14:35:57 -08:00
Simon Forman
0b210d7754
halt.
2019-11-10 10:58:47 -08:00
Simon Forman
2e301fa6c3
word works with negative numbers now.
...
symbols moved to head of machine code.
2019-11-10 10:53:55 -08:00
Simon Forman
4a39d82c75
merge_and_store, chain_link
2019-11-09 21:55:01 -08:00
Simon Forman
cde066eb86
Minor refactor.
...
It doesn't save space (but if I reuse it once it will.)
2019-11-09 21:20:31 -08:00
Simon Forman
2b9034f6d5
Pass through label.
2019-11-09 20:19:15 -08:00
Simon Forman
8405d3f863
if_literal and lookup
2019-11-09 18:39:39 -08:00
Simon Forman
7a821a4eaf
incr stack
...
Really decr, but I'm abstracting.
2019-11-09 18:28:01 -08:00
Simon Forman
67583716f2
Refactoring and cleanup.
2019-11-09 18:15:56 -08:00
Simon Forman
04b021846a
load
2019-11-09 18:02:07 -08:00
Simon Forman
8ee9a05780
Bleah.
2019-11-09 15:20:06 -08:00
Simon Forman
e4c17f8c24
Base address in unpack_pair.
2019-11-09 15:12:44 -08:00
Simon Forman
bcadc95aa3
unpack_pair
2019-11-09 15:03:17 -08:00
Simon Forman
a1ecea341a
Minor refactor.
2019-11-09 14:02:18 -08:00
Simon Forman
c211848d5c
Refactoring, with oddball quoting "symbols".
2019-11-09 13:59:06 -08:00
Simon Forman
a38d8153cd
That works nicely, again.
2019-11-09 13:42:14 -08:00
Simon Forman
b7659bdeaa
Convert to ? DCG and it's macro-time!
2019-11-09 13:34:51 -08:00
Simon Forman
632161b6d1
I think that does it for cons.
...
Offsets in pair records can be negative.
2019-11-09 12:14:51 -08:00
Simon Forman
ab0ff48c54
That's the mainloop converted to permit negative offsets.
2019-11-09 12:03:13 -08:00
Simon Forman
9ce9d967cf
Minor cleanup, bug fixes.
2019-11-09 11:27:29 -08:00
Simon Forman
3c796310a5
Minor bugfix.
...
asr not ror.
2019-11-08 15:24:09 -08:00
Simon Forman
4c13868e7c
Cons
2019-11-08 14:06:28 -08:00
Simon Forman
d67420ae68
Just do it in asm.
2019-11-08 08:08:53 -08:00
Simon Forman
5172be7a0a
hmm...
2019-11-07 20:21:26 -08:00
Simon Forman
3f843ed4cc
WIth push2 finished that's the mainloop converted.
2019-11-07 17:25:04 -08:00
Simon Forman
65d55cf7b4
lookup
2019-11-07 16:28:28 -08:00
Simon Forman
7bab15c64a
if_literal
2019-11-07 16:15:41 -08:00
Simon Forman
0ce64f2ec4
A start on converting the mainloop.
2019-11-07 15:53:07 -08:00
Simon Forman
b924350c6d
Take two on the compiler.
2019-11-07 14:57:41 -08:00
Simon Forman
53ef16bee4
Minor cleanup.
2019-11-07 07:55:01 -08:00
Simon Forman
3751107a09
Modify error reporting a lil; words word.
2019-11-07 07:54:04 -08:00
Simon Forman
f58f3b9959
Definition of ii combinator.
...
ii == [dip] dupdip i
a [F] ii
--------------
F a F
2019-11-07 07:53:21 -08:00
Simon Forman
99f9534a10
Call for_serial/2
2019-11-07 07:43:21 -08:00
Simon Forman
22b34aba05
Using partial deduction to inline literals, functions, and combinators.
2019-08-22 15:45:24 -07:00
Simon Forman
558f45bf47
minor cleanup
2019-08-20 22:00:27 -07:00
Simon Forman
6e646c012f
small func recognizes [] and [X].
2019-08-19 22:02:06 -07:00
Simon Forman
b59e70f96d
Rename bar to korf and some docs.
2019-08-18 16:59:31 -07:00
Simon Forman
26c2730273
minor cleanup
2019-08-18 12:17:37 -07:00
Simon Forman
7d44742317
reintroduce definition of fork; it doesn't shadow func(fork, ...).
2019-08-18 11:47:48 -07:00
Simon Forman
a5fb17cc48
read child output after local thun/3
2019-08-18 11:09:36 -07:00
Simon Forman
2057d9ee74
truly fork, sort of
2019-08-18 10:53:25 -07:00
Simon Forman
11fdc81409
minor cleanup
2019-08-13 11:58:31 -07:00
Simon Forman
8116b83086
Minor cleanup.
2019-08-13 11:51:41 -07:00
Simon Forman
bbc0f750bc
Move DCG stuff to own file.
2019-08-13 11:48:08 -07:00
Simon Forman
defedcbd12
Parse ints; move line/{1,2} to main.pl.
2019-08-13 11:29:49 -07:00
Simon Forman
3f19b2b210
Parse floating point numbers.
2019-08-13 11:24:28 -07:00
Simon Forman
4c78a31bd9
minor cleanup
2019-08-12 22:29:09 -07:00
Simon Forman
d22e6e86dc
minor cleanup
2019-08-12 21:59:19 -07:00
Simon Forman
86bf875841
Numbers can be followed by space or [.
2019-08-12 21:29:26 -07:00
Simon Forman
8947dff010
Parse negative numbers.
2019-08-12 21:13:11 -07:00
Simon Forman
143b711028
swapd function
2019-08-12 21:08:35 -07:00
Simon Forman
aae0e91c44
assert_defs/1 got upset about not finding combo/5
2019-08-12 21:08:17 -07:00
Simon Forman
e67ef3951c
Minor cleanup of the parser.
2019-08-12 20:59:02 -07:00
Simon Forman
120610cd6b
rework parser DCGs
2019-08-12 20:12:35 -07:00
Simon Forman
b25ef2d5f7
Oops! Regression.
2019-08-12 19:25:13 -07:00
Simon Forman
dd42c7c0bc
minor cleanup
2019-08-12 19:17:15 -07:00
Simon Forman
cae79ded8f
swoncat and fiddling with parser.
2019-08-12 19:09:49 -07:00
Simon Forman
2e1f598aa2
Experiment with putting logic vars on the stack.
2019-08-11 21:30:02 -07:00
Simon Forman
222c472449
Remove a cut that sucked.
2019-08-11 20:45:49 -07:00
Simon Forman
40148fced9
unstack, least_fraction
2019-08-11 19:57:28 -07:00
Simon Forman
7a4e58fe15
Copyright notices.
2019-08-11 19:41:11 -07:00
Simon Forman
afec650c7b
The sqrt/1 predicate wasn't working.
2019-08-11 19:35:05 -07:00
Simon Forman
79aa2f972d
Multifile func/3.
2019-08-11 18:45:57 -07:00
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