我想要一个f::[type]->[type]
递归定义的函数,大致如下:
它从一个包含 1 个元素的列表开始x
。然后它应用 3 个“生成器函数”让我们调用它们
generatorA
,generatorB
和generator C
, 所有函数,如果它们接受某些条件,则将它们::type->type
添加到列表中。对于每个接受的生成数字,它重复应用生成器和测试条件,直到条件测试为假。因此,对于列表中接受的每个元素,将生成 3 个新元素并针对列表进行测试。A
B
C
一个例子是:
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
谢谢你的帮助。