1

SWI Prologを使ってPrologを学んでいます。次の内容を含むmyFile.txtという名前のファイルがある状況を考えてみましょう。

line1.
line2.
line3.

今、私は、読み取り述語を使用してこのファイルの内容を読み取らなければならない述語を作成しようとしています。次の述語を作成しました。

readFileSee(InputFile) :- seeing(OldStream),
                          see(InputFile),
                          read(Term),
                          write(Term),
                          seen,
                          see(OldStream).

問題は、このプログラムを実行すると、最初の行しか得られないことです。たとえば、このステートメントを起動すると、次のようになります。

?- readFileSee('/home/andrea/Documenti/prolog/lezione6/project/myFile.txt').
line1
true.

read述語はProlog 用語を読み取りますが、最初の用語だけを読み取るのはなぜですか? ファイルに含まれるすべての用語を読み取らせるにはどうすればよいですか? 読み取り述語を使用して実行できますか?

4

1 に答える 1

2

繰り返し使用できます:

readFileSee(InputFile) :- seeing(OldStream),
                          see(InputFile),
                          repeat,
                          read(Term),
                          ( Term == end_of_file -> true ; 
                            write(Term), fail
                          ),
                          seen,
                          see(OldStream).
于 2013-04-19T11:23:29.117 に答える