2009-09-01から1ヶ月間の記事一覧

memo

Wikiepdia にのっている SECD machine を見ると、なんだかメモリーの構成が書いてある。 アドレス タグ 内容 9 8 7 6 .. 2 1

memo

http://www.cs.utah.edu/~mflatt/past-courses/cs6510/public_html/lispm.pdf (defstruct cell (tag 'integer) (contents nil)) (make-array 1024 :element-type 'cell)うーん時間がない

SECD Machine SBCL ver.

common lisp でも SECD マシンを書いてみた。 gauche でコンシングの数を調べる方法は結局見つけられず。まだ機能として無いのかも。cons の実行回数を自分で数えてもいいけど SBCL にもプロファイルあり。time でコンシングの情報が手に入る。 SBCL には ut…

資料

http://www.geocities.jp/m_hiroi/func/abcscm33.html これは素晴らしい。SECD 仮想マシン。

profile

fib のプロファイルを最適化なしで取ってみた。 プロファイル無しだと 0.03 sec vs 11.5 sec(プロファイル付きで0.07 sec vs 14.25 sec) か。 いろいろ試しでもしないと速くなる気がしない。 gosh> (with-profiler (letrec ((fib (lambda (n) (if (< n 2) n …

secd in clojure

clojure でも secd machine を書いてみようとやってみて、あまりに clojure について知らなすぎることが分かった。 (cons 1 2) はエラー。(cons 1 (list 2)) は OK car, cdr はfirst,rest begin, progn のかわりに do cond,let は lisp に比べてカッコが一つ…

memo

http://d.hatena.ne.jp/KZR/20090915/p2 http://impromptu.moso.com.au/ これは。Processing 並の環境を scheme で?しかも LLVM も使ってる? 結構前からあるみたいだけど見逃してたっぽい。

toy VM 続き

gauche toy VM はまだ遠いので、SECD machine の続き。 LispMe の VM は SECD Machine をちょっと拡張したものになっている。特に理解しておきたいのが、シンプルに書けるという continuation(6.7,7.5) と、tail call(6.6, 7.4)。 まず末尾呼び出しの最適化…

こんにちは github

作ってみた。 http://github.com/cranebird/prj.secd うーん、なんか Loading Commit data... となったままなんだけどいいのだろうか。

LispMe

vm.c の PTR exec(void) を一部抜粋。cons とかはマクロ。 case LDC: /*------------------------------------------------------------*/ /* s e (LDC x.c) d --> (x.s) e c d */ /*------------------------------------------------------------*/ S = co…

twitter こんにちは

よくわからないけどtwitterを開始してみた。@quasicrane http://twitter.com/quasicrane/ Twitterrific.app http://www.kototone.jp/com/how_to_use_twittering-mode.html emacs クライアント

github こんにちは

github にリポジトリを作ろう。続く。

fink から macports へ

いまさらながら macports へ移行中。

secd 資料追加

しつこいがSECD で再帰関数を実行する例が欲しくて探していたら、COMPUT325: SECD Virtual Machine という資料を見つけた。 http://web.cs.ualberta.ca/~greiner/C-325/2004/325/2004/Slides/HandoutPDF/ 資料自体はいいのだけど、p35,p36 にある fact の例…

「採用面接ゲリラガイド」スーパースターと LispMe

http://local.joelonsoftware.com/wiki/採用面接ゲリラガイド%28version_3.0%29 「才能豊かなスーパースターがいて、彼らは週末に趣味でNintendo DS用のLispコンパイラをアセンブラで書いていたりする。」http://local.joelonsoftware.com/wiki/ゲリラ的雇用…

secd Machine DUM, RAP

再帰的な定義のためのインストラクション,DUM, RAP を一応実装した。まだ怪しいところがある。 RAP は set-car! を使って環境を書き換える。結果として循環構造を持ったリストができる。(※この時点で間違っている可能性あり。例がほとんどなく自信無し) と…

循環リスト

以前も似たようなことではまったのでメモ。 循環リストは以下のように破壊的操作によって作成できる。一般的に循環リストを gauche で素朴に印字してはならない。例えば : gosh> (define x (cons 1 2)) gosh> (set-car! x x) gosh> x #0=(#0# . 2) gosh> (pr…

haskell 入門

うーん、やっぱり haskell はまだ全く勉強不足。コンパイルを通すだけできつい。incremental に何か作れる気がまるでしないな。最初から定義を書き下せるくらいでないと。 以下、全く自信のない secd machine in haskell の途中。GHC 6.6 環境。 *Main> secd…

secd machine 分解

SECD マシンの実行過程を分解して見る。 gosh> (run '((lambda (x) (+ x 3)) 4)) s e (NIL LDC 4 CONS LDF (LDC 3 LD (1 . 1) + RTN) AP . c) dc の先頭は NIL。 NIL は NIL をスタックs に積む。 (NIL . s) e (LDC 4 CONS LDF (LDC 3 LD (1 . 1) + RTN) AP …

LLTV 資料

http://ll.jus.or.jp/2009/slides/ 後で読む。特に CiSE 。JiSE(Java in S expression) とかどこかにないかしら。 Clojure はまた微妙に違うしなぁ。 (そういえばもう随分前に Clojure 本を PDF(beta bookとかいうやつ)で買ったけどほとんど読めてない‥)

Shibuya.lisp

http://shibuya.lisp-users.org/2009/08/31/sltt-4-1/ 11月7日。はやくも第4回。いい勢いだ。11月にどこで何の仕事をしているか、すら予測できないていたらくだが、参加できるといいなぁ。

Architecture of LISP Machines

http://www.cs.utah.edu/~mflatt/past-courses/cs6510/public_html/lispm.pdf あれ、VM を調べていたはずなのに何故か Lisp Machine に辿り着いた?

secd machine compiler

まだテスト不足だけど secd machine 用コンパイラを書いた。一応以下のような再帰関数も書けて、ちゃんと VM で動く。いまさらだけど、グローバルな束縛が無いにも関わらず、再帰計算(のような計算。正確な名前は知らない)ができるのは面白い。 gosh> (print…

secd machine と util.match

gauche の util.match を使えばもっとずっと短く明快に、定義そのままに secd machine を書けることに今さら気づいた。やはりオブジェクトじゃなくリストで十分だった。うーん、パターンマッチは本当に強力だ。全体を見直したところ、完全に資料(http://www.…