Этот комментарий опубликован как ответ, потому что он слишком большой, чтобы быть комментарием и не отвечает на вопрос, он предлагает лучшее решение, которое не запрашивается.
Если вы хотите, чтобы Prolog былвозможность использовать выводимые вами данные, а затем использовать их в удобном для Пролога виде;создать факты , например
Имя файла: classroom.pl
classroom(cmpe025,cmpe_building,70,cmpe_department).
classroom(cmpe026,cmpe_building,70,cmpe_department).
Обратите внимание, что с фактами Prolog вы не включаете имена значений, Prolog использует положение для идентификацииценности.Самим фактам действительно нужно имя, например, classroom
, чтобы иметь возможность однозначно идентифицировать их, в отличие от набора person
фактов.
Тогда в Prolog вы можете просто загрузить файл, используя проконсультируйтесь с / 1 , например
consult("C:/classroom.pl").
и используйте его в предикате .Вам придется создавать предикаты в отдельном файле, как если бы вы исходный код.
Имя файла: predicates.pl
test :-
classroom(Course,Building,Room,Department),
write("Course: "),write(Course),nl,
write("Building: "),write(Building),nl,
write("Room: "),write(Room),nl,
write("Department: "),write(Department).
Строка
classroom(Course,Building,Room,Department)
читаетценности из фактов классной комнаты.Нет необходимости анализировать данные, переформатировать и т. Д.
Использование SWI-Prolog
Welcome to SWI-Prolog (threaded, 64 bits, version 7.3.35)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.
For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).
1 ?- consult("C:/predicates.pl").
true.
2 ?- consult("C:/classroom.pl").
true.
3 ?- test.
Course: cmpe025
Building: cmpe_building
Room: 70
Department: cmpe_department
true ;
Course: cmpe026
Building: cmpe_building
Room: 70
Department: cmpe_department
true.
Хотя я бы не рекомендовал это, вы также можете создатьфактов в одной строке файла, просто убедитесь, что между концом одного факта .
и началом следующего факта есть пробел classroom
,
например ). classroom(
classroom(cmpe025,cmpe_building,70,cmpe_department). classroom(cmpe026,cmpe_building,70,cmpe_department).