Вопрос

Модули Edison API и Core являются реализацией на Haskell чисто функциональных данных. структуры

Достаточно ли охватывают F # и собственные структуры данных .Net сценарии использования в Edison API и Core?

Будет ли какая-то польза от попыток перенести модули API и CORE Haskell на F #?

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

Решение

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

Язык, используемый книгой, - SML с расширениями синтаксиса для ленивых вычислений. F # предоставляет половину этих расширений изначально:

> let x = lazy 12;;
val x : Lazy<int> = <unevaluated>
> match x with
  | Lazy(n) -> n;;
val it : int = 12
> x;;
val it : Lazy<int> = 12

Чтобы преобразовать нотацию fun lazy в книге, измените ее:

fun lazy plus ($m, $n) = $m + n

На это:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())

(см. стр. 33 в книге). Различия между SML и F # заключаются в незначительном синтаксисе, поэтому перевод должен быть легким.

Что касается того, стоит ли это делать, большинство структур данных в книге Окасаки являются очень специализированными, поэтому вряд ли они уже существуют в .NET, даже несмотря на неизменность Set и Map F #. Это будет полезно для людей, которым нужны эти структуры данных.

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

Возвращаясь к этому вопросу несколько месяцев спустя, отмечу, что

http://lepensemoi.free.fr/index. PHP / теги / чисто-функциональные-структуры данных

кто-то реализовал их в этом блоге.

Я не перешел по ссылке, хотя у меня есть хотя бы крошечная фамилия с работой или Окасаки. Так что весь этот ответ дико спекулятивен (мои предположения о том, что есть в API Edison, могут быть не правы).

Я ожидаю, что есть «некоторая выгода» в том смысле, что люди любят «ссылочные реализации общих структур данных FP» в «новых языках», чтобы помочь в изучении новых языков.

Что касается использования на практике (а не в педагогике), я ожидаю, что некоторые из них полезны, хотя есть некоторые API F # и .Net, которые могут быть как полезными, так и более полезными для многих сценариев. Я полагаю, что основными «пакетами» перекрывающихся функций являются неизменяемые коллекции F # (Set и Map), а также .Net 4.0 одновременные коллекции (например, ConcurrentQueue).

Конечно, вы также найдете некоторые фрагменты в Интернете, такие как неизменяемая очередь .

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