【发布时间】:2015-02-16 11:51:06
【问题描述】:
我要问一个问题,哪些答案正在解决这个任务:
从长度为 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*X 替换X^2,但它每次都返回false。这是为什么呢?
据我了解,我需要它像这样工作:
从范围 1-6 中选择三个边,并确保它们符合毕达哥拉斯的陈述。 (这里也需要三角视差吗?我的意思是X>Y+Z,Y>X+Z,Z>X+Y?
【问题讨论】:
-
尝试
=:=而不是=。此外,您不需要所有这 3 个表达式,因为它们只会提供冗余信息。你真的关心区分3,4,5和5,3,4吗? -
嗯,这实际上是你提到的好事。谢谢。我将来会需要这个,但在这里 - 不,我不需要。顺便说一句,这个指定任务
5,3,4和5,4,3的唯一可能答案是什么?你提议=:=,因为它是一个比较条件,对吧? -
查看 prolog 手册中有关不同比较器等的信息。它们的含义和作用各不相同。
=:=/2专门评估两边的算术表达式并检查结果是否相等。=/2不是等式运算符;它执行prolog unification。了解其中的区别很重要。在您的示例中,将所有结果限制为最大6,然后3,4,5的排列是直角三角形的唯一正整数解。 -
@nobodynoone 你可以添加类似
Y >= Z的内容。 -
顺便说一下,标签
pascals-triangle在这里不合适,因为这个问题与帕斯卡三角形没有直接关系。见en.wikipedia.org/wiki/Pascal%27s_triangle。
标签: prolog geometry pythagorean