跳转到内容

Prolog/输入输出

来自维基教科书,开放的书籍,为一个开放的世界

文件名约定

[编辑 | 编辑源代码]

文件名必须放在单引号之间,这样它们才能成为原子。("foo.txt" 不起作用,因为它是一个字符列表而不是一个原子。)在 Windows 系统中,您可以将路径写为 'C:/foo.txt' 或 'C:\\foo.txt'。

以爱丁堡风格读取文件

[编辑 | 编辑源代码]

您可以使用 see/1 打开文件,并使用 seen/0 关闭。以下程序读取一个文件,并将其打印到标准输出。


process(X):-
        X = 'c:/readtest.txt',
        see(X),
        repeat,
        get_char(T),print(T),T=end_of_file,!,seen.

您可以同时打开多个文件:如果您使用 see(file1),然后 see(file2),您将同时拥有 2 个打开的文件,如果您现在调用 get_char,它将从 file2 读取。如果您再次调用 see(file1),file1 将再次激活。您可以按任何顺序关闭这些文件。

read 谓词用于解析 Prolog 项。(它也可以处理 DCG 语法。)您可能需要它用于自我修改程序,或用于转换 Prolog 代码的程序。

以 ISO 风格读取文件

[编辑 | 编辑源代码]

在遵循 ISO 标准时,来自文件和网络的数据以相同的方式处理:作为数据流。

  • 打开一个文件以供读取:open(Filename, read, Streamhandler)
  • 打开一个文件以供写入:open(Filename, write, Streamhandler)


process(File) :-
        open(File, read, In),
        get_char(In, Char1),
        process_stream(Char1, In),
        close(In).

process_stream(end_of_file, _) :- !.
process_stream(Char, In) :-
        print(Char),
        get_char(In, Char2),
        process_stream(Char2, In).
华夏公益教科书