OSDN Git Service

joypy/Thun.git
10 months agoA start on dictionaries using srfi-69 hash tables.
sforman [Fri, 11 Aug 2023 04:49:37 +0000 (21:49 -0700)]
A start on dictionaries using srfi-69 hash tables.

10 months agoUse '->' in names of functions that convert values.
sforman [Fri, 11 Aug 2023 04:48:46 +0000 (21:48 -0700)]
Use '->' in names of functions that convert values.

10 months agodup
sforman [Fri, 11 Aug 2023 04:47:54 +0000 (21:47 -0700)]
dup

10 months agominor edit
sforman [Fri, 11 Aug 2023 04:46:56 +0000 (21:46 -0700)]
minor edit

10 months agoIt's more efficient to concat the empty list
sforman [Fri, 11 Aug 2023 04:45:40 +0000 (21:45 -0700)]
It's more efficient to concat the empty list

than to concate a non-empty list onto the empty list.

10 months agoA start on simple functions.
sforman [Fri, 4 Aug 2023 17:38:52 +0000 (10:38 -0700)]
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.)

10 months agoParser emits errors; joy
sforman [Fri, 4 Aug 2023 16:52:09 +0000 (09:52 -0700)]
Parser emits errors; joy

10 months agojoy-expression-to-string
sforman [Fri, 4 Aug 2023 15:14:45 +0000 (08:14 -0700)]
joy-expression-to-string

10 months agotext-to-expression
sforman [Fri, 4 Aug 2023 14:47:12 +0000 (07:47 -0700)]
text-to-expression

10 months agoIt's Joy.
sforman [Fri, 4 Aug 2023 14:43:05 +0000 (07:43 -0700)]
It's Joy.

Or will be soon.

10 months agoParser.
sforman [Fri, 4 Aug 2023 07:33:11 +0000 (00:33 -0700)]
Parser.

10 months agoScheme, eh?
sforman [Thu, 3 Aug 2023 18:28:46 +0000 (11:28 -0700)]
Scheme, eh?

10 months agoSWIProlog can't not emit '.'.
sforman [Thu, 3 Aug 2023 05:38:04 +0000 (22:38 -0700)]
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...

10 months agoThread the dict through the interaction loop.
sforman [Thu, 3 Aug 2023 04:19:43 +0000 (21:19 -0700)]
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.

10 months agoChecked old defs.
sforman [Thu, 3 Aug 2023 02:37:36 +0000 (19:37 -0700)]
Checked old defs.

I forgot `over`!

10 months agoTalk about symbols on the stack.
sforman [Thu, 3 Aug 2023 02:08:42 +0000 (19:08 -0700)]
Talk about symbols on the stack.

10 months agoA spec doc for Thun.
sforman [Thu, 3 Aug 2023 01:52:31 +0000 (18:52 -0700)]
A spec doc for Thun.

It's not very good yet, or formal, "but it's mine and I love it."

10 months ago_isnt_bool _isnt_two_bools
sforman [Wed, 2 Aug 2023 16:06:11 +0000 (09:06 -0700)]
_isnt_bool _isnt_two_bools

These probably won't last?

10 months agominor edits
sforman [Mon, 31 Jul 2023 19:08:39 +0000 (12:08 -0700)]
minor edits

10 months agoElm README.
sforman [Mon, 31 Jul 2023 18:30:12 +0000 (11:30 -0700)]
Elm README.

And minor edits.

10 months agominor edits
sforman [Mon, 31 Jul 2023 18:22:44 +0000 (11:22 -0700)]
minor edits

10 months agominor edits
sforman [Mon, 31 Jul 2023 18:17:05 +0000 (11:17 -0700)]
minor edits

10 months agominor edits
sforman [Mon, 31 Jul 2023 18:06:13 +0000 (11:06 -0700)]
minor edits

10 months agoOops, that is not a definition of `first`.
sforman [Mon, 31 Jul 2023 17:44:38 +0000 (10:44 -0700)]
Oops, that is not a definition of `first`.

10 months agoMinor edits.
sforman [Mon, 31 Jul 2023 17:36:53 +0000 (10:36 -0700)]
Minor edits.

10 months agoMinor edits.
sforman [Sun, 30 Jul 2023 23:34:56 +0000 (16:34 -0700)]
Minor edits.

10 months agoI think I have got it.
sforman [Sun, 30 Jul 2023 23:16:51 +0000 (16:16 -0700)]
I think I have got it.

10 months agoegad
sforman [Sun, 30 Jul 2023 23:14:52 +0000 (16:14 -0700)]
egad

