Я прокладываю себе путь через элементы Ullman's ML программирования ML. Он вводит тип данных для BST в гл. 6 следующим образом:Стандарт ML: функция поиска в двоичном дереве поиска
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) Я запутался, хотя, потому что я думал, выделанная функция создает цепочку функций, которые возвращают другую функцию с каждым последующим аргументом. Но, основываясь на типах ML, которые дают мне выше, похоже, что это не карри. Любая идея, что здесь происходит?
Спасибо за помощь, bclayman