Han*_*lla 0 syntax haskell currying partial-application
我有两个功能 -
partialSubtractionWith5 :: (Num a) => a -> a
partialSubtractionWith5 = (subtract 5)
Run Code Online (Sandbox Code Playgroud)
和
partialSubtractionWith5' :: (Num a) => a-> a
partialSubtractionwith5' = (`subtract` 5)
Run Code Online (Sandbox Code Playgroud)
调用partialSubtractionWith5 x返回相当于x - 5,而调用partialSubtractionWith5' x返回相当于5 - x.
在Learn You a Haskell中,Lipovača定义了以下功能 -
isUpperAlphanum :: Char -> Bool
isUpperAlphanum = (`elem` ['A'..'B'])
Run Code Online (Sandbox Code Playgroud)
其中(基于我的实验subtract)我会认为当被称为时会表现得如此isUpperAlphanum 'some char':
Prelude> ['A'..'B'] `elem` 'some char'
False
Run Code Online (Sandbox Code Playgroud)
显然,事实并非如此.但为什么?有没有办法预测哪些函数在部分应用时会反转它们的参数?
没有矛盾,就是这样subtract = flip (-).即
partialSubtractionWith5' x ? (`subtract` 5) x
? x `subtract` 5
? 5 - x
Run Code Online (Sandbox Code Playgroud)
同样地,
isUpperAlphanum '?' ? '?' `elem` ['A'..'B']
Run Code Online (Sandbox Code Playgroud)
OTOH,
partialSubtractionWith5 x ? (subtract 5) x
? (5`subtract`) x
? 5 `subtract` x
? x - 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |