работы.

2.10

В соответствии с определением сопоставления, приведенном в разд. 2.2, данное сопоставление будет успешным. X приобретает вид циклической структуры, в которой сам X присутствует в качестве одного из аргументов.

Глава 3

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×