プログラミング Haskell 第 2 版

プログラミング Haskell 第 2 版

#html{{

table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4908686076/vertex9-22/" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/41Korrd80qL._SL160_.jpg" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4908686076/vertex9-22/" target="_blank">プログラミングHaskell 第2版</a><br>Grahum Hutton<br>ラムダノート<br>2019-08-02<br>¥ 3,456</td></tr></table>
}}

第4章 関数定義

p.40

4.2 条件式

多くのプログラミング言語とは違って、Haskell の条件式には常に else部が必要です。

ぶらさがり else 問題

これにより、いわゆる「ぶらさがり else 問題」が回避できます。
もし else部が省略可能な文であるなら、文「if True then if False then 1 else 2」が 2を返すかエラーとなるかは、else部が内側と外側のどちらの条件に対応すると解釈するかに依存してしまうでしょう。

/* プログラム側ではこのように解釈されてしまう */
if (!a)

   if (b)
       b();
   else
       a();

}}

ぶら下がりelseの問題は、フリーフォーマットを採用し、かつブレース(波括弧 = {})の省略が可能なC言語やJava, PHP, Perl, JavaScript等の言語で頻繁に発生する。
オフサイドルールを採用して字下げのレベルに意味を持たせたPythonやCofeeScript等の言語ではこの問題は起こらない。
またブレースの記述を必須とするSwiftやGo, Rust等の言語も同様にこの問題は起こらない。

Haskellの場合は、ifはelseを必須にすることによって、曖昧さを排除しているんですね!


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS