おそらく簡単ですが、私はドキュメントを見て、例を検索しましたが、まだ答えがわかりません。Haskellのサブリストを取得します。
私はこのようなリストがある場合:慣用的な方法は何
[5,6,7,8,9]
:
[1,2,3,4,5,6,7,8,9,0]
を、私はスライスを抽出する、インデックス4から私が欲しいのインデックス8すなわちに言いますハスケルでこれをするには?
おそらく簡単ですが、私はドキュメントを見て、例を検索しましたが、まだ答えがわかりません。Haskellのサブリストを取得します。
私はこのようなリストがある場合:慣用的な方法は何
[5,6,7,8,9]
:
[1,2,3,4,5,6,7,8,9,0]
を、私はスライスを抽出する、インデックス4から私が欲しいのインデックス8すなわちに言いますハスケルでこれをするには?
まず、配列ではなく、リストです。私は配列がHaskellのリストよりもはるかに問題が多いので、(単純な)ペタンティックではありません。
Prelude> drop 4 . take 9 $ [1,2,3,4,5,6,7,8,9,0]
[5,6,7,8,9]
Prelude> take (9-4) . drop 4 $ [1,2,3,4,5,6,7,8,9,0]
[5,6,7,8,9]
後者は少しより効率的である:一つの共通の方法は、一緒にtake
とdrop
を使用することで、前記
。
awesome thanks - 配列ではなくリストを書くように修正しました:) – PeterM
問題がありますか?それらはすべてに使われるべきではなく、標準の配列モジュールはそれほど楽しいものではありませんが、[vector](http://hackage.haskell.org/package/vector)は適用可能な場合に非常に便利です。私がリストを使ってみる前に、リストとの熟達度を達成することに同意しますが... – ehird
@ehird:あなたは私が彼らに問題があると主な理由を挙げました。私はそれらを "役に立たない"と "有害な"ものと呼んでいませんでした:-) – ibid
Data.Vector (slice)に興味があるかもしれません。 始まるインデックスとスライスの長さは、入力としてData.Vector
でslice
がかかること
ghci> import Data.Vector
ghci> let v = fromList [1..10]
ghci> v
fromList [1,2,3,4,5,6,7,8,9,10]
ghci> slice 4 5 v
fromList [5,6,7,8,9]
注意。
うん、それほど実用的ではないが、おそらく改善できるだろうか?
(\(x,y) -> if 4 <= y && y <= 9 then [x] else []) =<< zip [1,2,3,4,5,6,7,8,9] [0..]
> drop 4 (take 9 [1,2,3,4,5,6,7,8,9,0])
[5,6,7,8,9]
[Haskellはリストのスライス(すなわちパイソン)を持っていますか?](http://stackoverflow.com/questions/4597820/does-haskell-have-list-slices-ie-pythonの可能重複) –