Haskell 中的流数据类型实现
Stream data type implementation in Haskell
我在大学有 Haskell 编程课程。而且我必须实现我自己的数据类型“Stream
”及其一些功能:
data Stream a = a :> Stream a
我在实现功能“streamToList
”时遇到问题:
streamToList :: Stream a -> [a]
它必须取一个“Stream
”的对象和return一个无限列表。但是我不知道如何获取这个对象的元素。如何获取此流的元素?
另外我想问一下:这个数据类型的对象初始化方法是什么?
It must takes an object of "Stream" and returns an infinite list. But I don't know how to take elements of this object.
通过模式匹配,您可以“解压”包装在数据构造函数中的数据,例如:
streamToList :: Stream a -> [a]
streamToList <b>(x :> xs)</b> = …
此处 x
是流的第一项,xs
是 Stream
项。
我将执行子句的主体(…
部分)留作练习。您将需要递归以“遍历”流的其余部分。
您已将数据类型定义为
data Stream a = a :> Stream a
这是一种模式,一种如何使用的模板。 “已使用”表示 已创建 和 已访问。换句话说,与互动
这种类型的值可以访问,定义中 =
左侧的模式,
foo (a :> restOfAs) = a : foo restOfAs
(这个函数的类型是什么?)
可以创建此类型的值,将其用作定义中=
右侧的代码模式,例如
bar i = i :> bar (i+1)
或
baz [x] = x :> baz [x]
baz (x:xs) = x :> baz xs
baz [] = error "can't be empty"
或
quux x = xs where
xs = x :> xs
(这些函数的类型是什么?)
我在大学有 Haskell 编程课程。而且我必须实现我自己的数据类型“Stream
”及其一些功能:
data Stream a = a :> Stream a
我在实现功能“streamToList
”时遇到问题:
streamToList :: Stream a -> [a]
它必须取一个“Stream
”的对象和return一个无限列表。但是我不知道如何获取这个对象的元素。如何获取此流的元素?
另外我想问一下:这个数据类型的对象初始化方法是什么?
It must takes an object of "Stream" and returns an infinite list. But I don't know how to take elements of this object.
通过模式匹配,您可以“解压”包装在数据构造函数中的数据,例如:
streamToList :: Stream a -> [a]
streamToList <b>(x :> xs)</b> = …
此处 x
是流的第一项,xs
是 Stream
项。
我将执行子句的主体(…
部分)留作练习。您将需要递归以“遍历”流的其余部分。
您已将数据类型定义为
data Stream a = a :> Stream a
这是一种模式,一种如何使用的模板。 “已使用”表示 已创建 和 已访问。换句话说,与互动
这种类型的值可以访问,定义中 =
左侧的模式,
foo (a :> restOfAs) = a : foo restOfAs
(这个函数的类型是什么?)
可以创建此类型的值,将其用作定义中=
右侧的代码模式,例如
bar i = i :> bar (i+1)
或
baz [x] = x :> baz [x]
baz (x:xs) = x :> baz xs
baz [] = error "can't be empty"
或
quux x = xs where
xs = x :> xs
(这些函数的类型是什么?)