私は別のシーケンスのn番目の要素からなるシーケンスを作成する方法を探していますが、エレガントな方法でこれを行う方法は見当たりません。私はもちろん、何かをハックすることができますが、私は見ていないライブラリ関数があるのだろうかと思います。シーケンスのn番目の要素を取得する
名前が-iで終わるシーケンス関数は、要素がn番目の(nの倍数)番目の要素を認識するためにはかなり良いようですが、iteri
とmapi
しか表示されませんそのうちの1つは実際にタスクに役立ちます。
例:
let someseq = [1;2;3;4;5;6]
let partial = Seq.magicfunction 3 someseq
その後partial
は[3;6]
でなければなりません。そこにそれのようなものはありますか?
編集:私はそれほど野心的ではないですし、n
が知られている/一定にするために許可した場合
が、その後、私はちょうど、以下が動作する必要があることがわかりました:
let rec thirds lst =
match lst with
| _::_::x::t -> x::thirds t // corrected after Tomas' comment
| _ -> []
うこれを短く書く方法がありますか?
リストの各要素を 'Some'または' None'に変換し、 'None'sを' filter'して、それらを未修飾型に再度マップすることができます。 –
あなたの解を使ったリストはうまく見えます(タプルのリストを使う '(_、_、x):: tの代わりに' _ :: _ :: x :: t'を書いたかったでしょう) 'Seq'はリスト以外のコレクションでも動作しますが、それは問題ではないかもしれません。リストのバージョンは素晴らしい機能コードです –
もちろん、それは' _ :: _ :: x :: t'は、ここに貼り付ける前にコンパイラに依頼しておかなければならないでしょう –