我试图定义一个名为" Poly"的新类型。在Haskell中,类型是表示多项式表达式的" Num" s的列表。 [1,2,3]对应于3x ^ 2 + 2x + 1,因此[4,5,6,0,0 ... 0]与[4,5,6]具有相同的多项式。
我已经创建了一个名为" chop"从列表末尾删除0,但我在比较两个列表时遇到问题。任何想法为什么我使用"实例"在这里不起作用?
它编译,但是当你尝试比较2个Poly实例时,WinGHCi会挂起。
JobModel model = new DefaultJobModel(); // You'll need to create this
panel.add(new JCheckBox(new JobAction(model, "Mowing", 10d)));
答案 0 :(得分:8)
问题在于您已将(==)
定义为自身递归。稍微简化一下你的定义,你有:
m == n = chop m == chop n
评估如下:
m == n
-> { definition of (==) }
chop m == chop n
-> { definition of (==) }
chop (chop m) == chop (chop n)
-> { definition of (==) }
chop (chop (chop m)) == chop (chop (chop n))
-> { ... }
您应该调度到列表的相等性,而不是将相等性测试分派回多项式的相等性测试。例如,可以写一个
m == n = let P m' = chop m; P n' = chop n in m' == n'
代替。