【发布时间】:2021-12-28 23:04:17
【问题描述】:
我偶然发现了一个令我非常困惑的错误。我有一个模式匹配["",_] = [] 的递归函数,它根本不起作用。经过多次尝试找出我的错误后,我尝试使用("":_) = [] 切换它。它奏效了!我只想知道为什么第一个学期没用,而第二个学期没用。
此函数有效,并且调用了模式匹配:
takeAllElem :: [String] -> [String]
takeAllElem ("":_) = []
takeAllElem (xs) = map takeFirstElem (xs) : (takeAllElem (removeFirstElem (xs)))
这个函数也可以,但是模式匹配永远不会被调用:
takeAllElem :: [String] -> [String]
takeAllElem ["",_] = []
takeAllElem (xs) = map takeFirstElem (xs) : (takeAllElem (removeFirstElem (xs)))
这只是语法错误还是编译器对 ["",_] 的解释与 ("":_) 不同。
【问题讨论】:
-
["",_]等价于("":__:[])。 -
...或
"":[_]。 -
你可能会喜欢
transpose。 -
因为
[不是(。