Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Глава 3. % Удалить 3 первые элемента L



3.1

(a) конк(L1, [ _, _, _ ], L)

(b) конк([ _, _, _ ], L1, L),

% Удалить 3 первые элемента L

конк(L2, [ _, _, _ ], L1)

% Удалить 3 последние элемента L1

Вот более короткий вариант, предложенный I. Tvrdy:

конк([ _, _, _ | L2], [ _, _, _ ], L)

3.2

(а) последний(Элемент, Список):-

конк(_, [Элемент], Список).

(b) последний(Элемент, [Элемент]).

последний(Элемент, [Первый | Остальные]):-

последний(Элемент, Остальные).

3.3

четнаядлина([]).

четнаядлина([Первый | Остальные]):-

нечетнаядлина(Остальные).

нечетнаядлина([ _ ]).

нечетнаядлина([Первый | Остальные]):-

четнаядлина(Остальные).

3.4

обращение([], []).

обращение([Первый | Остальные], ОбращСпис): -

обращение(Остальные, ОбращСписОстальных),

конк(О6ращСписОстальных, [Первый], ОбращСпис).

3.5

% Такой предикат легко определить при помощи отношения обратить

палиндром(Список):-

обратить(Список, Список).

% Вот другое решение, не использующее обратить

палиндром1([]).

палиндром1([ _ ]).

палиндром1 [Первый | Остальные]):-

конк(Середина, [Первый], Остальные),

палиндром1(Середина).

3.6

сдвиг([Первый | Остальные], Сдвинут):-

конк(Остальные, [Первый], Сдвинут).

3.7

перевод([], []).

перевод([Голова | Хвост], [Голова1 | Хвост1]):-

означает(Голова, Голова1),

перевод(Хвост, Хвост1).

3.8

подмножество([], []).

подмножество([Первый | Остальные], [Первый | Подмн]):-

% Оставить первый элемент в подмножестве

подмножество(Остальные, Подмн).

подмножество([Первый | Остальные], Подмн):-

% Убрать первый элемент из подмножества

подмножество(Остальные, Подмн).

3.9

разбиениесписка([], [], []). % Разбивать нечего

разбиениесписка([X], [X], []).

% Разбиение одноэлементного списка

разбиениесписка([X, Y | Список], [X | Список1],

[Y | Список2]):-

разбиениесписка(Список, Список1, Список2).

3.10

можетзавладеть(состояние(_, _, _, имеет), []).

% Ничего не надо делать

можетзавладеть(Состояние, [Действие | Действия]):-

ход(Состояние, Действие, НовоеСостояние),

% Первое действие

можетзавладеть(НовоеСостояние, Действия).

% Оставшиеся действия

3.11

линеаризация([Голова | Хвост], ЛинейныйСписок):-

% Линеаризация непустого списка

линеаризация(Голова, ЛинейнаяГолова),

линеаризация(Хвост, ЛинейныйХвост),

конк(ЛинейнаяГолова, ЛинейныйХвост,

ЛинейныйСписок).

линеаризация([], []). % Линеаризация пустого списка

линеаризация(X, [X]).

% Линеаризация объекта, не являющегося списком

% Замечание: при попытке получить от этой программы более

% одного варианта решения выдается бессмыслица

3.12

Терм1 = играет_в(джимми, и(футбол, сквош))

Терм2 = играет_в(сьюзан, и(теннис,

и(баскетбол, волейбол)))

3.13

:- op(300, xfx, работает)

:- op(200, xfx, в)

:- op(100, xfx, нашем)

3.14

(a) А = 1 + 0

(b) В = 1 + 1 + 0

(c) С = 1 + 1 + 1 + 1 + 0

(d) D = 1 + 1 + 0 + 1

3.15

:- op(100, xfx, входит_в)

:- op(300, fx, конкатенация_списков)

:- op(200, xfx, дает)

:- op(100, xfx, и)

:- op(300, fx, удаление_элемента)

:- op(100, xfx, из_списка) % Принадлежность к списку

Элемент входит_в [Элемент | Список].

Элемент входит_в [Первый | СписокОстальных]:-

Элемент входит_в СписокОстальных.

% Конкатенация списков

конкатенация_списков [] и Список дает Список.

конкатенация_списков [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вoeN1 is N1 + 1,

между(HoвoeN1, N2, X).

3.22

:- op(900, fx, если).

:- op(800, xfx, то).

:- op(700, xfx, иначе).

:- op(600, xfx,:=).

если Вел1 > Вел2 то Перем:= Вел3

иначе ЧтоУгодно:-

Вел1 > Вел2,

Перем = Вел3.

если Вел1 > Вел2 то ЧтоУгодно

иначе Перем:= Вел4:-

Вел1 =< Вел2,

Перем = Вел4.





Дата публикования: 2015-10-09; Прочитано: 191 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...