Haskell 哈斯克尔多态型
我正在练习,但我不知道如何创建除法函数Haskell 哈斯克尔多态型,haskell,Haskell,我正在练习,但我不知道如何创建除法函数 -- defines data type with two constructors data Expr = Val Int | Div Expr Expr -- defines a function that turns an expression into an integer -- eval :: Expr -> Int -- eval (Div x y) = Div x * Div y -- write an evaluation fu
-- defines data type with two constructors
data Expr = Val Int | Div Expr Expr
-- defines a function that turns an expression into an integer
-- eval :: Expr -> Int
-- eval (Div x y) = Div x * Div y
-- write an evaluation function for both Expr types
-- TODO eval (Val n) =
eval (Val n) = n
-- TODO eval (Div x y) =
-- now calculate 6 / 3 with the created function
-- TODO testeval =
testeval = eval (Div (Val 6) (Val 3))
让我们来看第一个案例:
eval (Val n) = n
根据Val
的定义,n
是Int
,因此我们只需返回n
。然后,例如,eval(Val 3)==3
,eval(Val 10)==10
,等等
现在我们来看第二个案例
eval (Div x y) = ???
根据Div
的定义,x
和y
都有类型Expr
,因此我们不能简单地返回其中一个,我们也不知道如何对Expr
值进行计算。但我们现在要做的是如何计算Int
值:
> 6 `div` 3
2
我们知道我们可以使用eval
从Expr
获取Int
:
> eval (Val 6)
6
因此,您需要做的第一件事是使用eval
计算x
和y
以获得它们的Int
值。拥有它们后,可以使用div
生成所需的值
> eval (Div (Val 6) (Val 3))
2
反复思考
x
和y
都是Expr
类型的值。您是否有类型为Expr->Int
的函数?给定两个Int
值,可以将它们除以以获得另一个Int
?而且,这不涉及多态性。更确切地说,expr
是一种求和类型,其值被“标记”为Val
ues或Div
isions。很抱歉,我还是个新手,搞不懂,似乎无法理解如何访问函数中的值