Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Функциональные языки: общие вопросы > #light - синтаксис в F#


Автор: Vezd 7.7.2013, 12:10
В книге "Программироване на F#" Сошникова Д.В. есть пример:
Код

> let solve (a,b,c) =
   let D = b*b-4.*a*c in
    ((-b+sqrt(D))/(2.*a),(-b-sqrt(D))/(2.*a))
 in solve (1.0,2.0,-3.0);;
val it : float * float = (1.0, -3.0)

В 5 строчке получили числовой результат. Далее в книге предлагается применить #light - синтаксис, и приведен следующий пример:
Код

> let solve (a,b,c) =
   let D = b*b-4.*a*c
   ((-b+sqrt(D))/(2.*a),(-b-sqrt(D))/(2.*a));
solve (1.0,2.0,-3.0);;
 
val solve : float * float * float -> float * floa

В 6 строке почему то уже такого же результата числового не получаем. В чем ошибка? (VS 2010, F# 2.0 Interactive, сборка 4.0.30319.1)

Приложил файл с кодом, идущий вместе с книгой. Там есть эти примеры.

Если в F# Interactive поставить дополнительный пробел  в первой строчке кода ("let solve (a,b,c) ="), тогда получается числовой результат:
Код

>  let solve (a,b,c) =
   let D = b*b-4.*a*c
   ((-b+sqrt(D))/(2.*a),(-b-sqrt(D))/(2.*a));
solve (1.0,2.0,-3.0);;
val it : float * float = (1.0, -3.0)

Но как это написать правильно в .fs, чтобы при нажатии Alt-Enter происходило выполнение с числовым результатом я не понял.

Разобрался. Надо в .fs тоже поставить пробел в первой строчке и выделяет его тоже перед нажатием Alt-Enter.
Код

 let solve (a,b,c) =
   let D = b*b-4.*a*c
   ((-b+sqrt(D))/(2.*a),(-b-sqrt(D))/(2.*a));
solve (1.0,2.0,-3.0);;

И еще вопрос: надо ли ставить точку с запятой в конце 3 строки? Результат один и тот же с и без точки c запятой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)