SWI-Prolog 写入文件
Posted
技术标签:
【中文标题】SWI-Prolog 写入文件【英文标题】:SWI-Prolog write to file 【发布时间】:2014-05-09 22:34:18 【问题描述】:我看到了以下线程,它们非常有用并且与我的问题相关
Writing in file | Swi-Prolog | Windows\
Prolog insert, modify and delete facts on a separated database text file
我尝试使用 tell, tell see, seen 从文本文件中读取写入,但我得到相同的结果,当(我打开它并看到)时,文件上没有写入任何内容,并且在读取时系统读取 end_of_file或者在消息中或控制台上显示错误 以下是我的一些工作示例:
start1:-
open('output.txt',write,OS),
X = 'Hi all',
write(OS,X),
close(OS),
open('output.txt',read,OS2),
read(OS2,Input).
start1:-
absolute_file_name('X.data',Abs),
open(Abs,write,Out),
tell(Abs),
write('HiAll'),
told,
close(Out),
open(Abs,read,In),
see('X.data'),
read(X),
seen,
write(X).
【问题讨论】:
读取(OS2,输入)。期望阅读以下代码正常读取的术语:- open('output.txt',read,In), repeat, read_line_to_codes(In,X), close(In), writef(X)。 我认为 open/close 与tell/see/told 不兼容 @CapelliC 是对的。您应该返回并查看链接指向的示例。它们不会混合和匹配 ISO 和 Edinburgh 风格的 I/O 谓词 (cf. swi-prolog.org/pldoc/…)。您应该选择其中一个,看看效果如何。 亲爱的,我在文件中逐行保存了事实,并将其作为代码数组取回,当尝试在数据库中断言事实时,此操作不成功,我尝试转换为字符串 (使用 string_codes) 但我有错误“预期可调用的类型错误”并尝试使用 term_string 但出现未声明过程的错误。 我试图阅读 DCG 语法规则,但它看起来与列表有关 【参考方案1】:非常感谢@CapelliC,我编写的以下代码运行良好 read 内置谓词用于读取术语,当到达文件末尾时显示错误,而不是我使用 read_line_to_codes
readfacts:-
open('output.txt',read,In),
repeat,
read_line_to_codes(In,X),writef(" "),
writef(X),nl,
X=end_of_file,!,
nl,
close(In).
writefacts:-
open('output.txt',write,Out),
write(Out,'Age(Peter,30)'),
write(Out,'Skin(Smith,Black).'),
close(Out).
【讨论】:
以上是关于SWI-Prolog 写入文件的主要内容,如果未能解决你的问题,请参考以下文章