SML从数据类型调用函数

马蒂亚·卡罗洛(Mattia Carolo)

我正在学习sml,却陷入了运动中。他们给了我这样的数据类型

datatype Expr =  X
                |Y
                | Avg of Expr * Expr
                | Mul of Expr * Expr

而且我需要编写一个称为compute的函数,以便可以在函数类型为

Expr -> int -> int -> int

所以我做了这个

val rec compute =   fn X => (fn x => fn y => x)
                | Y => (fn x => fn y => y)
                | Avg(e1,e2) => ( fn x => fn y => ((compute e1 x y) + (compute e2 x y)) div 2)
                | Mul(e1,e2) => ( fn x => fn y => (compute e1 x y ) * (compute e2 x y))

现在我需要从终端调用它,但是我不知道如何调用该函数。

compute Avg 4 2;

但这给了我

    poly: : error: Type error in function application.
   Function: compute : Expr -> int -> int -> int
   Argument: Avg : Expr * Expr -> Expr
   Reason: Can't unify Expr to Expr * Expr -> Expr (Incompatible types)
Found near compute Avg 4 2
Static Errors

有人可以指导我吗?感谢所有PS有没有办法使这变得有趣

莫尔布德尼洛

Avg不是类型的值Expr,而是一个Expr从一对Exprs创建一个的构造函数
您的编译器还会在错误消息中指出这一点:

Avg : Expr * Expr -> Expr

您应该这样使用它:

compute (Avg(Y,X)) 4 2

这使得3。

您的函数已经正确,但是使用fun使其更具可读性:

fun compute X x y = x
  | compute Y x y = y
  | compute (Avg (e1, e2)) x y = ((compute e1 x y) + (compute e2 x y)) div 2
  | compute (Mul (e1, e2)) x y = (compute e1 x y) * (compute e2 x y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SML 比较数据类型列表和 hd() tl() 函数

SML 定义数据类型列表

SML,递归数据类型数组

(JNI) 从 cpp lib 调用函数时的数据类型转换

从C调用包含STL数据类型的C ++函数

数据类型在函数调用中不匹配

如何用不同的数据类型调用相同的函数?

多态数据类型的函数

如何与SML和CM共享数据类型声明

SML:数据类型声明将不允许[]

SML 数据类型匹配冗余产生冗余

在通用函数中转换数据类型时无效。toint 被调用,但 v 的类型仍然是 double

当在 c 中对不同的输入数据类型使用相同的函数时,是否可以在被调用函数中检索参数的数据类型?

调用OpenCV函数时,Numpy和OpenCV2数据类型冲突

调用函数检查不同数据类型时,对AngIf类的布尔属性进行角分配

使自定义数据类型的数组时调用哪个构造函数?

为何迭代器不识别被调用函数中多集合的数据类型?

在 Haskell 中使用用户定义的数据类型调用函数

在函数中添加数据类型

Haskell-数据类型函数

一对函数的数据类型?

Julia:函数的偶数数据类型

具有数据类型的函数

定义数据类型包括约束函数

用户定义函数的无效数据类型

Javascript函数派生“最小”数据类型?

在 iOS/MacOS 中调用本机函数时,如何将复杂的 swift 数据类型传递给 C 数据类型?

混合类型数据类型的距离函数类型是什么?

在CVC4中使用类型参数调用自定义数据类型的无参数构造函数