Замена Clojure для ADT и сопоставления с образцом? - PullRequest
13 голосов
/ 22 августа 2010

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

Ответы [ 4 ]

9 голосов
/ 22 августа 2010

Ну, на самом деле есть несколько библиотек сопоставления с образцами, написанных для Clojure. Макросы Clojure делают подобные вещи возможными. Matchure является одним из самых последних. Есть даже кое-что для ADT в contrib .

Не обращая внимания на эти вещи, самое близкое, что у нас есть к ADT Haskell в ядре Clojure, - это новые записи и типы данных в Clojure 1.2. Но если вам не нужны преимущества, которые дает использование записи или типа данных, вы обычно просто используете карту. Clojure - это динамический язык, поэтому вы не будете получать статическую проверку типов, если будете использовать запись и так далее.

Clojure имеет «деструктуризацию», которая напоминает сопоставление с образцом и часто используется в идиоматическом Clojure. См. это и это . Первый действительно ваш ответ здесь, на SO. ; Р

4 голосов
/ 14 июня 2012

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

1 голос
/ 22 августа 2010

Посмотрите на библиотеку matchure - она ​​должна быть включена в clojure-contrib в ближайшее время

0 голосов
/ 22 августа 2010

Мне очень нравится yap как библиотека сопоставления с образцом.

Факт наличия ключевых слов и символов делает реализацию варианта довольно простой поверх библиотеки сопоставления с образцом.

...