SWI-пролог библиотеки веб-обработки URI - PullRequest
0 голосов
/ 17 ноября 2018

Будучи новичком в прологе, я читаю существующий код (а также пытаюсь написать некоторый код). Имея некоторый опыт работы в semweb, я начал играть с ним и увидел что-то, что меня смущает. Пример утверждения:

?- rdf_assert(ex:bob, rdf:type, foaf:'Person').

Я также нашел следующее в документации:

Remember: Internally, all resources are atoms. The transformations
above are realised at compile-time using rules for goal_expansion/2
provided by the rdf_db library

Правильно ли я считаю, что библиотека обрабатывает три URI как атомы? Я думал, что компилятор отнесется к этому как к module_name:predicate, но, похоже, это не так. Если это правда, не могли бы вы привести простой пример того, как это можно сделать в прологе?

Спасибо

1 Ответ

0 голосов
/ 21 ноября 2018

Пролог не является функциональным языком. Это означает, что 2+3 не оценивает до 5 и является просто термином, который получает , означающее из предиката, который его обрабатывает. Аналогично, ex:bob - это просто термин, который не имеет прямого отношения к модулям или предикаты. Только предикаты такого вызова / 1 будут интерпретировать это как «вызов bob в модуле ex».

Рядом с этим, (SWI-) Пролог (большинство Прологов, но не все) имеет расширение терминов , которое позволяет переписать термин, который читается перед его передачей компилятору. Это используется для перезаписи аргумента rdf/3: каждое появление prefix:local расширяется до полного атома. Вы можете проверить это, используя listing/1 для предикатов, которые вызывают rdf / 3, используя префиксную нотацию.

См. Также rdf_meta

...