bel*_*lla 4 string haskell functional-programming function list
我的程序有问题,我能够找出问题所在.我设法将它减少到这个更简单的问题.让我们说我有这个功能
fn:: String -> String
fn (x:xs)
| null (x:xs) = "empty"
| otherwise = "hello"
Run Code Online (Sandbox Code Playgroud)
输入随机的东西会返回,"hello"但如果我这样做,
fn ""
Run Code Online (Sandbox Code Playgroud)
我得到了非详尽的模式错误.因为""被认为是一个空列表,[]它不应该与我的第一个模式匹配并返回"empty"?
StringHaskell中的A 是一个字符列表.所以要匹配空,String你需要匹配一个空列表([]).您的模式(x:xs)将仅匹配列表或String至少包含一个元素的s,因为它由一个元素(x)和其余(xs)组成,它们可以为空或非空.
您的函数的工作版本如下所示:
fn :: String -> String
fn [] = "empty"
fn (x:xs) = "hello"
Run Code Online (Sandbox Code Playgroud)
这将返回"empty"了fn "".
你的功能
fn:: String -> String
fn (x:xs)
| null (x:xs) = "empty"
| otherwise = "hello"
Run Code Online (Sandbox Code Playgroud)
会写得更好:
fn :: String -> String
fn x | null x = "empty"
| otherwise = "hello"
Run Code Online (Sandbox Code Playgroud)
要么
fn :: String -> String
fn "" = "empty"
fn _ = "hello"
Run Code Online (Sandbox Code Playgroud)
因为null (x:xs)肯定是错的(总是假的).
我更喜欢后者,因为它清楚地表明你只关心String类型.
但这是一个有点奇怪的功能.我在实践中没有看到它.