Haskell回答生成器

时间:2014-05-08 13:34:33

标签: haskell prolog

我想编写一个函数,可以为同一个agruments生成多个答案。类似的东西:

aux [x,y]
  | x == A && y == B  = [A,B1]
  | x == A && y == B  = [A,B2]

正如您所看到的两个条件相同,所以我只得到一个答案[A,B1],但我想要[A,B1]然后[A,B2]。 所以,基本上,我希望haskell像prolog一样工作。有可能吗?

2 个答案:

答案 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)

我建议建立内部答案列表并将其作为结果返回。