Prolog 中的文件输入输出2025年3月17日 | 阅读 3 分钟 文件输出:更改当前输出流- tell/1 谓词用于更改当前输出流。此谓词有一个单一的参数,即变量或原子,它表示文件的名称,例如 tell('outfile.txt').
- 当评估 tell 目标时,由于此原因,文件的名称成为当前输出流。如果文件尚未打开,则首先创建指定名称的文件。如果现有文件具有相同的名称,则将其删除。
- 当我们选择一个新的当前输出流时,与之前的当前输出流对应的文件将保持打开状态。使用 told 谓词,我们只能关闭当前输出流。
- user 是默认的当前输出流,即用户的终端。使用 told(user) 或 told 谓词,我们可以恢复此值。
- told/0 谓词是一个内置谓词,没有参数。当评估 told 目标时,它会关闭当前输出文件,并将当前输出流重置为 user,即用户的终端。
- telling/1 谓词是一个内置谓词,有一个参数。此参数必须是一个未绑定的变量。当评估 telling 目标时,由于此原因,该变量将绑定到当前输出流名称。
输出到文件 上面对 tell 的定义说“任何具有相同名称的现有文件都会被删除”。某些应用程序具有另一种可能性,即文件不会被删除,并且任何输出都放在现有文件内容的末尾。在 Prolog 的任何实际实现中,都会提供“追加”和“覆盖”选项,但它不会使用 tell 谓词,它可能涉及使用不同的谓词。 文件输入:更改当前输入流- see/1 谓词用于更改当前输入流。此谓词有一个单一的参数,即变量或原子,它表示文件的名称,例如 see('myfile.txt')。
- 当评估 see 目标时,由于此原因,文件的名称成为当前输入流。如果文件尚未打开,则首先打开指定的名称文件(仅用于读取访问)。如果我们无法打开给定名称的文件,则会生成一个错误。
- 当我们选择一个新的输入流时,与当前输入流对应的文件将保持打开状态。使用 seen 谓词,我们只能关闭当前输入流。
- user 是默认的当前输入流,即用户的终端。使用 see(user) 或 seen/0 谓词,我们可以恢复此值。
- seen/0 谓词是一个内置谓词,没有参数。当评估 see 目标时,它会关闭当前输入文件,并将当前输入流重置为 user,即用户的终端。
- seeing/1 谓词是一个内置谓词,有一个参数。此参数必须是一个未绑定的变量。当评估 seeing 目标时,由于此原因,该变量将绑定到当前输入流名称。
从文件读取:文件结尾 当我们评估 read(A) 目标,如果遇到文件结尾,变量 A 将绑定到原子 end_of_file。 当我们评估 get0(A) 或 get(A),如果遇到文件结尾,变量 A 将绑定到 ASCII 值。 ASCII 值的范围是 0 到 255。这通常是 -1,但在 Prolog 的实现中,它可能有所不同。 从文件读取:记录结尾 根据 Prolog 的版本,从文件读取记录结尾和从用户的终端读取记录结尾的字符输入可能存在不兼容性。 在用户的终端,输入行的结尾将使用 ASCII 值为 13 的字符来指示。在文件中,记录的结尾通常将使用两个 ASCII 值来指示,即 13 后跟 10。 下面的程序从键盘读取一系列字符,并逐行打印这些字符。 我们使用 put 而不是 write 来测试 ASCII 值 13。在这种情况下,我们不需要使用 * 字符来指示“输入结束”。
|