2

重複の可能性:
Prolog でファイルを 1 行ずつ読み取る

一度に 1 文字を読み取って出力する次のプロローグ コードを見つけました。

process(File) :-
        open('C:/Users/BHARAT/Desktop/a.txt', read, In),
        get_char(In, Char1),
        process_stream(Char1, In),
        close(In).

process_stream(end_of_file, _) :- !.
process_stream(Char, In) :-
        print(Char),
        get_char(In, Char2),
        process_stream(Char2, In).

ただし、ファイルに複数の行がある場合、トークン化が簡単になるように、一度に 1 行全体を読み取る方法があります。

4

2 に答える 2

5

入力をトークン化する必要があると言います。これを行うための最良の方法は、明確な句文法(DCG)です。SWIではlibrary(pio)、文法を直接使用して、次のようなファイルを読み込むことができます。

?- use_module(library(pio)).
?- phrase_from_file(seq(Xs),f).

seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).

seq//1今すぐ、より複雑なトークナイザーに置き換えてください。

于 2011-11-22T18:43:34.817 に答える