在你的问题中,你写 正或零+正=正[Pos; Zero] + [Pos] -> [Pos] 你怎么知道的?你是否就读过一所学校,专门教你,如果你在某物上加一个positive-or-zero号,你会得到什么?当然不是。您将其分解为更简单的案例,推理如下: 第一个数字可能是正数。在这种情况下,我知道Pos+Pos=Pos 第一个数字可能是零。在这种情况下,我知道零+Pos=Pos。 因此,在第一个数字可能包含的所有值中,结果是Pos或Pos。 当然,我们可以将其简化为始终是Pos。 编写一个程序,以同样的方式进行推理。不要一次查看一对符号列表,而是为每个操作编写一个函数,只处理每个操作数的一个符号,从而生成一个可能结果列表。对输入列表表示的每对可能的符号调用该函数,然后合并结果。 For example. signOp Add x y = case (x, y) of (Zero, r) -> [r] (l, Zero) -> [l] (a, b) | a == b -> [a] | otherwise -> [Pos, Zero, Neg]