関数型プログラミングの基礎 - 再帰ルールとパターンマッチング - 空リストとtail関数、最大公約数、ユークリッド互除法
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT1(関数型プログラミングの基礎)、LESSON 7(再帰ルールとパターンマッチング)、7.5(練習問題)Q7-1、Q7-2の解答を求めてみる。
コード
sample.hs
main :: IO ()
main = do
print $ myTail [1 .. 5]
print $ myTail ([] :: [Int])
print $ myTail "abcde"
print $ myTail ""
print $ gcd 20 16
print $ gcd 16 20
print $ myGcd 20 16
print $ myGcd 16 20
xs :: [Integer]
xs = [1 .. 10]
-- Q7-1
myTail :: [a] -> [a]
myTail (x : xs) = xs
myTail [] = []
-- Q7-2
myGcd :: (Integral p) => p -> p -> p
myGcd a 0 = a
myGcd a b = gcd b (a `mod` b)
入出力結果(Terminal, Zsh)
% runghc sample.hs
[2,3,4,5]
[]
"bcde"
""
4
4
4
4
%