Другие языки программирования и технологии

Помощь в решение задачи на PROLOG

Задача:
Вводится 3 числа, компьютер выдает минимальное, Найти минимальное число.

Буду весьма благодарен, если, кто то напишет решение к этой задаче с пояснениями.
Samir Gadzhiev
Samir Gadzhiev
363
Ой-ой-ой. Капитан Гугл и Виктор С, вы оба используете предикаты как функции, возвращающие числовое значение. Предикаты возвращают только логические значение успех или неуспех (true, fail).
Для получения результата их нужно вызывать только как процедуры. Правда, на знаю, как с этим обстоит дело в Strawberry Prolog.

Visual Prolog 7.2 и 7.3 (по-моему, начиная с 6.2):

implement main
open core, console

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

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

clauses
classInfo(className, classVersion).
min(A, B, Min) :- A < B, Min = A, !.
min(_, B, Min) :- Min = B.

clauses
run() :- init(),
read() = X,
read() = Y,
min(X, Y, Z),
read() = W,
min(Z, W, Min),
write("Минимальное число = ", Min),
readChar() = _, readChar() = _.
end implement main

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

Turbo Prolog 2.0:

predicates
min(integer, integer, integer)
run()

clauses
min(A, B, Min) :- A < B, Min = A, !.
min(_, B, Min) :- Min = B.
run() :- readint(X), readint(Y),
min(X, Y, Z),
readint(W),
min(Z, W, Min),
write("Минимальное число = ", Min),
readchar(_).

goal
run.
ЮМ
Юнус Мусаев
51 590
Лучший ответ
Еще бы вспомнить этот пролог.. . Что-то вроде
min(a,b):-a>b,b.
min(a,b):-a<=b,a.

goal:-
read(a),
read(b),
read(c),
write(min(a,min(b,c)).
pascal, на свой язык сами переделаете. а мне что то лень

Const N = 10; MaxRealVal = 1.7E38;
Var X : Array[1..N] Of Real; I : Integer; Min, Y : Real;
Begin
For I := 1 To N Do ReadLn(X);
Min := MaxRealVal;
For I := 1 To N Do
Begin
Y := X[ I ];
If I Mod 2 = 1 Then Y := -Y;
If Y < Min Then Min := Y;
End;
WriteLn(Min:0:4);
ReadLn;
End.
Ахаха, чувак с Паскалем отжог!)) )

http ://w ww. cyberforum. ru/prolog/thread65188.html (уберите пробелы)
Вот похожая задача. Гугл в помощь. ;-)
думаю, что выглядеть конструкция будет как-то так:
max(X, A, A):- X = A.
max(X, A, B):- A>B, X = A.
max(X, A, B):- B>A, X = B.
max(X, A, B, C):- X = max(max(A, B), max(A, C)).
?- max(X,7,3,5), write(X), nl.

ps: Я правда не спец в этом, так что оптимальность гарантировать не могу.
pps: Работоспособность в вашей версии, кстати, тоже ибо пролог проходил на версии "strawberry prolog"
Вдв Двд
Вдв Двд
1 925