リストを受け取り、特定の要素 n で分割された 2 つのサブリストを返す次の関数があります。ただし、それを半分に分割するだけでよく、長さが奇数のリストは最初のサブリストが大きくなります
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) のようなものを配置する必要がありますか?