Far*_*exx 1 haskell pattern-matching
我偶然发现了一个令我非常困惑的错误。我有一个带有模式匹配的递归函数,["",_] = []但它根本不起作用。经过多次尝试找出我的错误后,我尝试将其与("":_) = []. 它成功了!我只是想知道为什么第一个术语不起作用但第二个术语起作用。该函数起作用并调用模式匹配:
takeAllElem :: [String] -> [String]
takeAllElem ("":_) = []
takeAllElem (xs) = map takeFirstElem (xs) : (takeAllElem (removeFirstElem (xs)))
Run Code Online (Sandbox Code Playgroud)
这个函数也可以工作,但是模式匹配永远不会被调用:
takeAllElem :: [String] -> [String]
takeAllElem ["",_] = []
takeAllElem (xs) = map takeFirstElem (xs) : (takeAllElem (removeFirstElem (xs)))
Run Code Online (Sandbox Code Playgroud)
这只是一个语法错误还是编译器的解释["",_]与("":_).