gpt4 book ai didi

prolog - 在 prolog 中逐行读取文件错误

转载 作者:行者123 更新时间:2023-12-05 04:16:27 24 4
gpt4 key购买 nike

我使用下面的代码读取文件,但这段代码只读取有“.”的行。在文件末尾,是否有另一种方法来读取任何类型的文件并存储在列表中?

main :-
open('myFile.txt', read, Str),
read_file(Str,Lines),
close(Str),
write(Lines), nl.

read_file(Stream,[]) :-
at_end_of_stream(Stream).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
read_file(Stream,L).

我从这个链接中获取了这段代码 Read a file line by line in Prolog

最佳答案

请注意,由于以下原因,您编写的代码本质上是不正确的。

1mo,您正在阅读 Prolog 数据,根本不是行。拿一个。 b. c. 这将构成一个列表 [a,b,c]

2do,at_end_of_stream/1 的测试非常棘手,并且在读取 Prolog 数据时无法按预期工作。获取 3 行文件:

first_fact.
second_fact.
% no comment - oh that's a comment nevertheless

这将为您提供列表 [first_fact, second_fact, end_of_file]。因为 read/1 在阅读最后一行后给你一个术语 end_of_file

3tio,在回溯时,main 总是会产生错误!

?- main.
[first_fact,second_fact,end_of_file]
true ;
ERROR: at_end_of_stream/1: stream `<stream>(0x1c38330)' does not exist

如果您只想读取字节,请使用 library(pio) .要使用它,首先要学习 形式主义。对于文件中每次出现的 magic,以下操作都会成功:

?- phrase_from_file((..., "magic", ...), filename).

使用 ...//0 的以下定义:

... --> [] | [_], ... .

参见 this for more .

关于prolog - 在 prolog 中逐行读取文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com