

Haskellで絶対値を定義したいのですが、いまいち定義の仕方がよくわかりませんでした。  
ちなみに、自分は以下のように定義したのですがどこがおかしいでしょうか。

[code]

    abs(x)=if x<0 then -x
      else if 0<=x then x
    
[/code]

（絶対値の関数はabsとさせてもらいました。）


CC BY-SA 4.0
2020-03-24T07:25:53.117
64072
2020-03-24T10:18:17.273
2020-03-24T07:49:01.100
3060
36412
question
haskell
haskellでの絶対値の定義


示された定義右辺にある2つめのif式にelse節がないので，文法エラーになります．  
parse error (possibly incorrect indentation or mismatched brackets)  
(このエラーメッセージがちょっと判りにくいですね)  
通常の数値に対する絶対値関数を定義するなら，if式は2段にする必要はなく

[code]

    abs x = if x < 0 then -x else x
    
[/code]

でよいかと思います．さて，文法的にはこれでパスしますが，使おうとすると．

[code]

    *Main> abs (-3)
    
    Ambiguous occurence `abs'
    ...
    
[/code]

のようなエラーになります．これは，数値型（型クラスNumのインスタンスの型）に対する絶対値関数 abs はデフォルトでインポートされる標準 Prelude
モジュールで定義済みで，どちらを使ってよいか判らないという趣旨のエラーメッセージです．当初の目的が，絶対値関数を使いたいということであれば，定義済みのものを使えばよいし，独自に定義した絶対値関数を使いたいのであれば，関数名が被らないようにする必要があります．


CC BY-SA 4.0
2020-03-24T10:07:31.187
64081
2020-03-24T10:18:17.273
2020-03-24T10:18:17.273
24701
24701
64072
answer