計算機科学のブログ

関数型プログラミングの基礎 - 再帰ルールとパターンマッチング - 空リストと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
%