我有一个函数,它接收一个列表并返回以给定元素n为分界点的两个子列表。但是,我只需要将其平均分成两份,长度为奇数的列表具有更大的第一个子列表。
splitlist :: [a] -> Int -> ([a],[a])
splitlist [] = ([],[])
splitlist l@(x : xs) n | n > 0 = (x : ys, zs)
| otherwise = (l, [])
where (ys,zs) = splitlist xs (n - 1)
我知道我需要将签名更改为[a] -> ([a],[a]),但是在代码中我应该在哪里放置类似于length(xs)这样的内容,以便我不会破坏递归?