将文件读入列表 [prolog]

read a file into a list [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) 中读取这些,但是我无法在 "list" 中收集所有内容。之后我需要使用条件“国家以字母 [=19 开头”来过滤它=].

所以最后我想得到

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

使用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] 是 shorthand 对于 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!

阅读更多关于序言原子的信息