haskell - Haskell 如何评估这个签名?
问题描述
ggt_euklid :: Nat1 -> (Nat1 -> Nat1)
我正在尝试学习部分应用,我知道在这种情况下,如果省略括号,我会得到相同的结果,但我不知道应该如何评估这个签名。
据我了解,括号表示它是一个函数?这不意味着 ggt_euklid 接受一个值 Nat1 并返回一个函数吗?
下面是完整的功能:
ggt_euklid x y
| x == y = x
|x>y =ggt_euklid(x-y) y
|x<y =ggt_euklid x (y-x)
解决方案
您已经正确理解了类型签名:它接受一个参数并返回一个函数。这就是 Haskell 中“多参数”功能的工作方式:通过柯里化。您可以通过尝试这个等效的实现来看到这一点:
ggt_euklid :: Nat1 -> (Nat1 -> Nat1)
ggt_euklid x = \y -> result
where result | x == y = x
| x > y = ggt_euklid (x-y) y
| x < y = ggt_euklid x (y-x)
在这里,我介绍了这个相当无意义result
的变量作为使用模式防护的东西,但想法是一样的。
推荐阅读
- c# - 匹配模式 dddG-xyz 的正则表达式
- botframework - 自适应卡片背景图像 NodeJS
- limit - Azure 人脸识别人员组中的 10 多个人脸
- html - blogdown 不自动缩放图像 - 在 iOS 上查看时它们会被中途截断
- html - 无法为 div 元素分配 css 规则
- laravel - 在表格中显示 hasMany 关系
- python - 从给定文本在 html 字符串中的位置查找给定文本的父标记
- internet-explorer-11 - Microsoft Edge 不断提示输入证书
- sql - 每小时计数的分组记录
- javascript - 使用 jQuery 从数据库访问对象