Haskell по сравнению с [закрытым] сравнением Пролога

Какие проблемы лучше решен в Прологе, чем в Haskell? Каковы основные отличия между этими двумя языками?


Править

Существует ли библиотека Haskell (своего рода логический решатель), который может подражать функциональности Пролога?

50
задан nbro 2 September 2016 в 04:04
поделиться

5 ответов

Пролог - это в основном язык, нацеленный на решение логических задач, особенно в области ИИ и лингвистики. Haskell - это, скорее, язык общего назначения.

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

Википедия по декларативному программированию:

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

Декларативное программирование рассмотреть программы как теории формального логика и вычисления как выводы в этом логическом пространстве. Декларативная программирование стало особенным интерес в последнее время, так как это может сильно упростить написание параллельных программ.

Википедия по функциональному программированию:

В информатике функциональное программирование - это парадигма программирования который рассматривает вычисления как оценка математических функций и избегает состояния и изменяемых данных. Это подчеркивает применение функции, в отличие от императивный стиль программирования, который подчеркивает изменения в состоянии. Функциональное программирование имеет свои корни в лямбда-исчислении формальный система, разработанная в 1930-х годах для исследовать определение функции, приложение функции и рекурсия. Многие языки функционального программирования можно рассматривать как украшение лямбда-исчисление.

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


Что касается ДОБАВЛЕННОГО вопроса: я не знаю ни одного, но вы можете либо перевести Haskell на Prolog, либо реализовать Prolog в Haskell :)

31
ответ дан 7 November 2019 в 10:48
поделиться

Вы можете найти статью Escape from Zurg: An Exercise in Logic Programming интересным чтением. Он показывает параллельное сравнение реализации простой задачи поиска в Prolog и Haskell, а также небольшую структуру классов типов для представления задач поиска в более общем виде. Авторы приходят к выводу, что выразить хотя бы некоторые из этих типов проблем в Haskell проще, чем в Prolog, в первую очередь потому, что система типов Haskell упрощает создание хороших представлений состояний поиска и перемещается от состояния к состоянию. .

11
ответ дан 7 November 2019 в 10:48
поделиться

Пролог - это язык логического программирования , в то время как Haskell - это функциональный язык. Функциональные языки основаны на концепции функции -, которая принимает ряд аргументов и вычисляет значение.

-[Пролог, напротив, не имеет функций. Вместо этого предикаты используются для доказательства "теоремы". Пролог предикаты не вычисляют значение, они могут отвечать "да" или "нет" и опционально связывают входные переменные со значениями:

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

Определенные проблемы становятся почти тривиальными для реализации в Прологе, особенно в сочетании с решателями ограничений.

Подробнее о логическом программировании можно прочитать в Википедии.

.
31
ответ дан 7 November 2019 в 10:48
поделиться

Относительно вопроса о логической библиотеке: Если ее нет, то можно построить один из множества способов. Схема Reasoned Schemer строит возможности логического мышления в схеме. В главах 33-34 PLAI обсуждается Пролог и реализация Пролога. Эти авторы строят мосты между Scheme и Прологом. Создатели PLT Scheme построили в качестве одного из своих языков Lazy Scheme после ленивой оценки возможности Хаскелла. Бумага Олега Киселева LogicT, как обычно, гениальна - он раздвигает границы возможного во многих языках. Есть также пример логического программирования на Haskell Wiki.

37
ответ дан 7 November 2019 в 10:48
поделиться

В действительности существует только 2 языка:

  1. Машинный язык
  2. Человеческий язык.

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

Истинная работа программиста - думать и так и так. Некоторые инструменты программирования, такие как ассемблер, заставляют программиста тратить гораздо больше времени, думая как машина. Другие инструменты, такие как Пролог, позволяют нам тратить больше времени, думая как человек.

Существует штраф, который должен быть выплачен в каждой крайности либо по производительности, либо по стоимости.

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

.
-7
ответ дан 7 November 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: