prolog - 使用prolog脚本时如何打印统一结果?

标签 prolog gnu-prolog unification

我使用 prolog 脚本来执行所有查询,代码如下:

:- initialization(run).

writeln(T) :- write(T), nl.

queryAll :-
    forall(query(Q), (Q ->
        writeln('yes':Q) ;
        writeln('no ':Q))).

run :-
    queryAll,
    halt.

query( (1,2,3) = (X,Y,Z) ).

问题是 queryAll 只会打印"is"或“否”,而我想查看统一结果,例如:

X = 1
Y = 2
Z = 3

如何在序言中执行此操作? 提前致谢。

最佳答案

在 GNU Prolog 中,当将 end_of_term(eof) 选项传递给 read_term_from_atom 时,您可以避免最后一个点。例如:

| ?- read_term_from_atom('X+Y = 1+2', T, [variable_names(L),end_of_term(eof)]).

L = ['X'=A,'Y'=B]
T = (A+B=1+2)``

这意味着当遇到 EOF(文件结尾)时,它被视为正在读取的术语的结尾。当读取原子时,EOF 对应于原子字符串表示形式的 then。

这在某些情况下可以简化事情。

关于prolog - 使用prolog脚本时如何打印统一结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416099/

相关文章:

Prolog 向任一方向旋转列表 N 次

prolog - 快速在 Prolog 中运行

基本示例中的 Prolog Existence_Error 过程

coq - 二阶统一与重写

prolog - 扩展统一,SICStus 风格

recursion - is_integer(X) 过程如何工作?

prolog - 如何使用 Prolog 查找二叉树的深度

prolog - 如何在 GNU Prolog 中使用 "long int"?

logic - 前向链接一阶逻辑(统一)