Haskell

catコマンドを実装してみる

Haskellの練習として、catコマンドを実装してみる。 getConentsを使う もっとも簡潔な実装。 -- cat1.hs main = getContents >>= putStr do記法を使って書くと次のようになる。 main = do x <- getContents putStr x 上のコードは下と同値である。 main = ge…

Listモナドで非決定性計算

Listモナドを使うと、SICPのamb評価器が行うような非決定性計算ができる。 たとえば、ピタゴラス数を列挙するコードは次のように書ける。 -- ptriples.hs import Control.Monad -- guard関数を使うため ptriples = do a <- [1..] b <- [1..a] -- b <= a c <-…

fizzbuzz in Haskell

Haskellだいぶ慣れてきた。 -- fizzbuzz.hs fizzbuzz n | n `mod` 15 == 0 = "fizzbuzz" | n `mod` 5 == 0 = "buzz" | n `mod` 3 == 0 = "fizz" | otherwise = show n main = mapM_ (putStrLn . fizzbuzz) [1..] $ runghc fizzbuzz.hs 1 2 fizz 4 buzz fizz …

中置演算子に対する部分適用の2パターン

How to work on lists - HaskellWiki HaskellWikiを読んでいたところ、よくわからない例を発見。 Apply a list of functions to a single element to get a list of results. It's not in the book, but it's easy when you know how: map ($ my_element) xs…