Micron
Сообщений: 18
Оценки: 0
Присоединился: 2006-01-27 23:29:54
|
Может кто-нибудь подсказать как сделать седьмое задание на прологе? 1) Написать программу, которая на запрос реки([“Архангельск”, “Питер”, “Москва”],P) выводила P = [“Северная Двина”, “Нева”, “Яуза”]. 2) Как известно, n! = 1*2*3*…*n. Написать программу для поиска Sn = 1+2+3+…+n. Обязательно использовать рекурсию. 3) Написать программу для преобразования списка вида [1997, 1970, 1907, 1979, 1909] к виду [1907, 1909, 1970, 1979, 1997]. 4) Написать правило для соединения двух списков в третий. 5) На заданный список городов вывести список в порядке убывания количества жителей. Необходимо использовать базу фактов вида население(“Москва”,10000). Население взять в тысячах. 6) Написать программу определения пути между двумя городами. При описании сети дорог необходимо задавать только один вариант пути (для упрощения задачи), т.е. используется топология дерева, например с вершиной в Москве. Также можно использовать ориентированное дерево со сросшимися ветвями. Для описания БФ использовать отношение: дорога(город, город, расстояние). 7) Решить задачу аналогичную предыдущей, но для обычного графа в котором допускается не только перемещение из А в Б, но и обратное перемещение из Б в А. Для корректной работы необходимо каким-либо способом исключать из искомого пути уже посещенные города (узлы), иначе машина вывода может попасть в цикл и переполнить стек. С превыми шестью вроде справился:
%1
reki(["Arkhangelsk","S.P.","Moscow"],["Nord Dvina","Neva","Yauza"]).
%2
sn(1, 1).
sn(N, SN) is N-1, N>1, sn(X, S), SN is N+S.
%3
min([E], E).
min([H0, H1|T], M)H0=<H1, min([H0|T], M)); (H0>H1, min([H1|T], M)).
max([E], E).
max([H0, H1|T], M)H0>=H1, max([H0|T], M)); (H0<H1, max([H1|T], M)).
del([DE|T], DE, T).
del([H|T], DE, [H|NT])el(T, DE, NT).
sbi([], []).
sbi(L, [H|T]):-min(L, H), del(L, H, L1), sbi(L1, T), !.
sbd([],[]).
sbd(L, [H|T]):-max(L, H), del(L, H, L1), sbd(L1, T), !.
%4
add([ ], L, L).
add([H|L1], L2, [H|L3]):- add(L1, L2, L3).
%5
p("A", 495).
p("B", 984).
p("C", 684).
te([X],X).
sc([],[]).
sc([H0|T0], [H1|T1])p(H0,H1); p(H1,H0)), sc(T0,T1).
cl([],[]).
cl(L0, [H|T]):-sc(L0, L1), max(L1, H), sc([H], L2), te(L2,E), del(L0, E, L3), cl(L3, T).
%6
rfjw("1","2",2).
rfjw("1","3",5).
rfjw("2","4",4).
rfjw("2","5",7).
rfjw("3","4",6).
rfjw("3","5",2).
rfjw("4","5",3).
jw(S0, S0, 0).
jw(S0, FN, DN):-rfjw(S0, F0, D0), jw(F0, FN, D1), DN=D0+D1.
Заранее Спасибо!
|