10 months agoweird symbols in table
sforman [Sun, 30 Jul 2023 23:03:17 +0000 (16:03 -0700)]
weird symbols in table

10 months agomdtableeeeee
sforman [Sun, 30 Jul 2023 23:01:09 +0000 (16:01 -0700)]
mdtableeeeee

10 months agoMD TABLE!?
sforman [Sun, 30 Jul 2023 22:54:07 +0000 (15:54 -0700)]
MD TABLE!?

10 months agoSort out the and/or/... ops.
sforman [Sun, 30 Jul 2023 22:51:29 +0000 (15:51 -0700)]
Sort out the and/or/... ops.

10 months agoCrude type checking.
sforman [Sun, 30 Jul 2023 22:42:55 +0000 (15:42 -0700)]
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...

10 months agoName Boolean ops.
sforman [Sun, 30 Jul 2023 22:41:58 +0000 (15:41 -0700)]
Name Boolean ops.

So they don't overshadow the defs for the short-circuiting combinators.

10 months agoError type (not just a string.)
sforman [Sun, 30 Jul 2023 21:59:09 +0000 (14:59 -0700)]
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.

10 months agotype alias JoyFunction
sforman [Sun, 30 Jul 2023 21:27:27 +0000 (14:27 -0700)]
type alias JoyFunction

10 months agoFormat.
sforman [Sun, 30 Jul 2023 14:47:26 +0000 (07:47 -0700)]
Format.

10 months agoinscribe, definitions.
sforman [Sun, 30 Jul 2023 14:45:06 +0000 (07:45 -0700)]
inscribe, definitions.

10 months agoInitialize dict with defs.
sforman [Sun, 30 Jul 2023 00:10:45 +0000 (17:10 -0700)]
Initialize dict with defs.

Just sqr for now, but it shows that it works.

I would like to return Results from add_def but it makes using foldl
slightly tricky,  not a lot, just slightly, and my brainpower is low at
the mo'.

10 months agoLook up words in the dictionary.
sforman [Sat, 29 Jul 2023 19:35:47 +0000 (12:35 -0700)]
Look up words in the dictionary.

If they are not built-in, which means you can't "shadow" built-ins with
"inscribe", which may or may not turn out to be what we want?

10 months agoThread the dictionary through the call stack.
sforman [Sat, 29 Jul 2023 19:30:22 +0000 (12:30 -0700)]
Thread the dictionary through the call stack.

10 months agoEmpty string is not an unknown word.
sforman [Sat, 29 Jul 2023 19:11:43 +0000 (12:11 -0700)]
Empty string is not an unknown word.

10 months agoGotta keep a Dict around.
sforman [Sat, 29 Jul 2023 19:09:08 +0000 (12:09 -0700)]
Gotta keep a Dict around.

10 months agoLogical ops.
sforman [Sat, 29 Jul 2023 18:37:07 +0000 (11:37 -0700)]
Logical ops.

10 months agoLeft- and Right-shift.
sforman [Sat, 29 Jul 2023 18:32:22 +0000 (11:32 -0700)]
Left- and Right-shift.

10 months agoComparison ops.
sforman [Sat, 29 Jul 2023 18:07:50 +0000 (11:07 -0700)]
Comparison ops.

10 months agoloop
sforman [Sat, 29 Jul 2023 17:44:51 +0000 (10:44 -0700)]
loop

10 months agobranch
sforman [Sat, 29 Jul 2023 17:38:12 +0000 (10:38 -0700)]
branch

10 months agodip
sforman [Sat, 29 Jul 2023 17:28:31 +0000 (10:28 -0700)]
dip

10 months agoi
sforman [Sat, 29 Jul 2023 17:23:06 +0000 (10:23 -0700)]
i

10 months agotruthy
sforman [Sat, 29 Jul 2023 17:19:39 +0000 (10:19 -0700)]
truthy

I have to check into this: the Python version has "bool" and no
"truthy".

10 months agoswap
sforman [Sat, 29 Jul 2023 17:09:40 +0000 (10:09 -0700)]
swap

10 months agostack, swaack
sforman [Sat, 29 Jul 2023 17:00:16 +0000 (10:00 -0700)]
stack, swaack

10 months agopop
sforman [Sat, 29 Jul 2023 16:55:28 +0000 (09:55 -0700)]
pop

10 months agofirst, rest
sforman [Sat, 29 Jul 2023 16:53:00 +0000 (09:53 -0700)]
first, rest

10 months agodup
sforman [Sat, 29 Jul 2023 16:22:26 +0000 (09:22 -0700)]
dup

