我想实现一个具有以下特征的函数:
- 将一个
array
(Array[A]
) 和一个pieces
要返回的 (Int
) 作为参数 - 返回
array
分成pieces
几部分的数组。 - 如果可能,所有部分的长度都应该相等,否则第一个应该比最后一个长一个元素(如果 的长度
array
不是 的倍数pieces
)
在 Haskell 中,我会按照这些思路编写一些代码:
split :: [a] -> Int -> [[a]]
split list pieces = go list (length list `div` pieces)
where
go xs n | l > n && m == 0 = take n xs : go (drop n xs) n
| l > n = take (n + 1) xs : go (drop (n + 1) xs) n
| otherwise = [xs]
where
l = length xs
m = l `mod` n
尽管在 Scala 中,我在编写这个(基本)函数时遇到了很多困难。对于递归,Array
似乎并不适应。然后,if
允许我实现我在 haskell 中使用的那种守卫的结构不允许代替表达式,这对我来说似乎很奇怪。我遇到的另一个问题是我不知道如何使我的 scala 代码多态(就像我的 Haskell 代码一样)。最后但并非最不重要的一点是,我不明白如何不仅制作a
等效的多态,而且制作Array
实例,因为 Scala 中有许多基本集合。
我可以使用完整的解释解决方案或简单的提示来回答我的误解。