Amzi Prolog Tokenize

时间:2012-03-15 03:53:29

标签: string prolog tokenize

我想读取一个文件并将每行中的单词存储为列表。这是我的代码:

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!

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

ISO谓词读取/ 2 输入Prolog术语,并要求输入以句点终止。您可以从查询提示中以交互方式尝试此操作。

但你想要的可能不是阅读Prolog术语,而是将整个输入行作为字符串读取,然后将其标记为列表中项目的“单词”。

为此目的Amzi! Prolog有几个可能有用的非ISO谓词。请参阅documentation here for read_string/2,另请参阅documentation for string_split/3for string_tokens/3

后两个谓词中的一个或另一个更容易使用,具体取决于你想要对“单词”列表中的空格和标点符号做什么。