我take在Haskell中编写了自己的函数,如下所示:
take' :: (Integral n, Eq a) => n -> [a] -> [a]
take' n lst
| n <= 0 = []
| lst == [] = []
| otherwise = (head lst) : (take' (n-1) $ tail lst)
Run Code Online (Sandbox Code Playgroud)
而且运作良好.
但是当我尝试在函数参数中使用as(@)模式编写相同的函数时,似乎该函数无法识别第二个guard选项:
take' :: (Integral n, Eq a) => n -> [a] -> [a]
take' n lst@(hd:tl)
| n <= 0 = []
| lst == [] = []
| otherwise = hd : (take' (n-1) $ tl)
Run Code Online (Sandbox Code Playgroud)
当我尝试 …
haskell ×1