f::[type]->[type]次のように大まかに定義された再帰的な関数が必要です。
要素が 1 つのリストから始まりますx。次に、3 つの「ジェネレーター関数」を適用して、 、 、および 、すべての関数を呼び出し
generatorA、generatorB何らかのgenerator C条件を受け入れる場合にそれらをリスト::type->typeに追加します。受け入れられた生成された数値ごとに、条件テストが false になるまで、 generator 、andおよび test 条件の適用を繰り返します。したがって、リストに受け入れられた要素ごとに、3 つの新しい要素が生成され、リストのテストが行われます。ABC
例は次のとおりです。
f::[int]->[Int]
generatorA x = x+1
generatorB x = 2x+1
generatorC x = 3x+1
条件: 合成数 (素数ではない) である必要があります。
計算f [10]を開始する必要があり、それをgeneratorA 10 = 11破棄します。
generatorB 10 = 21受け入れてから:
generatorA 21 = 22受け入れてから:generatorA 22 = 23プライム廃棄。
generatorB 21 = 43破棄generatorC 21 = 64受け入れる 等 等 等
質問: 関数をどのようにコーディングしますfか? どうやって始めたらいいのかわからない。私の最良の推測は
f (x:xs)
|condition==True = (something something)
|otherwise = xs
where
a=generatorA x
b=generatorB x
c=generatorC x
ご協力いただきありがとうございます。