我正在研究 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 函数。不完全确定如何解决此错误。有任何想法吗?