Чистый функционал с использованием F #
Можно ли заставить F # вести себя как чистый функциональный язык, например Haskell? Может быть, использовать некоторые директивы компилятора?
PS: поскольку я исхожу из C/С++ фона, я хочу заставить себя изучить функциональное программирование без обучения Haskell:)
Ответы
Ответ 1
Вы не можете заставить это поведение в F #, но, поскольку Брайан сказал, что дисциплина - ваш лучший друг. Например. не используйте теги mutable
, for
или while
, ref
и т.д. Также придерживайтесь чисто неизменяемых структур данных (дискриминированный союз, список, кортеж, карта и т.д.). Если вам нужно сделать IO в какой-то момент, архитектор вашей программы, чтобы они были отделены от вашего чисто функционального кода.
Не забывайте, что функциональное программирование касается ограничения и выделения побочных эффектов.
Ответ 2
Нет, извините. Вам просто нужно использовать дисциплину.
Ответ 3
Если вы похожи на меня, вы, вероятно, избежите "хороших вещей", если вы не заставляете себя использовать Haskell вместо F # и использовать Haskell как идиоматически, как можете. Использование алгебраических типов данных вместо объектов, научиться любить лень, обнимать монаду и многое другое, являются гораздо более важной частью Haskell и, возможно, некоторыми из более тонких (на мой взгляд) чистых функциональных программ.
F # не имеет такой крутой кривой обучения во многих отношениях, но звучит так, будто вы изучаете ее для удовольствия, так почему бы вам вообще не бросить вызов? Я могу подтвердить, что переход на F # после использования Haskell может дать вам гораздо лучшее представление о том, как обычно использовать F # в любом случае.
Пища для размышлений.
Ответ 4
Сугубо функциональные аспекты Haskell являются фундаментальными для языка. Вы не можете просто пересадить его между языками. Это приводит к основным проектным решениям - например, чисто функциональный характер Haskell привел к созданию монады IO. F # не имеет такого "управляющего клапана" для вычисления состояния.
Кроме того, обучение программированию на языке, поддерживающем функциональное программирование, но не полностью обеспечивающее его выполнение, может быть поучительным. Многие люди путаются между индивидуальными проектными решениями Haskell (например, монадой IO, чтобы снова попасть в большой пример) и как работает функциональное программирование в целом.
Короче: Нет, вы не можете этого сделать. Но то, что вы можете сделать, очень внимательно следит и задает все, что вы делаете, что включает в себя сохранение операций состояния и последовательности, чтобы убедиться, что вам не хватает более чистой абстракции.
Ответ 5
Нет. В настоящее время компилятор F # не может выполнить эту проверку.
Почему бы просто не начать писать какую-нибудь программу F #, чтобы изучить функциональное программирование? Я знаю несколько человек, которые сначала узнали ML/Ocaml/F #, а затем переехали в Haskell.
Тогда у вас будет лучшее понимание чистоты. (Если вы действительно не коснулись какого-либо функционального языка программирования, ваше понимание чистого функционала может быть поверхностным.)