2

如何在签名中声明一个不带参数的函数?

我只见过带有这样的参数的函数签名:leq:item*item->bool 并且我正在寻找为这样的函数创建签名:

initBTree = E   (* where empty is of type tree *)

这不起作用:val initBTree:->tree

4

2 回答 2

7

您可以创建一个以单位为参数的函数,如下所示:

fun initBTree () = E

并这样称呼它:

initBTree ()

它有类型

fn : unit -> tree

如果E有类型tree

不过,这有点毫无意义。你不妨直接说E,或者如果你真的希望它被称为 initBTree:

val initBTree = E
于 2013-02-05T16:19:29.817 回答
1

您可能知道 SML 中的所有函数都只接受一个参数。因此创建一个不带参数的函数是不可能的,因为这样的“东西”实际上只是一个值。

你的代码

val initBTree : -> tree

完全没有意义。如果你说你有一个值构造函数E,它是一个空树,你为什么不创建一个不初始化任何东西的树的 init 函数呢?在那种情况下,你可以做initBTree的同义词E

val initBTree = E

然而,这仍然毫无意义。

于 2013-02-05T12:43:55.457 回答