計算機科学のブログ

関数型プログラミングの基礎 ファーストクラス関数 戻り値としての関数 case式、場合分け

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON4(ファーストクラス関数)、4.4(練習問題)Q4-2の解答を求めてみる。

コード

dcOffice :: (String, String) -> String
dcOffice name = fst name ++ " " ++ snd name ++ " Esq Washington, DC"

getLocationFunction :: String -> (String, String) -> String
getLocationFunction location = case location of
  "dc" -> dcOffice
  _ -> (\name -> fst name ++ " " ++ snd name)

addressLetter :: (String, String) -> String -> String
addressLetter name location =
  let locationFunction = getLocationFunction location
   in locationFunction name

name :: (String, String)
name = ("Bob", "Smith")

main :: IO ()
main = do
  print $ addressLetter name "dc"
  print $ addressLetter name "ab"

入出力結果(Terminal, Zsh)

% runghc sample2.hs
"Bob Smith Esq Washington, DC"
"Bob Smith"
%