我正在做一个家庭作业,由两部分组成。首先是编写一个 Prolog 程序来检查某对 X, Y 是否属于http://en.wikipedia.org/wiki/Triangular_number。例如:(2, 3) = true; (4, 10) = true 等等。
第一个解决方案使用“普通”递归,我已经解决了这个问题:
triangle(0, 0).
triangle(X, Y) :- X > 0, Y > 0, A is X - 1, B is Y - X, triangle(A, B).
第二部分是使用尾递归/累加器,使用三角形/3 谓词来解决这个问题。虽然我在另一个分配中使用了累加器,其中使用非常明显,所以我对如何使用累加器有一个大致的了解,但我对如何在这种情况下使用它感到很困惑。
所以,我不是在寻找一种算法,我更愿意自己解决这个问题,但更多的是关于如何在这种情况下应用累加器的实用建议。