0

我在功能的一部分上遇到了一些麻烦。我的函数需要至少 3 个字符的输入字符串以避免错误,为此需要添加一两个“。” 在变量中。看起来像这样:

fun function(a, b) =
if size(a) < 2 then a ^ "  " else if size(a) < 3 then a ^ " "
if size(b) < 2 then b ^ "  " else if size(b) < 3 then b ^ " "

功能码;

我的问题是,我如何结束第一个 if 行?因为现在是第二个 if 语句出错。

谢谢/乔金

4

1 回答 1

2

首先,这没有任何意义。Anif-then-else必须包含所有三个部分:您不能省略else,您的尾随if-then显然会这样做。

其次,多个语句(由 分隔;)仅在有副作用时才有用,而没有副作用。您可以将代码更改为

fun function (a, b) =
  ( if size a < 2 then a ^ "  " else
    if size a < 3 then a ^ " "  else
                       a
  ; if size b < 2 then b ^ "  " else
    if size b < 3 then b ^ " "  else
                       b
  )

但是第一个语句的结果会被丢弃,完全没用。

也许你想要更像

fun padLeft (n, a) =
    if size a < n
    then a ^ CharVector.tabulate(n - size a, fn _ => #" ")
    else a

fun function1 (a, b) = (padLeft (3, a), padLeft (3, b))
fun function2 (a, b) = (print (padLeft (3, a)); print (padLeft (3, b)))

wherefunction1使用两个输入返回一对,并function2返回unit但使用两个输入有一个可见的副作用。

于 2009-12-14T18:54:14.237 回答