haskell, находится ли число в одном списке в пределах диапазона второго списка?

Каков наилучший способ узнать, находится ли число в списке в диапазоне второго списка, используя тип данных «Может быть»?

Что у меня есть до сих пор:

getElems :: [Int] -> [a] -> [Maybe a]
getElems [xs] ys
    | head(tail[(xs)]) > head(tail[(ys)]) = [Nothing]
    | otherwise = [Just xs] 

Он должен вернуть те элементы, которые соответствуют указанным позициям. В зависимости от того, превышает ли позиция размер списка, она возвращает ничего, иначе просто значение.

Например:

getElems [2,4] [1..10] ) [Just 3,Just 5]
getElems [2,4] [1..4] ) [Just 3,Nothing]

person Zast    schedule 05.05.2015    source источник
comment
Обратите внимание, что [xs] соответствует одноэлементному списку, присваивая его единственное значение имени xs. Вместо этого вы, вероятно, захотите что-то более похожее на getElems xs ys.   -  person bheklilr    schedule 05.05.2015


Ответы (1)


Вы можете написать getElementByIndex, который делает это для одного списка:

getElementByIndex :: Int -> [a] -> Maybe a
getElementByIndex n [] = Nothing
getElementByIndex n (x:xs) = if (n == 0)
                             then Just x
                             else getElementByIndex (n - 1) xs

А затем просто map получить ответ:

getElems :: [Int] -> [a] -> [Maybe a]
getElems xs ys = map (\x -> getElementByIndex x ys) xs

Демо в ghci:

λ> getElems [2,4] [1..10]
[Just 3,Just 5]
λ> getElems [2,4] [1..4]
[Just 3,Nothing] 
person Sibi    schedule 05.05.2015
comment
Вы также можете сделать это так getElems xs ys = map (listToMaybe . flip drop ys) xs - person No_signal; 05.05.2015