2016-07-22 4 views
4

Я очень новичок в программировании на F #. Я ищу ответ о том, почему следующая рекурсивная функция выйдет, когда будет достигнуто условие n = 0. Синтаксис «then 1» имеет особое значение, равное EXIT?F # рекурсивный выход функции?

let rec factorial n = 
    if n = 0 
    then 1 
    else n * factorial (n - 1) 
+1

'if' является выражением, а последнее выражение в функции действует как возвращаемое значение. – ildjarn

ответ

6

Функциональные языки программирования выражение ориентированного, в отличие от заявления ориентированной. Это означает, что все это выражение, которое может быть оценено в значение.

Структуры потока управления, if и match, также являются просто выражениями. Компилятор проверяет, что все ветви этих выражений возвращают один и тот же тип.

Если вы знакомы с условным тернарным оператором на других языках, выражение F # if true then 1 else 0, равнозначно true ? 1 : 0.

Кроме того, функция не «выходит» как таковая. Он завершает оценку. Каждый экземпляр функции (там будет n + 1 экземпляров) завершает оценку в конце выражения if/then/else.

Смежные вопросы