2

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]
4

1 に答える 1

1

あなたは正しい軌道に乗っています:

sumListTotals a b c = sum [a,a+a..c] + sum [b,b+b..c] - sum[m,m+m..c]
  where m = ...???...

mの定義は、実際には数論の問題であり、Haskell プログラミングの問題ではないため、あなたに任せます。

明らかに でa = 3, b = 5 mあるべきです15。しかし、何のためにあるべきmですa = 3, b = 3か?

于 2013-04-25T01:57:04.610 に答える