計算機科学のブログ

コードの整理とプロジェクトのビルド Haskellコードをモジュールにまとめる String、Data.Textモジュール、Data.Text.IOモジュール、回文か判定

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT6(コードの整理とプロジェクトのビルド)、LESSON 34(Haskellコードをモジュールにまとめる)、34.4(練習問題)Q34-1の解答を求めてみる。

コード

Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import qualified Data.Text.IO as TIO
import qualified Palindrome

main :: IO ()
main = do
    TIO.putStrLn "回文か判定したい単語を入力"
    text <- TIO.getLine
    let response = if Palindrome.isPalindrome text
                   then "回文である。"
                   else "回文ではない。"
    TIO.putStrLn response

コード

Palindrome.hs

{-# LANGUAGE OverloadedStrings #-}
module Palindrome (
    isPalindrome
) where

import qualified Data.Text as T

preprocess :: T.Text -> T.Text
preprocess = T.strip . T.toLower

isPalindrome :: T.Text -> Bool
isPalindrome text =
    let cleanText = preprocess text
    in cleanText == (T.reverse cleanText)

入出力結果(Terminal, Zsh)

% ghc Main.hs 
[1 of 2] Compiling Palindrome       ( Palindrome.hs, Palindrome.o )
[2 of 2] Compiling Main             ( Main.hs, Main.o )
Linking Main ...
% ./Main 
回文か判定したい単語を入力
racecar
回文である。
% ./Main
回文か判定したい単語を入力
haskell
回文ではない。
% ./Main 
回文か判定したい単語を入力

回文である。
% ./Main          
回文か判定したい単語を入力
あいうえお
回文ではない。
% ./Main
回文か判定したい単語を入力
あいうえおおえういあ
回文である。
% ./Main
回文か判定したい単語を入力
 あいいあ
回文である。
% ./Main         
回文か判定したい単語を入力
 AbBa
回文である。
%