我正在研究Haskell中的一個函數,它將採用一個列表並將其分成兩個大小均勻的列表。以下是我有:Haskell分割列表函數無限類型錯誤
split (x:y:xs) = split2 ([((length(x:y:xs) `div` 2)-2) : x ++ y] : [xs])
split2 (x:xs:[y:ys]) = split2 ((x-1) : [xs] ++ y : [ys])
split2 (0:xs:[y:ys]) = (xs:[y:ys])
該函數將列表中的前兩個元素,並把它們一起放入列表#2和追加第一列表作爲第二個元素。然後它得到列表的長度,並將它除以2以找出運行多少次,考慮到它已經從第一個列表中移除了兩個元素。然後,它將這兩條信息放入split2中,它將第一個列表中的另一個元素附加到第一個元素中的第二個列表中,並從運行次數中減1,然後再次運行。
問題是,當我運行它,我得到這個:
Functions.hs:19:49:
Occurs check: cannot construct the infinite type: t0 = [t0]
In the first argument of `(:)', namely `(y)'
19指的是線2條,第split2功能。不完全確定如何去解決這個錯誤。有任何想法嗎?