![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
-------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| Void |
|
||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Я понимаю, что это просто пример, но всё же: в таком виде функция не имеет никакого смысла, потому что результат map2 затёрт () и нигде не сохранился. В F# и вообще в ФП не принято делать функции, состоящие из одних побочных эффектов. Функция — это преобразование входных данных в выходные. Вполне естественно, что в конце потока управления получается именно то, что надо вернуть. Используя карринг и то, что операторы суть те же самые функции, f_sub можно переписать так:
Влияют при наличии прагмы #light (т.н. двумерный синтаксис). Деталей не помню, за подробностями в гугл и маны.
Точка с запятой редко нужна в функциональном коде. ; можно рассматривать как левоассоциативный оператор, которые вычисляет, но игнорирует значение первого операнда. Очевидно, что этот первый операнд должен содержать побочные эффекты, иначе нет смысла его вычислять, а потом забывать результат. В функциональном коде let ... in ..., композиция функций, сопоставление с образцом и пр. естественным образом выстраивают код так, что в точке с запятой нет нужды. Но F#/OCaml ещё и неплохие императивные языки, поэтому в соответствующем коде, с изменяемыми значениями и присваиваниями, будет и ; (в F# light-синтаксис позволяет её не писать, но суть особо не меняется). -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||
|
|||||||
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
Нет, я имел ввиду другое - как сделать, чтобы
возвращал unit без указания () в конце. Это нужно просто для эксперимента -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
4ybaka, хотелки «просто так» до добра не доводят
Идиоматичный способ сделать unit из любого выражения — функция ignore. Вернуть произвольное значение из произвольного места в функции нельзя. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |