2013-09-30 8 views
3

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

В Haskell есть монада IO, которая устанавливает нечистый контекст, глядя на то, что мы знаем, что все вне его чисто. Что хорошо, если вы спросите меня, когда дело доходит до модульного тестирования, можно сказать, какая часть их кода в конечном счете проверяется, а какая нет.

Я не нашел ничего, что позволило бы отделить два в F #. Означает ли это, что это просто невозможно?

+0

Хотя это не «плохой» вопрос, он скорее всего подходит для стека CS. – user2246674

+0

Вы можете моделировать недетерминизм с помощью списков, поэтому это не обязательно касается примесей. IO используется для моделирования вычислений с побочными эффектами, и, хотя вы можете создать свою собственную реализацию ввода-вывода в F #, это, вероятно, не будет очень полезно, поскольку любая функция может иметь побочные эффекты. – Lee

+0

@ Ли, простите мое невежество, как списки могут помочь моделировать недетерминированность? –

ответ

2

F # основан на OCaml, и, как и OCaml, он не является чистым FP. Я не верю, что вам удастся достичь своей цели на любом языке.

5

Различие между детерминированной и недетерминированной функцией не фиксируется системой типа F #, но типичная система F #, которая должна иметь дело с недетерминированностью, будет использовать некоторую структуру (или «шаблон проектирования»), которая четко разделяет два.

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

  • Если вы пишете некоторые высоко интерактивные или реактивная приложения, то вы можете использовать F # агентов (здесь an introductory article) и структурировать приложение таким образом, что недетерминизм безопасно содержится в отдельных агентов (см more about agent-based architectures)

0

Один из способов управления им может заключаться в создании номинального типа, который будет представлять собой понятие реального мира, и убедитесь, что каждая не детерминированная функция принимает свой синглтон в качестве параметра. Таким образом, все зависимые функции должны были бы проходить по линии. Это делает сильное различие между ними по цене какой-то дисциплины и немного дополнительной типизации. Хорошая вещь об этом подходе заключается в том, что он может быть проверен компилятором при условии соблюдения необходимых условий.

 Смежные вопросы

  • Нет связанных вопросов^_^