如何在签名中声明一个不带参数的函数?
我只见过带有这样的参数的函数签名:leq:item*item->bool
并且我正在寻找为这样的函数创建签名:
initBTree = E (* where empty is of type tree *)
这不起作用:val initBTree:->tree
如何在签名中声明一个不带参数的函数?
我只见过带有这样的参数的函数签名:leq:item*item->bool
并且我正在寻找为这样的函数创建签名:
initBTree = E (* where empty is of type tree *)
这不起作用:val initBTree:->tree
您可以创建一个以单位为参数的函数,如下所示:
fun initBTree () = E
并这样称呼它:
initBTree ()
它有类型
fn : unit -> tree
如果E
有类型tree
。
不过,这有点毫无意义。你不妨直接说E
,或者如果你真的希望它被称为 initBTree:
val initBTree = E
您可能知道 SML 中的所有函数都只接受一个参数。因此创建一个不带参数的函数是不可能的,因为这样的“东西”实际上只是一个值。
你的代码
val initBTree : -> tree
完全没有意义。如果你说你有一个值构造函数E
,它是一个空树,你为什么不创建一个不初始化任何东西的树的 init 函数呢?在那种情况下,你可以做initBTree
的同义词E
val initBTree = E
然而,这仍然毫无意义。