我是Haskell编程的新手,必须为我在大学的功能开发讲座做一些练习。我得到了创建数据类型的任务,称为" term"这代表了一种理性的功能。第二项任务是创建一种区分输入术语的方法。
我们需要一个简单的解决方案和构造函数:monomial,Addition,Multiplication,divison
假设:
logging.SetBackend(backendList...)
编辑:
调用以下函数将返回相应的派生词:
data Term = Monom (Int, Int) | Addition[Term] deriving Show
diff :: Term -> Term
diff (Monom(a, b)) = Monom(a*b, b-1)
同样的:
diff (Monom(a,b)) = if b>0 then Monom(a*b, b-1) else Monom(0,0)
有谁能告诉我如何迭代输入列表中的所有元素?上面的函数只返回第一个派生值..
我感谢每一个帮助或提示!
答案 0 :(得分:0)
Haskell有一个非常富有表现力的类型系统。不要过度思考!只需编写一个可以简单捕获有理函数定义的类型。由于有理函数f(x)
是一个函数,可以用p(x)/q(x)
形式写成多项式p(x)
和q(x)
,所有你理性函数类型需要做的就是包含两个多项式:
data Polynomial = undefined -- your HW here
data RationalFunction = Polynomial Polynomial
-- or
data RationalFunction = { numerator :: Polynomial
, denominator :: Polynomial
}
答案 1 :(得分:0)
您只需要添加diff
的定义即可。它已经为Term
类型Monom
的两个构造函数之一定义。您现在需要为其他构造函数Addition
定义它:
diff (Monom (a, b)) = Monom (a*b, b-1)
diff (Addition terms) = ???
考虑多项式的导数是什么:各个项的导数之和。
1)d/dx x^2 + x == 2*x + 1
现在考虑上面的多项式如何表示为Term
值:
2)Addition [Monom (1,2), Monom (1, 1)] -- x^2 + x
最后,衍生物将如何表示?
3)Addition [Monom(2, 1), Monom (1, 0)] -- 2*x + 1
您的任务是将???
的定义中的diff
替换为可能类似于2的代码,并生成类似于3的内容。