Jasp
Jump to navigation
Jump to search
Everyone[citation needed] knows that object-oriented programming is superior to the list-oriented programming of the Lisp family, and that JSON is superior to S-Expressions. Introducing Jasp, a language that lets you program in a Scheme-like dialect using nothing but JSON!
Syntax
Symbol definition | { "operator": "define", "name": <string>, "value": <expr> } |
---|---|
Mutation | { "operator": "set!", "name": <string>, "value": <expr> } |
Reference |
If "x" is defined in the current environment,
|
Branching | { "operator:" "if", "predicate": <expr> , "then": <expr>, "else": <expr> } |
Sequencing | Jasp interprets naked arrays as sequences of instructions, like (begin) in Scheme.
[ { "operator": "set!", "name": "x", "value": 2 }, { "operator": "display", "arguments" [ "$x" ] }, "$x" // returns the value of "x" from the sequence ] |
Quotation | { "operator": "quote", "value": <expr> } |
Abstraction | { "operator": "lambda", "arguments": [ "string", "string", ... ] "body": <expr> // (can be an array, interpreted as a sequence) } |
Function application | { "operator": "foo", "arguments": [ 1, 2, 3 ] } |
Reflection | { "operator": "eval", "code": <quoted-expr> } |
Example
Here is a simple program to calculate the factorial of 100 and display it:
[ { "operator": "define", "name": "fact", "value": { "operator": "lambda", "arguments": [ "n" ], "body": { "operator": "if", "predicate": { "operator": "=", "arguments": [ "$n", 0 ] }, "then": 1, "else": { "operator": "*", "arguments": [ "$n", { "operator": "fact", "arguments": [ { "operator": "-", "arguments": [ "$n", 1 ] } ] } ] } } } }, { "operator": "display", "arguments": [ { "operator": "fact", "arguments": [ 100 ] } ] } ]