1
최근에 프롤로그를 배우기 시작했고이 질문에 ... 붙어 있어요주어진 정수 N과 A에 대해 '1 * A + 2 * A + 3 * A + ... + N * A'를 계산합니다.
"A * 1 + A * 2 + A * 3 + ... + A * N"의 값을 제공하기 위해이 규칙을 어떻게 변경합니까? 다음 쿼리에서와 같이
sum(1,A,1).
sum(N,A,Res) :-
N > 1,
Nminus1 is N-1,
sum(Nminus1,A,Res2),
Res is Res2 + N*A.
결과는 항상 하나가 꺼져있는 것처럼 보이 :
?- sum(4,2,Res).
Res = 19 ; % NO! expected: `Res = 20`
false.
나는 그것을 알아낼 수 없습니다. 미리 감사드립니다!
, ... – CapelliC
이것은 정수 "a"가없는 값만 제공합니다. "a"도 포함되도록 어떻게 변경합니까? – Prolog
이것은 생각만큼 어렵지 않습니다. 분명히 인수로'A'를 도입해야합니다. 가장 쉬운 대답은 결과가'A * sum (n)'인데, 여기서'sum (n) '은 현재 결과입니다. 'suma (N, Res) : - sum (N, Res1), Res is A * Res.'의 보조 술어로 현재'sum'을 사용할 수 있습니다.'A ''Res is Res2 + A * N'의 '1'의 배수로했던 것처럼. 그러나 그것은 더 많이 곱합니다. 비슷한 접근법이 있습니다. – lurker