0

我试图创建一个返回“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
4

2 回答 2

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 };
于 2009-07-07T06:17:58.097 回答
0

自从我的 SML 时代以来已经有一段时间了,但是类型系统在打印类型签名时不会自动解析定义的类型。你可以尝试这样的事情:

fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))): point
于 2009-07-07T05:54:15.337 回答