Haskell-在列表中查找元素

Dia*_*ana 0 haskell

我想编写一个函数,接受一个数字i和号码的列表xs,并返回位置的i列表中xs,数为1的第一个位置.如果i不发生xs,则position返回0.

到目前为止我有这个:

import Data.List
position :: Int -> [Int] -> Int
position i xs 
   | i `elem` xs = i `elemIndex` xs
   | otherwise = 0
Run Code Online (Sandbox Code Playgroud)

但是当我编译时,它会给出以下错误:

无法将预期类型'Int'与实际类型'Maybe Int'匹配

我知道elemIndex返回一个Maybe Int类型,我定义了我的函数返回Int但我不知道如何更改它.有任何想法吗?

Zet*_*eta 5

首先,列表以0…. 如果恰好是列表的第一个元素,那么elemIndex将返回。Just 0i

由于elemIndexreturn Maybe Int,您可以对其结果进行模式匹配:

import Data.List (elemIndex)

position :: Eq a => a -> [a] -> Int
position i xs =
    case i `elemIndex` xs of
       Just n  -> n + 1
       Nothing -> 0
Run Code Online (Sandbox Code Playgroud)


bmk*_*bmk 5

我认为,上面的解决方案可能是使用该maybe功能的单线程:

import Data.List

position :: Eq a => a -> [a] -> Int
position i xs = maybe 0 (+1) $ i `elemIndex` xs
Run Code Online (Sandbox Code Playgroud)