gpt4 book ai didi

Haskell 线性搜索(返回索引)

转载 作者:行者123 更新时间:2023-12-01 22:04:43 26 4
gpt4 key购买 nike

因此,我希望我的函数返回给定值的索引(如果它在列表中多次出现,则为第一个)。它似乎只适用于空列表或给定元素的索引为 0。你能告诉我我做错了什么吗?

linsearch _ [] = -1
linsearch y (x:xs) = head [i | let j = length xs, i <- [0..j-1], y == x]

谢谢。

最佳答案

返回 -1 表示搜索失败是您在类型系统错误的语言中所做的事情。此外,如果您只关心第一个元素,则没有理由找到所有 元素。此外,如果结果列表为空,head 将失败。

linsearch :: Eq a => a -> [a] -> Maybe Int
linsearch _ [] = Nothing
linsearch y (x:xs) | y == x = Just 0
| otherwise = fmap (+ 1) (linsearch y xs)

空列表显然失败:返回Nothing。使用非空列表,检查是否第一个元素是你要找的那个;如果是,返回 Just 0。否则,y 可能在也可能不在 xs 中;递归找出。您将向该结果添加 1 以说明 xs 是原始列表的“移位”版本。您需要使用 fmap 因为您不会将 1 加到某个整数 y 上;您将把它添加到一个“包装”值,如 Just y,或者如果 y 确实不在列表中,则可能是 Nothing。注意

fmap (+1) Nothing == Nothing
fmap (+1) (Just 3) == Just 4

关于Haskell 线性搜索(返回索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52518817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com