プログラミング Haskell 第 2 版

プログラミング Haskell 第 2 版

 プログラミングHaskell 第2版
Grahum Hutton
ラムダノート
2019-08-02
¥ 3,456

第4章 関数定義

p.40

4.2 条件式

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

ぶらさがり else 問題

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

  • ぶら下がりelse問題とは【Dangling else problem】 | MaryCore https://marycore.jp/coding/dangling-else-problem/

    ぶら下がりelse(Dangling else)は、特定のif文に紐付くよう意図されていたelse文が、書き手の意図に反して異なる別のif文に紐付いてしまっている状態のことを言う。
    この状態によって引き起こされる問題は宙ぶらりんelse問題(dangling else problem)とも呼ばれている。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
    
    if (!a)
        if (b)
            b();
    else // ← ぶら下がりのelse
        a();
     
    /* プログラム側ではこのように解釈されてしまう */
    if (!a)
        if (b)
            b();
        else
            a();

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

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


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