1.3.0 • Published 9 years ago
solo-lisp v1.3.0
Solo Lang
Minimal lisp syntax to plain and readable JavaScript compiler
Solo is not a separate language but really a way of writing JavaScript in a lispy syntax. See for yourself...
Getting started
$ npm install -g solo
$ echo "(def square (function (x) (* x x))) (console.log (square 5))" > test.sl
$ solo test.sl
'use strict';
let square = function (x) {
return x * x;
};
console.log(square(5));
$ solo test.sl | node --harmony
25
Documentation
Example | Solo | JavaScript |
---|---|---|
Operators | (+ 1 2) | 1 + 2; |
(/ 4 2) | 4 / 2; | |
(/ (* 2 6) 3) | (2 * 6) / 3; | |
(% (+ (- 5 1) 4) 2) | (5 - 1 + 4) % 2; | |
(=== 5 "5") | 5 === "5"; | |
(instanceof "asd" Date) | "asd" instanceof Date; | |
(typeof "rick") | typeof "rick"; | |
(void 0) | void 0; | |
Conditionals | (if (> 2 1) "yes" "no") | 2 > 1 ? "yes" : "no"; |
Assignment | (def x 2) | let x = 2; |
(set! module.exports square) | module.exports = square; | |
Objects | (new Date) | new Date(); |
(new Array 5) | new Array(5); | |
(get 0 arr) | arr[0]; | |
(get "x" o) | o["x"]; | |
(get ch ba) | ba.ch; | |
Types | "str\nrts" | "str\nrts"; |
4 | 4; | |
4.5 | 4.5; | |
true | true; | |
false | false; | |
null | null; | |
[1 2 3] | [1, 2, 3]; | |
{a 1 b 2 c 3} | {a: 1, b: 2, c: 3}; | |
(fn prop1 prop2) | fn(prop1, prop2); | |
; comment |
| |
Other | (try) | try {} finally {}; |
(try (catch (xx))) | try {} catch (xx) {} | |
(try (throw "oops") (+ 1 2) (catch (e) (console.log e))) | try {throw 'oops'; 1 + 2;} catch (e) {console.log(e);} | |
(do) | (function() {}()); | |
(do (set! a 1) (set! b "2")) | (function () {a = 1; b = "2";}()) |
Supported Primitives
if function new try catch finally do
instanceof typeof void throw
def set!
+ - * / %
< <= > >= || && == === != !==
null? true? false?
undefined? boolean? number? string? object? array? function?
Contribute
License
MIT (see LICENSE
file)