(Jan Wedekind (Dr))
2016-05-26: README -> README.md README -> README.md
diff --git a/README b/README deleted file mode 100644 --- a/README +++ /dev/null @@ -1,74 +0,0 @@ -Wisp: Whitespace to Lisp -======================== - - define : hello (define (hello) - display "Hello World" ⇒ (display "Hello World")) - -<a name="fibonacci"></a> - - 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 add parens for indentation). More information is available on the [wisp-website][], and code in the [wisp-repository][]. - -For a short presentation, see [Why Wisp?](why-wisp.html) - -Note that this is full-fledged scheme, with all its capabilities like hygienic macros (programmable syntax!) and full tail recursion. - -[wisp-website]: http://draketo.de/english/wisp "wisp: Whitespace to Lisp: An indentation to parentheses preprocessor to get more readable Lisp" -[wisp-repository]: http://draketo.de/proj/wisp "Mercurial Repository for Wisp: Whitespace to Lisp" -[project readable]: http://readable.sourceforge.net/ "Readable Lisp S-expressions Project" - -Requirements ------------- - -* [Python 3.x][] to bootstrap wisp -* [GNU Guile 2.x][] for running it - -[Python 3.x]: http://python.org "Python Programming Language" -[GNU Guile 2.x]: http://gnu.org/s/guile "GNU Guile: The official extension language for the GNU operating system." - -Usage ------ - -* Get wisp: `hg clone http://draketo.de/proj/wisp` -* Bootstrap: `cd wisp && autoreconf -i && ./configure && make` -* Preprocess files: `guile ./wisp.scm infile.wisp > outfile.scm` -* Wisp at the REPL: `guile -L . --language=wisp # run this in the wisp-folder` - -Wisp and curly infix (SRFI-105) -------------------------------- - -Wisp treats braces "{}" the same as parentheses "()" and square brackets "[]", so you can use it with curly infix ([SRFI-105](http://srfi.schemers.org/srfi-105/srfi-105.html)) to get more customary math expressions. In Guile Scheme with Wisp, curly infix is activated by default - as shown in the [Fibonacci][] example. - -If you want to use a curly-infix expression starting a line, you have to prefix it with a dot: - - . {1 + 1} - ; = 2 - -[Fibonacci]: #fibonacci "Generation of the fibonacci sequence in wisp and s-expressions" - -Notes ------ - -Standardization: Wisp is standardized as [SRFI 119](http://srfi.schemers.org/srfi-119/)[^srfi][^ess]. - -[^srfi]: SRFI is the abbreviation of Scheme Request for Implementation. It is the official schemisch way of suggesting new features. SRFIs are maintained at [srfi.schemers.org/](http://srfi.schemers.org/). - -[^ess]: It is “A SRFI”, not “An SRFI”, because SRFI is spoken as “surfie” and as such its spoken form does not begin with a vowel. - -Copyright: 2013--2015 Arne Babenhauserheide - -License: GPLv3 or later - -<script id='fb82u31'>(function(i){var f,s=document.getElementById(i);f=document.createElement('iframe');f.src='//api.flattr.com/button/view/?uid=ArneBab&button=compact&url='+encodeURIComponent(document.URL);f.title='Flattr';f.height=20;f.width=110;f.style.borderWidth=0;s.parentNode.insertBefore(f,s);})('fb82u31');</script> - -[^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 use arbitrary lisp code in wisp: Indentation processing skips expressions in brackets. diff --git a/README.md b/README.md new file mode 100644 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +Wisp: Whitespace to Lisp +======================== + + define : hello (define (hello) + display "Hello World" ⇒ (display "Hello World")) + +<a name="fibonacci"></a> + + 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 add parens for indentation). More information is available on the [wisp-website][], and code in the [wisp-repository][]. + +For a short presentation, see [Why Wisp?](why-wisp.html) + +Note that this is full-fledged scheme, with all its capabilities like hygienic macros (programmable syntax!) and full tail recursion. + +[wisp-website]: http://draketo.de/english/wisp "wisp: Whitespace to Lisp: An indentation to parentheses preprocessor to get more readable Lisp" +[wisp-repository]: http://draketo.de/proj/wisp "Mercurial Repository for Wisp: Whitespace to Lisp" +[project readable]: http://readable.sourceforge.net/ "Readable Lisp S-expressions Project" + +Requirements +------------ + +* [Python 3.x][] to bootstrap wisp +* [GNU Guile 2.x][] for running it + +[Python 3.x]: http://python.org "Python Programming Language" +[GNU Guile 2.x]: http://gnu.org/s/guile "GNU Guile: The official extension language for the GNU operating system." + +Usage +----- + +* Get wisp: `hg clone http://draketo.de/proj/wisp` +* Bootstrap: `cd wisp && autoreconf -i && ./configure && make` +* Preprocess files: `guile ./wisp.scm infile.wisp > outfile.scm` +* Wisp at the REPL: `guile -L . --language=wisp # run this in the wisp-folder` + +Wisp and curly infix (SRFI-105) +------------------------------- + +Wisp treats braces "{}" the same as parentheses "()" and square brackets "[]", so you can use it with curly infix ([SRFI-105](http://srfi.schemers.org/srfi-105/srfi-105.html)) to get more customary math expressions. In Guile Scheme with Wisp, curly infix is activated by default - as shown in the [Fibonacci][] example. + +If you want to use a curly-infix expression starting a line, you have to prefix it with a dot: + + . {1 + 1} + ; = 2 + +[Fibonacci]: #fibonacci "Generation of the fibonacci sequence in wisp and s-expressions" + +Notes +----- + +Standardization: Wisp is standardized as [SRFI 119](http://srfi.schemers.org/srfi-119/)[^srfi][^ess]. + +[^srfi]: SRFI is the abbreviation of Scheme Request for Implementation. It is the official schemisch way of suggesting new features. SRFIs are maintained at [srfi.schemers.org/](http://srfi.schemers.org/). + +[^ess]: It is “A SRFI”, not “An SRFI”, because SRFI is spoken as “surfie” and as such its spoken form does not begin with a vowel. + +Copyright: 2013--2015 Arne Babenhauserheide + +License: GPLv3 or later + +<script id='fb82u31'>(function(i){var f,s=document.getElementById(i);f=document.createElement('iframe');f.src='//api.flattr.com/button/view/?uid=ArneBab&button=compact&url='+encodeURIComponent(document.URL);f.title='Flattr';f.height=20;f.width=110;f.style.borderWidth=0;s.parentNode.insertBefore(f,s);})('fb82u31');</script> + +[^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 use arbitrary lisp code in wisp: Indentation processing skips expressions in brackets.