ふつける

ブームのHaskellをやってみています。

普通にやるとおもしろくないので
Haskellで書いたプログラムをPythonで書いてみて、
比較して勉強してみたり。

それにしてもHaskellはすごいなぁと実感してしまいます。
ちなみに例外処理とかしてません。

cat.hs

main = do cs <- getContents
          putStr cs

cat.py

import sys

def main():
    fname = sys.argv[1]
    cs = file(fname, 'r').read()
    print cs,

if __name__=='__main__':
    main()

countline.hs

main = do cs <- getContents
          print $ length $ lines cs

countline.py

import sys

def main():
    fname = sys.argv[1]
    cs = file(fname, 'r').readlines()
    print len(cs),

if __name__=='__main__':
    main()

head.hs

main = do cs <- getContents
          putStr $ firstNLines 10 cs

firstNLines n cs - unlines $ take n $ lines cs

head.py

import sys
import string

def firstNLines(n, cs):
    return string.join(cs[:n])

def main():
    fname = sys.argv[1]
    cs = file(fname, 'r').readlines()
    print firstNLines(10, cs),

if __name__=='__main__':
    main()

tail.hs

main = do cs <- getContents
          putStr $ lastNLines 10 cs

lastNLines n cs = unlines $ takeLast n $ lines cs
takeLast n ss = reverse $ take n $ reverse ss

tail.py

import sys
import string

def lastNLines(n, cs):
    return string.join(cs[-n:])

def main():
    fname = sys.argv[1]
    cs = file(fname, 'r').readlines()
    print lastNLines(10, cs),

if __name__=='__main__':
    main()

とりあえず第二章分だけです。
高階関数はmap使えばなんとかできるのかな?