計算機科学のブログ

型によるプログラミング 合成によるデザイン SemigroupとMonoid 合成可能性 関数を組み合わせる リスト、畳み込み

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 17(合成によるデザイン:SemigroupとMonoid)、17.1(合成可能性:関数を組み合わせる)のクイックチェック17-1の解答を求めてみる。

コード

myAny :: (a -> Bool) -> [a] -> Bool
myAny testFunc = (foldr (||) False) . (map testFunc)

ns1 :: [Integer]
ns1 = [1..10]

ns2 :: [Integer]
ns2 = [1, 3, 5, 7, 9]

ns3 :: [Integer]
ns3 = [0, 2, 4, 6, 8]

ns4 :: [Integer]
ns4 = [1, 2, 3, 5, 7, 9]

ns5 :: [Integer]
ns5 = [0, 1, 2, 4, 6, 8]

入出力結果(Terminal, Zsh)

% ghci
GHCi, version 8.10.5: https://www.haskell.org/ghc/  :? for help
macro 'doc' overwrites builtin command.  Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample01.hs 
[1 of 1] Compiling Main             ( sample01.hs, interpreted )
Ok, one module loaded.
(0.04 secs,)
*Main
λ> myAny even ns1
True
it :: Bool
(0.07 secs, 65,248 bytes)
*Main
λ> myAny even ns2
False
it :: Bool
(0.00 secs, 64,400 bytes)
*Main
λ> myAny even ns3
True
it :: Bool
(0.00 secs, 62,416 bytes)
*Main
λ> myAny even ns4
True
it :: Bool
(0.00 secs, 62,696 bytes)
*Main
λ> myAny even ns5
True
it :: Bool
(0.01 secs, 62,456 bytes)
*Main
λ> map (myAny odd) [ns1, ns2, ns3, ns4, ns5]
[True,True,False,True,True]
it :: [Bool]
(0.01 secs, 82,928 bytes)
*Main
λ> :quit
Leaving GHCi.
%