Уровень совместимости для различных реализаций Пролога

Как лучше всего обеспечить совместимость двух разных интерпретаторов Пролога? Я прочитал этот вопрос и ответы на него, но то, что я ищу представляет собой методологию для работы с предикатами, определенными по-разному (т.е. удаление в SWI не зависит от переменных, в то время как в YAP это так) и недавно введенных предикатов (т.е. remove_duplicates отсутствует в библиотеке (списках) в SWI).

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

Для наглядности вы можете предположить, что интересующая меня реализация Prolog - это SWI и Yap. Тем не менее, был бы весьма признателен как можно более общий метод.


person rano    schedule 05.04.2013    source источник
comment
Ты видел это? swi-prolog.org/pldoc/ ​​   -  person    schedule 05.04.2013
comment
да, но это похоже на уровень совместимости для других только с SWI. Знаете ли вы, портативен ли он сам?   -  person rano    schedule 05.04.2013
comment
На мой взгляд, это минимальная структура, поддерживающая условную компиляцию для SWI и YAP (см. Также dialect.pl в документации SWI). В конце концов, мне может показаться, что единственное жизнеспособное решение - это закодировать различия, когда это абсолютно необходимо, и в противном случае придерживаться ванильного Пролога.   -  person    schedule 06.04.2013


Ответы (2)


Я думаю, что ISO Prolog должен быть общим справочником подмножества.

Но библиотеки - это огромная проблема. Действительно, у меня возникла проблема при попытке перенести фрагмент SWI-Prolog на YAP.

...
:- use_module(library(assoc)).
:- use_module(library(aggregate)).
...

В этих системах библиотека assoc реализована по-разному, и мне не удалось заставить версию YAP работать (если я хорошо помню, gen_assoc ((R, C), GridC, Char) имел другую семантику). Также у библиотеки (агрегата) были проблемы под YAP.

На условно скомпилировать среди этих двух систем, я попытался

/*  File:    prolog_impl.pl
    Author:  Carlo,,,
    Created: Jan 26 2013
    Purpose: handle SWI/YAP portability issue
*/

:- module(prolog_impl, [swi/0, yap/0, prolog_impl/1]).

swi :- prolog_impl(swi).
yap :- prolog_impl(yap).

prolog_impl(K) :-
    F =.. [K,_,_,_,_],
    current_prolog_flag(version_data, F).

но, конечно, меня это не устраивает. Надеюсь, ваш вопрос даст ответ на проблему.

person CapelliC    schedule 05.04.2013
comment
Спасибо, что поделился. Поддерживается ли условная компиляция и в других интерпретаторах? Кстати, я тоже обнаружил много различий в библиотеке (ассоциированной) под YAP, и снова решение заключалось в том, чтобы переписать некоторый предикат самостоятельно. - person rano; 06.04.2013
comment
GnuProlog поддерживает это. Думаю, любая система, имеющая term_expansion, тоже подойдет ... - person CapelliC; 06.04.2013
comment
Условная компиляция поддерживается растущим числом компиляторов Пролога, включая ECLiPSe, GNU Prolog, SICStus Prolog, SWI-Prolog, YAP и XSB. Logtalk также поддерживает стандартные директивы условной компиляции de facto. - person Paulo Moura; 06.04.2013

Logtalk обеспечивает уровень совместимости с портативными библиотеками, поддерживающими B-Prolog, CxProlog, ECLiPSe, GNU Prolog, Lean Prolog, Qu-Prolog, SICStus Prolog, SWI-Prolog, XSB и YAP. Документацию по его библиотекам можно найти по адресу:

http://logtalk.org/library/index.html

http://logtalk.org/library/library_diagram.pdf

В конкретном случае библиотеки «assoc», упомянутой в одном из ответов на ваш вопрос, Logtalk предоставляет протокол (также известный как интерфейс) «dictionaryp» и две реализации этого протокола, «bintree» и «rbtree».

person Paulo Moura    schedule 06.04.2013
comment
+1: Я думаю, что Logtalk будет моим следующим языком программирования, но я хочу сначала продолжить / завершить с моим текущим участием SWI-Prolog. - person CapelliC; 06.04.2013
comment
Обратите внимание, что здесь нет ни одного. Вы не можете (в настоящее время) запускать Logtalk без внутреннего компилятора Prolog; Logtalk + SWI-Prolog представляет собой мощную комбинацию. - person Paulo Moura; 06.04.2013