Самый полезный и поучительный функционально-логический язык для изучения

Я был очень удивлен силой Пролога. Потребовалось некоторое время, чтобы разобраться, но мне показалось, что это был самый крутой декларативный язык. Вот почему недавно, после двух лет некоторого функционального программирования в Scala, я решил снова взглянуть на логическое программирование, чтобы "тренировать свой мозг" или лучше для реального использования.

Сочетание функционального и логического программирования кажется мне привлекательным для изучения / укрепления концепций обеих декларативных парадигм. Я считаю также, что сильные системы типов очень полезны и увлекательны.

Скала действительно сияла взаимодействием. Давайте не будем изобретать колеса. Он должен иметь возможность вызывать код на другом основном языке, предпочтительно, чтобы его можно было вызывать. Но это не обязательно Java. C или Haskell тоже будет в порядке.

Итак, какие языки языка FLP наиболее полезны и полезны на сегодняшний день, и каковы ваши мнения и рекомендации по ним?

Вот что я нашел до сих пор:

  1. Меркурий: претендует на быстрый, строго типизированный пролог. Чисто декларативный, но без логических переменных! Нет ограничений программирования? Кажется, наиболее широко используемый ФЛП. Interop??

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

  3. Ciao: кажется, предоставляет много функций, которые я хочу, но Stack Overflow, похоже, даже не знает об этом, хотя существует с 1984 года? Что с этим не так? Interop?

  4. drools (java library / DSL): утверждает, что допускает гибридное прямое и обратное сцепление. Зрелые. Прямое взаимодействие с Java/Scala, но полагаться на изменяемые данные / императивные конструкции? Насколько хорошо он интегрируется с функциональными языками JVM?

  5. miniKanren: реализации существуют на нескольких платформах. Как взаимодействие? Эффективное?

  6. Лямбда Пролог реализации, такие как:

    1. Каледон: Может быть, хорошая, но тяжелая теория. Полезность? Эффективное взаимодействие с Haskell? Документация?

    2. Тейюс. похож на Каледон.

Хорошо, но теоретически читает и склоняется к карри и не решает практические вопросы:

2 ответа

Решение

Я могу дать вам (слегка) необъективную рекомендацию для Карри.

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

http://www-ps.informatik.uni-kiel.de/currywiki/documentation/mailing

Что касается функциональной совместимости, кажется, что есть два варианта: Münster Curry Compiler(MCC) поддерживает подмножество интерфейса внешней функции Haskell для вызова C-кода.

Самая последняя реализация Curry, Kiel Curry System 2 (KiCS2), компилирует Curry в Haskell. Существует схематический способ вызова кода Haskell из Curry при использовании KiCS2 (см. Руководство по KiCS2, Приложение D). К сожалению, я не знаю, как вызвать код Curry с другого языка.

Насколько я нашел, наиболее полезной связью FP и LP был Mercury + Erlang. Оба они, между прочим, интересны с академической точки зрения (вам действительно нужно четко изложить основы, если вы хотите делать что-то хорошее с одним или с обоими), но оба также делают ставку на вывод продуктов на рынок и поддержание их в противоположность быть странностью исследования.

Я не совсем уверен, весил ли OP "полезный" больше, чем "инструктивный", и я также не знаю, означает ли "полезный" "код, который эффективно решает проблемы в реальном мире". Но если предположить, что это является частью критериев, Mercury + Erlang - безусловно, самая интересная комбинация LP и FP, которую можно иметь в данный момент.

Другие вопросы по тегам