10 months agocons
sforman [Sat, 29 Jul 2023 16:17:27 +0000 (09:17 -0700)]
cons

10 months agoclear, concat
sforman [Sat, 29 Jul 2023 16:06:14 +0000 (09:06 -0700)]
clear, concat

10 months agoMinor cleanup.
sforman [Sat, 29 Jul 2023 15:57:58 +0000 (08:57 -0700)]
Minor cleanup.

10 months agoType alias JList
sforman [Sat, 29 Jul 2023 15:49:31 +0000 (08:49 -0700)]
Type alias JList

10 months agoRefactor pop_int.
sforman [Sat, 29 Jul 2023 14:51:31 +0000 (07:51 -0700)]
Refactor pop_int.

I don't like passing the stack through isnt_int but that let's you chain
with andThen.

There's probably a clever or idiomatic way to not do that and couple the
stack to the result without passing it through the type checker function
but I don't know what it is right now, and this works.

10 months agoBinary Math Ops
sforman [Sat, 29 Jul 2023 14:32:56 +0000 (07:32 -0700)]
Binary Math Ops

10 months agoI don't think andThen helps here?
sforman [Sat, 29 Jul 2023 14:19:08 +0000 (07:19 -0700)]
I don't think andThen helps here?

10 months agoI can add integers!
sforman [Sat, 29 Jul 2023 13:54:15 +0000 (06:54 -0700)]
I can add integers!

10 months agoParsing working.
sforman [Sat, 29 Jul 2023 04:51:34 +0000 (21:51 -0700)]
Parsing working.

Modeled on the OCaml code.

10 months agoA start on Joy types.
sforman [Fri, 28 Jul 2023 22:04:35 +0000 (15:04 -0700)]
A start on Joy types.

10 months agoIn Elm.
sforman [Fri, 28 Jul 2023 21:18:12 +0000 (14:18 -0700)]
In Elm.

10 months agoUse Python as SHELL in Makefile.
sforman [Thu, 27 Jul 2023 17:32:45 +0000 (10:32 -0700)]
Use Python as SHELL in Makefile.

It's a simple task, but I'm not up on my CLI tools, so I went with
Python instead of sh.  The split command doesn't have '-p' switch on
Ubuntu.  (I'm using Ubuntu on this laptop because it can correctly
configure the WiFi and the laptop has no ethernet port.)

10 months agominor cleanup
sforman [Thu, 27 Jul 2023 16:55:26 +0000 (09:55 -0700)]
minor cleanup

10 months agominor cleanup
sforman [Thu, 27 Jul 2023 16:55:02 +0000 (09:55 -0700)]
minor cleanup

10 months agoRename joy_to_ast to parser.
sforman [Thu, 27 Jul 2023 16:19:12 +0000 (09:19 -0700)]
Rename joy_to_ast to parser.

10 months agoWorking on the docs.
sforman [Thu, 27 Jul 2023 15:55:43 +0000 (08:55 -0700)]
Working on the docs.

The nbconvert tool has different behaviour now, so the HTML versions of
the notebooks look different.

10 months agoMinor work on the new site.
sforman [Thu, 27 Jul 2023 03:47:57 +0000 (20:47 -0700)]
Minor work on the new site.

I'm moving away from OSDN, there have been a few technical issues
recently.

10 months agoBold.
sforman [Wed, 26 Jul 2023 23:34:03 +0000 (16:34 -0700)]
Bold.

10 months agoMinor edits.
sforman [Wed, 26 Jul 2023 23:32:30 +0000 (16:32 -0700)]
Minor edits.

10 months agothe BinInt zero vanished?
sforman [Wed, 26 Jul 2023 05:01:55 +0000 (22:01 -0700)]
the BinInt zero vanished?

10 months agoMinor edits.
sforman [Wed, 26 Jul 2023 04:46:36 +0000 (21:46 -0700)]
Minor edits.

10 months agoWorking on README, put defs in joy.py
sforman [Wed, 26 Jul 2023 04:13:35 +0000 (21:13 -0700)]
Working on README, put defs in joy.py

