Commit Graph

478 Commits

Author SHA1 Message Date
sforman 6674fdffb6 Better exceptions. 2023-08-28 20:46:19 -07:00
sforman a107e1df6c Rebuilt C interpreter. 2023-08-21 09:53:24 -07:00
sforman 8dfcbca2a8 README for Chicken Scheme. 2023-08-20 10:24:29 -07:00
sforman 5edf0797b4 sort 2023-08-18 17:09:08 -07:00
sforman 20b517f083 Figlet headings. 2023-08-18 16:59:32 -07:00
sforman 307a421fab Add definition for xor. 2023-08-16 10:05:30 -07:00
sforman 60bddcc70e cleanup 2023-08-13 08:49:20 -07:00
sforman 9f78b6d8fd Messing around with type inference.
What if we insist that both branches of a branch have compatible types?

For one thing `[+] [* +] branch` leads to a circular term which, when
printed, goes into a loop: "int,int,int,...".  Hmm...
2023-08-12 16:45:59 -07:00
sforman 48e443c5c7 for-each 2023-08-12 14:09:44 -07:00
sforman 596a7a21eb A crude main loop.
I know there are better ways to do this, but I don't know what they are
yet.  Maybe a "do" loop?  Anyway, this works, although it doesn't catch
errors yet.
2023-08-12 13:03:42 -07:00
sforman 8bbbd2a4a4 Update defs.scm 2023-08-12 08:26:59 -07:00
sforman 00f4bfcacd Math ops, definitions for left- and right-shift. 2023-08-12 08:04:21 -07:00
sforman 99f01bec1f mul div mod add sub in Nim 2023-08-12 07:54:33 -07:00
sforman f45c739fad first rest 2023-08-11 23:02:46 -07:00
sforman 1a37a8e81c concat cons comparison 2023-08-11 22:48:25 -07:00
sforman 8df8634e39 loop 2023-08-11 21:27:41 -07:00
sforman 172407fef1 branch and refactor simple functions.
The refactor should be a macro but I don't know how to write those yet
(apparently there are different macros systems...  ooo la la!)
2023-08-11 21:15:26 -07:00
sforman 4d6d66e391 dip 2023-08-11 20:49:24 -07:00
sforman c3e6c1be90 i 2023-08-11 20:45:25 -07:00
sforman ae7d854330 swap 2023-08-11 20:38:01 -07:00
sforman 9fbb7c05c3 pop 2023-08-11 20:34:40 -07:00
sforman b921a9e3d2 stack, swaack 2023-08-11 11:11:51 -07:00
sforman 5f8e33ff8d Add copyleft notice. 2023-08-11 11:03:00 -07:00
sforman 3382d0a47e Load defs at compile time.
I don't really know the proper way to do this, but I managed to whump
something up.
2023-08-11 10:48:33 -07:00
sforman 8fab04b02e Evaluate definitions. 2023-08-11 10:31:53 -07:00
sforman 67b60be123 Convert defs.txt to defs.scm.
Gonna need a makefile.
2023-08-11 10:15:31 -07:00
sforman d014709a32 Load defs from defs.txt.
They are loaded at runtime though :(  shouldn't be too hard to fix that?
2023-08-11 08:50:00 -07:00
sforman b6c3c364d0 A start on dictionaries using srfi-69 hash tables. 2023-08-10 21:49:37 -07:00
sforman 19777a86ae Use '->' in names of functions that convert values. 2023-08-10 21:48:46 -07:00
sforman 1bad1508f1 dup 2023-08-10 21:47:54 -07:00
sforman a56a3939c1 minor edit 2023-08-10 21:46:56 -07:00
sforman a15ea2d355 It's more efficient to concat the empty list
than to concate a non-empty list onto the empty list.
2023-08-10 21:45:40 -07:00
sforman 7c9663594b A start on simple functions.
I'm sure there's a cooler way to do this, but it works.  (This is my
first Scheme code.)
2023-08-04 10:38:52 -07:00
sforman 8cc15a745f Parser emits errors; joy 2023-08-04 09:52:09 -07:00
sforman ea60a04d96 joy-expression-to-string 2023-08-04 08:14:45 -07:00
sforman 35ffe71482 text-to-expression 2023-08-04 07:47:12 -07:00
sforman dedbb0115f It's Joy.
Or will be soon.
2023-08-04 07:43:05 -07:00
sforman 0503dc2fbe Parser. 2023-08-04 00:33:11 -07:00
sforman 0122c4f249 Scheme, eh? 2023-08-03 11:28:46 -07:00
sforman 97602ade8d SWIProlog can't not emit '.'.
I would like the GNU Prolog and SWI Prolog versions to be compatible, if
possible.

SWI has bigints, GNU doesn't, so that's a wrinkle...
2023-08-02 22:38:04 -07:00
sforman ee4c3bc9b6 Thread the dict through the interaction loop.
Like a total newbie I put the call to the interpreter in the view
function instead of the update function!  I thought it was weird having
to specify the HTML twice, but I figured I was just doing it wrong.  I
was, but not in the way I suspected.

In any event, I like how this make it clear that errors can't affect the
dictionary.
2023-08-02 21:19:43 -07:00
sforman 2fe886afba Checked old defs.
I forgot `over`!
2023-08-02 19:37:36 -07:00
sforman 5585ae5d31 _isnt_bool _isnt_two_bools
These probably won't last?
2023-08-02 09:06:11 -07:00
sforman f15eef1c56 minor edits 2023-07-31 12:08:39 -07:00
sforman 45f00c8f2e Elm README.
And minor edits.
2023-07-31 11:30:12 -07:00
sforman 540bdd97bd Sort out the and/or/... ops. 2023-07-30 15:51:29 -07:00
sforman c0fa319c9c Crude type checking.
I forget why I was doing "not not" so I made it a little more clear.  In
practice this is regressive:  The built-in "isnt_bool" function should
be in the dictionary?  Or prohibit type checking and let the bugs flow?
Rely on inference to prevent bugs that would pass the non-checking
versions of the functions?  Hmm...
2023-07-30 15:42:55 -07:00
sforman 373666bf39 Name Boolean ops.
So they don't overshadow the defs for the short-circuiting combinators.
2023-07-30 15:41:58 -07:00
sforman 1089ab7c24 Error type (not just a string.)
This is mostly for fun, but I bet it comes in handy, eh?

At the very least, it's a nice catalog of the possible errors that the
basic Joy system might encounter.
2023-07-30 14:59:09 -07:00
sforman 850bc3a500 type alias JoyFunction 2023-07-30 14:27:27 -07:00