次のような特徴を持つ関数を実装したいのですが。
array
(Array[A]
)といくつかを取り、パラメータとしてpieces
()を返しますInt
array
分割された配列を返しますpieces
。- 可能であれば、すべてのピースの長さを等しくする必要があります。そうでない場合、最初のピースは最後のピースより1要素長くする必要があります(の長さが
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で使用している種類のガードを実装できる構造は、式の代わりには許可されません。これは私には奇妙に思えます。私が抱えているもう1つの問題は、scalaコードをポリモルフィックにする方法がわからないことです(Haskellコードのように)。最後になりましたが、Scalaには多くの基本的なコレクションがあるためa
、同等のポリモーフィックだけでなくインスタンスも作成する方法がわかりません。Array
私は、完全に説明された解決策または私の誤解に答えるための簡単なヒントのいずれかで大丈夫でしょう。