Haskell のリストはシンタックスシュガーだらけ a = [] b = [1] c = [1,2] d = [1..10] e = [1..] f = [1,3..] g = [ x * x | x <- f ] 逆に分かりにくいので書き直す a = [] b = (:) 1 [] c = (:) 1 ((:) 2 []) d = ff 10 where ff 0 = [] ff i = (:) 1 (ma…
注釈 まだまだ、Haskell 歴 5 日なので、多少間違っててても許してください。 do は これを main = getChar >>= (\a -> ( getChar >>= (\b -> putChar b)) >> ( putChar a)) これにしている main = do a <- getChar b <- getChar putChar b putChar a do の…
これがモナド main = putStrLn $ unlines $ do v1 <- [1, 2, 3] v2 <- f v1 v3 <- g v2 f v3 f :: Integer -> [String] f x = [show x, show x] g :: String -> [Integer] g x = [read x, read x] よくわからん。 なんか、もうすこしで分かりそうなんだが。…
以下の例はダメ main = putStrLn $ unlines $ map show $ f f = g 0 f g n (x:xs) = n : g (x + 1) xs (x:xs) → ~(x:xs) なら OK main = putStrLn $ unlines $ map show $ f f = g 0 f g n ~(x:xs) = n : g (x + 1) xs その心は 一番最初に (x:xs) のパター…