【问题标题】:Why is ["",_] not the same as ("":_)?为什么 ["",_] 与 ("":_) 不一样?
【发布时间】: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)))

这只是语法错误还是编译器对 ["",_] 的解释与 ("":_) 不同。

【问题讨论】:

标签: haskell pattern-matching


【解决方案1】:

["", _] 是一个包含正好两个元素的列表,相当于"":_:[]

("":_) 是任何非空列表,其第一个元素是空字符串。尾部是任意列表。

【讨论】:

  • “任意列表”...Strings.
猜你喜欢
  • 2011-12-25
  • 2011-11-15
  • 1970-01-01
  • 2021-01-11
  • 2018-06-09
  • 2020-10-25
  • 2015-01-30
  • 2019-05-13
  • 2015-07-20
相关资源
最近更新 更多