Prelude関数をwords
と考えてください。それは本当に簡単で、1は次のようにそれを書くことができます:Preludeのwords関数はなぜ簡単に書かれていないのですか?
words' :: String -> [String]
words' [] = []
words' str = before : words' (dropWhile isSpace after) where
(before, after) = break isSpace str
はしかし、私は自然な...元のプレリュードコードがはるかに少ないようだということに気づい:
words :: String -> [String]
words s = case dropWhile {-partain:Char.-}isSpace s of
"" -> []
s' -> w : words s''
where (w, s'') =
break {-partain:Char.-}isSpace s'
私があることを前提としてい最適化に関連する理由問題は、コンパイラがPreludeバージョンと同様にwords'
関数を最適化することを期待するのは間違っていますか?私は同じ機能(break
,dropWhile
,isSpace
)を使用しました。
:で非常に有用でいないようだ
C vs Haskell Collatz conjecture speed comparison
が、脇{-partain:Char.-}
ビットのために(コンパイラこのヒントをこの状況IMO)words
コードは、高水準言語のために不必要に肥大しているようです。この場合、その背後にある理由は何ですか?
「{-partain:Char .-}」ビットはコメントアウトされたモジュール名以上のものではないと思います。 Googleによると、姓がパルテン(Partain)の人はしばらく前にGHCで働いていた。私は彼が彼のコメントに署名していることを推測している。 – hammar
ああ、コンパイラに多少の影響があったかもしれないと思った。 Partainの男といいキャッチ! – ljedrz
それは分裂するでしょう。 – augustss