Можно ли сделать Логическое программирование в Scala?

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

Можно ли использовать Scala для изящного решения проблем как проблема Связного графа? например, https://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_15.html

15
задан false 7 February 2013 в 20:10
поделиться

3 ответа

Нет, вы не сможете этого сделать, если не создадите на самом деле логическую машину, которая разрушает всю цель.

Более того, сопоставление с образцом само по себе совершенно не подходит для этого по многим причинам. Рассмотрим, например, сам базовый запрос: путь (1, 5, P) . В сопоставлении с образцом в Scala 1, 5 и P являются выходами . Вы не можете предоставить ввод, который можно было бы использовать для вывода.

В Прологе это похоже на то, если предположить, что 1 и 5 фиксированы, какие возможные значения может принимать P? Вот как работает сопоставление с образцом.

Редактировать: В Scala 2.10 сопоставление с образцом теперь компилируется в промежуточную операцию, такую ​​как for-complationions, а затем перевод по умолчанию дополнительно оптимизируется. Однако можно определить свой собственный класс для обработки сопоставления с образцом, и я видел, как он используется для реализации входа в систему пролога - хотя я не могу найти ссылку, извините.

12
ответ дан 1 December 2019 в 00:29
поделиться

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

4
ответ дан 1 December 2019 в 00:29
поделиться

См. http://kanren.sourceforge.net/ для получения подробной информации о том, что функциональное и логическое программирование на самом деле не так уж далеки друг от друга. Потоковые структуры - это ключ к пониманию того, как эти две парадигмы могут объединиться. "Поднимая" стандартные функции в потоковый/логический формат, они могут демонстрировать поведение при решении задач, очень похожее на Prolog.

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

6
ответ дан 1 December 2019 в 00:29
поделиться
Другие вопросы по тегам:

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