Только что нашел хорошую реализацию Пролога в Scala. К сожалению, у меня не было времени попробовать его, поэтому мое впечатление основано только на взгляде на исходный код, который можно найти здесь:
https://github.com/sonoisa/Prolog-in-Scala/blob/master/PrologInScalaSample.scala
Вышеуказанное указывает на пару тестовых программ. Интерпретатор Prolog написан на Scala таким образом, что предложения Prolog могут быть встроены как объекты Scala, написанные на Scala. Я не совсем понимаю магию, стоящую за этим, вот пример того, как написана функция tak:
tak('X, 'Y, 'Z, 'A) :- (
'X =< 'Y, CUT, 'Z === 'A)
tak('X, 'Y, 'Z, 'A) :- (
'X1 is 'X - 1,
'Y1 is 'Y - 1,
'Z1 is 'Z - 1,
tak('X1, 'Y, 'Z, 'A1),
tak('Y1, 'Z, 'X, 'A2),
tak('Z1, 'X, 'Y, 'A3),
tak('A1, 'A2, 'A3, 'A)
)
Я полагаю, что он выполняет возврат через продолжения и имеет свой собственный
реализация переменной среды и унификация.
Если вы посмотрите на код, например, unifyTerm, вы увидите, что он
активно использует сопоставление с образцом, что ставит Scala в особый
позиция для реализации логических движков.
С наилучшими пожеланиями