ウォンツテック

そでやまのーと

sLisp

 今度書く記事のためにelispLISPインタープリタ「sLisp」を書きました。
http://github.com/sodeyama/slisp/blob/master/slisp.el

lisp言語で書いてはいますが、読み込んだ文字列をそのままread関数でS式をパースするような事はせず、
その他の言語で行うのと同じ処理を行っています。
具体的に言うと

をしています。

あと、以下の特徴のようにelispっぽいです。

sLispの特徴

  • 変則動的スコープ
  • 末尾最適化無し
  • 遅延評価無し

sLisp対応primitive

  • 四則演算
  • 論理演算(or, and, not)
  • 不等号(=, <, >)
  • 条件(if, cond)
  • setq
  • let
  • progn
  • defun
  • lambda
  • print (数値、文字列、真偽値の表示)

sLispサンプルコード

(defun fib (n)
  (if (= n 0) 0
    (if (= n 1) 1
      (+ (fib (- n 1)) (fib (- n 2))))))

(print (fib 5))

(setq result ((lambda (x y) (fib (+ x y))) 5 3))
(defun hoge (x)
  (let ((a 10))
    (progn
      (print "aa")
      (+ (* a result) x))))

(print (hoge 3))

結果

5
aa
213