私はHaskellプログラミングを学び始め、リスト構造体を理解しようとしています。したがって、 はリスト長関数を書きました。Haskell Length関数の実装
myLength :: [a] -> Integer
myLength = foldr (\x -> (+) 1) 0
myLength1 :: [a] -> Integer
myLength1 [] = 0
myLength1 (x:xs) = (+1) (myLength1 xs)
以上は2つの長さ関数です。私の質問は、どちらが良いですか? 私自身の観点からは、myLength1ははるかに理解しやすく、 は操作リストに当てはまります。
しかしmyLengthが短く見え、再帰を使用しない、それは、myLength速い 実行を意味するものではないよりmyLength1
"myLength1はもっと理解しやすく、自然に見える*" - 私は 'myLength'についてちょっと言ったでしょう:-) – Bergi
' foldr'は再帰も使用しています。これは単なる抽象レイヤーです。彼らはほとんど同じスピードで走ります。 – Bergi
私は 'sumが好きです。マップ(const 1) 'それは変だ? – Zeta