在一些实践haskell工作,我在我的程序中做一个搜索函数。我没有得到想要的输出,我想我知道为什么,那就是它只检查了列表的头部,而不是尾部或(xs)。这是我试过的。
searchtask [] searchkey = do
putStrLn ""
searchtask (x : xs) searchkey = do
if x == searchkey
then putStrLn $ " Found task: " ++ x
else if x /= searchkey then putStrLn $ "Could not find task." ++ search key
else searchtask xs searchkey
我必须遍历列表吗?
首先,不需要检查x /= searchkey
。如果x == searchkey
为假,您知道x /= searchkey
将为真。其次,因为它永远不可能是false,所以永远不会进行递归调用。最后,您不想打印"无法找到任务";直到您检查了列表中的每个值。
searchtask [] searchkey = putStrLn $ "Could not find task " ++ searchkey
searchtask (x:xs) searchkey =
if x == searchkey
then putStrLn $ " Found task: " ++ x
else searchtask xs searchkey