Юлия Ворона
Юлия Ворона

Помогите решить задачу в Prolog.

Нужно написать процедуру которая будет суммировать четные числа кратные трем. интервал от -20 до -1

АП
Алексей Плитюхин

Пролог Прологу рознь.

> Нужно написать процедуру
Нет в Прологе никаких процедур. Есть предикаты, факты.
И язык для решения этой задачи довольно неподходящий.

> какой негуманоидный язык
Потому что вы пытались, как на императивном языке, написать ход получения решения.
А на Прологе пишут, исходя из предположения, что решение уже получено и требуется только проверить его правильность.
Не понятно, почему у вас оба предиката называются Наибольший общий делитель (GCD). :D))

Ответивший до меня написал на диалекте GNU Prolog.
А это вариант на Visual Prolog:

implement main
open core, console

constants
className = "main".
classVersion = "".

clauses
classInfo(className, classVersion).

class predicates
sum:(integer, integer, integer) procedure (i, i, o).

clauses
sum(A, B, 0) :- A > B, !.
sum(A, B, S + A) :- sum(A + 2, B, S), A mod 3 = 0, !.
sum(A, B, S) :- sum(A + 2, B, S).

clauses
run() :- init(),
sum(-20, -1, S),
write(S),
_ = readChar().
end implement main

goal
mainExe::run(main::run).

P.S. Если вам требуется программа на диалекте Turbo Prolog, то предикат sum/3 в нём будет выглядеть примерно так же:
sum(A, B, 0) :- A > B, !.
sum(A, B, S) :- A1 = A + 2, sum(A1, B, S1), A mod 3 = 0, S = S1 + A, !.
sum(A, B, S) :- A1 = A + 2, sum(A1, B, S).

Иван
Иван

Господи, какой негуманоидный язык. После получаса знакомства с этим кошмаром получилось примерно такое:

gcd(A, A) :- 0 is A mod 3, 0 is A mod 2.
gcd(A, 0) :- B is A mod 3, B =\= 0.
gcd(A, 0) :- B is A mod 2, B =\= 0.

gcd2(A, B, 0) :- A > B.
gcd2(A, B, C) :- A1 is A+1, gcd2(A1,B,C1), gcd(A,C2), C is C2+C1.

:- initialization(main).
main :- gcd2(-20, -1, G), write(G), nl.

Похожие вопросы
Помогите решить задачу по С# :-)
помогите решить задачу на с++
Prolog, есть ли здесь ошибки?
Помогите решить задачу по С++))))))
Помогите решить задачу на С
Помогите решить задачу по С++
помогите решить задачу по С#
Помогите решить задачу по С++.
язык программирования Prolog, помогите с задачкой
Из pascal'a в Prolog помогите перевести!!!!