假设我有一个函数在满足给定条件时返回某个值,并且在条件不满足时不返回任何值。
e.g。
fun foo(n)= if n< 100000然后n else(类似于退出函数。我们在其他编程语言中有它。我们在这里有类似的东西吗?)
我最初想写()但是在if或者其他两个条件下它表示不匹配。
变得更明确,我想编写一个函数,它接受一个数字,任何数字,如果它是有效整数,则组合成一个列表,如果它不是整数则忽略它。
答案 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