のリストの最初の出現のインデックスを取得します:Haskellは - 私は、次のような文字列のリストを持っている文字列
[ "aaa", "aaa", "aba", "aaa"]
私はどこそこのリストの最初の位置を返す関数を作りたいです文字 'b'を含む項目です。ハスケルでどうすればいいですか?
のリストの最初の出現のインデックスを取得します:Haskellは - 私は、次のような文字列のリストを持っている文字列
[ "aaa", "aaa", "aba", "aaa"]
私はどこそこのリストの最初の位置を返す関数を作りたいです文字 'b'を含む項目です。ハスケルでどうすればいいですか?
は、あなたがやりたいだろう関数です。
getIndexWithb = findIndex ('b' `elem`)
あなたはこの仕事をするためにData.List
をインポートする必要があります。また、'b'
がいずれの文字列にも現れない場合、この関数はタイプMaybe Int
を返します。
使用:
> getIndexWithb [ "aaa", "aaa", "aba", "aaa"]
Just 2
最初のポジションを尋ねるので、インデックス値または実際の値を使用するかどうかはわかりません。ここでは、そのインデックスにインデックスと値の両方を含むタプルを与える関数があります。
import Data.Maybe
firstOccurrenceOf :: Char -> [String] -> Maybe (Int, String)
firstOccurrenceOf c list =
listToMaybe $ filter (elem c . snd) $ zip [0..] list
listToMaybe
空のリストにクラッシュするのではなく、Nothing
を返しますhead
への安全な代替手段を提供します。ここで
The List Utilities chapter of the Haskell Report任意の述語を満たすリストの最初の要素のインデックスを見つける機能findIndex
を記述する。それはそれと
findIndex p xs =
case [ i | (x, i) <- zip xs [0..], p x ] of
[] -> Nothing
e:_ -> Just e
として実装することができ、あなたはこれまでのところ、あなたのアプローチはどのようなものであった
findIndex ('b'`elem`) ["aaa", "aaa", "aba", "aaa"]
と
'b'
を含むリストの最初の要素を見つけることができますか?文字が文字列に現れるかどうかを調べる関数を書くことができますか?たとえば、 'contains" aba "'b''は' True'を返します。 – bheklilr@bheklilr私が見る限り、この関数は推奨されていません。代わりにisInfixOfを使うことができます。この場合は 'isInfixOf" b "" aba "'は 'True'を返すでしょう – molinet
私は実際に' contains'関数があることに気付かず、これは代入であると仮定し、リンクされたリストの再帰で作業することについて教えてくれるはずです。その場合はできるだけ多くのことを学ぶことができます。 – bheklilr