Я работаю над домашним заданием, состоящим из 2-х частей. Первый - написать программу на Прологе, которая проверяет, принадлежит ли определенная пара X, Y к http://en.wikipedia.org/wiki/Triangular_number. Например: (2, 3) = true; (4, 10) = верно и так далее.
Первое решение использует «обычную» рекурсию, и я решил это так:
triangle(0, 0).
triangle(X, Y) :- X > 0, Y > 0, A is X - 1, B is Y - X, triangle(A, B).
Вторая часть - решить эту проблему с помощью хвостовой рекурсии / аккумулятора, используя предикат треугольник / 3. Хотя я использовал аккумулятор в другом задании, в котором использование было довольно очевидным, поэтому у меня есть общее представление о том, как использовать аккумулятор, я очень озадачен тем, как использовать его в этом контексте.
Итак, я не ищу алгоритм, я бы предпочел решить его сам, а скорее практический совет о том, как применять аккумулятор в этом контексте.