стандартная функция типа данных ml

Я создал тип данных типа number, который может быть либо int, либо real, и мне нужно создать функцию, которая добавляет 2 числа типа «число», и у меня проблема с синтаксисом определения такого синтаксис, я пробовал следующее, но, похоже, никто не работает. Код, который я написал, следующий: следующие коды написаны таким образом, чтобы проверить, распознает ли функция n как номер типа:

fun plus n:number = "type number";

fun plus n:I = "type int of number";

fun plus n:number.I = "type int of number";

Но ни один из них не работает, правильный ли синтаксис, который я пишу, или неправильный? Спасибо

номер типа данных, который я пишу:

datatype number = 
  I of int
| F of real;

person hakuna matata    schedule 27.03.2012    source источник


Ответы (1)


Вам нужно сопоставить шаблоны с вашими конструкторами значений I и F и делать все, что необходимо.

fun plus (I a) (I b) = I (a+b)
  | plus (I a) (F b) = ...
  | etc...

Это дает вам 4 случая. Конечно, вы также можете сделать это только с двумя случаями, если вы создадите небольшую вспомогательную функцию, которая распаковывает number в real, чтобы охватить все, кроме случая int-int.

person Sebastian Paaske Tørholm    schedule 27.03.2012