Project Euler Question #1 の場合、GHCI での最短のワンライナーは次のとおりです。
sum [3,6..9999] + sum [5,10..9999] - sum [15,30..9999]
問題を解決した後、これは非常に血なまぐさい方法であることがわかりました。しかし、私は Haskell を初めて使用するので、これを x の任意の値 (ステップ値、つまり上記の '3' または '5') に対して同様の回答を返す一連の関数としてまとめることができるかどうかを確認することにしました。 y (リストの長さ)。
ここで最初の機能を実行しました:
sumList :: (Enum a, Num a) => a -> a -> a
sumList a b = sum[a,a+a..b]
sumListTotals [3,5] 1000
次に、この関数を使用して、たとえば質問から何かをしようとしていました。これはsumList
、リスト内の各項目に対してすべて行われ、次に重複した数値が減算されます (つまり、例を使用すると [15,30..1000].
私は実際にそれを解決する人を探しているのではなく、適切な方向に私を向けるのを手伝ってくれる人を探しています.
map
私は以下のような関数を使用しようとしていました:
sumListTotals list = map f list
where f = sumlist a b
しかし、リストからものを引き出す方法がわかりませんか、何かをするかsumListTotals ([3,5],1000)
、ここで完全に間違った方向に進んでいますか?
@ user5402 ごとに更新:
module Project1 where
import Data.List (union)
sumListTotals :: (Enum a, Eq a, Num a) => a -> a -> a -> a
sumListTotals a b c = sum $ union [a,(*2)a..c] [b,(*2)b..c]