-∞から+∞までの整数
[0..]で0〜∞の整数のリストを表せるので、次のようにすると-∞から+∞までの整数を含んだリストができる。
Main> 0:concatMap (\x -> [-x,x]) [1..] [0,-1,1,-2,2,-3,3,-4,4,-5,5,-6,6,-7,7,-8,8,-9,9,-10,10,-11,11,-12,12,-13,13,-14,14,-15,15,-16,16,-17,17,-18,18,-19,19,-20,20{Interrupted!}
でも組み合わせるとうまくいかない。
Main> map (\x -> f(f(x)) == -x) 0:concatMap (\x -> [-x,x]) [1..] ERROR - Cannot infer instance *** Instance : Num [Complex a] *** Expression : map (\x -> f (f x) == negate x) 0 : concatMap (\x -> [negate x,x]) (enumFrom 1) Main> map (\x -> f(f(x)) == -x) concatMap (\x -> [-x,x]) [1..] ERROR - Type error in application *** Expression : map (\x -> f (f x) == negate x) concatMap (\x -> [negate x,x]) (enumFrom 1) *** Term : map *** Type : (f -> g) -> [f] -> [g] *** Does not match : a -> b -> c -> d -> e Main>
今度のエラーはどういう意味だろう? なんだか根本的なことが分かってない気がする。
mapがわからない
Main> map (\x -> x) [1..2] [1,2] Main> map (\x -> x) map (\x -> x) [1..2] ERROR - Type error in application *** Expression : map (\x -> x) map (\x -> x) (enumFromTo 1 2) *** Term : map *** Type : (f -> g) -> [f] -> [g] *** Does not match : a -> b -> c -> d -> e
???
わかった
Main> map (\x -> x) (map (\x -> x) [1..2]) [1,2]
優先順位の問題だったようだ。
Main> map (\x -> f(f(x)) == -x) (0:concatMap (\x -> [-x,x]) [1..10]) [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
今度はできた。
次は全てTrueならTrueを返すようにしたい。Maybeを使えばいいのかな?