我想读取一个文件并将每行中的单词存储为列表。这是我的代码:
main :-
open('sample.txt', read, Str),
read_file(Str,Lines),
close(Str),
write(Lines), nl.
read_file(Stream,[]) :-
at_end_of_stream(Stream).
append1([H|T],Old_list,New_list):-
New_List = [H|Old_list],
write(New_List),
append1(T,New_List,New_list).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
write(X),
append1(X,[],New_List),
read_file(Stream,L).
我意识到X在这里是一个术语,但我无法使我的程序正常工作。
Input : 'Australia', 'Singapore','23','34','Mon/Tue'.
Output : New_List=[Australia,Singapore,23,34,Mon/Tue].
我正在使用Amzi prolog btw!
提前感谢您的帮助!
答案 0 :(得分:1)
ISO谓词读取/ 2 输入Prolog术语,并要求输入以句点终止。您可以从查询提示中以交互方式尝试此操作。
但你想要的可能不是阅读Prolog术语,而是将整个输入行作为字符串读取,然后将其标记为列表中项目的“单词”。
为此目的Amzi! Prolog有几个可能有用的非ISO谓词。请参阅documentation here for read_string/2,另请参阅documentation for string_split/3和for string_tokens/3。
后两个谓词中的一个或另一个更容易使用,具体取决于你想要对“单词”列表中的空格和标点符号做什么。