为什么我的变量不在范围内? 似乎一切都很好,但是不起作用
function readonly<T>(input: T[]): ReadonlyArray<T> {...}
我正在测试,并且可以正常工作,但没有第一行。 我的错误在哪里?
另一个问题,如何在模式匹配中重写此功能
答案 0 :(得分:1)
为什么我的变量不在范围内?
也许您无法加载文件或其他内容,很难说而没有看到错误和您的调用。无论哪种方式,都很高兴它能起作用。
另一个问题,如何在模式匹配中重写此功能
您已经在列表上使用模式匹配。您要在Int
上进行模式匹配吗?例如,您无法按位进行匹配,但我可以看到(highBits # 0b0) : xs = x : myEven xs
会很整洁。
相反,您可以使用防护装置:
myEven ::[Int] -> [Int]
myEven [] = []
myEven (x:xs) | x `mod` 2 == 0 = x : myEven xs
| otherwise = myEven xs
答案 1 :(得分:1)
另一个问题,如何在模式匹配中重写此功能
您已经在模式匹配方面进行了模式匹配。无论如何,只是为了好玩(我不推荐这样做),您可以使用ghc扩展名将这些保护措施转换为模式。
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
pattern Even n <- (\x -> x <$ guard (x `mod` 2 == 0) -> Just n) where Even n = n
pattern Odd n <- (\x -> x <$ guard (x `mod` 2 == 1) -> Just n) where Odd n = n
myEven ::[Int] -> [Int]
myEven [] = []
myEven (Even x :xs) = x : myEven xs
myEven (Odd x :xs) = myEven xs