このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

こんなRuby言語

Ruby言語ってご存知ですか?

インタプリタを開始すると、次のようなバナーが出るようです(動かしたことないけど)。


                                                              • +
`The Ruby Interpreter'
Copyright 1993 Graham Hutton
graham@cs.chalmers.se
                                                              • +

ソースコードは、こんな宣言で始まるようです。


type prog = PRIM prim + SWAP + FORK +
SEQ prog prog + PAR prog prog + INV prog

type prim = AND + NOT

type network == (List node # wire # wire)

type node == (wire # prim # wire)

type wire = NAME Int + TUPLE (List wire)

んで、なんかトランスレーションの定義が並んだりする。


translate (SEQ p q,x) =
let rec ((ns1,d1,r1),y) = translate (p,x)
and ((ns2,d2,r2),z) = translate (q,y)
and s = unify (r1,d2)
and f (d,prm,r) = (apply s d, prm, apply s r)
in ((map f (ns1 @ ns2), apply s d1, apply s r2),z)

translate (SEQ (PRIM AND) (PRIM NOT),1) =
(([(TUPLE [NAME 1;NAME 2],AND,NAME 4);
(NAME 4,NOT,NAME 5)],
TUPLE [NAME 1;NAME 2],NAME 5),6)

translate (SEQ FORK (PRIM AND),1) =
(([(TUPLE [NAME 3;NAME 3],AND,NAME 4)],NAME 3,NAME 4),5)

translate (PAR (PRIM NOT) (INV (PRIM NOT)),1) =
(([(NAME 1,NOT,NAME 2);(NAME 3,NOT,NAME 4)],
TUPLE [NAME 1;NAME 4],TUPLE [NAME 2;NAME 3]),5)

translate (SEQ FORK FORK,1) =
(([],NAME 1,TUPLE [TUPLE [NAME 1;NAME 1];
TUPLE [NAME 1;NAME 1]]),3)

ヘーッ。って、よく分かりません。

このRuby言語については、http://www.cs.nott.ac.uk/~gmh/thesis.pdf に記述されています。