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

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

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

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

2 ответа

Решение

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

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

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

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

Чтобы условно скомпилировать эти 2 системы, я попытался

/*  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).

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

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".

Другие вопросы по тегам