Stone 第10週
N. Shimizu (chiko@tom.sfc.keio.ac.jp / @chikoski)
今週の進
•   変数の宣言ができるようになった

•   再帰呼び出しできるようになった!

    •   環境の退避が問題だった

    •   関数呼び出しの評価時に退避するようにした

•   関数の中で関数を定義できるようになった
再帰呼び出し


def fact(n){                 fact(10)
    ret = 1
    if(n > 1){
        prev = fact(n - 1)
        ret = prev * n
    }
    ret
}
関数内で定義されている関数


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
外側のブロックの変数を参照できる


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
静的スコープ


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
To Do
•   関数内で定義された関数の再帰呼び出しは
    できるのか確認する

•   関数内で定義された二つの関数の、
    相互の呼び出しができるかどうかを確認する
今後の野望
言語仕様的な野望


•   高階関数

•   無名関数

•   関数を返す関数

•   継続

•   文脈に応じた評価(null など)

•   オブジェクト指向
言語仕様的な野望(つづき)


•   データ型をつくれるようにする

    •   配列、リスト

    •   ハッシュ

•   記号処理、文字列処理

•   return 文をつくる

•   Scheme への変換
開発環境的な野望


•   ブラウザ上でのプログラミング

    •   評価器、構文解析器のWeb API化

    •   エディタ?

•   ビジュアルプログラミング言語

•   内部の可視化

•   あと何かありますかねー

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

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