Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2019, 00:48   #1
Anton_Jag
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 41
По умолчанию Prolog

Может у кого найдется свободное время. В прологе ни в зуб ногой. пытался запускать на https://rextester.com/l/prolog однако это видимо Turbo prolog
Помогите с решением
1. Вычислить числа Фибоначчи без использования переменных N2 и F2.

DOMAINS
N = integer
F = integer

PREDICATES
fib(integer,integer)

CLAUSES
fib(1,1) :- ! .
fib(2,1) :- ! .
fib(N,F) :-
N1 = N - 1, fib(N1,F1),
N2 = N - 2, fib(N2,F2),
F = F1 + F2.

2. Вычислить факториал без использования отсечения.

DOMAINS
N = integer
F = integer
PREDICATES
fact(integer,integer)
CLAUSES
fact(1,1) :- !.
fact(N,F) :-
N1 = N - 1,
fact(N1, F1),
F = N * F1.

3. Дана программа вывода цифр на экран в строку. Выполнить вывод цифр, каждую цифру с новой строки.

DOMAINS
N = integer
PREDICATES
write_number(integer)
GOAL
nl,
write("This number: "), nl,
write_number(0), nl.

CLAUSES
write_number(10).
write_number(N) :-
N < 10, write(N,' '),
N1 = N + 1,
write_number(N1).

4. Вычислить сумму цифр введенного числа c клавиатуры:

PREDICATES
summa(integer, integer)
GOAL
Y = 12345,
summa(Y,X),
write("Summa numeral ",Y,"= ",X)

CLAUSES
summa(X,Y) :- X<10, Y=X!.
summa(X,Y) :-
X1 = X div 10,
summa(X1, Y1),
Y = Y1 + X mod 10.

5. Решить задачу “Ремонт в Ханое”. Добавлено ограничение – нельзя перекладывать диски с 1–го стержня на 3-ий.

DOMAINS
loc = left ; mid ; right

PREDICATES

hanoi(integer)
move(integer, loc, loc, loc)
inform( loc, loc )
GOAL
hanoi(3).

CLAUSES

hanoi(N) :- move( N, left, mid, right).
move( 1, A, _ , C) :- inform(A,C), !.
move( N, A, B, C) :-
N1 = N - 1,
move( N1, A, C, B),
inform( A, C),
move( N1, B, A, C).

inform(Loc1, Loc2) :-
nl, write("Disk c ", Loc1, " -> ", Loc2).

6. Отладить программу, решающую логическую задачу
«В велосипедных гонках три первых места заняли Алеша, Петя и
Коля. Какое место занял каждый из них, если Петя занял не второе и не
третье место, а Коля – не третье?»

PREDICATES
name(symbol)
mesto(symbol)
prizer(symbol,symbol)
solution(symbol,symbol,symbol,symbo l,symbol,symbol)
CLAUSES
name(alex). name(pier). name(nike).
mesto(odin). mesto(dva). mesto(tri).
prizer(X,Y) :- name(X), mesto(Y),
X = pier, not ( Y = dva ), not(Y = tri);
name(X), mesto(Y), X = nike, not(Y = tri);
name(X), mesto(Y), not(X=pier), not(X=nike).
solution(X1,Y1,X2,Y2,X3,Y3) :-
name(X1),name(X2),name(X3),
prizer(X2,Y2), prizer(X3,Y3),
Y1 <> Y2, Y2 <> Y3, Y1 <> Y3,
X1 <> X2, X2 <> X3, X1 <> X3, !.
Anton_Jag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите пожалуйста перенести программу написанную в Prolog в Strawberry prolog Олямбан Помощь студентам 1 14.11.2015 19:51
SWI prolog и Visual prolog поиск маршрута Екатерина 123 Помощь студентам 0 27.08.2015 19:42
Prolog hilos Помощь студентам 0 16.06.2013 19:40
prolog Onni Помощь студентам 6 07.01.2013 22:27
Prolog @Katushka@ Помощь студентам 0 03.10.2009 22:44