Misc Change Log

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

2005-05-27

転ぶ人

http://lemonodor.com/archives/001154.html

一番問題に適した言語を使えばいいんじゃないかなあ。

とかいいながら、 私自身も本業の scheme で書かれたシミュレータを少しずつ erlang に置き換え作業中であるのは公然の秘密だ。

Posted at 15:25 | Permalink | Category | Comments
2005-04-29

R6RS Progress Report

http://www.schemers.org/...

via: c.l.s

タイトルだけ抜粋してみた。

いくつ残るか知らないけど、 どれが残っても大改造に違いない。

Posted at 16:28 | Permalink | Category | Comments
2005-04-26

Scheme のビルド環境

先日 arc を紹介したけど、これってもうメンテナンスされていないっぽい。

で、スレッドの流れとしては、

結局収集つかないのかよ。

conjure は scmxlate を使って scheme 間の壁を越えようとしてるけど、 肝心の中身はいまひとつかなあ。 arc と同じ理由で、なんだけど。

Posted at 02:25 | Permalink | Category | Comments
2005-04-25

arc - the arc build tool project

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 で圧縮して配布、とか。

もっと問題なのはぐぐっても出てこないことか。名前重要。

Posted at 11:14 | Permalink | Category | Comments
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