Чистый функционал с использованием F # - PullRequest
15 голосов
/ 06 октября 2010

Можно ли заставить F # вести себя как чисто функциональный язык, такой как Haskell ?Может быть, с использованием некоторых директив компилятора?

PS: поскольку я родом из C / C ++, я хочу заставить себя изучать функциональное программирование без изучения Haskell:)

Ответы [ 5 ]

11 голосов
/ 06 октября 2010

Вы не можете форсировать это поведение в F #, но, как сказал Брайан, дисциплина - ваш лучший друг. Например. не используйте циклы mutable, for или while, ключевые слова ref и т. д. Также придерживайтесь чисто неизменных структур данных (различающееся объединение, список, кортеж, карта и т. д.). Если вам необходимо выполнить IO в какой-то момент, создайте свою программу так, чтобы она была отделена от вашего чисто функционального кода.

Не забывайте, что функциональное программирование - это ограничение и изоляция побочных эффектов.

10 голосов
/ 06 октября 2010

Нет, извините. Вы просто должны использовать дисциплину.

4 голосов
/ 06 октября 2010

Если вы чем-то похожи на меня, вы, вероятно, избежите «хороших вещей», если не заставите себя использовать Haskell вместо F # и использовать Haskell как можно более идиоматически.Использование алгебраических типов данных вместо объектов, научиться любить лень, охватить монаду и многое другое - гораздо более важная часть Haskell и, возможно, некоторые из тонкостей (на мой взгляд) чистого функционального программирования.

F # во многих отношениях не настолько крутой кривой обучения, но вы говорите, что изучаете это для удовольствия, так почему бы не испытать себя в любом случае?Я могу засвидетельствовать, что переход на F # после использования Haskell может дать вам гораздо лучшее представление о том, как F # в целом должен использоваться в любом случае.

Пища для размышлений.

2 голосов
/ 06 октября 2010

Чисто функциональные аспекты Haskell являются фундаментальными для языка. Вы не можете просто перенести это между языками. Это приводит к важным проектным решениям - например, чисто функциональная природа Haskell привела к изобретению монады IO. F # не имеет такого «выпускного клапана» для вычислений с состоянием.

Кроме того, обучение программированию на языке, который поддерживает функциональное программирование, но не требует его соблюдения может на самом деле быть поучительным. Многие люди путаются между индивидуальными проектными решениями Haskell (например, монадой ввода-вывода, чтобы снова продемонстрировать большой пример) и тем, как работает функциональное программирование в целом.

Короче говоря: нет, ты не можешь этого. Но то, что вы можете сделать, это очень внимательно наблюдать и задавать вопросы обо всем, что вы делаете, включая поддержание состояний и последовательности операций, чтобы убедиться, что нет более чистой абстракции, которую вы пропускаете.

0 голосов
/ 06 октября 2010

Нет. В настоящее время F # компилятор не может сделать эту проверку.

Почему бы просто не начать писать какую-нибудь F # программу для изучения функционального программирования? Я знаю нескольких людей, которые сначала выучили ML / Ocaml / F #, а затем перешли на Хаскелл.

Тогда у вас будет лучшее понимание чистоты. (Если вы действительно не касались какого-либо функционального языка программирования раньше, ваше понимание чистого функционала может быть поверхностным.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...