1

Haskell の構文は、私がこれまでに見た他のどのプログラミング言語とも異なるため、まだ習得に苦労しています。ほとんどの命令型プログラミング言語では、次のようにネストされた条件ステートメントを作成できます。

function thing1(x){
    if(x > 2){
       if(x < 5){
           return 3;
       }
       else if(x < 10){
           return 10;
       }
       else if(x >= 10){
           return 6;
       }
    }
    else{
        return 4;
    }

}

しかし、Haskell で同等の構文を何度か試みた後も、まだ理解できていません。Haskell で同等の関数を作成しようとしたところ、構文エラーが発生しました: prog.hs:10:1: parse error on input main':

thing1 x =
    if x > 2 then
        if x < 5 then
            3
        else if x < 10 then
            10
        else if(x >= 10)
            6
    else
        4

main = do
    putStr(show(thing1 6))

ここでの構文の何が問題なのかわかりません。他の言語のように、Haskell でネストされた条件ステートメントを作成することさえ可能ですか?

4

3 に答える 3

10

何人かが提案したように、パターン ガードを使用すると、これをより簡単に行うことができます。

thing1 x
  | x <=  2 = 4
  | x <   5 = 3
  | x <  10 = 10
  | x >= 10 = ???

main = putStr (show (thing1 6))

そのほうがよっぽどきれいじゃないですか。それぞれの場合に何が返されるかを正確に把握する方がはるかに簡単ではありませんか?

更新:忘れる前に、一般的なイディオムは次のようにすることです。

thing1 x
  | x <=  2   = 4
  | x <   5   = 3
  | x <  10   = 10
  | otherwise = 6

これにより、すべてのケースが実際にカバーされていることが、何気ない観察者にも明確になります。

于 2013-08-03T06:53:18.730 に答える
3

後で忘れてthenしまい、ブランチif(x >= 10)も必要です。elseしかし、if(x >= 10)すでにあなたのelseブランチであるため、それを削除するか、コメントにすることif x < 10ができます:if(x >= 10)

thing1 x =
if x > 2 then
    if x < 5 then
        3
    else if x < 10 then
        10
    else
        6
else
    4
于 2013-08-03T09:06:45.447 に答える