我试图创建一个返回“point”类型元素的函数:
type point = {x : int, y : int};
fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2)));
但SMLNJ似乎并不理解我的意图,结果也应该是“点”类型:
use "test1.sml";
[opening test1.sml]
type point = {x:int, y:int}
val pointadd = fn : point * point -> int * int
答案 0 :(得分:2)
point
是一种记录类型,但你要返回一个元组。
这样的事情怎么样:
fun pointadd (p1: point, p2: point) =
{ x = #x p1 + #x p2,
y = #y p1 + #y p2 };
你可以在返回类型上添加一个类型保护,使类型更好,但它是等价的:
fun pointadd (p1: point, p2: point) : point =
{ x = #x p1 + #x p2,
y = #y p1 + #y p2 };
答案 1 :(得分:0)
自从我的SML时代以来已经有一段时间了但是在打印类型签名时,类型系统无法自动解析定义的类型。你可以尝试这样的事情:
fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))): point