Министерство образования и науки РФ Федеральное агенство по образованию РФ Государственное образовательное учреждение высшего профессионального образования Самарский государственный архитектурно-строительный университет Прохорова О.В. Практикум_2 на языке Пролог 2014 г. Оглавление 1. Написание программы на языке Prolog заменяющей все четные элементы списка из списка вещественных чисел на произвольную константу................................................................ 2 2. Для двух строк символов создать новую строку путем посимвольной конкатенации ....... 3 3. Реализация алгоритма быстрой сортировки на языке LISP ..... Error! Bookmark not defined. 4. Написание программы на языке Лисп, которая вычисляет сумму факториалов чисел от 1 до n. ............................................................................................................ Error! Bookmark not defined. 5. Разработка кода программы на языке LISP, что позволит переводить числа из одной системы счисления в другую автоматически ...................................... Error! Bookmark not defined. 6. Разработка кода на языке Пролог проверки может ли указанный класс мотоцикла развить заданную скорость (км/ч) и рассчитать за сколько времени минимально он проедет заданное расстояние (в км) ...................................................................................................................... 4 7. Загадка Эйнштейна: ‘Кто разводит рыбок?’ ............................................................................... 5 8. Написание программы на языке Common Lisp для шифрования текста методом полиалфавитного буквенного текста с использованием ключевого слова — шифром Виженера ...................................................................................................... Error! Bookmark not defined. 9. Упорядочивание по возрастанию числового множества на языке Пролог ........................... 8 10. Написание программы на языке Пролог, которая будет брать два аргумента, являющихся положительными целыми числами и возвращать суммы всех чисел, полученных при составлении ряда Фибоначчи, а затем выводить сумму полученных двух ранее сумм ................................................................................................................................................10 11. Существует дом с комнатами. Между некоторыми комнатами есть двери. В одной из комнат находится клад. Требуется пройти через комнаты к кладу. Как вывести путь?.........11 12. Написание программы быстрой сортировки на языке Пролог .........................................12 13. Программа на языке Пролог для нахождения кратчайшего пути в лабиринте .............13 14. Написание программы на языке Prolog вычисления суммы квадратов чисел Фибоначчи до заданного числа ............................................................................................................15 15. Найти пункты отправления и прибытия, если из города отправления можно долететь до города прибытия с двумя пересадками ( Пролог) .......................................................................16 16. Написание кода на языке Пролог вычисления геометрической прогрессии до определенного числа с заданным множителем .................................................................................17 17. Решение головоломки Эйнштейна с помощью кода на языке Пролог ............................18 18. Составить программу на языке Пролог – перевоз фермера, козы, капусты и волка на другой берег ..............................................................................................................................................20 19. Написание программы на языке Пролог определения существования объекта в Солнечной системе и некоторых параметров существующих объектов: Тип объекта, масса, наличие спутников..................................................................................................................................22 20. Написание программы на языке Лисп, реализующей алгоритм сортировки простыми вставками .................................................................................................... Error! Bookmark not defined. 21. Разработка кода на языке Пролог проверки наличия машины заданного класса на стоянке и проверки наличия ее соседей .............................................................................................26 22. Реализация жадного алгоритма на языке Пролог ................................................................27 1 1. Написание программы на языке Prolog заменяющей все четные элементы списка из списка вещественных чисел на произвольную константу. Автор Антипин Л. skip([],[]). skip([A|B],[A|C]):-replace(B,C,0). replace([],[],_). replace([_|B],[X|C],X):-skip(B,C). :-skip([1,2,3,4,5],X),write(X). Вопрос системе Пролог: ? - replace([1,2,3,4,5],_,_) Ответ системы Пролог [1,0,3,0,5] Finish 2 2. Для двух строк символов создать новую строку путем посимвольной конкатенации (язык Пролог) Автор Горолатова Для двух строк символов создать новую строку путем посимвольной конкатенации. writeList:write('Введите первый массив в формате [a,b,c]:'), read(L1), write('Введите второй массив в формате [a,b,c]:'), read(L2), printList(L1,L2). printList([H1 | T1],[H2 | T2]):write(H1), write(H2), printList(T1,T2). printList([],[H2 | T2]):write(H2), printList([],T2). printList([H1 | T1],[]):write(H1), printList(T1,[]). Вопрос ?- writeList. Ответ системы: Введите первый массив в формате [a,b,c]:[d,k,4]. Введите второй массив в формате [a,b,c]:[h,2,m,t]. dhk24mt 3 3. Разработка кода на языке Пролог проверки может ли указанный класс мотоцикла развить заданную скорость (км/ч) и рассчитать за сколько времени минимально он проедет заданное расстояние (в км) Автор Жирнов moto(suzuki,250). moto(yamaha,300). moto(honda,280). speed(X,Y):-moto(X,Z),Y<Z. time(X,Y,Z):- moto(X,Q),Z is Y/Q. Вопрос: ?-speed(honda,50). Ответ: true. Ответы системы Пролог: 4 4. Загадка Эйнштейна: ‘Кто разводит рыбок?’ (язык Пролог) Автор Зинина Н. solve(W):W=[_,_,_,_,_], %на улице стоят 5 домов % дом(цвет, национальность, животное, напиток, сигареты) first(house(_,no,_,_,_), W), %Норвежец живёт в первом доме. member(house(red,en,_,_,_), W), %Англичанин живёт в красном доме. left(house(green,_,_,_,_), house(white,_,_,_,_), W), %Зелёный дом находится слева от белого, рядом с ним. member(house(_,da,_,tea,_), W), %Датчанин пьёт чай. near(house(_,_,_,_,marlboro), house(_,_,cat,_,_), W), %Тот, кто курит Marlboro, живёт рядом с тем, кто выращивает кошек. member(house(yellow,_,_,_,dunhill), W), %Тот, кто живёт в жёлтом доме, курит Dunhill. member(house(_,de,_,_,rothmans), W), %Немец курит Rothmans. middle(house(_,_,_,milk,_), W), %Тот, кто живёт в центре, пьёт молоко. near(house(_,_,_,_,marlboro), house(_,_,_,water,_), W), %Сосед того, кто курит Marlboro, пьёт воду. member(house(_,_,bird,_,pallmall), W), %Тот, кто курит Pall Mall, выращивает птиц. member(house(_,sw,dog,_,_), W), %Швед выращивает собак. 5 near(house(_,no,_,_,_), house(blue,_,_,_,_), W), %Норвежец живёт рядом с синим домом. near(house(_,_,horse,_,_), house(_,_,_,_,dunhill), W), %Тот, кто выращивает лошадей, живёт рядом с тем, кто курит Dunhill member(house(_,_,_,beer,winfield), W), %Тот, кто курит Winfield, пьет пиво. member(house(green,_,_,coffee,_), W), %В зелёном доме пьют кофе. member(house(_,_,fish,_,_), W). % В доме живет рыба first(H, [H,_,_,_,_]). middle(H, [_,_,H,_,_]). left(H1, H2, W):W=[H1,H2,_,_,_]; W=[_,H1,H2,_,_]; W=[_,_,H1,H2,_]; W=[_,_,_,H1,H2]. near(H1,H2,W):left(H1,H2,W); left(H2,H1,W). 6 Вопрос: «Кто разводит рыбок?» Расшифровка ответа: 1. 2. 3. 4. 5. В желтом доме живет норвежец, у него есть кошка, он пьет воду и курит dunhill. В синем доме живет датчанин, у него есть лошадь, он пьет чай и курит dunhill. В красном доме живет англичанин, у него есть птичка, он пьет молоко и курит pallmall. В зеленом доме живет немец, у него есть рыбки, он пьет кофе и курит rothmans. В белом доме живет швед, у него есть собака, он пьет пиво и курит winfield. Рыбок разводит немец. 7 5. Упорядочивание по возрастанию числового множества на языке Пролог Автор Кочемаева sort:- write('Введите массив чисел = '), read(X), nl, write('Выберите метод сортировки'),nl,write(' 1 - Быстрая сортировка, 2 - Метод вставки, 3 - Метод пузырька, 4 - Метод наивной сортировки'), nl, read(Y), nl, methodSort(Y,X). methodSort(1,X):- qsort(X,Z), write(Z),!. methodSort(2,X):- insort(X,Z), write(Z),!. methodSort(3,X):- busort(X,Z), write(Z),!. methodSort(4,X):- sortn(X,Z), write(Z),!. methodSort(_,_):- write('Нет такого варианта'),!. order(X, Y) :- X =< Y. qsort([], []). qsort([H|Tail], S) :- split(H, Tail, Small, Big), qsort(Small, Small1), qsort(Big, Big1), append(Small1, [H|Big1], S). split(H, [A|Tail], [A|Small], Big) :- order(A, H), !, split(H, Tail, Small, Big). split(H, [A|Tail], Small, [A|Big]) :- split(H, Tail, Small, Big). split(_, [], [], []). insort([], []). insort([X|L], M) :- insort(L, N), insortx(X, N, M). insortx(X, [A|L], [A|M]) :- order(A, X), !, insortx(X, L, M). insortx(X, L, [X|L]). busort(L, S) :- swap(L, M), !, busort(M, S). busort(L, L) :- !. swap([X, Y|R], [Y, X|R]) :- order(Y, X). swap([X|R], [X|R1]) :- swap(R, R1). sortn(L1, L2) :- permutation(L1, L2), sorted(L2), !. permutation(L, [H|T]) :- append(V, [H|U], L), append(V, U, W), permutation(W, T). 8 permutation([], []). sorted([L]). sorted([X,Y|T]) :- order(X,Y), sorted([Y|T]). 9 6. Написание программы на языке Пролог, которая будет брать два аргумента, являющихся положительными целыми числами и возвращать суммы всех чисел, полученных при составлении ряда Фибоначчи, а затем выводить сумму полученных двух ранее сумм Автор Кузнецов А. fac(1,1):-!. fac(N,R):-M is N-1, fac(M,Mfac),R is N+Mfac. factorial(N,R):-fac(N,R). factor(N,B,S):-factorial(N,R),factorial(B,L), S is R+L. Вопрос ?-factor(6,7,S). Ответ системы пролог S=49. 10 7. Существует дом с комнатами. Между некоторыми комнатами есть двери. В одной из комнат находится клад. Требуется пройти через комнаты к кладу. Как вывести путь? (язык Пролог) Автор Куликова А. door(a,b). door(b,c). door(b,e). door(d,e). door(d,c). door(e,g). door(e,f). money(g). path(Y,Y,T):-money(Y),write(T). path(X,Y,T):-door(X,Z),not(member(Z,T)), path(Z,Y,[Z|T]). Ответ системы Пролог: [g,a,b] X=g То есть, клад находится в комнате g. Путь к комнате найден. Ответ системы Пролог: 11 8. Написание программы быстрой сортировки на языке Пролог Автор Мишин А. qsort([], []). qsort([H|Tail], S) :- split(H, Tail, Small, Big), qsort(Small, Small1), qsort(Big, Big1), append(Small1, [H|Big1], S). order(X, Y) :- X =< Y. split(H, [A|Tail], [A|Small], Big) :- order(A, H), !, split(H, Tail, Small, Big). split(H, [A|Tail], Small, [A|Big]) :- split(H, Tail, Small, Big). split(_, [], [], []). 2 ?- qsort([3,5,2,1,4,6,8,7],S). S = [1,2,3,4,5,6,7] 12 9. Программа на языке Пролог для нахождения кратчайшего пути в лабиринте Автор Нагорнова Т. door(a,b). door(b,c). door(b, e). door(d, e). door(d, c). door(e,g). door(e,f). money(g). move(A, B):- door(A, B);door(B, A). search_bdth(Start, Finish):- bdth([[Start]], Finish, Way),money(Finish), show_answer(Way). member(H,[H|_]). member(H,[_|Tail]):-member(H,Tail). append([],L,L). append([X|L1],L2,[X|L3]):-append(L1,L2,L3). prolong([Temp|Tail],[New,Temp|Tail]):move(Temp,New),not(member(New,[Temp|Tail])). bdth([[Finish|Tail]|_],Finish,[Finish|Tail]). bdth([TempWay|OtherWays],Finish,Way):findall(W,prolong(TempWay,W),Ways), append(OtherWays,Ways,NewWays), bdth(NewWays,Finish,Way). show_answer([_]):-!. show_answer([A,B|Tail]):show_answer([B|Tail]),nl,write(B),write(' -> '),write(A). Вопрос ?- search_bdth(a,X), money(X). Ответ системы пролог: a -> b b -> e e -> g X=g 13 14 10. Написание программы на языке Prolog вычисления суммы квадратов чисел Фибоначчи до заданного числа Автор Насыров М. (ошибки!) fib(0,5,1,1,1):-!. fib(D,K,M,N,Z):-D>0,D1 is D-1,fib(D1,K1,M1,N1,Z1),K is K1,K1>Z1,N is M1,write('n='),write(N),nl,M is M1+N1,Z1>0,Z is M1*M1)+(N1*N1),write('z='),write(Z),nl;write('finish'). Вопрос ?- fib(5,K,M,N,Z). Ответ системы Пролог: N=1 Z=2 N=2 Z=5 Finish 15 11. Найти пункты отправления и прибытия, если из города отправления можно долететь до города прибытия с двумя пересадками ( Пролог) Автор Нуриманова reys(samara,pensa). reys(pensa,moskva). not(A):-A,!,fail. not(_). avia1(A,B):-reys(A,C),reys(C,B),not(reys(A,B)). avia2(A,B):-reys(A,C),reys(C,E),reys(E,B),not(avia1(A,B)). А если с одной пересадкой : Ответ: пункт отправления - Оренбург, пункт прибытия –Пенза. (пересадка в Самаре) 16 12. Написание кода на языке Пролог вычисления геометрической прогрессии до определенного числа с заданным множителем Автор Овчинникова М. ttt:-write('B='),read(B),write('N='),read(N),write('P='),read(P), N>1,P>0,B>0,P>B,integer(B),integer(P),integer(N),line(B,N,P),!. line(B,N,P):-P>B,B1 is B*N, write(B), nl, line(B1,N,P),!. Вопрос: ?-ttt. Ответ: B=2. N=2. P=15. 2 ; (2*1) 4 ; (2*2*1) 8 ; (2*2*2*1) 17 13. Решение головоломки Эйнштейна с помощью кода на языке Пролог Автор Ожиганов А. houses([ house(первый, _, _, _, _, _), house(второй, _, _, _, _, _), house(третий, _, _, _, _, _), house(четвёртый, _, _, _, _, _), house(пятый, _, _, _, _, _) ]). right_of(A, B, [B, A | _]). right_of(A, B, [_ | Y]) :- right_of(A, B, Y). next_to(A, B, [A, B | _]). next_to(A, B, [B, A | _]). next_to(A, B, [_ | Y]) :- next_to(A, B, Y). mymember(X, [X|_]). mymember(X, [_|Y]) :- mymember(X, Y). print_houses([]). print_houses([A|B]) :write(A), nl, print_houses(B). who_owns_the_zebra(H):-houses(H), mymember(house(_,красный,англичанин,_,_,_),H), mymember(house(_,_,испанец,собака,_,_),H), mymember(house(_,зелёный,_,_,кофе,_),H), mymember(house(_,_,украинец,_,чай,_),H), right_of(house(_,зелёный,_,_,_,_), house(_,белый,_,_,_,_),H), mymember(house(_,_,_,улитки,_,oldgold),H), mymember(house(_,жёлтый,_,_,_,kools),H), H=[_,_,house(_,_,_,_,молоко,_),_,_], mymember(house(первый,_,норвежец,_,_,_),H), next_to(house(_,_,_,_,_,chesterfield), 18 house(_,_,_,лиса,_,_),H), next_to(house(_,_,_,лошадь,_,_), house(_,_,_,_,_,kools),H), mymember(house(_,_,_,_,сок,luckystrike),H), mymember(house(_,_,японец,_,_,parliamen),H), next_to(house(_,_,норвежец,_,_,_), house(_,синий,_,_,_,_),H), mymember(house(_,_,японец,_,_,parliamen),H), mymember(house(_,_,_,_,вода,_),H), mymember(house(_,_,_,зебра,_,_),H), print_houses(H). Вопрос: ?- who_owns_the_zebra(_). Ответ системы Пролог: house(первый, жёлтый, норвежец, лиса, вода, kools) house(второй, синий, украинец, лошадь, чай, chesterfield) house(третий, красный, англичанин, улитки, молоко, oldgold) house(четвёртый, белый, испанец, собака, сок, luckystrike) house(пятый, зелёный, японец, зебра, кофе, parliamen) true ?- who_owns_the_zebra(_). house(первый,жёлтый,норвежец,лиса,вода,kools) house(второй,синий,украинец,лошадь,чай,chesterfield) house(третий,красный,англичанин,улитки,молоко,oldgold) house(четвёртый,белый,испанец,собака,сок,luckystrike) house(пятый,зелёный,японец,зебра,кофе,parliamen) true 19 14. Составить программу на языке Пролог – перевоз фермера, козы, капусты и волка на другой берег Автор Паросова О. % противоположные берега % opposite(east,west). opposite(west,east). % переплывают фермер и волк % move(state(X,X,G,C),state(Y,Y,G,C)):-opposite(X,Y). % переплывают фермер и капуста% move(state(X,W,G,X),state(Y,W,G,Y)):-opposite(X,Y). % переплывают фермер и коза % move(state(X,W,X,C),state(Y,W,Y,C)):-opposite(X,Y). % переплывает только фермер % move(state(X,W,G,C),state(Y,W,G,C)):-opposite(X,Y). % состояние, при котором волк съедает козу % unsafe( state(F,X,X,_) ):- opposite(F,X). % состояние, при котором коза съедает капусту % unsafe( state(F,_,X,X) ):- opposite(F,X). % определяется путь% path(S,G,L,L1): - move(S,S1),not( unsafe(S1) ), not( member(S1,L) ), path( S1,G,[S1|L],L1),!. path(G,G,T,T):-!. % конечное состояние достигнуто % % цель: перевезти всех с восточного берега на западный % go:-go(state(east,east,east,east),state(west,west,west,west)). go(S,G):- path(S,G,[S],L),nl,write('A solution is:'),nl,write_path(L), fail. go(_,_). 20 member(X,[X|_]). member(X,[_|L]):-member(X,L). % вывод % write_move( state(X,W,G,C), state(Y,W,G,C) ) :-!, write('The farmer crosses the river from '), write(X), write(' to '), write(Y),nl. write_move( state(X,X,G,C), state(Y,Y,G,C) ) :-!, write('The farmer takes the Wolf from '), write(X), write(' of the river to '), write(Y),nl. write_move( state(X,W,G,X), state(Y,W,G,Y) ) :-!, write('The farmer takes the cabbage from '), write(X), write(' of the river to '), write(Y),nl. write_move( state(X,W,X,C), state(Y,W,Y,C) ) :-!, write('The farmer takes the Goat from' ), write(X), write(' of the river to '), write_path( [H1,H2|T] ) :- !, write(Y),nl. write_move(H1,H2),write_path([H2|T]). write_path( _ ). 21 15. Написание программы на языке Пролог определения существования объекта в Солнечной системе и некоторых параметров существующих объектов: Тип объекта, масса, наличие спутников. Автор Плугин Т. weight(148.2*10^21, ганмед). weight(107.6*10^21, калисто). weight(89.3*10^21, ио). weight(48*10^21, европа). weight(89.3*10^21, ио). weight(0.065*10^21, миранда). weight(1.2*10^21, умбриэль). weight(1.35*10^21, ариель). weight(3.014*10^21, оберон). weight(3.52*10^21, титания). weight(0.1*10^21, энцелад). weight(0.6*10^21, тефия). weight(1*10^21, диона). weight(1.9*10^21, япет). weight(134.5*10^21, титан). weight(2.3*10^21, рея). weight(1.52*10^21, харон). weight(0.05*10^21, протей). weight(21.5*10^21, трион). weight(73.5*10^21, луна). weight(1898600*10^21, юпитер). weight(102430*10^21, нептун). weight(330.2*10^21, меркурий). weight(4868.5*10^21, венера). weight(568460*10^21, сатурн). 22 weight(5973.6*10^21, земля). weight(641.85*10^21, марс). weight(86832*10^21, уран). weight(1989100000*10^21, солнце). satellites(X):- X='юпитер',write('Спутники: '), write('Ганмед, Калисто, Ио'); X='уран',write('Спутники: '),write('Оберон, Умбриаль, Ариэль Титания'); X='сатурн',write('Спутники: '),write('Титан, Рея, Япет Диона, Тефия, Энцелад'); X='нептун',write('Спутники: '),write('Тритон, Протей'); X='земля',write('Спутники: '),write('Луна'); write('Спутников нет :('). objectType(X):- X='солнце',write('Солнце'),nl,!; X='юпитер',write('Планета'),nl; X='сатурн',write('Планета'),nl; X='уран',write('Планета'),nl; X='нептун',write('Планета'),nl; X='земля',write('Планета'),nl; X='венера',write('Планета'),nl; X='марс',write('Планета'),nl; X='меркурий',write('Планета'),nl,!; X='ганмед',write('Спутник'),nl; X='калисто',write('Спутник'),nl; X='ио', write('Спутник'),nl; X='титания',write('Спутник'),nl; X='оберон', write('Спутник'),nl; X='умбриаль', write('Спутник'),nl; X='ариэль', write('Спутник'),nl; X='титания', write('Спутник'),nl; X='титан', write('Спутник'),nl; X='рея', write('Спутник'),nl; 23 X='япет', write('Спутник'),nl; X='диона', write('Спутник'),nl; X='тефия', write('Спутник'),nl; X='энцелад', write('Спутник'),nl; X='тритон', write('Спутник'),nl; X='протей', write('Спутник'),nl; X='луна', write('Спутник'),nl,!; write('Такого объекта в солнечной системе нет :)'),!. info:-write('Введите название объекта '), read(X), objectType(X), weight(WEIGHT,X), write('Масса этого объекта составляет ': WEIGHT),write(' кг.'), nl, satellites(X). ?- info. Ответ системы Пролог: Введите название объекта Земля Планета Масса этого объекта составляет: 5973,6*10^21 кг. Спутники: Луна Тестирование: 1 ?- info. Введите название объекта земля. Планета Масса этого объекта составляет :5973.6*10^21 кг. Спутники: Луна true . 2 ?- info. Введите название объекта сатурн. Планета 24 Масса этого объекта составляет :568460*10^21 кг. Спутники: Титан, Рея, Япет Диона, Тефия, Энцелад true . 3 ?- info. Введите название объекта титан. Спутник Масса этого объекта составляет :134.5*10^21 кг. Спутников нет :( true 4 ?- info. Введите название объекта табуретка. Такого объекта в солнечной системе нет :) false. 25 16. Разработка кода на языке Пролог проверки наличия машины заданного класса на стоянке и проверки наличия ее соседей Автор Щербаков Д. stoynka(bmw). % база данных - какие машины имеются на стоянке stoynka(volvo). stoynka(kia). stoynka(cadillac). sosed(bmw,volvo). % база данных, какие машины стоят рядом друг с другом sosed(bmw,cadillac). sosed(cadillaс,kia). car(X):-stoynka(X). % правило проверки, есть ли введенная машина на стоянке place(X,Y):-sosed(X,Y);sosed(Y,X). % правило проверки, стоят ли введенные машины рядом Вопрос: ?-car(bmw). Ответ: true. 26 17. Реализация жадного алгоритма на языке Пролог Автор Якищик Д. minimum([],Z,Z):-!. minimum([[X1,X2,R]|Y],Z1,Z2):not(search(X1,X2,Z1,[X1])), !,minimum(Y,[[X1,X2,R]|Z1],Z2). minimum([_|Y],Z1,Z2):-minimum(Y,Z1,Z2). search(X1,X2,Y,_):- member([X1,X2,_],Y). search(X1,X2,Y,_):- member([X2,X1,_],Y). search(X1,X2,Y,Z):- member([X1,X3,_],Y),not(member(X3,Z)), search(X3,X2,Y,[X3|Z]). search(X1,X2,Y,Z):- member([X3,X1,_],Y), not(member(X3,Z)), search(X3,X2,Y,[X3|Z]). ins(X,[],[X]). ins([X1,X2,R1],[[Y1,Y2,R2]|L],[[X1,X2,R1]|[[Y1,Y2,R2]|L]]):- R1<R2,!. ins(X,[Y|L1],[Y|L2]):-ins(X,L1,L2). sort([],Y,Y). sort([X|L],Y1,Y3):- ins(X,Y1,Y2), sort(L,Y2,Y3). graph([X|L],Y,Z):- sort(Y,[],Y1), minimum(Y1,[],Z), all(X,L,Z). all(_,[],_). all(X,[Y|L],Z):-search(X,Y,Z,[X]), !,all(X,L,Z). sum([], 0). sum([[_,_,R]|T],S1):- sum(T,S2), S1 is S2 + R. function:write_ln('Узлы(например [a,b,c] значит граф включает в себя три узла - a, b и c):'), read(X), write_ln('Расстояния между узлами(Вес ребра)(например [[a,b,3],[a,c,4]]значит у ребра ab и ac вес 3 и 4 соответственно):'), read(Y), graph(X,Y,Z), sum(Y, Summa), write('Вес исходного графа: '), write_ln(Summa), write('Оптимальная конфигурация: '), write_ln(Z), 27 sum(Z,Summa1), write('Вес минимального остовного дерева: '), write_ln(Summa1). 28