Misc Change Log

`OpenBSD で scheme のアプリ開発' みたいなことをやってます。

2005-03-25

jscm をいじってみる

jscm っていうのは javascript で書かれた scheme インタプリタ。 バグがいくつかあるし、標準的な手続き(eq? とか)がちょっと足りないのでいじってみた。

重いけど遊んでやってください。

http://quasiquote.org/repl

プリミティブ

begin, lambda, define, defmacro, list, quote, quasiquote, unquote, unquote-splicing

ビルトイン関数

cons, car, cdr, eq?, eqv?, memq, memv, assq, assv, length, reverse, append, pair?, list?, symbol?, string?, number?, +, -, *, /, remainder, floor, ceiling, exp, log, sin, cos, tan, asin, acos, atan, sqrt, and, or, =, <, <=, >, >=, random-real, number->string, string->number, null?, set-cookie!, get-cookie, make-string, string-append, string-length, string-ref, substring, symbol->string, obj->string, string-match, string-search, document->sxml, sxml->document!, display, error, print-string, gensym, eval

sxml 経由で DOM を呼べるようにしたので、実用になるかな。

(document->sxml)

とか、

(sxml->document!
 '(html
   (body
    (h1 (@ (style "color:red")) "hello")
    (p (@ (style "color:blue")) "world"))))

とかやってみるとよろし。

その他手続き(from tinyscheme)

not, last?, xcons, caar, cadr, cdar, cddr, caaar, caadr, cadar, caddr, cdaar, cdadr, cddar, cdddr, caaaar, caaadr, caadar, caaddr, cadaar, cadadr, caddar, cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cddadr, cdddar, cddddr, map, for-each, list-tail, list-ref, last-pair, let, let*, foldl, foldr, unless, when, cond, equal?, even?, odd?, zero?, positive?, negative?, quotient, abs, <> max, min, succ, pred, gcd, lcm, member, assoc

既知の不具合

関数を受けとり、関数を返す関数が動かない。非常に痛い。

(define (one op) (lambda (y) (op y 1)))
((one +) 1)
=> error

cons の扱いが変, member の動きがあやしい

まだ無い機能

文字型(#\), vector, apply, set!, 名前付き let, letrec, delay/force, call/cc, define-syntax(defmacro, gensym はあるよ)

さて、これを使って遊ぶぞー。

Posted at 22:19 | Permalink | Category | Comments