教科書は Graham Hutton 著/山本和彦訳『Programming in Haskell 2nd edition』を使う.
本に載っているリストの和を求めるプログラムを sum.hs の名前で保存する.
sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns
これを Haskell インタープリターからロードする.
ghci> :load sum
ところが以下のようなエラーが出た.
ghci> :load
sum [1 of 1] Compiling Main ( sum.hs, interpreted )
sum.hs:3:18: error: Ambiguous occurrence ‘sum’ It could refer to
either ‘Prelude.sum’, imported from ‘Prelude’ at sum.hs:1:1
(and originally defined in ‘Data.Foldable’) or ‘Main.sum’,
defined at sum.hs:2:1
||
3 | sum (n:ns) = n + sum ns
| ^^^ |
Failed, no modules loaded.
少し調べたら, sum という関数は Haskell 自身ですでに定義されているので, 同じ名前の関数を定義しようとしたことで名前の衝突が起こったためとわかった.
これを回避するために sum.hs の冒頭に次の一行を追加する.
import Prelude hiding (sum)
sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns
これでロードができるようになる.
[1 of 1] Compiling Main ( sum.hs, interpreted )
Ok, one module loaded.
いくつかの計算をしてみる.
ghci> sum [1,3,5,7,9,11]
36
ghci> sum [1..10]
55
この調子で勉強を続けていくつもりである.
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image
- no image