Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 4.26 KB | None | 0 0
  1. clauses
  2. woman("Galina", 23).    /*average = 24*/
  3. woman("Katerina", 31).
  4. woman("Dasha", 21).
  5. woman("Nelly", 27).
  6. woman("Aleksandra", 18).
  7.  
  8. man("Vladimir", 23).
  9. man("Sergey", 21).
  10. man("Petr", 31).
  11. man("Trofim", 27).
  12. man("Aleksey", 18).
  13.  
  14.  sumlist([], 0, 0).
  15.  sumlist([H|T], Sum, N):-
  16.  sumlist(T, S1, N1),
  17.  Sum=H+S1, N=1+N1.
  18.  
  19.  less(Average,Age,_):- Average@<Age.
  20.  less(Average,Age,X):- Average@>=Age, write(X),nl.
  21.  
  22.  listofages(AgeList) :- findall(Age, man(_, Age), L1), findall(Age, woman(_, Age), L2), append(L1, L2, AgeList).
  23.  average(Sum, N, Average) :- Average is Sum/N.
  24.  
  25.  findname(Average, []) :-  man(X, Y), less(Average, Y, X).
  26.  findname(Average, [data(X, Y)|Tail]):- findname(Average, Tail), man(X, Y), less(Average, Y, X).
  27.  
  28.   getdata(data(Person, Age)) :- man(Person, Age).
  29.   getdata(data(Person, Age)) :- woman(Person, Age).
  30.   getdatalist(PersonList) :- findall(Order, getdata(Order), PersonList).
  31.  
  32.  
  33.   printlist([]).
  34.   printlist([data(Person,Age)|Tail]) :- write(Person), write("\t"), write(Age), nl, printlist(Tail).
  35.  
  36.  
  37. /* sorting.pro: Программа на ПРОЛОГЕ для сортировки массива целых чисел по убыванию
  38.    Для сортировки используется метод нахождения наибольшего элемента. */
  39.   /* Аксиомы для нахождения наибольшего элемента списка */
  40.   find_maxelem([data(Person, Age) | Tail], Min) :- find_maxelem_re(Tail, data(Person, Age), Min).
  41.   find_maxelem_re([], Min, Min).
  42.   find_maxelem_re([data(Person, Age) | Tail], data(_, AgeCurMin), Min) :- Age < AgeCurMin, find_maxelem_re(Tail, data(Person, Age), Min), !.
  43.   find_maxelem_re([_ | Tail], data(Person, AgeCurMin), Min) :- find_maxelem_re(Tail, data(Person, AgeCurMin), Min).
  44.     /* Если головной элемент H списка оказывается больше текущего максимального значения CurMin, процедура
  45.      * запускается рекурсивно для хвостовой части списка со значением CurMin = H. Иначе процедура запускается
  46.      * рекурсивно с сохранением значения CurMin. Рекурсия заканчивается, когда мы приходим к пустому списку.
  47.      * При этом в текущее значение CurMin принимают за искомое максимальное значение: Min = CurMin.
  48.      */
  49.  
  50.   /* Аксиомы для объединения двух списков в один */
  51.   append([], List2, List2).
  52.   append([H1 | Tail1], List2, [H1 | Tail3]) :- append(Tail1, List2, Tail3).
  53.  
  54.   /* Аксиомы для исключения элемента из списка */
  55.   cut_elem(List, X, NewList) :- cut_elem_re([], List, X, NewList).
  56.   cut_elem_re(Head, [], _, Head).   /* на случай, если элемент Х отсутствует в списке. При сортировке невозможно. */
  57.   cut_elem_re(Head, [data(_, Age) | Tail], data(_, AgeX), NewList) :- Age is AgeX, append(Head, Tail, NewList), !.
  58.   cut_elem_re(Head, [data(Person, Age) | Tail], X, NewList) :- append(Head, [data(Person, Age)], NewHead), cut_elem_re(NewHead, Tail, X, NewList).
  59.     /*  Процедура исключения заданного элемента из списка.*/
  60.      
  61.   /* Аксиомы для выполнения сортировки списка по убыванию */
  62.   sort_list_desc([], []).
  63.   sort_list_desc(List, Result) :-
  64.     find_maxelem(List, Min),        /* находим наибольший элемент списка */
  65.     cut_elem(List, Min, Rest),      /* исключаем его из списка */
  66.     sort_list_desc(Rest, Result0),  /* запускаем сортировку рекурсивно на полученном списке */
  67.     Result = [Min | Result0].   /* ставим наибольшитй элемент на первое место */
  68.  
  69. goal
  70.  
  71.  getdatalist(List),
  72.  listofages(AgeList),
  73.  
  74. sort_list_desc(List, Sorted),
  75. printlist(Sorted), nl,
  76.  
  77.  sumlist(AgeList, Sum, N),
  78.  average(Sum, N, Average),
  79. write("Average = "), write(Average), nl,
  80. findname(Average, Sorted),
  81.  
  82.   fail.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement