Шрифт:
Элемент входит_в [Элемент | Список].
Элемент входит_в [Первый | СписокОстальных] :-
Элемент входит_в СписокОстальных.
% Конкатенация списков
конкатенация_списков [ ] и Список дает Список.
конкатенация_списков [X | L1] и L2 дает [X | L3] :-
конкатенация_списков L1 и L2 дает L3.
% Удаление элемента из списка
удаление_элемента Элемент иэ_списка
[Элемент | ОстальныеЭлементы]
дает ОстальныеЭлементы.
удаление_элемента Элемент из_списка
[Первый | ОстальныеЭлементы]
дает [Первый | НовСписОстЭлементов] :-
удаление_элемента Элемент из_списка
ОстальныеЭлементы дает НовСписОстЭлементов.
3. 16
max( X, Y, X) :-
X >= Y.
max( X, Y, Y) :-
X <Y.
3. 17
максспис( [X], X).
% Максимум в одноэлементном списке
максспис( [X, Y | Остальные], Мах) :-
% В списке есть по крайней мере два элемента?
максспис( [Y | Остальные], МаксОстальные),
mах( X, МаксОстальные, Мах).
% Мах наибольшее из чисел X и МаксОстальные
3. 18
сумспис( [ ], 0).
сумспис( [Первый | Остальные], Сумма) :-
сумспис( Остальные, СуммаОстальных),
Сумма is Первый + СуммаОстальных.
3. 19
упорядоченный ([ ]).
% Одноэлементный список является упорядоченным
упорядоченный( [X, Y | Остальные] :-
X =< Y,
упорядоченный( [Y | Остальные] ).
3. 20
подсумма( [ ], 0, [ ]).
подсумма( [N | Список], Сумма, [N | Подмн]) :-
% N принадлежит подмножеству
Сумма1 is Сумма - N,
подсумма( Список, Сумма1, Подмн).
подсумма( [N | Список], Сумма, Подмн) :-
% N не принадлежит подмножеству
подсумма( Список, Сумма, Подмн).
3. 21
между( N1, N2, N1) :-
N1 =< N2.
между( N1, N2, X) :-
N1 < N2,
HoвoeNl is N1 + 1,
между( HoвoeNl, N2, X).
3. 22
:- ор( 900, fx, если).
:- ор( 800, xfx, то).
:- ор( 700, xfx, иначе).
:- ор( 600, xfx, :=).
если Вел1 > Вел2 то Перем := Вел3
иначе ЧтоУгодно :-
Вел1 > Вел2,
Перем = Вел3.
если Вел1 > Вел2 то ЧтоУгодно
иначе Перем := Вел4 :-
Вел1 =< Вел2,