我要问一个问题,哪些答案正在解决这个问题:
通过选择六个长度为1到6的整数段中的三个边来构造哪些直角三角形
所以,我认为这是必不可少的:
between(1,6,X),
between(1,6,Y),
between(1,6,Z),
然后我们必须确保它符合毕达哥拉斯的说法,所以我正在尝试这个,加上上面的句子:
(X^2 = Y^2 + Z^2 ;
Y^2 = X^2 + Z^2 ;
Z^2 = X^2 + Y^2)
此外,我一直在尝试将X^2
替换为X*X
,但每次都会返回false。那是为什么?
根据我的理解,我需要它像这样工作:
从1-6范围中选择三个边,并确保它们符合毕达哥拉斯的说法。 (这里还需要三角形差异吗?我的意思是X>Y+Z,Y>X+Z,Z>X+Y
?
答案 0 :(得分:2)
检查有关不同比较器等的prolog手册。它们意味着做各种事情。 =:=/2
专门评估任一方的算术表达式,并检查结果是否相等。 =/2
不是等式运算符;它执行prolog统一。了解其中的区别非常重要。在您的示例中,将所有结果限制为6
的最大值,然后3,4,5
的排列是直角三角形的唯一正整数解。
?- between(1,6,X), between(1,6,Y), between(1,6,Z), Z^2 =:= X^2 + Y^2.
X = 3,
Y = 4,
Z = 5 ;
X = 4,
Y = 3,
Z = 5 ;
false.