wisp srfi 119
play

Wisp - SRFI-119 define : factorial n if : zero? n . 1 * n : - PowerPoint PPT Presentation

Wisp - SRFI-119 define : factorial n if : zero? n . 1 * n : factorial {n - 1} I love the syntax of Python, but crave the simplicity and power of Lisp. Arne Babenhauserheide wisp January 27, 2016 1 / 10 Why Wisp? (Hello World!) Arne


  1. Wisp - SRFI-119 define : factorial n if : zero? n . 1 * n : factorial {n - 1} I love the syntax of Python, but crave the simplicity and power of Lisp. Arne Babenhauserheide wisp January 27, 2016 1 / 10

  2. Why Wisp? (Hello World!) Arne Babenhauserheide wisp January 27, 2016 2 / 10

  3. Why Wisp? ¥Hello World!£ Arne Babenhauserheide wisp January 27, 2016 2 / 10

  4. Why Wisp? Hello World! Arne Babenhauserheide wisp January 27, 2016 2 / 10

  5. Why Wisp? Hello World! The first and last letter are important for word recognition.¹ Over 70% of the codelines in the Guile scheme source start with a paren ⇒ ceremony. Many people avoid Lisp-like languages because of the parens.² ¹: Though not all-important. See www.mrc-cbu.cam.ac.uk/people/matt.davis/cmabridge/ ²: Also see srfi.schemers.org/srfi-110/srfi-110.html#cant-improve Arne Babenhauserheide wisp January 27, 2016 2 / 10

  6. The most common letters: Lisp and Scheme are awesome .,":’_#?!; The most common non-letter, non-math characters in prose¹ () The most common paired characters¹ ¹: From letter distributions in newspapers, see: bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/1-gramme.arne.txt Arne Babenhauserheide wisp January 27, 2016 3 / 10

  7. Wisp in a nutshell define : factorial n (define (factorial n) if : zero? n (if (zero? n) . 1 1 * n : factorial {n - 1} (* n (factorial {n - 1})))) indent as with parens, dot-prefix, inline-:, and use SRFI-105. Wisp uses the minimal syntax required to represent arbitrary structure: Syntax justification: draketo.de/english/wisp#sec-4 Many more examples in “From Python to Guile Scheme”: info: draketo.de/py2guile download: draketo.de/proj/py2guile/py2guile.pdf Arne Babenhauserheide wisp January 27, 2016 4 / 10

  8. Implementation REPL and Reader (language wisp spec) define-language wisp . #:title "Wisp Scheme Syntax.." . #:reader read-one-wisp-sexp Preprocessor (wisp.scm) . #:compilers ‘( (tree-il . ,compile-tree-il)) guile wisp.scm tests/hello.w . #:decompilers ‘( (tree-il . ,decompile-tree-il)) . #:evaluator (lambda (x module) (define (hello who) primitive-eval x) (format #t "~A ~A!\n" . #:printer write "Hello" who)) . #:make-default-environment (hello "Wisp") lambda : let : : m : make-fresh-user-module (Plan B: You can always go back) module-define! m ’current-reader make-fluid module-set! m ’format simple-format . m Arne Babenhauserheide wisp January 27, 2016 5 / 10

  9. Applications? Example: User Scripts Enter : First_Witch Second_Witch Third_Witch First_Witch When shall we three meet again In thunder, lightning, or in rain? This displays First Witch When shall we three meet again In thunder, lightning, or in rain? draketo.de/english/wisp/shakespeare Templates, executable pseudocode, REPL-interaction, configuration, . . . Arne Babenhauserheide wisp January 27, 2016 6 / 10

  10. Solutions Run examples/newbase60.w as script #!/usr/bin/env sh # -*- wisp -*- exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp \ -e ’(@@ (examples newbase60) main)’ \ -s "$0" "$@" ; !# define-module : examples newbase60 define : main args ... Use Wisp code from parenthesized Scheme precompile: guile --language=wisp module then just import as usual: (use-modules (...)) Arne Babenhauserheide wisp January 27, 2016 7 / 10

  11. Experience »ArneBab’s alternate sexp syntax is best I’ve seen; pythonesque, hides parens but keeps power« — Christopher Webber → dustycloud.org/blog/wisp-lisp-alternative/ Wisp is implemented in Wisp (850 lines, implementations). Examples: 4 lines (factorial) to 330 lines (advection on icosaheder). Arne Babenhauserheide wisp January 27, 2016 8 / 10

  12. Try Wisp Install guix package -i guile guile-wisp guile --language=wisp wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.0.tar.gz; tar xf wisp-0.9.0.tar.gz ; cd wisp-0.9.0/; ./configure; make check; examples/newbase60.w 123 http://draketo.de/english/wisp Emacs mode for syntax highlighting M-x package-install [RET] wisp-mode [RET] https://marmalade-repo.org/packages/wisp-mode Arne Babenhauserheide wisp January 27, 2016 9 / 10

  13. Thank you! ¨ ⌣ Arne Babenhauserheide wisp January 27, 2016 10 / 10

  14. Why not SRFI-110 or SRFI-49? SRFI-49 SRFI-110 + 5 * 4 3 myfunction 2 x: \\ original-x 1 y: \\ calculate-y original-y 0 Cannot continue the a b $ c d e $ f g argument list Wisp let <* x getx() \\ y gety() *> ! {{x * x} + {y * y}} + 5 most common letters? * 4 3 . 2 1 0 Arne Babenhauserheide wisp January 27, 2016 11 / 10

  15. Keep parens where they help readability cond : and (null? l) (zero? a) . ’() else cons a l map lambda (x) (+ x 1) list 1 2 3 Arne Babenhauserheide wisp January 27, 2016 12 / 10

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend