【发布时间】:2014-10-18 20:17:50
【问题描述】:
我正在尝试构建一个表示多项式的代数数据类型。给定整数常量是多项式的定义,如果将两个多项式相加或将两个多项式相乘,就会得到一个多项式。
我很难理解代数数据类型的一般工作原理,以及我什至会如何生成它。我目前有
data Poly = Const Int |
Add Poly Poly |
Mult Poly Poly
但是我什至不知道这意味着什么或如何使用它,我只是从我见过的代数数据类型的例子中解脱出来。
我见过这样的类型
data Tree = NullT |
Node Int Tree Tree
这对我来说更有意义,以及如何使用它。多项式的例子似乎太抽象了,我不知道从哪里开始。
编辑:当我尝试实现简单的测试功能时:
evalPoly :: Poly -> Int
evalPoly (Const n) = n
我遇到了错误
*Polynomial> evalPoly Poly 1
<interactive>:25:10: Not in scope: data constructor ‘Poly’
*Polynomial>
再次编辑:感谢您的所有建议和帮助,它帮助我制作了适合我的目的的东西!
【问题讨论】:
-
您已经问过自己要对多项式执行什么样的操作,然后尝试实现它们。
-
@augustss 我有一些需要稍后实现,但现在我想重点了解它的定义以及如何使用定义。
-
您将类型 (
Poly) 与其构造函数 (Const,Add,Int) 混淆了;Const 1构造一个Poly;Poly 1不能 -
@bheklilr 啊,谢谢,这是有道理的。我认为出于这个小程序的目的,我不需要将 polys 发挥到 polys 的作用,只需显示 polys。感谢您的所有帮助!
-
FWIW,您最好将多项式(在单个变量中)表示为元组列表:
x^2 + 2x^7 = [(1, 2), (2, 7)] :: [(Coefficient, Exponent)],比如说。
标签: haskell algebraic-data-types