Try с
findnum(N, N, N).
findnum(N, M, Res) :-
N1 is N+1,
N < M,
findnum(N1, M, R0),
Res is R0 + N.
Ваш первый пункт
findnum(N, N, M).
является неправильным, потому вы должны установить (унифицировать) M
до величины; и если вы хотите суммировать числа от N
до N
, сумма N
, так
findnum(N, N, N).
Идея второго раздела является просуммировать N
на сумму от N+1
до M
; Я вижу три ошибки в своей реализации:
1) вы должны вызвать пункт терминала (findnum(N, N, N)
), так что неправильно охранник N1 < M
, потому что вы должны вызвать терминальное положение, когда N1
равно M
; правильный охранник N < M
или N1 <= M
2) если ваш рекурсивный вызов findnum/3
использования, для третьего аргумента, то тот же переменного (Res
), вы не можете добавить N
, так что вы должны позвонить с другим переменным: R0
в моем примере
3) Res is N1 + M
неправ; правильная версия: Res is R0 + N
; текущее число (N
) плюс сумма от N+1
до M
.
Это единственный разумный подход к решению этого вопроса. –