import Data.Char (digitToInt) {- 複数行のコメント -} --単行のコメント foo :: Int -> Int foo x = x + 1 const1 :: Int --定数関数 const1 = 1 bar :: Int -> Int -> Int bar x y = x + y bar2 :: Int -> Int -> Int bar2 = \x y -> x + y -- \x y -> x + y がラムダ式。 1変数なら \x -> x + 1 とか。 data NingenSama = --こっちは型コンストラクタ NingenSama --ややこしいけどこっちはデータ(値)コンストラクタ { age :: Int , name :: String } deriving Show --この行はghciで画面に表示するのに必要 data Tensuu = TensuuSuuji Int | NanrakanoJiko String deriving Show data Zoo = Animals Int String | UchuKaraKitaAlien | ZooT Tensuu | ZooN NingenSama baz :: Bool -> Int baz b = if b then 1 else 0 anzen :: Zoo -> Bool anzen z = case z of ZooN (NingenSama a n) -> if (a > 10000) then False else True _ -> False -- ex.) anzen $ ZooN $ NingenSama 10000 "akachan" reLU :: Int -> Int -- ニューラルネットワークの活性化関数として使われる reLU x | x < 0 = 0 | otherwise = x data Zoo' = Animals' Int String | UchuKaraKitaAlien' deriving Show -- type String = [Char] type R = Double --数値計算のパッケージだとこう書かれていたりもする。 -- type Z = Complex Double -- need "import Data.Complex" --関係ないけど Complex a 型はデータコンストラクタ :+ によって -- 1 :+ 2 みたいな感じで複素数を表現できる。 anzen' :: Zoo' -> Bool anzen' = undefined factorial :: Integer -> Integer --Int型はほかの言語同様上限と下限があるが、Integerにはない。 factorial = go 1 where --局所定義。ここに書いた関数goはfactorialの定義以外で参照できない。 go a n | n <= 0 = a | otherwise = go (n * a) (n - 1) -- ↑ 蓄積引数 -- 再帰とcase文で実装 readHex' :: [Char] -> Int readHex' = undefined --foldlを使って実装 readHex'' :: String -> Int readHex'' = undefined --おまけ、遅延評価により問題にならない例 noProb :: [Int] noProb = take 10 [1 .. ]