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) ys
和xs
为空的方式修改rest
?
答案 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
,表示您无法对输入执行任何有意义的操作。