2015-06-25 2 views
4

В Фортране есть два стандартных способа возврата результата от функции. Первый - это присвоение возвращаемого значения функции имени функции.Какова цель переменных результата в Fortran?

function foo() 
    integer :: foo 

    foo = 10 
end function foo 

Вторая форма, стандартизованная в Fortran 90, представляет собой переменную «результат».

function foo result(res) 
    integer :: res 

    res = 10 
end function foo 

Вызов либо вид функции возвращает значение 10. Мой вопрос, какова была подоплека комитета Fortran 90 для введения результата переменные? Они стандартизировали обычную практику? Или они позволяли программам быть более модульными, не связывая имя функции с результатом функции. Например, во второй версии foo() имя функции foo() может быть изменено на bar(), и функция будет работать, как ожидается, при вызове.

Однако, возможно, я ошибаюсь. Кто-нибудь знает, что такое фактическое обоснование для введения переменных результата?

+0

Обратите внимание, что если вы просто хотите изменить имя функции, вам не нужно менять тело, если вы используете результат, поэтому удобнее –

+1

@AnthonyScemama Да, я считаю, что я упомянул об этом в вопросе. –

ответ

8

Вводится за установленный период так же, как result был рекурсия. Прежде чем мы перейдем к тому, как возникает рекурсивная функция, некоторые пояснения в отношении переменной результата.

Результат функции всегда возвращается через переменную результата, используется ли result или нет. С result переменная результата имеет указанное имя, и без нее переменная результата имеет то же имя, что и функция. В этом последнем случае использование имени является ссылкой на переменную результата, а не на функцию.

Таким образом, если функция foo имеет результат переменной foo, то мы не можем сделать прямой рекурсии:

recursive function foo(n) 
    foo = foo(n-1) ! Oh dear 
end function 

result идет о так что мы можем иметь

recursive function foo(n) result(res) 
    res = foo(n-1) ! Yay 
end function 

[1 ] Ну, это правда вплоть до Fortran 2008, когда изменилось определение переменной. Для современного использования Fortran вместо этого используется термин . Результат функции.

+0

Ахх, я об этом не думал. Очень ясно! –

+0

Еще один вопрос, как вы выделяете синтаксис «foo» и «result» в середине предложения? –

+0

См. Http://stackoverflow.com/editing-help#code-spans. – francescalus

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