Nir*_*iel 23 haskell pointfree
可能重复:
Currying减法
我开始了第一个不是来自教程的haskell项目,当然我偶然发现了最简单的东西.
我有以下代码:
moveUp y = modifyMVar_ y $ return . (+1)
moveDn y = modifyMVar_ y $ return . (-1)
Run Code Online (Sandbox Code Playgroud)
我花了一些时间来理解为什么我的代码不能编译:我曾经使用过(-1)这被认为是负面的.将减号括起来并没有帮助,因为它为它添加前缀并使其成为第一个参数.
简而言之,这点的免费版本是什么?
dec :: Num a => a -> a
dec x = x - 1
Run Code Online (Sandbox Code Playgroud)
C. *_*ann 27
我相信你想要一个方便命名的subtract功能,它的存在正是你发现的原因:
Run Code Online (Sandbox Code Playgroud)subtract :: Num a => a -> a -> a同样的
flip (-).因为
-在Haskell语法中特别对待,(- e)不是一个部分,而是前缀否定的应用.但是,(subtract exp)相当于不允许的部分.
如果你想在不使用类似函数的情况下编写pointfree subtract,可以使用flip (-),如Prelude文档所述.但那......有点难看.
如果上面提到subtract的太冗长,你可以尝试像(+ (-1))或 之类的东西(-1 +)。
| 归档时间: |
|
| 查看次数: |
3569 次 |
| 最近记录: |