不在范围'C'

时间:2015-01-08 17:47:56

标签: haskell

fold1 ((c, xs):rest) ys = Just [(c, ys)]
fold1 ((c, xs):rest) ys = if xs == ys then Just [(c, ys)] else fold1 rest ys

您好, 在第一行中是否有办法以((c, xs):rest) ysxs为空的方式修改rest

1 个答案:

答案 0 :(得分:1)

在Haskell中,您的模式匹配仅限于它们声明的特定定义。它类似于任何其他语言的函数或方法的局部变量,它不能在外部访问该范围的目的。将每个模式匹配语句视为单独的函数定义。

你宁愿这样做吗?

fold1 [] ys = Nothing
fold1 [(c, xs)] ys = Just [(c, ys)]
fold1 ((c, xs):rest) ys = if xs == ys then Just [(c, ys)] else fold1 rest ys

我猜测(可能不正确)你想要在列表为空之前得到最后一个结果,所以当列表只包含一个元素时,不要等待列表为空,只是模式匹配。当有人传入空列表作为第一个参数时,只需返回Nothing,表示您无法对输入执行任何有意义的操作。