【问题标题】:SWI-Prolog write to fileSWI-Prolog 写入文件
【发布时间】: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 语法规则,但它看起来与列表有关

标签: windows io prolog


【解决方案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).

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多