0

リスト内の要素のインデックスを取得しようとしています。

ただし、私が抱えている問題は、要素がリストにない場合です。

おそらく末尾再帰が適切であると考えていますが、どうすればよいかわかりません。

whatIndex sought [] = -1
whatIndex sought (a:xs) = 
    if sought == a
        then 0
        else 1 + whatIndex sought xs

編集:

リストにない場合は -1 を返す必要があります

例:

whatIndex 3 [1,2,3] == 2
whatIndex 3 [0,1,2] == -1

編集:動作させることができました。

4

1 に答える 1

2

もちろん、あなたは持っていData.List.findIndexます。自分で書きたい場合は、次のような方法がたくさんあります。

import Control.Monad

whatIndex x = msum . zipWith f [0..] where
  f i y = if x == y then Just i else Nothing

... を返しますMaybe Int。-1 ハックを主張する場合は、fromMaybe (-1) $(から来るData.Maybe) を の前に追加しますmsum

于 2013-02-13T14:57:31.963 に答える