【问题标题】:How to have function returned value in a SML record如何在 SMALL 记录中具有函数返回值
【发布时间】:2019-03-23 05:47:29
【问题描述】:

我是 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”中声明和定义函数吗?-

type foo ={
    var1:int,
    f1 (x)=x+x
 };

请分享您的意见。

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    你需要使用函数表达式:

    val r = {var1 = 10, f = fn x => x}
    

    不,您不能在类型定义中定义记录字段的值。但是您可以将一个小辅助函数定义为“构造函数”:

    fun new_foo i = {var1 = i, f = fn x => x+x}
    

    【讨论】:

    • 谢谢。我这样做了--val footest:foo={var1 = 1,f1 = fn x=> x+x}; - #var1 脚; val it = 1 : int - -(#f1 footest) 1; val it = 2 : int 但是如果我想将 var1 作为参数传递给函数 x,它就不起作用。 - #f1 (#var1 footest); stdIn:202.1-202.20 错误:运算符和操作数不一致 [类型不匹配] 运算符域:{f1:'Y; 'Z} 操作数:int
    • 好吧,那就是(#f1 footest) (#var1 footest)。
    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多