Example11.2

11.2 命令型制御構造 (Imperative Control Structures)

Scala には C や Java で知られる while や do-while のループ構文があります。また else-節のない片側の if や、関数を途中で中止する return 文もあります。これらを使えば、従来の命令型スタイルのプログラミングも可能です。たとえば次の関数は、与えられたパラメータ x の n 乗を計算しますが、while と片側 if を使って実装されています。

def power(x: Double, n: Int): Double = { 
  var r = 1.0 
  var i = n 
  var j = 0 
  while (j < 32) { 
    r = r * r 
    if (i < 0) 
      r *= x 
    i = i << 1 
    j += 1 
  } 
  r 
}

これらの命令的な制御構文は、ユーザの便宜を図って言語に入れてあります。それらを無くすこともできました。なぜなら同じ構文を単に関数として実装できるからです。たとえば while ループを関数的に実装してみましょう。whileLoop は2つのパラメータ、Boolean 型の条件と Unit 型のコマンド、をとる関数のはずです。条件とコマンドは名前渡しである必要があります。そうすれば各ループ毎に繰り返し評価されます。以上から、次の whileLoop 定義を得ます。

def whileLoop(condition: => Boolean)(command: => Unit) { 
  if (condition) { 
    command; whileLoop(condition)(command) 
  } else () 
}

whileLoop は末尾再帰的であり、一定のスタック領域で動作することに注意しましょう。

演習 11.2.1  repeatLoop 関数を書きなさい。次のように適用されるものとします。

repeatLoop { command } ( condition ) 

また次のようなループ構文は可能ですか?

repeatLoop { command } until ( condition ) 

C や Java で知られるいくつかの制御構文は Scala にはありません。ループ中にジャンプする break や continue はありません。また Java の意味での for ループもありません。それらは 10.4 節で議論した、より一般的な for ループ構文で置き換えられています。


名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月24日 08:53
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。