scheme

SICP 2.2.4の図形言語をブラウザ上に実装してみた

2012-04-07: 新しいブラウザでうまく動いてなかったので修正しました(関数の引数にclassという名前を使っていた)してみました。 こないだ社内SICP勉強会で図形言語のところをやったんだけど、動かしてみなければわかりづらいし手軽に動かせる環境がない。各…

言語開発合宿での成果物:jsでScheme

09/21-23の間、言語開発合宿に参加してきました。 最初は恐ろしくて参加をためらっていたのですが、ujihisaという人の執拗な誘いもあって思い切って参加してみたところ大変楽しかったです。素敵な会にお誘いいただきありがとうございました。情報科学系のす…

( (call/cc call/cc) (call/cc call/cc) )

http://www.coins.tsukuba.ac.jp/~i021216/diary/?date=20070614#p01 えーと(混乱中) まず(call/cc call/cc)を考える。この呼び出しはこの式を評価した直後への継続c1を作成し、それを引数(すなわちcall/cc)へ適用する。 (call/cc call/cc) ;ここがc1 ↓ …

compile-time schemeの実装

こないだ作ったやつについて、もう少々。 schemeの基本となるデータ型はconsだけど、これは template<typename CA,typename CD> struct Cons { typedef CA car; typedef CA cdr; }; という型で表現される。CA,CDには任意の型を指定できるわけだが、int型の値はそのままでは入らないの</typename>…

compile-time schemeで副作用のある操作を行う

set!なんて静的にどうにかなりそうなのじゃなくて、I/Oとか乱数とかdynamicに評価しないと絶対どうにもならないやつをどうするか―― つまりモナド的なアレの導入を! まず、静的に評価可能な操作とそうでない操作は静的に識別可能(ややこしい)。すなわち: 定…

C++でSchemeつづき

(define m 1000) (define p (lambda (x y z) x)) (define q (lambda (x y z) y)) (define r (lambda (x y z) m)) (define t (lambda (x th el) (if (= x 0) (th) (el))) (p 1 2 3) => 1 (q 1 2 3) => 2 (r 1 2 3) => 1000 (t 0 (lambda () 1111) (lambda () …

C++でcompile time Schemeをつくってみる計画

こんなことばかりしてるとSchemeが病的に好きな人みたいに思われそうですが、特にそういうこともありません(それどころかSchemeでまともなプログラムを組んだこともない始末)。 それはともかく、Generic ProgrammingとかModern C++ Designとか読んでたら非常…

RubyでSchemeを作ってみたよ今度こそ。

ちゃんとREPLでインタープリット!末尾再帰最適化!継続なし!(でも原理的にはすぐ実装できるはず……!)中間言語方式! class Cons def initialize(a,d) @car=a @cdr=d end attr_accessor :car attr_accessor :cdr def cadr cdr.car end def caddr cdr.cadr …

C#でSchemeを作ってみた

S式をコンパイルしてVMで実行するタイプ。末尾再帰最適化あり。call/ccあり。syntax-rulesあり(一部。もちろんhygienic )。これも去年ごろ製作したものを諸般の事情により公開。 評価機はhttp://www.cs.indiana.edu/~dyb/papers/3imp.pdfを参考にした。 で…

突然ですがRubyでSchemeのサブセットを実装します。継続と末尾再帰最適化ありの。その1:データ構造とパーサ

Scheme/Lispを実装してみようって企画はたまにあるのですが*1、どれもこれも無限ループするとスタックオーバーフローする始末。末尾再帰最適化もないような代物にSchemeを名乗る資格はございませんことよ。 というわけで、この私がRubyでScheme(末尾再帰最…

調子に乗ってS式評価機を

もはやantlrと何の関係もない……!

ANTLRの練習としてS式構築機を

まずデータ構造を定義してだな(割愛)、あとはパーサを改造して、

ANTLRの練習としてS式パーサをつくってみる

試行錯誤した結果grammerはこんなふうになった。 options { language = "CSharp"; namespace = "Parser"; // encapsulate code in this namespace } class SExprParser extends Parser; options { k = 2; } sexpr : atom | list | QUOTE sexpr ; list : OPAR…