2013年10月27日日曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の9章(変数スコープおよび関数)、9.4(構造かプログラミング)、9.5(再帰)、9.7(プログラミング実習)、実習 9-3をHaskellで解いてみる。

その他参考書籍

9-3.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = do
    let numbers1 = []
        numbers2 = [1]
        numbers3 = [1, 2, 1, 3, 4, 5]
        numbers4 = [1, 2, 3, 4, 5] ++ [2]
        numbers5 = [1..6]
    mapM_  putStrLn $
           map (\(x, y) -> show x ++ ' ':show y ++ ' ':(show $ count y x) ++
                           "個") $
               concat $ map (\x -> map (\y -> (x, y))
                                       [0..5])
                            [numbers1, numbers2, numbers3, numbers4, numbers5]

count :: Int -> [Int] -> Int
count a = foldr (\x acc -> if x == a
                            then acc + 1
                            else acc)
                0

入出力結果(Terminal, runghc)

$ runghc Sample.hs
[] 0 0個
[] 1 0個
[] 2 0個
[] 3 0個
[] 4 0個
[] 5 0個
[1] 0 0個
[1] 1 1個
[1] 2 0個
[1] 3 0個
[1] 4 0個
[1] 5 0個
[1,2,1,3,4,5] 0 0個
[1,2,1,3,4,5] 1 2個
[1,2,1,3,4,5] 2 1個
[1,2,1,3,4,5] 3 1個
[1,2,1,3,4,5] 4 1個
[1,2,1,3,4,5] 5 1個
[1,2,3,4,5,2] 0 0個
[1,2,3,4,5,2] 1 1個
[1,2,3,4,5,2] 2 2個
[1,2,3,4,5,2] 3 1個
[1,2,3,4,5,2] 4 1個
[1,2,3,4,5,2] 5 1個
[1,2,3,4,5,6] 0 0個
[1,2,3,4,5,6] 1 1個
[1,2,3,4,5,6] 2 1個
[1,2,3,4,5,6] 3 1個
[1,2,3,4,5,6] 4 1個
[1,2,3,4,5,6] 5 1個
$

0 コメント:

コメントを投稿