転ぶ人
http://lemonodor.com/archives/001154.html
一番問題に適した言語を使えばいいんじゃないかなあ。
とかいいながら、 私自身も本業の scheme で書かれたシミュレータを少しずつ erlang に置き換え作業中であるのは公然の秘密だ。
`OpenBSD で scheme のアプリ開発' みたいなことをやってます。
http://lemonodor.com/archives/001154.html
一番問題に適した言語を使えばいいんじゃないかなあ。
とかいいながら、 私自身も本業の scheme で書かれたシミュレータを少しずつ erlang に置き換え作業中であるのは公然の秘密だ。
via: c.l.s
タイトルだけ抜粋してみた。
いくつ残るか知らないけど、 どれが残っても大改造に違いない。
先日 arc を紹介したけど、これってもうメンテナンスされていないっぽい。
で、スレッドの流れとしては、
結局収集つかないのかよ。
conjure は scmxlate を使って scheme 間の壁を越えようとしてるけど、 肝心の中身はいまひとつかなあ。 arc と同じ理由で、なんだけど。
http://www.eyestep.org/arc.html
via: c.l.s
Scheme で autoconf, automake, libtool, make の代替になるツールを作成するプロジェクト。
INSTALL によれば、scm, guile 1.3以降, または ksi で動作とのこと。 自前のインタプリタ asc もあるらしい。
せっかくなので、--scheme=asc で configure してみる。
で、ビルドなのだが、configure が OS の判定しているので OpenBSD だとこける、ので、 FreeBSD のマネをしてみる。 あとは strcat, strcpy がアレなので細々と訂正(arc-20050425.diff) 。てか、今気づいたけど、$HOME あふれ攻撃できるな。これ。
とりあえずインストールまではこれでオッケー。
お約束の hello.c のビルド。
$ cat src/hello.c main() { printf("hello,world"); }
Makefile に相当するのが Arcfile で、こんな感じ。
$ cat Arcfile (project sample-project basedir: "src/" default: 'link) (stmt build-dir "_build") (stmt init (mkdir dir: (-> build-dir))) (stmt c-sources (fileset pattern: "*.c")) (stmt compile depends: 'init (c-compile sources: (-> c-sources) shared?: #t outdir: (-> build-dir) )) (stmt link (link files: (-> compile) shared?: #t appnm: "hello"))
arc の README に書いてある例が out of date な気がする。 doc/ 以下の方が -current を反映しているらしいので texinfo 必須。
使ってみて思ったけど、なんというか、m4 の地獄マクロよりはマシ、mk の手抜き Makefile よりは不便かなあ。 S 式じゃなくてインデント形式にしたら、プロパティをタグごとに付けられる Makefile だった、 とかいうオチもありうる。
それと、細木数子じゃないけど、名前がよくないよな。 アーカイバの arc とモロに名前が衝突しているんですけど。 あ、Paul Graham のインタプリタもそうか。
arc のプログラムを arc でインストールして arc で圧縮して配布、とか。
もっと問題なのはぐぐっても出てこないことか。名前重要。
jscm っていうのは javascript で書かれた scheme インタプリタ。 バグがいくつかあるし、標準的な手続き(eq? とか)がちょっと足りないのでいじってみた。
重いけど遊んでやってください。
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"))))
とかやってみるとよろし。
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 はあるよ)
さて、これを使って遊ぶぞー。