IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

const id

const id は第2引数を返します。その理由がわかりませんでした。

*Main> :t const id
const id :: b -> a -> a

*Main> const id 1 2 
2

理由を説明した Webページをいくつか読みましたが、それでも理解できず(x_x;)。
基本に立ち返ると、次の2つを理解していなかった模様。

  • 関数の適用は、すべての演算の中で最も高い優先度をもつ。
  • 関数の引数に関数をとることができる。

なので、

const id 1 2

は、「関数の適用は、すべての演算の中で最も高い優先度をもつ」ので、id関数の適用(id 1)を考えるのではなく、まずconst関数の適用を考えます。この関数は引数を2つとります。なので、括弧を使うと、

(const id 1) 2

となります。「関数の引数に関数をとることができる」ことから、idは、constの(第1)引数となっています。const関数は第1引数を返すので、idを返します。なので、

(id) 2

となります。括弧を取って、

id 2

より、結果は

2

となります。