Class ForEachInt Haskell
Class ForEachInt a in Haskell
我做运动有困难。我知道我必须定义除函数 feget 之外的函数的签名,但我不知道该怎么做。
我必须设置 ForEachInt
class 来描述结构的交叉
存储整数并包含以下函数的数据:
felength
(结构中的元素个数)
fehead
(结构中的第一个整数)
fetail
(没有第一个整数的结构)
fe2list
(returns 列表中的整个结构)
feget
(根据 felist 的所有信息)。
这是我所做的:
class ForEachInt a where
data ForEachInt = Empty | Int Int Int
谢谢你
您似乎希望创建一个全 Int
列表 class。很好:
data ForEachInt = None | Some Int ForEachInt
这为我们定义了数据类型,允许我们使用 Some
构造函数将 Int
链接在一起。从那时起,这很容易:
felength :: ForEachInt -> Int
felength None = 0
felength (Some x xs) = 1 + (felength xs)
fehead :: ForEachInt -> Int
fehead (Some x xs) = x
fehead None = error "Cannot retrieve from None"
fetail :: ForEachInt -> ForEachInt
fetail (Some x xs) = xs
fetail None = error "Cannot retrieve from None"
fe2list :: ForEachInt -> [Int]
fe2list None = []
fe2list (Some x xs) = x : fe2list xs
我建议仔细研究这些函数中的每一个:递归很容易让人混淆。至于模式匹配,那很容易,但我发现实际上数据结构是最难理解的。 LYAH 对数据类型有很好的解释,所以请检查一下。
我做运动有困难。我知道我必须定义除函数 feget 之外的函数的签名,但我不知道该怎么做。
我必须设置 ForEachInt
class 来描述结构的交叉
存储整数并包含以下函数的数据:
felength
(结构中的元素个数)fehead
(结构中的第一个整数)fetail
(没有第一个整数的结构)fe2list
(returns 列表中的整个结构)feget
(根据 felist 的所有信息)。
这是我所做的:
class ForEachInt a where
data ForEachInt = Empty | Int Int Int
谢谢你
您似乎希望创建一个全 Int
列表 class。很好:
data ForEachInt = None | Some Int ForEachInt
这为我们定义了数据类型,允许我们使用 Some
构造函数将 Int
链接在一起。从那时起,这很容易:
felength :: ForEachInt -> Int
felength None = 0
felength (Some x xs) = 1 + (felength xs)
fehead :: ForEachInt -> Int
fehead (Some x xs) = x
fehead None = error "Cannot retrieve from None"
fetail :: ForEachInt -> ForEachInt
fetail (Some x xs) = xs
fetail None = error "Cannot retrieve from None"
fe2list :: ForEachInt -> [Int]
fe2list None = []
fe2list (Some x xs) = x : fe2list xs
我建议仔细研究这些函数中的每一个:递归很容易让人混淆。至于模式匹配,那很容易,但我发现实际上数据结构是最难理解的。 LYAH 对数据类型有很好的解释,所以请检查一下。