Поменять местами максимальный четный и минимальный элементы массива - Prolog
Формулировка задачи:
Добрый вечер! Помогите пожалуйста с задачей по прологу.
Нашла максимальный четный и минимальный элементы, теперь необходимо поменять их местами в массиве.
Листинг программы
- Domains
- Mass= integer*
- Predicates
- nondeterm max(integer,integer,integer).
- nondeterm max_mass(Mass,integer).
- nondeterm min(integer,integer,integer).
- nondeterm min_mass(Mass,integer).
- Clauses
- max(X,Y,M):-X>Y,M=X;X<=Y,M=Y.
- max_mass([X],X).
- max_mass([H|T],M):-max_mass(T,T1),max(H,T1,M).
- min(X,Y,M):-X<Y,M=X;X>=Y,M=Y.
- min_mass([X],X).
- min_mass([H|T],M):-min_mass(T,T1),min(H,T1,M).
- Goal:
- L=[15,3,9,7,1,4,5,0],max_mass(L,Max),min_mass(L,Min).
Решение задачи: «Поменять местами максимальный четный и минимальный элементы массива»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- exchange(intl,int,int,intl)
- clauses
- exchange([],_,_,[]).
- exchange([X|T],X,Y,[Y|R]) :- exchange(T,X,Y,R).
- exchange([Y|T],X,Y,[X|R]) :- exchange(T,X,Y,R).
- exchange([Z|T],X,Y,[Z|R]) :- Z<>X, Z<>Y, exchange(T,X,Y,R).
Объяснение кода листинга программы
- domains - определяются типы данных для переменных. В данном случае, для переменной типа int (целое число) и для переменной типа intl (массив целых чисел).
- predicates - определяются пользовательские функции (предикаты) с именем exchange, которые принимают в качестве аргументов массив, минимальный элемент, максимальный элемент и новый массив.
- clauses - определяются правила, которые описывают поведение функции exchange. В данном случае, определено 3 правила:
- Первое правило говорит, что если массив пустой, то любой элемент может быть считаться минимальным и максимальным, и его можно поменять местами с любым другим элементом. Результатом будет пустой массив.
- Второе правило говорит, что если массив не пустой, то минимальный элемент можно поменять местами с первым элементом, а максимальный элемент можно поменять местами с последним элементом. Затем вызывается рекурсивно функция exchange для оставшейся части массива.
- Третье правило говорит, что если текущий элемент не является минимальным и максимальным элементом, и в оставшейся части массива также не является минимальным и максимальным элементом, то его можно поменять местами с любым другим элементом. Затем вызывается рекурсивно функция exchange для оставшейся части массива.
- goals - в данном коде нет явных целей, но предполагается, что пользователь будет вызывать функцию exchange, передавая в нее массив, минимальный элемент, максимальный элемент и новый массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д