Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [F#] Несколько вопросов 
V
    Опции темы
4ybaka
Дата 15.3.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



  •  Как установить возвращаемое значение функции? оно - последняя строка в фуекции, но делать функции вроде
    Код

    let f_sub x y =  List.map2 (fun x y -> x - y) x y;
                          ()

    не радует.
  •  как влияют табы на логику программы? или это только интелисенс в студии глючит?
  •  Нужны ли точка с запятой (не в режиме эмулятора)? насколько понял - нет, но без них страшно... smile



--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Void
Дата 15.3.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Цитата(4ybaka @  15.3.2009,  03:03 Найти цитируемый пост)
let f_sub x y =  List.map2 (fun x y -> x - y) x y;
                      ()

Я понимаю, что это просто пример, но всё же: в таком виде функция не имеет никакого смысла, потому что результат map2 затёрт () и нигде не сохранился. В F# и вообще в ФП не принято делать функции, состоящие из одних побочных эффектов. Функция — это преобразование входных данных в выходные. Вполне естественно, что в конце потока управления получается именно то, что надо вернуть.
Используя карринг и то, что операторы суть те же самые функции, f_sub можно переписать так:
Код
let f_sub = List.map2 (-)

Цитата(4ybaka @  15.3.2009,  03:03 Найти цитируемый пост)
как влияют табы на логику программы? или это только интелисенс в студии глючит?

Влияют при наличии прагмы #light (т.н. двумерный синтаксис). Деталей не помню, за подробностями в гугл и маны.
Цитата(4ybaka @  15.3.2009,  03:03 Найти цитируемый пост)
 Нужны ли точка с запятой (не в режиме эмулятора)? насколько понял - нет, но без них страшно... smile

Точка с запятой редко нужна в функциональном коде. ; можно рассматривать как левоассоциативный оператор, которые вычисляет, но игнорирует значение первого операнда. Очевидно, что этот первый операнд должен содержать побочные эффекты, иначе нет смысла его вычислять, а потом забывать результат. В функциональном коде let ... in ..., композиция функций, сопоставление с образцом и пр. естественным образом выстраивают код так, что в точке с запятой нет нужды.
Но F#/OCaml ещё и неплохие императивные языки, поэтому в соответствующем коде, с изменяемыми значениями и присваиваниями, будет и ; (в F# light-синтаксис позволяет её не писать, но суть особо не меняется).


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
4ybaka
Дата 15.3.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



Нет, я имел ввиду другое - как сделать, чтобы
Код

let f_sub x y =  List.map2 (fun x y -> x - y) x y;
                      ()

возвращал unit без указания () в конце. Это нужно просто для эксперимента smile



--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Void
Дата 15.3.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



4ybaka, хотелки «просто так» до добра не доводят smile
Идиоматичный способ сделать unit из любого выражения — функция ignore.
Вернуть произвольное значение из произвольного места в функции нельзя.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.