стандартная функция типа данных мл - PullRequest
0 голосов
/ 27 марта 2012

Я сделал тип данных с номером типа, который может быть как целым, так и вещественным, и мне нужно сделать функцию, которая добавляет 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;

1 Ответ

1 голос
/ 27 марта 2012

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

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

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

...