我学习Haskell和希望写函数来递归处理嵌套的任意深度的列表。哈斯克尔:递归处理嵌套的任意深度名单
比如我想写recurReverse
,这在基础情况下,行为就像内置的reverse
,但是当通过一个嵌套列表,将reverse
所有子列表的递归元素以及:
recurReverse [1,2]
>> [2,1]
recurReverse [[1],[2],[3,4]]
>> [[4,3],[2],[1]]
recurReverse [[[1,2]]]
>> [[[2,1]]]
目前,我有基本的reverse
下:
rev [] = []
rev (h:t) = rev t ++ [h]
但我需要比这更多 - 的情况下,当头部h
也是一个列表(而不是在T原子他LISP的感觉),我希望能够reverse
h
以及返回类似rev t ++ [rev h]
。当我尝试,我得到一个编译错误,说像我不能rev h
因为rev
是[t] -> [t]
类型,但我想调用它t
类型,这是有道理的。我怎样才能解决这个问题?
你需要为列表编写一个类型来编码类型级别的嵌套深度,这样就可以编写一个函数递归,而不是在* list *上,而是在*嵌套深度*。可能最简单的方法是使用类型族。 – user2407038