0

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

例如

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

我最初想写 () 但它在 if 或某事的两个条件下表示不匹配。

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

4

2 回答 2

5

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

对于您的特定用例,另一种选择是将列表作为第二个参数,然后返回附加到列表的结果或未更改的列表。

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

于 2012-10-21T11:52:50.640 回答
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
于 2013-01-24T21:20:32.393 回答