計算機科学のブログ

HaskellのI/O コマンドラインの操作と遅延I/O 遅延評価をする方法 問題を遅延リストとして考える

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT4(HaskellのI/O)、LESSON 22(コマンドラインの操作と遅延I/O)、21.2(コマンドラインの操作:遅延評価をする方法)のクイックチェック22-3、問題を遅延リストとして考えるのクイックチェック22-4の解答を求めてみる。

コード

main :: IO ()
main = do
  userInput <- getContents
  let reversed = reverse  userInput
  mapM_ print reversed

入出力結果(Terminal, Zsh)

% ghc sample03.hs 
[1 of 1] Compiling Main             ( sample03.hs, sample03.o )
Linking sample03 ...
% ./sample03
a
'\n'
'a'
% ./sample03
hi
'\n'
'i'
'h'
% ./sample03
what?
'\n'
'?'
't'
'a'
'h'
'w'
%

コード

toInts :: String -> [Int]
toInts = map read . lines

main :: IO()
main = do
    userInput <- getContents
    let numbers = toInts userInput
    print (foldr (*) 1 numbers)

入出力結果(Terminal, Zsh)

% ghc sample04 
[1 of 1] Compiling Main             ( sample04.hs, sample04.o )
Linking sample04 ...
% ./sample04
1D
% ./sample04
2
3
6D
% ./sample04
1
2
3
4
5
6
7
8
9
10
3628800
% ./sample04
1
2
a
sample04: Prelude.read: no parse
%