Haskell

買った本

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門 / 青木峰郎, 山下伸夫 ISBN:4797336021 発売日前後から探していて、ようやく本屋で置いてあるのを見つけたのでゲット。『入門Haskell』(ISBN:4839919623)よりはやや理論寄りかな? …

全てTrueならTrueを返す

Main> all (\x -> f(f(x)) == -x) (0:concatMap (\x -> [-x,x]) [1..10]) Trueもしくは、$を使って、 Main> all (\x -> f(f(x)) == -x) $ 0:concatMap (\x -> [-x,x]) [1..10] Trueさらにテスト用の関数を作る。 test_f :: RealFloat a => [Complex a] -> Bo…

-∞から+∞までの整数

[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…

Complex aをEnumのインスタンスにする

一昨日の続き。コメントで教えてもらった通り、Complex aをEnumのインスタンスにすると動いた。 import Complex instance RealFloat a => Enum (Complex a) where toEnum x = fromIntegral x :+ 0 fromEnum x = floor $ realPart x f x = x * (0:+1)Hugs.Bas…

f(f(x)) = -x

元の問題設定とは異なるかもしれないが、xを実数に限定しなければ、直感的に以下のコードが思い浮かんだ。 import Complex f x = x * (0:+1)% hugs __ __ __ __ ____ ___ _________________________________________ || || || || || || ||__ Hugs 98: Based …

[0,1]と[0..1]の違い

前のエントリにコメントを頂いたので調べてみた。 Main> :t [0] [0] :: Num a => [a] Main> :t [0,1] [0,1] :: Num a => [a] Main> :t [0..1] enumFromTo 0 1 :: (Enum a, Num a) => [a] Main> ということで、Haskellでは範囲指定で作ったリストは要素を指定…