Amzi Prolog Tokenize - PullRequest
       0

Amzi Prolog Tokenize

0 голосов
/ 15 марта 2012

Я хотел бы прочитать файл и сохранить слова в каждой строке в виде списка.Это мой код:

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 пролог, кстати!

Заранее спасибо за помощь!

1 Ответ

1 голос
/ 15 марта 2012

Предикат ISO read / 2 вводит термины Prolog и требует, чтобы ввод был завершен точкой.Вы можете попробовать это в интерактивном режиме из запроса.

Но, скорее всего, вам нужно не читать термины Пролога, а прочитать всю строку ввода в виде строки, а затем разбить ее на «слова», которые являются элементами всписок.

Для этого Amzi!У Пролога есть несколько предикатов не-ISO, которые могут быть полезны.См. Здесь документацию для read_string / 2 , а также документацию для string_split / 3 и для string_tokens / 3 .

Один или другой из этих двух последних предикатов может оказаться более полезным, в зависимости от того, что вы хотите сделать с пробелами и пунктуацией в ваших списках слов..

...