use*_*424 3 haskell nested-lists
我正在尝试创建一个包含子列表的列表,比如[1, 2, [3, 4], [3, [4, 5]]].
好像我应该定义一个新类型.我试过了:
data NestedList a = Int a | List [NestedList a]
Run Code Online (Sandbox Code Playgroud)
但我认为它错了,或者我不知道如何使用它.我对Haskell很新,我不确定这个表达式的含义.
这是否意味着这是有"型" Int与参数a和一个"型" List与参数[NestedList a]?
data上面的表达式取自99 Haskell问题的第7次练习的解决方案
(**)展平嵌套列表结构.
Run Code Online (Sandbox Code Playgroud)data NestedList a = Elem a | List [NestedList a] flatten :: NestedList a -> [a] flatten (Elem x) = [x] flatten (List x) = concatMap flatten x
但是当我打电话给我时flatten [[1,2], 3],ghci我得到了错误
couldn't match expected type 'NestedList a0' with actual type '[t0]'
Run Code Online (Sandbox Code Playgroud)
md2*_*rpe 10
你不能调用flatten [[1,2],3]因为你的flatten应该采用一个NestedList a,而不是嵌套的普通列表,这在Haskell中是不允许的.
你的电话应该是这样的
flatten (List [Elem 3, List [Elem 2, Elem 4], Elem 5])
Run Code Online (Sandbox Code Playgroud)
这是一个侧面说明,我不能适应评论.这不直接回答你的问题,但我认为你可能会觉得它很有用.
你的类型与a相同Forest.见Data.Tree的containers包,它实现了这种类型的为您服务.
它甚至包括一个flatten功能:
flatten :: Tree a -> [a]
Run Code Online (Sandbox Code Playgroud)
...你可以Forest通过使用concatMap以下方式为...工作:
concatMap flatten :: Forest a -> [a]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4041 次 |
| 最近记录: |