【问题标题】:Prolog how to save file in an existing fileProlog如何将文件保存在现有文件中
【发布时间】:2011-11-25 13:39:44
【问题描述】:

添加新数据后如何保存在现有文件中

add_a_link(X,Y) :-
    tell('alink.txt'),
    write(X),
    write('.'),
    write(Y),
    write('.'),
    put(10),
    told,
    write('data written'),
    nl.

此代码仅重写文本文件。

【问题讨论】:

    标签: file io prolog


    【解决方案1】:

    使用open/3 和面向流的 I/O:

    open(file, append, S), write(S, info(X,Y)), put_char(S,.), nl(S), close(S).
    

    使用tell/1told 非常不可靠。很容易发生输出被意外写入另一个文件的情况。

    编辑:这里有一个例子来说明tell/1told 极其不可靠的属性。

    说,你写tell(file), X > 3, write(biggervalue), told. 只要X > 3 就可以正常工作。但是对于较小的值,此查询将失败并且没有写入任何内容。那可能是你的意图。但是,程序中其他地方的下一个输出现在将进入file。这是你永远不想发生的事情。因此,ISO-Prolog 没有tell/1told,而是open/3close/1

    【讨论】:

    • 顺便说一句,如果您使用别名,也会发生同样的情况;打开(条形图,写入,_S,[别名(输出)]),X>3,写入(输出,42),关闭(输出)。例如。然后,如果您已经有另一个别名,则会发生相同的问题。所以基本上主要问题是杂质。当然,使用 tell/told 肯定更容易犯这样的错误,因为没有明确声明“别名”
    • add_a_link(X,Y):-open('alink.txt',append,S),write(S, info(X,Y))put_char(S,.),nl(S ),关闭(S)。给了我一个实例错误
    • 我对流术语有点困惑,我在互联网上看了一些笔记,但仍然不确定它是什么。有什么例子吗?
    • 哇哦,有没有可能是win prolog引起的?因为我已经尝试了所有方法,但仍然出现错误。
    • | ?- open('city.txt',append,S) 。 ! ---------------------------------------- !错误 22:实例化错误!目标: open('city.txt',append,_11772) 结果是这样的,我猜这是win prolog的问题。抱歉之前没有提到。
    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多