小编Far*_*exx的帖子

哈斯克尔 || 缺少空元素

我需要创建一个采用字符串第一个元素的函数,但因为我在其他函数中递归地使用此函数,所以我需要为空列表声明边缘情况。如果给定一个空列表,这个函数怎么能不执行任何操作呢?

takeFirstElem :: String -> Char
takeFirstElem [] = {- missing Element -}
takeFirstElem (x:xs) = x
Run Code Online (Sandbox Code Playgroud)

我缺少的是类似于 null 元素的东西(比如空 List [] 中的 nil 元素)。是否存在这样的事情或者是否有其他方法来解决这个问题?

null haskell

1
推荐指数
1
解决办法
89
查看次数

为什么 ["",_] 与 ("":_) 不同?

我偶然发现了一个令我非常困惑的错误。我有一个带有模式匹配的递归函数,["",_] = []但它根本不起作用。经过多次尝试找出我的错误后,我尝试将其与("":_) = []. 它成功了!我只是想知道为什么第一个术语不起作用但第二个术语起作用。该函数起作用并调用模式匹配:

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)

这只是一个语法错误还是编译器的解释["",_]("":_).

haskell pattern-matching

1
推荐指数
1
解决办法
76
查看次数

标签 统计

haskell ×2

null ×1

pattern-matching ×1