我想编写一个函数,可以为同一个agruments生成多个答案。类似的东西:
aux [x,y]
| x == A && y == B = [A,B1]
| x == A && y == B = [A,B2]
正如您所看到的两个条件相同,所以我只得到一个答案[A,B1]
,但我想要[A,B1]
然后[A,B2]
。
所以,基本上,我希望haskell像prolog一样工作。有可能吗?
答案 0 :(得分:2)
尝试类似
的内容import Control.Monad (guard)
data A = A | B | B1 | B2 deriving Eq
aux [x, y] = concat
[ guard (x == A && y == B) >> [[A, B1]]
, guard (x == A && y == B) >> [[A, B2]]]
这只是使用列表monad并构建参数,如果条件为false,我们只给出空列表,然后结束结果。
答案 1 :(得分:0)
我建议建立内部答案列表并将其作为结果返回。