2015-02-08 68 views
0

不同的路径,我有以下树:显示在实例

data Questionario = Answer String 
        | Question String Questionario Questionario 

对左了否定的答案,右边一个肯定的回答的子树子树。

我想将Questionario定义为一个实例,显示所有可能的路径。例如:

q = Question "a >= b" 
     (Question "a >= c" 
     (Question "b >= c" 
       (Answer "a b c") 
       (Answer "a c b")) 
     (Answer "c a b")) 
     (Question "a >= c" 
     (Answer "b a c") 
     (Question "b >= c" 
      (Answer "b c a") 
      (Answer "c b a"))) 

必须显示为:

*Main> q 
a >= b? No a >= c? No b >= c? No ANSWER: a b c 
a >= b? No a >= c? No b >= c? Yes ANSWER: a c b 
a >= b? No a >= c? Yes ANSWER: c a b 
a >= b? Yes a >= c? No ANSWER: b a c 
a >= b? Yes a >= c? Yes b >= c? No ANSWER: b c a 
a >= b? Yes a >= c? Yes b >= c? Yes ANSWER: c b a 

我已经写了这个:

instance Show Questionario where 
    show (Answer x) = "ANSWER " ++ x 
    show (Question q r l) = q ++ "? " 

,但我不知道如何使它显示出每一个可能的路径。我该怎么做?谢谢。

回答

1

你想要一个函数来生成所有路径。一种可能的方法是:

这里只有一个用于Answer路径。取而代之的Question的路径是联盟:

  1. 那些涉及到一个否定的答案,前面添加的问题和“否”,并
  2. 那些涉及到了肯定的回答,有问题和前置“是”。

您可能想要使用map而不是列表解析 - 这只是个人品味的问题。