# 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 ``` Here's a Fibonacci implementation: ``` > : FIB 2DUP + ; ok > : FIBN 0 1 ROT 1 DO FIB ROT DROP LOOP SWAP DROP ; ok > 10 FIBN . 55 ok ``` Propser also has a basic off-stack memory model using variables and pointers: ``` > VARIABLE FOO ok > 10 FOO ! ok > FOO @ ok > . 10 ok ``` And, of course, it knows how to quit: ``` > BYE bye ``` ## Future Plans * Implement `CONSTANT` * 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...)