Московский МЛ - несколько операторов if в одной функции - PullRequest
0 голосов
/ 14 декабря 2009

У меня возникли проблемы с одной частью функции. Моей функции нужна строка ввода не менее 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 получает ошибку.

спасибо / Йоаким

1 Ответ

2 голосов
/ 14 декабря 2009

Во-первых, это не имеет никакого смысла. if-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)))

где function1 возвращает пару с использованием обоих входов, а function2 возвращает unit, но имеет видимый побочный эффект при использовании обоих входов.

...