+
2
|
list
|
skin
|
login
|
editor
α-wwwiki
::
psil2
user:none
(2545 bytes)
_h1 psil{sup 2} (see [[evaluator]]) _p Some evolution from [[psil]] : _ul 1) 19/06/2013 : I discover on Github a [[smart pocket lisp interpreter|https://gist.github.com/pabloPXL/1679611]] written by [[Pablo Vidal|https://github.com/pabloPXL]]. Code must be written like this : {b ['*',3,4] -> 12} _ul 2) 20/06/2013 morning : I discover on Github a [[lazy lisp lexer|https://gist.github.com/WeRelax/5777042]] written by [[Elias Alonzo|Elías Alonso]]. Code can be written like this : {b (* 3 4) -> 12} _ul 3) 20/06/2013 afternoon : I add some code from lambdatalk in order to be able to write more then one s-expression on several lines. _ul 4) I mix all these things in a 150 lines file stored in the plugins folder : [[psil.js|plugins/psil.js]]. _p The Result is a true lisp console integrated in the wiki page ! _h3 1) test code _p Opening the wiki editor, you can modify this code, then click on the two buttons below and see the result. {pre {@ id="input"} 1] BASICS (set a 42) a (eq 42 a) (quote (1 2)) (fst (quote (1 2))) (rst (quote (1 2))) (cons 1 (quote (2 3))) (cond (eq 1 2) 42 43) (atom (quote (1 2))) (set second (quote (lambda (x) (fst (rst x)) ) ) ) (second (quote (1 2 3))) 2] MATH OPERATORS (set y 10) (set z 11) (cond (eq y z) true false) (++ 10) (-- 10) (* 1 2 3 4 5 6) (/ 1 5) (/ 1 0) 2] MATH FUNCTIONS (sqrt 2) (exp 1) (cos (/ 3.14192 4)) 3] USER FUNCTIONS (set square (quote (lambda (x) (* x x) ) ) ) (square 4) (set hypo (quote (lambda (a b) (sqrt (+ (* a a) (* b b))) ) ) ) (hypo 3 4) (set root (quote (lambda (a b c) (/ (+ (- 0 b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a)) ) ) ) (root 1 -1 -1) (set derivee (quote (lambda (f x dx) (/ (- (f (+ x dx)) (f (- x dx)) ) (* 2 dx) ) ) ) ) (derivee sqrt 1 0.001) 4] OTHERS TO ANALYZE // no recursive functions // no inline defined functions // no currying/partial application // a function cannot return a function } {center First {input {@ type="submit" value="include the interpreter" onclick="°° var js = document.createElement('script'); js.src = 'plugins/psil.js'; document.body.appendChild( js ); this.value = 'OK, psil is included !'; this.disabled='disabled'; °°"}} then {input {@ type="submit" value="read evaluate print" onclick="read_evaluate_print()"}} } _h3 2) the result {pre {@ id="output"}}