Максимальный элемент в списке - Prolog
Формулировка задачи:
Листинг программы
- implement fn
- open core
- constants
- className = "formcontainer/fn".
- classVersion = "".
- domains
- i=integer.
- il=i*.
- class predicates
- max:(il,i) procedure(i,o).
- clauses
- classInfo(className, classVersion).
- max([N],N).
- max([H|T], H) :-
- max(T,N1),
- N1<H,
- !.
- max([H|T],N1) :-
- max(T,N1),
- N1>=H,
- !.
- max ([1,2,3,4,5,6,7,8,9,10],X).
- calculate(X):-
- stdio::write(X),
- stdio::nl.
- end implement fn
Решение задачи: «Максимальный элемент в списке»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- max_el(intl,int)
- clauses
- max_el([H],H).
- max_el([H|T],H) :- max_el(T,Z), H > Z.
- max_el([H|T],Z) :- max_el(T,Z), H <= Z.
Объяснение кода листинга программы
- В начале кода определены два домена: int - целое число, intl - int*, то есть список целых чисел.
- Далее определены два предиката: max_el/2 - для нахождения максимального элемента в списке, и goal/0 - для обозначения конца списка.
- В первом правиле (clause) предиката max_el/2 указаны два аргумента: [H] - список, в котором ищется максимальный элемент, и H - сам элемент. В этом случае, если список пустой, то максимальным элементом будет являться любой элемент этого списка.
- Во втором правиле (clause) предиката max_el/2 указаны три аргумента: [H|T] - список, в котором ищется максимальный элемент, и H и Z - два последних элемента списка. Если элемент H больше Z, то он и будет максимальным.
- В третьем правиле (clause) предиката max_el/2 указаны те же три аргумента, что и во втором правиле, но с другими значениями. Если элемент H меньше или равен Z, то он и будет максимальным.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д