我學習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