Я новичок в SML, пытаюсь изучить записи и типы SML, в частности, как иметь функцию внутри записи.
Например, я создал ниже type-
type foo = {
var1:int,
f1: int -> int // want to have result of function f1 here
};
Теперь, если я объявлю запись типа 'foo'-
val rec1 = { var1= 10, ....}
Я не понимаю, как заполнить второй параметр в записи. f1 (10) выдает ошибку. Кроме того, можем ли мы объявить и определить функцию внутри «типа», как показано ниже:
type foo = {
var1:int,
f1 (x)=x+x
};
Пожалуйста, поделитесь своим мнением.
Вам нужно использовать функциональное выражение:
val r = {var1 = 10, f = fn x => x}
Нет, вы не можете определить значение поля записи в определении типа. Но вы можете определить небольшую вспомогательную функцию как «конструктор»:
fun new_foo i = {var1 = i, f = fn x => x+x}
Ну, это было бы (#f1 footest) (#var1 footest)
.
Спасибо. Я сделал это - val footest:foo = {var1 = 1,f1 = fn x=> x+x}; - #var1 самое низкое; val it = 1 : int - -(#f1 самый низкий) 1; val it = 2 : int Но если я хочу передать var1 в качестве аргумента функции x, это не сработает. - #f1 (#var1 самая низкая); stdIn:202.1-202.20 Ошибка: оператор и операнд не согласованы [несоответствие типа] домен оператора: {f1:'Y; 'Z} операнд: целое