2013-11-02 4 views
1

Я хочу знать, можно ли отделить файлы в прологе, например: Я хочу иметь свой интерфейс, правила, факты, проконсультироваться в отдельных файлах и заставлять их работать вместе.Как отделить файлы в прологе

+0

Да, это возможно. Посмотрите директиву 'include'. – lurker

ответ

1

Короткий ответ, да. Длительный ответ, зависит от того, что вы подразумеваете под «интерфейсом» и насколько простыми или сложными являются ваши требования. Как указано в mbratch, стандартная директива ISO Prolog include/1 может использоваться для включения, например, набор предикатных директив в файлах, содержащих определения для этих предикатов. Если, с другой стороны, ваше приложение требует нескольких реализаций одного и того же интерфейса, вы можете использовать модули Prolog вместе с директивой include/1, где каждый модуль будет обеспечивать реализацию в зависимости от того, что вы хотите в качестве интерфейса или используете Logtalk, который предоставляет интерфейсы как объекты первого класса. Однако более обоснованный совет и подробный ответ требуют от вас предоставления дополнительной информации о том, что вы пытаетесь выполнить.

+0

Привет, Паоло, когда я сказал интерфейс, я говорю о GUI, используя xpce. То, что я пытаюсь сделать, просто, мне не нравится идея держать все в одном файле (факты, правила, консультации, gui), я хочу, чтобы факты были только в одном файле, правила в другом файле и так on, и я хочу иметь доступ к фактам в моих правилах или консультироваться ... –

2

Да - посмотрите «модули» в документации SWI-Prolog.

Короче говоря, вы проконсультируетесь с одним файлом, и он загружает другие. Итак, у вас есть a.pl, b.pl, и так далее

здесь b.pl

медведь (X): - запись ('Я вижу медведя под названием'), WriteLn (X). bull (X): - напишите («Я вижу быка по имени»), writeln (X).

на вершине b.pl

поставил

: - модуль (B, [несет/1]).

Теперь вы можете использовать медведь (значение/1 означает «с одним аргументом») вне этого файла.

в a.pl поставил

: - use_module (б).

Обратите внимание, что нет .pl на этом

, а затем вы можете обратиться нести

окончательная программа

a.pl

: - use_module (б).

go: - bear ('Yogi').

b.pl

: - модуль (б, [несет/1]).

медведь (X): - напишите («Я вижу медведя по имени»), writeln (X). bull (X): - напишите («Я вижу быка по имени»), writeln (X).

Таким образом, вы можете сделать что-то вроде быка/1 частного для одного модуля.

Смежные вопросы