如何在不返回值的情况下退出函数

时间:2012-10-21 11:44:28

标签: sml smlnj

假设我有一个函数在满足给定条件时返回某个值,并且在条件不满足时不返回任何值。

e.g。

fun foo(n)= if n< 100000然后n else(类似于退出函数。我们在其他编程语言中有它。我们在这里有类似的东西吗?)

我最初想写()但是在if或者其他两个条件下它表示不匹配。

变得更明确,我想编写一个函数,它接受一个数字,任何数字,如果它是有效整数,则组合成一个列表,如果它不是整数则忽略它。

2 个答案:

答案 0 :(得分:5)

在SML中,函数总是必须返回值¹。表示可能有或没有有用结果的函数的一种方法是使用OPTION类型。使用OPTION您的函数会返回SOME value,如果它有一些有用的东西可以返回,或NONE如果它没有。

对于您的特定用例,另一种方法是将列表作为第二个参数,然后返回前置到列表的结果或列表不变。

¹实际上我并不知道任何允许非void函数不返回值的语言(不调用未定义的行为)。在某些语言中,您可以返回null代替正确的返回值,但在大多数语言中,返回类型为int的函数不允许这样做。无论哪种方式,SML都没有空值。

答案 1 :(得分:1)

fun foo n = if n < 1000000 then SOME n else NONE

要注意你不能直接使用foo n作为整数,但你必须使用isSome和valOf或模式匹配来知道你在哪种情况下。

可能最好将您的列表作为参数传递并将值附加到它。

fun foo (n: int, xs: int list) =
   if n < 1000000 then n :: xs else xs