strange behavior of read/2

Jiun-Shiung Wu <[email protected]> Fri, 18 Apr 2014 11:30:36 +0800
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <CALvsX_JQurMHDhMpvMffodmB_vF+ma1w5PmRUahFoWqfqAG7wA@mail.gmail.com>
Hi, SWI-prolog users,

I encountered a strange behavor of read/2 and any help will be appreciated.

I use readFiles/1 to read a file which contain a bunch of files names and
put the file names in a list. Then, I pass the list of file names to
corpus_process/2 etc.

When I run process_corpra, an error message shows up: ERROR: read/2: stream
`<stream>(035F4FB8)' does not exist. I trace read/2, I found that read/2 is
called again after the end_of_file marker.

But, when run readFiles/1 alone, a list is returned successfully. When I
trace everything, a list of file names is found successfully and passed to
corpus_process. But, when I run process_corpra under a non-degugging mode,
the above error message shows.

Could someone help me with this? Thank you!

Jiun-Shiung Wu

====

My codes are as below:

process_corpra :-
readFiles([HeadFile|TailFiles]),
corpus_process(HeadFile, Result),
del_space(Result, LMinusSpace),
name(T, LMinusSpace),
open('corpusDirProcessed.txt', write, Stream2, [encoding(utf8)]),
write(Stream2, T),
close(Stream2),
process_corpra_aux(TailFiles).

process_corpra_aux([]).
process_corpra_aux([HeadFile|TailFiles]) :-
corpus_process(HeadFile, Result),
del_space(Result, LMinusSpace),
name(T, LMinusSpace),
open('corpusDirProcessed.txt', append, Stream, [encoding(utf8)]),
write(Stream, T),
close(Stream),
process_corpra_aux(TailFiles).

readFile(Stream, ListofFiles) :-
read(Stream, File),
readFileAux(Stream, File, ListofFiles).

readFileAux(_, -1, []).

readFileAux(_, end_of_file, []).


readFileAux(Stream, File, [File|FileTail]) :-
read(Stream, File2),
readFileAux(Stream, File2, FileTail).

readFiles(ListofFiles) :-
open('corpusDir.txt', read, Stream, [encoding(utf8)]),
readFile(Stream, ListofFiles),
close(Stream).
-------------- next part --------------
HTML attachment scrubbed and removed