kos*_*tmo 1 haskell pattern-matching
我将通过Learn You a Haskell教程并尝试elem'从Recursion部分修改该函数.
原来的elem'功能是:
elem' :: (Eq a) => a -> [a] -> Bool
elem' a [] = False
elem' a (x:xs)
| a == x = True
| otherwise = a `elem'` xs
Run Code Online (Sandbox Code Playgroud)
我的indexOf功能是:
indexOf :: (Eq a, Integral s) => a -> [a] -> s -> s
indexOf _ [] _ = -1
indexOf a (x:xs) s
| a == x = s
| otherwise = indexOf a xs s+1
Run Code Online (Sandbox Code Playgroud)
该函数应该返回列表中元素的索引,或者-1是否找不到该元素.
在我的.hs文件的末尾,我用以下方法测试函数:
main = putStrLn(show(indexOf 7 [1,2,3] 0))
Run Code Online (Sandbox Code Playgroud)
该函数可正常用于查找列表中显示的值.但是,对于上面所写的测试-1,它不会返回,而是打印2.返回值似乎总是列表长度减去1.
在遇到边缘条件(空列表)之后,我希望-1返回值一直向上传播通过调用堆栈.哪里是我的错?