【发布时间】:2015-10-19 03:38:51
【问题描述】:
我正在学习 Ullman 的 Elements of ML Programming。他在 ch 中介绍了 BST 的数据类型。 6如下:
datatype 'label btree =
Empty |
Node of 'label * 'label btree * 'label btree;
然后他定义了一个查找函数来判断BST中是否存在具有给定标签的节点:
fun lookup lt Empty x = false
| lookup lt (Node(y, left, right)) x =
if lt(x, y) then lookup lt left x
else if lt(y, x) then lookup lt right x
else true;
ML 告诉我们函数的类型是:
val lookup = fn : ('a * 'a -> bool) -> 'a btree -> 'a -> bool
1) 我无法解析上述含义。我知道右边的“->”关联,但我无法弄清楚如何做到这一点。看看上面的内容,你怎么知道该怎么做?
val lookup = fn : ('a * 'a -> bool) -> ('a btree) -> ('a) -> (bool)
2) 不过我很困惑,因为我认为 curried 函数会创建一个函数链,这些函数会在每个后续参数中返回另一个函数。但是根据上面 ML 给我的类型,它看起来不是咖喱。知道这里发生了什么吗?
感谢您的帮助, 布莱曼
【问题讨论】:
标签: functional-programming sml currying