确保SML中的特定类型结果

时间:2009-07-07 05:45:36

标签: sml

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

2 个答案:

答案 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