|
|
|
laMer007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
Мне нравится F#. Но большой практики написания программ на нём не было. Писал только вспомогательные тулзы для проектов.
В этой теме хочу задавать вопросы по этому языку. И так, первые вопросы: 1)Есть ли в F# функция высшего порядка, подобная std::find_if? 2)Как из тела цикла возвращать значение, если искомый результат обнаруживается в конце или в середине цикла? Пример, когда результат обнаруживается в конце цикла:
(Понятно, что тут должен быть поиск в каком-нибудь массиве, но это просто пример). 3)Как правильно получить последний элемент массива, не используя такую убогую конструкцию t.[t.Length-1]? 4)Как вы возвращаете значение из сложной функции с несколькими циклами и ветвлениями, ведь return нет в языке? Мне приходилось делать хак в виде присвоения мутабильной переменной result результата с последующим киданием исключения и отловом около последней строки функции, возвращающей этот сохраненный ранее result. Простите, мой испорченный императивными языками стиль программирования. Как сделать возврат значения из относительно сложной функции правильно по функциональному? Это сообщение отредактировал(а) laMer007 - 28.12.2011, 01:12 |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
наверное этот ответ(как и другие) легко найти в описании языка, впрочем можно и самому написать, заодно и попрактиковался бы
как же ты писал тулзы для проектов? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
laMer007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
Ладно. А что с другими вопросами 2-4? Если они не очень понятны, то я могу объяснить подробнее с конкретными примерами. Это сообщение отредактировал(а) laMer007 - 28.12.2011, 01:11 |
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
что значит "не то"? и что ты подразумеваешь под обобщенными функциями? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
3) опять же, ищите или пишите функцию last
Добавлено @ 09:23 2,4) думаю смотреть нужно в сторону продолжений (continuations), как-то так Это сообщение отредактировал(а) k0rvin - 28.12.2011, 12:59 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
laMer007 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
Не нашёл такой функции что-то для массивов. Понятно, что всё можно написать самому, но наиболее приятно пользоваться языком, если такие мелочи, как last есть в стандартной библиотеке. Спасибо:
А можете накатать примерчик решения 4го вопроса, пожалуйста? Это сообщение отредактировал(а) laMer007 - 28.12.2011, 14:19 |
||||||
|
|||||||
k0rvin |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
а, ты про это... это не "обобщенная функция", ну да не суть. я не знаю как там в F#, но наверное типы Array и List наследуются от одного какого-то общего предка Container или Collection, в котором определена find. иначе придется писать свои обертки. мб просто преобразовывать в Sequence и юзать Seq.find Добавлено @ 14:45
а зачем раздувать стандартную библиотеку кучей мелочей? может быть у майкрософт есть набор дополнительных библиотек, где собраны различные полезные утилиты, не вошедшие в стандартную?
хз, я не шарю в F# Это сообщение отредактировал(а) k0rvin - 28.12.2011, 14:46 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||
|
|||||||||
Kakadu |
|
||||||||||
Опытный Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
Нет, для каждого контейнера (array, list, seq, etc) надо реализовывать свой поиск. естественно, желательно с той же сигнатурой. Тогда типовыводилка тип выведет и будет визуально как в плюсах.
Про yeild_return для Ocaml в блоге JaneStreet Capitals
Думаю так и получать. Но мне ни разу это пока не пригождалось. можно ещё List.reverse + List.head
кидание исключений в Ocaml это норм, в диезе думаю тоже. Мутабельное значение иногда некрасиво. Ну и про yeild_return можно подумать. -------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
||||||||||
|
|||||||||||
Правила форума «Функциональные языки: общие вопросы» | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |