Open vs Consult в SWI Пролог - PullRequest
       11

Open vs Consult в SWI Пролог

0 голосов
/ 27 августа 2018

Я новичок в Прологе, пожалуйста, только не вздорните меня.

Всякий раз, когда мне приходилось обращаться к базе данных пролога, я использовал предикат consult / 1:

consult(:File)

СейчасЯ заметил, что существует также предикат open

open(+SrcDest, +Mode, --Stream, +Options)

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

1 Ответ

0 голосов
/ 27 августа 2018

Использование consult/1 похоже на использование ?- [filename].Используя consult/1 в своей программе, вы можете получить доступ ко всем фактам и предикатам, записанным в файл.Например, если у вас есть файл data.pl, например, такой:

fact(a).
fact(b).
fact(c).

hello:-
    writeln('hello').

Вы можете создать файл test.pl и использовать все факты и предикат data.pl:

run:-
    consult(prova),
    findall(A,fact(A),L),
    hello,
    writeln(L).

?- run.
hello
[a,b,c]
true.

Кроме того, consult, кажется, принимает только файл .pl со структурой словаря.С другой стороны, с помощью open/3 вы можете получить доступ к файлам каждого типа и читать также char по char, но вы не можете получить доступ к предикатам и фактам, записанным в файл:

run:-
    open('prova.pl',read,Str),
    findall(A,fact(A),L),
    hello,
    writeln(L).

?- run.
ERROR: Undefined procedure: fact/1

Очевидно, с помощью open/3 или open/4 вы можете создавать, записывать в файлы и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...