パスワードを忘れた? アカウント作成
481254 journal

krの日記: Haskellで速いwcを書いてみよう(7)

日記 by kr

 

wc' 1

 ((((  )+ 1) + 1) + 1)
 

調



 -- prog7
import Data.Char
 
wc:: String -> ( Int, Int, Int )
wc = wc' !$ 1 !$ 0 !$ 0 !$ 0
    where
      infixl 0 !$               -- left-associative version of $!
      (!$):: (a ->b) -> a ->b
      f !$ x = x `seq` f x
      wc':: Int -> Int -> Int -> Int -> String -> (Int, Int, Int)
      wc' s nl nw nc [] = (nl, nw, nc)
      wc' s nl nw nc ('\n' : cs) = (wc' !$ 1 !$ (nl + 1) !$ nw !$ nc + 1) cs
      wc' s nl nw nc (c : cs)
          | isSpace c = (wc' !$ 1 !$ nl !$ nw !$ nc + 1) cs
          | otherwise = (wc' !$ 0 !$ nl !$ nw + s !$ nc + 1) cs
 

mainprog7

$! wc wc' 使



 % time ./prog7 < /usr/share/doc/en/books/handbook/book.txt
72266 323341 3196121
0.769u 0.001s 0:00.80 95.0%     338+265k 0+0io 0pf+0w
0.763u 0.007s 0:00.80 95.0%     345+271k 0+0io 0pf+0w
0.769u 0.001s 0:00.79 96.2%     338+265k 0+0io 0pf+0w
0.762u 0.008s 0:00.79 96.2%     321+252k 0+0io 0pf+0w
0.762u 0.007s 0:00.79 96.2%     335+263k 0+0io 0pf+0w
 

0.79 C++0.71 tanakhHaskell3.79 tanakh Haskell()

2

 
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...