我在Prolog方面没有多少经验。
add(first, second) :-
see('telefon_375319.txt'),
read(L),
seen,
M = [[first, second] | L],
tell('telefon_375319.txt'),
write(M),
nl,
told.
上述代码的目的是:
我在文件中得到的结果如下:
[[x, y], end_of_file].
结果应为:
[[x, y], and here should be the rest of the list].
我不知道为什么,但是Prolog
将文本end_of_file
读入L而不是存储在文件中的列表。
怎么了?
答案 0 :(得分:0)
end_of_file
不是文字。它是原子,当文件结束时它被读取。但是在我的SWI Prolog中,我发现必须在文件末尾放置一个空行才能正确读取。搜索相关信息。
答案 1 :(得分:0)
我稍微修改了原来的变量,而不是原子。我还添加了一个句点(.
),写在自read
预期看到的列表之后:
add(First, Second) :-
see('telefon_375319.txt'),
read(L),
seen,
M = [[First, Second] | L],
tell('telefon_375319.txt'),
write(M), write('.'),
nl,
told.
telefon_375319.txt
的内容:
[[a,b],[c,d]].
然后运行:
| ?- add(x, y).
yes
telefon_375319.txt
的新内容:
[[x,y],[a,b],[c,d]].
执行命令
| ?- add(z, w).
telefon_375319.txt
的新内容:
[[z,w],[x,y],[a,b],[c,d]].
除了我上面提到的两个变化之外,我没有看到基于所描述的期望行为的谓词有什么问题。我在Linux上运行GNU Prolog和SWI Prolog,在Windows 7上运行SWI Prolog,它在所有情况下都按预期工作。对于Linux,文本文件以单\n
结尾,对于Windows,文本文件以\r\n
结束。