2006-09-22Haskellでよかった
■ 第6章 基本的な値 - リスト
ワリと序盤から出てきたリストについては、ここではそれほど新しいトピックはないかな。多分おさえておくべきは「:」(コロン)演算子。
main = do
print (1:2:3:[])
print (1:2:(3:[]))
print (1:2:[3])
print (1:(2:[3]))
print (1:[2,3])
print ([1,2,3])
>colon [1,2,3] [1,2,3] [1,2,3] [1,2,3] [1,2,3] [1,2,3]
これはこれで良いのだけれども、printの引数を括弧でくくらないとエラーになるのはナゼだろう。
colon.hs:3:12:
Couldn't match `[]' against `IO'
Expected type: []
Inferred type: IO
In a 'do' expression: print (1 : (2 : (3 : [])))
In the definition of `main':
main = do
(print 1) : (2 : (3 : []))
print (1 : (2 : (3 : [])))
print (1 : (2 : [3]))
print (1 : (2 : [3]))
print (1 : [2, 3])
print ([1, 2, 3])
関数適用の結合力がどの中置オペレータよりも結合力が強いので,
print 1:[2,3] は (print 1):[2,3] と解釈されてしまう.
これを防ぐために,print (1:[2,3]) と括弧が必要になる.