Wisp: Whitespace to Lisp ======================== define : hello (define (hello) display "Hello World" ⇒ (display "Hello World")) define : fibonacci n (define (fibonacci n) let rek : (i 0) (u 1) (v 1) (let rek ((i 0) (u 1) (v 1)) if : >= i : - n 2 ⇒ (if (>= i (- n 2)) . v v rek (+ i 1) v (+ u v) (rek (+ i 1) v (+ u v))))) Wisp turns indentation based syntax into Lisp. The conversion is homoiconic[^h], generic[^g], and backwards-compatible[^b]. It is inspired by project readable, but tries to keep itself simple (and stupid: just a preprocessor). More information on the [wisp-website][] and code in the [wisp-repository][]. [wisp-website]: http://draketo.de/light/english/wisp-lisp-indentation-preprocessor [wisp-repository]: http://draketo.de/proj/wisp Bootstrap: `autoreconf -i && ./configure && make` Usage: `guile ./wisp.scm infile.wisp > outfile.scm` Usage on the REPL: `guile -L . --language=wisp # run this in the wisp-folder` Also see `./wisp-multiline.sh --help` License: GPLv3 or later. [^h]: Wisp is homoiconic because everything you write gets turned into lisp which is homoiconic. [^g]: Wisp is generic, because it works for any language which uses brackets to start a function call - which is true for most lisps. You simply get rid of the speerwall of parentheses without losing their power. [^b]: Wisp is backwards compatible, because you can simply use arbitrary lisp code in wisp: Indentation processing skipps expressions in brackets.