免責事項:私はHaskellを初めて使い、大学のFPについて多くのことを覚えていないので、コードに1つ以上のエラーがあるかもしれません。これは、オイラー問題3のコードです。Haskell:配列引数の再帰
私は、引数として2つの配列を持つ関数と結果として配列を再帰的に呼び出そうとしています。
目標:
- は、nと仮定
- (変数は「allNumbers」のコードである)1からnまでの全ての自然数のリストを、この質問のための10
- 作成されるの別のリストを作成します1からnまでのすべての自然数(変数は 'allFactors'はコード)
- 'allFactors'の最初の要素を取り、 'allFactors'の残りの数にこの数を掛けます。
- これらの数字を 'allNumbers'からすべて削除します。
- 'allFactors'が空になるまで1からnまで続きます。
mkList :: Int -> [Int] mkList n = [1..n-1] modArray :: Int -> Int -> [Int] modArray a b = [ x*b | x <- [1..a], x `mod` b == 0] modArrayAll :: [Int] -> [Int] -> [Int] modArrayAll [] [] = [] modArrayAll (x:xs) (y:ys) = (e) where m = head(ys) n = length(xs) e = (modArrayAll xs ys) \\ modArray n m
(メインで)これは空リストになり
let allNumbers = mkList (first + 1) let allFactors = mkList (first + 1) let mainList2 = modArrayAll allNumbers allFactors
:
は、ここに私のコードです。しかし、もし私が持っている:私は10
私の質問への1からすべての奇数番号を取得
e = xs \\ modArray n m --WORKS for one iteration
:なぜこれが道を働いていない私はそれを期待しますか?再帰スタックは空の配列条件を打ち、呼び出し配列から削除されない空の配列を返すだけで、素数だけを返すことになるでしょうか?
フィードバックありがとうございます。私が望むのは、すべて「n」の素因です。私はPythonで別のアルゴリズムを試しました。だから、私はhaskellでそのことをどうやって行うのかについては完全には分かっていません(それはしばらくありました) – cbrulak
フィードバックに感謝します。私は自分のコードを書き直して、それが良いと思います。 – cbrulak