Haskellをラクガク

2006-09-22Haskellでよかった

第6章 基本的な値 - リスト 02:21

ワリと序盤から出てきたリストについては、ここではそれほど新しいトピックはないかな。多分おさえておくべきは「:」(コロン)演算子

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])

nobsunnobsun 2006/10/05 15:01 print [1,2,3] は()で括らなくても大丈夫.
関数適用の結合力がどの中置オペレータよりも結合力が強いので,
print 1:[2,3] は (print 1):[2,3] と解釈されてしまう.
これを防ぐために,print (1:[2,3]) と括弧が必要になる.

ゲスト



トラックバック - http://haskell.g.hatena.ne.jp/hsyd/20060922