技術

7.4. 万華鏡における変更可能な変数

LLVMによるプログラミング言語の実装チュートリアル日本語訳
第7章 万華鏡: 言語の拡張: 変更可能な変数(Mutable Variables)
第4節 万華鏡における変更可能な変数

さて、解決すべき問題の性質が分かったので、万華鏡言語のコードとしてどんな感じになるか見てみよう。
我々は今2つの機能を追加しようとしている。

  1. “=”演算子で変数の内容を変化させる能力。
  2. 新しい変数を定義する能力。

1については、我々が現在持っている”関数の引数のための変数”と”帰納変数(induction variables)”を、再定義可能にするということである。(While the first item is really what this is about, we only have variables for incoming arguments as well as for induction variables, and redefining those only goes so far :).)
同様に、新しい変数を定義する能力は、変数を変化させるかどうかに関わらず有用なものである。
訳注: 帰納変数のための変数とは、for式で定義されるいわゆるループ変数のことである。

# 順次演算子。オペランドを無視する、低い優先順位の演算子として":"を定義する。
# RHSを返す。
def binary : 1 (x y) y;

# 再帰的なfib。これは以前から出来ていた。
def fib(x)
  if (x < 3) then
    1
  else
    fib(x-1)+fib(x-2);

# 反復的なfib。
def fibi(x)
  var a = 1, b = 1, c in
  (for i = 3, i < x in
     c = a + b :
     a = b :
     b = c) :
  b;

# 呼び出す。
fibi(10);

変数の内容を変化させるために、既存の変数を”alloca技法”を使うように変更しなければならない。
それが出来れば、新しい演算子を追加して、変数の定義をサポートするよう万華鏡を拡張する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください