首页 > 解决方案 > 序言:反射(X,Y)->(Y,X)

问题描述

我试图在不使用内置函数(即交换等)的情况下生成除序言中的输入之外的第二个反射点。

我不确定如何通过根据另一个定义每个来交换它们而不会导致无限递归。

这是我在这里尝试过的。

reflection(X,Y) :- point(X,Y),point(Y,X).

point(X,Y).

更正:反射(点(1,2),点(2,1)。

但它不会正确回答:

反射(点(-5, 8),点(X,Y)),writeln(点(X,Y))...

Expect(8,-5),返回随机(~)大整数(prolog 标准)

标签: prolog

解决方案


你的程序就是这个子句。

reflection(point(X, Y), point(Y, X)).

并使用reflection(point(-5, 8), point(X, Y)), writeln(point(X, Y)).产量查询:

point(8, -5)

X = 8,
Y = -5

推荐阅读