Какие проблемы лучше решить в Prolog, чем в Haskell? Каковы основные различия между этими двумя языками?
Edit
Есть ли библиотека Haskell (вроде логического решателя), которая может имитировать функциональность Prolog?
Какие проблемы лучше решить в Prolog, чем в Haskell? Каковы основные различия между этими двумя языками?
Edit
Есть ли библиотека Haskell (вроде логического решателя), которая может имитировать функциональность Prolog?
Пролог - это в основном язык, ориентированный на логические проблемы, особенно из AI и лингвистических полей. Haskell - это скорее язык общего назначения.
Пролог является декларативным (логическим) языком, что облегчает формулирование в нем логических проблем. Haskell является функциональным языком и, следовательно, намного лучше подходит для вычислительных задач.
Википедия по декларативному программированию:
В информатике декларативная программирование - это парадигма программирования который выражает логику вычисление без описания его контроль потока. Он пытается свести к минимуму или устранить побочные эффекты описание программы а не описывать, как чтобы добиться этого. Это в отличие от императивных программирования, для чего требуется описание алгоритма работать.
Декларативное программирование программ как теории формального логики и вычислений в виде вычетов в этом логическом пространстве. декларативный программирование стало особенно интерес в последнее время, поскольку это может сильно упростить запись параллельных программ.
Википедия о функциональном программировании:
В информатике функциональные программирование - это парадигма программирования который рассматривает вычисления как оценка математических функций и избегает состояния и изменяемых данных. Это подчеркивает применение функций, в отличие от императивный стиль программирования, который подчеркивает изменения в состоянии. Функциональное программирование имеет свои корни в исчислении лямбда, формальный система, разработанная в 1930-х годах для исследовать определение функции, функции и рекурсии. Многие языки функционального программирования можно рассматривать как приукрашивание лямбда-исчисления.
Вкратце, декларативный язык объявляет набор правил о том, какие результаты должны быть результатом, из которых вводятся и использует эти правила для вывода вывода из ввода, в то время как функциональный язык объявляет набор математических или логических функций, которые определяют, как ввод переведен на вывод.
Что касается вопроса ADDED: нет, о котором я знаю, но вы можете перевести Haskell в Prolog или реализовать Пролог в Haskell:)
Что касается вопроса о логической библиотеке: если он не существует, его можно построить одним из самых разных способов. Reasoned Schemer строит логические возможности рассуждений в Схеме. Главы 33-34 PLAI обсуждают Prolog и внедряют Prolog. Эти авторы строят мосты между Scheme и Prolog. Создатели Схема PLT построили в качестве одного из своих языков Lazy Схема после ленивой оценки функции Haskell. Олег Киселев Буква LogicT блестящая, как обычно - он подталкивает границу для того, что возможно на многих языках. В Haskell Wiki также есть пример логического программирования.
Prolog - это язык логического программирования, тогда как Haskell - это функциональный язык. Функциональные языки основаны на концепции функции, которая принимает несколько аргументов и вычисляет значение.
Prolog, с другой стороны, не имеет функций. Вместо этого предикаты используются для доказательства "теоремы". Предикаты Prolog не вычисляют значение, они могут отвечать "да" или "нет" и необязательно связывать входные переменные со значениями:
Полезность функционального и логического программирования часто перекрывается. Функциональное программирование в последнее время приобрело немало тяготения, в то время как Prolog по-прежнему является очень нишевым языком, во многом из-за того, что он намного отличается от общих концепций функций и методов основного ООП, чем функциональное программирование, и часто рассматривается (очень) трудноучиться.
Некоторые проблемы становятся почти тривиальными для реализации в Prolog, особенно в сочетании с решателями ограничений.
Подробнее о логическом программировании вы можете узнать на Wikipedia.
Вы можете найти статью Escape from Zurg: Упражнение в логическом программировании. Он показывает параллельное сравнение реализации простой задачи поиска в Prolog и Haskell, а также небольшую схему типов для представления проблем поиска в более общем плане. Вывод, к которому приходят авторы, заключается в том, что выражение по крайней мере некоторых из этих типов проблем в Haskell проще, чем в Prolog, прежде всего потому, что система типа Haskell облегчает создание хороших представлений состояний поиска и перемещений из состояния в состояние.
В действительности есть только 2 языка:
Все остальные языки между ними - просто переводчики и ничего больше. Когда мы используем машинный язык, мы должны думать, как машина, и при использовании человеческих языков мы думаем как люди.
Истинная работа программиста - это мыслить в обоих направлениях. Некоторые инструменты программирования, такие как ассемблер, заставляют программиста тратить гораздо больше времени на мышление, подобное машине. Другие инструменты, такие как Prolog, позволяют нам больше времени думать, как человек.
Существует штраф, который должен выплачиваться с каждой крайности либо по производительности, либо по стоимости.
Если бизнес-логику вашего приложения можно свести к набору правил и к его результату к набору целей (например, написать игру в шахматы), то Prolog идеально. С другой стороны, если вам нужно взять вход и сказать компьютеру, как вычислить вывод, более подходящим будет функциональный язык.