Pico8Lisp
source link: https://www.lexaloffle.com/bbs/?tid=44438
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Pico8lisp is a small lisp interpreter built on PICO-8 virtual machine!
The shell is currently inflexible. Parse errors typically crash or exhaust memory.
If your environment crashes, reload the page to reset.
You can find a walkthrough of the programming language features on my github here: https://github.com/andrewguy9/pico8lisp
Language Specification:
Literals
Numbers
Literal numbers are just the numbers themselves.
> 123 123
Symbols
Symbols are used as names for forms/functions/constants/just about anything. Symbols can be written as series of letters a-z. More on that later.
Nil can be written as nil
> nil ()
Note that nil evaluated to an empty list (). That's because the symbol nil is bound to the empty list. This is the only false value in picolisp!
Boolean
Everything except nil is true.
But we do have a special value to represent truth.
> $t $t
Expressions
Calling Functions
The first element of a list is assumed to be a function.
> (+ 1 2) 3
You can even nest list expressions.
> (+ (+ 1 2) 3) 6
At the moment, we only have +.
Clear screen
If your repl gets confusing, clear the screen
(clear)
Lists
You can write a list literal with the quote function.
> (quote (1 2 3)) (1 2 3)
Quote prevents the list from being evaluated!
There is a special quote operator to make this to read.
> '(1 2 3) '(1 2 3)
Symbols
By default symbols are evaluated, but you can prevent that with quote.
> 'mysymbol mysymbol
You can define global symbols with a value.
> (def age 38) 38 > age 38
local bindings
While def symbols are globally available, you can make locally scoped definitions with let
> (let (x 3 y 2) (+ x y)) 5
You can define functions
Use defn to make a function globally accessible.
> (defn inc (x) (+ x 1)) (fn (x) (+ x 1)) > (inc 2) 3
If statements
Branches are supported by if statements.
> (if (= 1 1) 'happy 'sad) happy > (if (= 1 2) 'happy 'sad) sad
If else if..., else statements are supported via cond
> (def x 1) > (cond (= x 0) 'zero (= x 1) 'one $t 'other) one
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK