实作搜寻算法,在清单中搜寻Int n,并传回清单中n之前的值。如果没有值,或清单是空的,则传回-1。例如,findPrev 5 [1,2,3,4,5,6]
应传回4,而findPrev 5 [0, 10, 20, 30]
则传回-1。
我得到了这个号码,但不知道如何得到以前的号码。有人能帮助和解释这一个给我吗?以下是我如何做的第一个:
findNext :: Int -> [Int] -> Int
findNext _ [] = -1
findNext n (x:xs)
| n == x = head xs
| otherwise = findNext n xs
4条答案
按热度按时间czq61nw11#
您可以使用模式匹配来获取前一个值。只需将匹配大小写的模式定义为
x:y:xs
,以匹配至少包含两个元素的列表。空列表和单例列表的大小写可以在其他情况下显式拼写:vc9ivgsu2#
现成的(但效率低下)答案:在列表的反转上使用
findNext
。kyvafyod3#
e5nqia274#
假设列表是有序的: