小编Spe*_*ela的帖子

作为Haskell中的(@)模式

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

4
推荐指数
1
解决办法
206
查看次数

标签 统计

haskell ×1