Prolog 中的字符输出和输入

2024 年 8 月 29 日 | 阅读 3 分钟

输出字符

我们可以使用内置谓词 put/1 来提供字符的输出。此谓词接受一个参数,该参数是一个从 0 到 255 的数字或一个表达式。当我们评估 put 目标时,由于此原因,单个字符将输出到当前输出流。此字符对应于一个数值,并产生其参数的 ASCII 值。

例如

输入字符

我们可以使用两个内置谓词 get/1get0/1 来提供单个字符的输入。谓词 get0 接受一个参数作为变量。当我们评估 get0 目标时,由于此原因,将从当前输入流中读取一个字符。

请注意,如果需要从键盘输入,将显示一个提示字符,例如冒号。在 Prolog 接受用户的输入之前,我们必须按“回车”键。

当 Prolog 评估一个 get0 目标时,变量将与输入字符的 ASCII 值统一。如果参数的变量未绑定,则它将绑定到 ASCII 值。

例如

如果参数的变量已经绑定,则当且仅当输入字符的 ASCII 值和数值相同时,该目标才会成功。

例如

get 谓词接受一个参数作为变量。当我们评估 get 目标时,由于此原因,将从当前输入流中读取下一个非空白字符。非空白字符是指 ASCII 值小于或等于 32 的字符。与 get0 谓词相同,变量和字符的 ASCII 值统一。

例如

使用字符的示例

第一个示例中,我们将展示如何从键盘读取一系列字符。它以 * 结尾,并输出它们对应的 ASCII 值,每行一个。

readin 谓词是递归定义的。当我们评估此谓词时,由于此原因,我们将输入一个字符,并且变量 A 将绑定到它的 ASCII 值。在 process(X) 目标中,该动作取决于 A 是否包含值 42,这表示 * 字符。如果不是,则输出 A 的值,然后是新行,然后再次调用 readlin 谓词。如果是,则停止 process(X) 目标的评估。当 Prolog 读取 * 字符时,该过程将停止。在下面的例子中,69、120、97、109 等显示了字符 E、x、a、m 等的 ASCII 值。


第二个示例中,将输出一定数量的字符,而不是输入字符的 ASCII 值。为此,我们将使用 count 谓词。此谓词接受两个参数。第一个参数读作“到目前为止已计数的字符数”,第二个参数读作“在 * 之前的字符总数”。



下一主题Prolog