2015-06-25 2 views
0

У меня есть записи в журнале, которые включают 4 разных условия.прочитать файл в списке [пролог]

log(name1,surname1,street1,Belgium). 
log(name2,surname2,street2,Germany). 
log(name3,surname3,street3,France). 
log(name4,surname4,street4,France). 

Я сохранил это в loginfo.pl. Я мог бы прочитать их из входного файла (loginfo.pl), однако я не смог собрать все в «списке». После этого мне нужно отфильтровать его, используя условие «страна начинается с буквы« F ».

Так что в конце концов я хочу, чтобы получить

[log(name3,surname3,street3,France),log(name4,surname4,street4,France)] 
+1

Добро пожаловать в SO! Поскольку вы новичок, вы можете проверить это [ссылка] (http://meta.stackexchange.com/a/5235/187716). – fferri

ответ

0

Использование consult/1 для загрузки фактов, содержащихся в файле в прологе КБ.

Использование atom_chars/2 расщепить атом его символов.

Использование findall/3 для сбора нескольких секунд к цели.

Пример:

?- [loginfo]. 
?- findall(log(A,B,C,D), (log(A, B, C, D), sub_atom(D, 0, 1, _, 'F')), Result). 
Result = [log(name3, surname3, street3, 'France'), log(name4, surname4, street4, 'France')]. 

[loginfo] является сокращением для consult(loginfo).

Кроме того, если вам не нравится повторять себя:

?- findall(X, (X=log(_, _, _, D), X, sub_atom(D, 0, 1, _, 'F')), Result). 
Result = [log(name3, surname3, street3, 'France'), log(name4, surname4, street4, 'France')]. 

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

log(name1,surname1,street1,'Belgium'). 
log(name2,surname2,street2,'Germany'). 
log(name3,surname3,street3,'France'). 
log(name4,surname4,street4,'France'). 

Подробнее о прологовом атоме при Prolog Syntax - Learn Prolog Now!

+0

Вы должны использовать 'sub_atom (Atom, 0, _, _, 'F')' вместо 'atom_chars'. –

+0

Кроме того, предпочитайте 'setof' и' bagof' вместо 'findall'. –

+0

@mescalinum Спасибо за ответ. findall предикат действительно помог мне. Однако, если мы используем более сложные термины, такие как name (clara, 12), что мы должны использовать вместо atom_chars? – limonik

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