diff --git a/README.md b/README.md new file mode 100644 index 0000000..3369d9f --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# Prosper + +Prosper is a Forth-like stack-based language. While taking specific influence from Forth, it does not attempt to emulate or implement the ANS Forth standards. + +Currently, the language is entirely interactive -- to explore, simply run `go run .` in the root of this project and an interactive session will begin. + +## Syntax + +Prosper is stack-based, as mentioned, so all the standard stack semantics are present: + +``` +> 1 2 3 4 + * - +ok +> . +-13 ok +``` + +New words can be defined using `: ;`: + +``` +> : SQUARE DUP * ; +ok +> 10 SQUARE . +100 ok +``` + +It has a single loop construct, `DO LOOP`: + +``` +> : TOFIVE 5 0 DO I . LOOP ; +ok +> TOFIVE +0 1 2 3 4 ok +``` + +Branches using `IF ELSE THEN` work: + +``` +> : EMOJI 0 < IF 128201 EMIT ELSE 128200 EMIT THEN ; +ok +> 100 EMOJI +📈 ok +> -100 EMOJI +📉 ok +``` + +And, of course, it knows how to quit: + +``` +> BYE +bye +``` + +## Future Plans + +* Implement `VARIABLE` and `CONSTANT` and the various `? ! @` related words +* Implement `SEE` +* Implement loading libraries of pre-written functions both from the command-line and at run-time +* Add much better readline behaviors in the interactive console (up-arrow for history, cursor movement...)