Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Еда для мысли.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top