2013年2月15日金曜日

開発環境

Real World Haskell』(Bryan O'SullivanJohn GoerzenDon Stewart(著)、山下 伸夫伊東 勝利株式会社タイムインターメディア(翻訳)、オライリー・ジャパン、2009年、ISBN978-4-87311-423-3)の4章(関数プログラミング)の4.5(リストを使う)の練習問題4.を解いてみる。

4.

コード(BBEdit)

Sample.hs

-- file: Sample.hs

import System.Environment (getArgs)

interactWith function inputFile outputFile = do
    input <- readFile inputFile
    writeFile outputFile (function input)

swapRowAndCol :: String -> String
swapRowAndCol a = unlines b
    where b = cols c
          cols [] = []
          cols xs = (col xs):(cols (func xs))
          col [] = []
          col ((x:xs):[]) = x:[]
          col ((x:xs):ys) = x:(col ys)
          func [] = []
          func ((x:xs):ys) | null xs = func ys
                           | otherwise = xs:(func ys)
          c = filter notNull (lines a)
          notNull x | null x = False
                    | otherwise = True

main = mainWith myFunction
    where mainWith function = do
            args <- getArgs
            case args of
                [input, output] -> interactWith function input output
                _ -> putStrLn "error: exactly two arguments needed"
          myFunction = swapRowAndCol

入出力結果(Terminal)

$ ghc --make Sample.hs
[1 of 1] Compiling Main             ( Sample.hs, Sample.o )
Linking Sample ...
$ cat in.txt
hello
world
$ ./Sample in.txt
error: exactly two arguments needed
$ ./Sample in.txt out.txt
$ cat out.txt
hw
eo
lr
ll
od
$ ./Sample tmp.txt out.txt
$ cat tmp.txt
JavaScript HTML5 CSS
Perl CPAN CGI
Python Programmer

Ruby on Rails
Japan
  Haskell

$ cat out.txt
JPPRJ 
aeyua 
vrtbpH
alhyaa
S o ns
cCnok
rP ne
iAP l
pNrRl
t oa
 Cgi
HGrl
TIas
Mm
Lm
5e
 r
C
S
S
$

0 コメント:

コメントを投稿