ああああ、また 20 時間も寝てしまった。 どうしてこういうことになるんだ。 おれのバカバカバカ〜。
そうです、Amazon で一番上に来るやつです。
"Garbage Collection: Algorithms for Automatic Dynamic Memory Management" Richard Jones / Rafael Lins, John Wiley & Sons, 1996
ちなみに Haskell のほうは 「やさしい Haskell 入門」 のお勧めにあった "Introduction to Functional Programming using Haskell" を 買ってみました。
http://i.loveruby.net/ja/haskell/head.hs
module Main where
import System
import IO
main :: IO ()
main = do
args <- getArgs
case args of
[] -> headFile stdin 10
args -> mapM_ (\a -> do
f <- openFile a ReadMode
headFile f 10
hClose f) args
headFile :: Handle -> Integer -> IO ()
headFile f n = if n == 0 then return () else
do
eof <- hIsEOF f
if eof then return () else
do
line <- hGetLine f
putStrLn line
headFile f (n-1)
cat を応用すればすぐだろうと思ったら 2 引数関数ではまる罠。 自動的にカリー化 (※) されるなんて、そりゃー予測できないよ……。
※ 関数が複数の引数を持つとき、それを一引数の関数のネストに分解すること。
(lambda (a b)
....)
↓
(lambda (a)
(lambda (b)
....)
という感じ。
しかもまたもや eof <- hIsEOF を消そうとしてはまるバカ……。 だってさー、いかにも
eof <- hIsEOF f
if eof then ....
↓
if hIsEOF f then ....
ってできそうじゃない?! できると思うでしょ?! でもできないんだよなー。
なんでいきなり UNIX コマンドかというと、 自分で実際に使えるものが一番インセンティブが働くからです。 つまらん計算したって全然面白くないっす!
そういうわけでとりあえずの目標を rd2html のサブセットと決めました。