Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,522 views

Published on

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

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Stone 第10週N. Shimizu (chiko@tom.sfc.keio.ac.jp / @chikoski)
  2. 2. 今週の進• 変数の宣言ができるようになった• 再帰呼び出しできるようになった! • 環境の退避が問題だった • 関数呼び出しの評価時に退避するようにした• 関数の中で関数を定義できるようになった
  3. 3. 再帰呼び出しdef fact(n){ fact(10) ret = 1 if(n > 1){ prev = fact(n - 1) ret = prev * n } ret}
  4. 4. 関数内で定義されている関数def main(n){ def add(a, b){ var i = 0; a + b + c; var c = 1; } var ret = 0; } while(i < n){ ret = add(ret, i); main(10); i=i+1 } ret
  5. 5. 外側のブロックの変数を参照できるdef main(n){ def add(a, b){ var i = 0; これを参照 a + b + c; var c = 1; } var ret = 0; } while(i < n){ ret = add(ret, i); main(10); i=i+1 } ret
  6. 6. 静的スコープdef main(n){ def add(a, b){ var i = 0; これを参照 a + b + c; var c = 1; } var ret = 0; } while(i < n){ ret = add(ret, i); main(10); i=i+1 } ret
  7. 7. To Do• 関数内で定義された関数の再帰呼び出しは できるのか確認する• 関数内で定義された二つの関数の、 相互の呼び出しができるかどうかを確認する
  8. 8. 今後の野望
  9. 9. 言語仕様的な野望• 高階関数• 無名関数• 関数を返す関数• 継続• 文脈に応じた評価(null など)• オブジェクト指向
  10. 10. 言語仕様的な野望(つづき)• データ型をつくれるようにする • 配列、リスト • ハッシュ• 記号処理、文字列処理• return 文をつくる• Scheme への変換
  11. 11. 開発環境的な野望• ブラウザ上でのプログラミング • 評価器、構文解析器のWeb API化 • エディタ?• ビジュアルプログラミング言語• 内部の可視化• あと何かありますかねー

×