Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Функциональные языки: ПРОЛОГ. Графы

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Функциональные языки: ПРОЛОГ. Графы
Имя
Сообщение << Старые топики   Новые топики >>
Функциональные языки: ПРОЛОГ. Графы - 2007-12-04 01:54:28.990000   
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&gt;1, sn(X, S), SN is N+S. %3 min([E], E). min([H0, H1|T], M)H0=&lt;H1, min([H0|T], M)); (H0&gt;H1, min([H1|T], M)). max([E], E). max([H0, H1|T], M)H0&gt;=H1, max([H0|T], M)); (H0&lt;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. Заранее Спасибо!
Post #: 1
RE: Функциональные языки: ПРОЛОГ. Графы - 2007-12-05 07:06:59.380000   
BigIron

Сообщений: 898
Оценки: 0
Присоединился: 2007-05-13 18:53:43.593333
Респект тебе.
Мало осталось тех кто на этом эвристическом чуде пишет.
Яб рад помочь, но я его уже давно забыл….. :(
Попробуй спросить на www.gprolog.org, ну или полезное чего найдешь.
Post #: 2
Страниц:  [1]
Все форумы >> [Прочее] >> Функциональные языки: ПРОЛОГ. Графы







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.