如何在ATS中为函数参数提供默认值?

时间:2016-11-07 22:31:49

标签: ats

假设我有一个声明如下的函数:

fun foo(x: int, y: bool): string

我想写foo(x)来表示foo(x, false)。有办法吗? 在ATS中支持这个吗?

2 个答案:

答案 0 :(得分:1)

我猜你可以这样做:

fun foo_full (x:int, y:bool): string = ... // your function, renamed
fun foo_def (x:int): string = foo_full (x, false)
overload foo with foo_full
overload foo with foo_def

此功能称为符号重载。 foo是一个符号(由第一个overload声明隐式引入),它可以代表两个不同的函数。

答案 1 :(得分:0)

一种可能性是使用模板。例如,

fun{} foo$y(): bool
fun{} foo(x: int): bool

implement{} foo$y() = false
implement{} foo(x) = let val y = foo$y() in ... end

这实际上比简单地支持函数参数的默认值更灵活。例如,foo $ y可以在以后重新实现:

implement{} foo$(y) = true

更重要的是,foo $ y可以在调用foo的函数体中实现:

fun bar(...) = let
  implement foo$y() = ...
in
  ...foo(...)...
end // end of [bar]