Рассмотрим такой код:

fun equals(a : 'a,b : 'a) =
  a = b;

Мой код больше, но это проблема. SML сообщает «Ошибка: оператор и операнд не согласуются».

Я полный новичок в SML и не понимаю, почему он жалуется. Это что-то похожее на проблему C #, что вы не можете сравнивать два значения любого типа, но вы должны использовать компаратор равенства по умолчанию для этого типа? Должен ли я добавить ограничение на 'a (надеюсь, я правильно написал его как общий тип)?

3
greenoldman 15 Янв 2013 в 20:55

1 ответ

Лучший ответ

Вместо 'a используйте ''a.

Тип с двумя кавычками перед ним вместо одной является типом равенства, что означает, что с ним работает оператор =. Это также означает, что вы не можете вызывать свою функцию для вещей, которые не являются типами равенства.

Кроме того, на самом деле вам не нужно писать типы. Если вы просто сделаете:

fun equals (a,b) = a = b;

SML определит тип.

10
Tayacan 15 Янв 2013 в 21:42
Спасибо за решение, объяснение и все :-). Последняя форма действительно самая приятная.
 – 
greenoldman
15 Янв 2013 в 22:06