Haskell でハミング数を生成しようとしています。問題は、出力リストに重複した # が表示され、その理由が正確にわからないことです。重複削除機能を作成するだけですか、それとも単純なものが不足していますか?
また、関数 hamming では、入力リストのサイズが正確に 3 であることを確認したいのですが、リストのサイズを見つけて比較を行うにはどうすればよいですか?
{- Merge lists x&y of possibly infinite lengths -}
merge [] [] = []
merge [] ys = ys
merge xs [] = xs
merge xs ys = min x y : if x < y then merge (tail xs) ys
else merge xs (tail ys)
where x = head xs
y = head ys
{- multiply each element in y by x -}
times x [] = []
times x y = x * (head y) : times x (tail y)
{- find the hamming numbers of the input primes list -}
ham [] = []
ham x = 1 : merge (times (head x) (ham x))
(merge (times (x !! 1) (ham x)) (times (last x) (ham x)))
{- returns x hamming #'s based on y primes of size 3 -}
hamming x [] = []
hamming x y = take x (ham y)
{- hamming x y = if "y.size = 3" then take x (ham y)
else "Must supply 3 primes in input list" -}