将文件读入列表[prolog]

时间:2015-06-25 09:50:50

标签: list io prolog

我有包含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 个答案:

答案 0 :(得分:1)

使用consult/1加载prolog KB中文件中包含的事实。

使用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!

了解更多关于prolog原子的信息