Несоответствие аргумента конструктора - PullRequest
0 голосов
/ 29 ноября 2018

Я создал тип для ленивого двоичного дерева:

type 'a lBT = LEmpty | LNode of 'a * (unit -> 'a lBT) * (unit -> 'a lBT);;

и хотел создать его экземпляр:

let exlBST = LNode(3, function() -> LEmpty, function() -> LEmpty);;

, но получил эту ошибку:

Error: The constructor LNode expects 3 argument(s),
   but is applied here to 2 argument(s)

Можете ли вы сказать мне, что происходит?Разве единица не рассматривается как аргумент?

1 Ответ

0 голосов
/ 29 ноября 2018

Аргумент к LNode анализируется не так, как вы ожидаете, - это тройка с двумя функциями, а как пара, где второй элемент - это функция, возвращающая другую пару.Используйте круглые скобки, по крайней мере, для средней функции, но желательно для согласованности, чтобы сделать ваше намерение явным:Вы научитесь справляться с этим вовремя, но хорошее эмпирическое правило таково: если сомневаетесь, используйте скобки (или begin / end в случае необходимости)

...