【问题标题】:haskell, is number in one list is within the range of a second list?haskell,一个列表中的数字是否在第二个列表的范围内?
【发布时间】:2015-05-05 01:07:42
【问题描述】:

使用 Maybe 数据类型确定列表中的数字是否在第二个列表的范围内的最佳方法是什么?

到目前为止我所拥有的:

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

它需要返回与指定位置相对应的那些元素。取决于位置是否大于列表大小,它返回 Nothing,否则返回值。

例如:

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

【问题讨论】:

  • 请注意,[xs] 匹配单元素列表,将其唯一值分配给名称 xs。你可能想要更像getElems xs ys 的东西。

标签: list haskell maybe


【解决方案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] 

【讨论】:

  • 你也可以这样getElems xs ys = map (listToMaybe . flip drop ys) xs
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2022-01-09
  • 1970-01-01
  • 2020-06-28
相关资源
最近更新 更多