11
Stone 第10週 N. Shimizu ([email protected] / @chikoski)

2週間できる!スクリプト言語の作り方 第10回

Embed Size (px)

DESCRIPTION

http://www.amazon.co.jp/dp/4774149748 を実装してみよう、という試みです。本の第6週位までの内容をつくってあります。

Citation preview

Stone 第10週

N. Shimizu ([email protected] / @chikoski)

今週の進捗• 変数の宣言ができるようになった• 再帰呼び出しできるようになった!• 環境の退避が問題だった• 関数呼び出しの評価時に退避するようにした• 関数の中で関数を定義できるようになった

def fact(n){ ret = 1 if(n > 1){ prev = fact(n - 1) ret = prev * n } ret}

fact(10)

再帰呼び出し

def main(n){ var i = 0; var c = 1; var ret = 0; while(i < n){ ret = add(ret, i); i = i + 1 } ret

def add(a, b){ a + b + c; }}

main(10);

関数内で定義されている関数

def main(n){ var i = 0; var c = 1; var ret = 0; while(i < n){ ret = add(ret, i); i = i + 1 } ret

def add(a, b){ a + b + c; }}

main(10);

外側のブロックの変数を参照できる

これを参照

def main(n){ var i = 0; var c = 1; var ret = 0; while(i < n){ ret = add(ret, i); i = i + 1 } ret

def add(a, b){ a + b + c; }}

main(10);

静的スコープ

これを参照

To Do• 関数内で定義された関数の再帰呼び出しはできるのか確認する

• 関数内で定義された二つの関数の、相互の呼び出しができるかどうかを確認する

今後の野望

• 高階関数• 無名関数• 関数を返す関数• 継続• 文脈に応じた評価(null など)• オブジェクト指向

言語仕様的な野望

• データ型をつくれるようにする• 配列、リスト• ハッシュ• 記号処理、文字列処理• return 文をつくる• Scheme への変換

言語仕様的な野望(つづき)

• ブラウザ上でのプログラミング• 評価器、構文解析器のWeb API化• エディタ?• ビジュアルプログラミング言語• 内部の可視化• あと何かありますかねー

開発環境的な野望