9

我有一个应该只返回列表尾部的函数的问题。这些函数是 myTail 并且应该给出一个可用的结果,即使输入是一个空列表。

我想了解所有 3 种方式:模式匹配、保护方程和条件表达式

这有效:

> myTail_pat :: [a] -> [a]

> myTail_pat (x:xs) = xs
> myTail_pat [] = []

但是这个:

> myTail_guard (x:xs)   | null xs = []
>               | otherwise = xs

给我错误:程序错误:模式匹配失败:myTail_guard []如何声明没有模式的函数?

谢谢你。

4

2 回答 2

17

该模式x:xs与空列表不匹配。你需要这样做:

myTail_guard xs
  | null xs   = []
  | otherwise = tail xs
于 2009-11-18T22:17:24.033 回答
12

下降 1 是安全的

drop 1 []
-- result: []
于 2017-05-21T23:57:06.770 回答