関数型プログラミングの基礎 - 高階関数 - 関数(filter, length, elem, map, sum)、回文、調和級数、遅延許価
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT1(関数型プログラミングの基礎)、LESSON 9(高階関数)、9.6(練習問題)、Q9-1の解答を求めてみる。
コード
sample.hs
import Data.Char (toLower)
main :: IO ()
main = do
print "-----"
print $ elem 1 []
print $ elem 1 [1]
print $ elem 1 [2]
print $ elem 1 [1, 2]
print $ elem 1 [2, 3]
print "-----"
print $ myElem 1 []
print $ myElem 1 [1]
print $ myElem 1 [2]
print $ myElem 1 [1, 2]
print $ myElem 1 [2, 3]
print "-----"
print $ isPalindrome "A man a plan a canal Panama"
print $ isPalindrome "ab"
print "-----"
print $ harmonic 1
print $ harmonic 2
print $ harmonic 3
print $ harmonic 4
print $ harmonic 5
print $ harmonic 100
-- Q9-1
myElem :: Eq a => a -> [a] -> Bool
myElem x xs = length (filter (== x) xs) /= 0
-- Q9-2
isPalindrome :: [Char] -> Bool
isPalindrome x =
let y = map toLower (filter (/= ' ') x)
in y == reverse y
-- Q9-3
harmonic :: (Fractional a, Enum a) => Int -> a
harmonic n = sum $ take n (map (1 /) [1, 2 ..])
入出力結果(Terminal, Zsh)
% runghc sample.hs
"-----"
False
True
False
True
False
"-----"
False
True
False
True
False
"-----"
True
False
"-----"
1.0
1.5
1.8333333333333333
2.083333333333333
2.283333333333333
5.187377517639621
$