Когда я просматривал некоторые prolog в последнее время я наткнулся на этот ответ @mat на вопрос Как представлять направленный циклический граф в Prolog с прямым доступом к соседние вершины.
До сих пор мой личный опыт использования атрибутов в Prolog был очень ограниченным. Но прецедент, данный @mat, вызвал мой интерес. Поэтому я попытался использовать его для ответа на другой вопрос, список заказов с программированием логики ограничений.
Во-первых, хорошие новости: мое первое использование атрибутивных переменных получилось так, как я хотел.
Тогда, не очень хорошая новость: когда я отправил ответ, я понял, что в Prolog существует несколько API и реализации для атрибутов.
Я чувствую, что над моей головой здесь... В частности, я хочу знать следующее:
- Какой API используется в широком распространении? До сих пор я нашел два: SICStus и SWI.
- Какие функции предлагают различные атрибутивные варианты реализации? Те же самые? Или один из них используется в другом?
- Существуют ли различия в семантике?
- Как насчет фактической реализации? Являются ли более эффективными, чем другие?
- Может (или есть) использовать атрибутивные переменные в качестве переносимости?
Много вопросительных знаков, здесь... Пожалуйста, поделитесь своим опытом/позицией? Заранее благодарю вас!
Изменить 2015-04-22
Здесь приведен фрагмент кода ответа :
init_att_var(X,Z) :-
put_attr(Z,value,X).
get_att_value(Var,Value) :-
get_attr(Var,value,Value).
До сих пор я "использовал" put_attr/3
и get_attr/3
, но --- согласно документации SICStus Prolog по атрибутам переменные --- SICStus предлагает put_attr/2
и get_attr/2
.
Таким образом, даже этот очень мелкий случай использования требует некоторого уровня эмуляции (так или иначе).