n
私は Project Euler の問題を使用して Haskell を学習していますが、これらの問題の多くで、 function に何らかのプロパティ (通常は最小または最大) を与える値を見つける必要があるという繰り返しのテーマを見つけましたf n
。解決策を構築するとき、ペアのリストを作成すると便利であることがよくあります(n, f n)
。これは、問題ステートメントに示されている例と照合できるため、ロジックにエラーがあるかどうかをすばやく確認するのに役立ちます。次に、ソリューションを提供する単一のペアを「フィルター」します。問題 47 に対する私の解決策は次のとおりです。
-- Problem 47
import Data.List
import ProjectEuler
main = do
print (fst (head (filter (\(n, ds) -> (all (==consecutiveCount) ds))
(zip ns (map (map length)
(map (map primeDivisors) consecutives))))))
where consecutiveCount = 4
consecutive n start = take n [start..]
consecutives = map (consecutive consecutiveCount) ns
ns = [1..]
これを行うには、もっと「ハスケリー」な方法があるように思えます。ある?