I'm on an Ubuntu system right now and the split command doesn't have the
'-p' switch.  :(   I wasn't happy with that janky solution anyway.

10 months agominor edits
sforman [Wed, 26 Jul 2023 03:03:11 +0000 (20:03 -0700)]
minor edits

10 months agoMinor edits.
sforman [Tue, 25 Jul 2023 17:04:45 +0000 (10:04 -0700)]
Minor edits.

10 months agoMessing around with GNU Prolog.
sforman [Tue, 25 Jul 2023 15:51:27 +0000 (08:51 -0700)]
Messing around with GNU Prolog.

I have it broken up into three stages: a parser that reads a string from
stdin and emits (Prolog) AST to stdout; an interpreter of sorts that
reads AST from stdin, evaluates it, and then emits the AST of the stack
on stdout; and a printer that reads AST on stdin and prints Joy-ish code
to stdout.

I say Joy-ish because currently math is not evaluated and results of
math appear as expressions, not values.

This is because GNU Prolog doesn't have unbounded integers (it's numbers
are machine integers) so literals that are larger than the machine word
are converted into atoms!  To keep things simple, I made all ints into
atoms, but then you can't evaluate them: '1'+'2' is not '3' (it might be
'12' though.)

So I print them out at expressions:

    $ echo "1 2 3 4 [+ sub /] i" | ./joy_to_ast | ./thun | ./printer

    (1 div (2-(4+3)))

You could almost feed that to, say, Python to evaluate, eh? Or dc with
proper formatting?  (man dc; "Desk Calculator".)

Anyway, it's a start.  The Prolog interpreter is more for things like
type checking and inference, optimizing, compiling, etc.  Symbolic stuff
that's a PITA to express in other languages.  (The old type inference
code in Python was pages long, in Prolog it's just the thun/3 & thun/4
predicates themselves.  At least so far.  There are things we will want
to do eventually that might be a PITA to express in Prolog, eh?

10 months agoCompile on Ubuntu.
sforman [Mon, 24 Jul 2023 18:29:39 +0000 (11:29 -0700)]
Compile on Ubuntu.

10 months agoMake it compatible with Xerblin.
sforman [Mon, 24 Jul 2023 18:29:06 +0000 (11:29 -0700)]
Make it compatible with Xerblin.

10 months agoMinor edits.
sforman [Mon, 24 Jul 2023 18:28:45 +0000 (11:28 -0700)]
Minor edits.

14 months agoMinor cleanup.
Simon Forman [Wed, 22 Mar 2023 21:45:54 +0000 (14:45 -0700)]
Minor cleanup.

14 months agoi combinator.
Simon Forman [Wed, 22 Mar 2023 18:54:17 +0000 (11:54 -0700)]
i combinator.

On a lark I implemented it in recursive style, but I'm not going to keep
it that way.  I have to implement next_term() first and then I'll
uncomment i_joy_combinator().

14 months agoconcat
Simon Forman [Wed, 22 Mar 2023 15:41:09 +0000 (08:41 -0700)]
concat

14 months agocons
Simon Forman [Tue, 21 Mar 2023 19:34:28 +0000 (12:34 -0700)]
cons

14 months agominor cleanup
Simon Forman [Tue, 21 Mar 2023 16:38:50 +0000 (09:38 -0700)]
minor cleanup

14 months agofirst
Simon Forman [Tue, 21 Mar 2023 16:33:20 +0000 (09:33 -0700)]
first

14 months agorest
Simon Forman [Tue, 21 Mar 2023 16:27:00 +0000 (09:27 -0700)]
rest

14 months agorest CANNOT_TAKE_REST_OF_EMPTY_LIST
Simon Forman [Tue, 21 Mar 2023 16:19:12 +0000 (09:19 -0700)]
rest CANNOT_TAKE_REST_OF_EMPTY_LIST

14 months agoswap
Simon Forman [Mon, 20 Mar 2023 23:33:11 +0000 (16:33 -0700)]
swap

14 months agoCheck for error after cons'ing term.
Simon Forman [Sat, 18 Mar 2023 21:13:51 +0000 (14:13 -0700)]
Check for error after cons'ing term.

14 months agopop_any()
Simon Forman [Sat, 18 Mar 2023 19:48:59 +0000 (12:48 -0700)]
pop_any()

14 months agodup
Simon Forman [Sat, 18 Mar 2023 19:43:30 +0000 (12:43 -0700)]
dup

14 months agostack function.
Simon Forman [Sat, 18 Mar 2023 19:31:36 +0000 (12:31 -0700)]
stack function.

14 months agopop()
Simon Forman [Sat, 18 Mar 2023 18:50:18 +0000 (11:50 -0700)]
pop()

14 months agoMove pop_list().
Simon Forman [Sat, 18 Mar 2023 18:41:16 +0000 (11:41 -0700)]
Move pop_list().

14 months agoNo reason to pass expression to function.
Simon Forman [Sat, 18 Mar 2023 18:40:19 +0000 (11:40 -0700)]
No reason to pass expression to function.