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

так, чтобы Элемент являлся последним элементом списка Список. Напишите два варианта определения:    (а)    с использованием отношения конк,     (b)    без использования этого отношения.

Посмотреть ответ

3. 2. 3.    Добавление элемента

Наиболее простой способ добавить элемент в список - это вставить его в самое начало так, чтобы он стал его новой головой. Если Х - это новый элемент, а список, в который Х добавляется - L, тогда результирующий список - это просто

        [X | L]

Таким образом, для того, чтобы добавить новый элемент в начало списка, не надо использовать никакой процедуры. Тем не менее, если мы хотим определить такую процедуру в явном виде, то ее можно представить в форме такого факта:

        добавить( X, L, [X | L] ).

3. 2. 4.    Удаление элемента

Удаление элемента Х из списка L можно запрограммировать в виде отношения

        удалить( X, L, L1)

где L1 совпадает со списком L, у которого удален элемент X. Отношение удалить можно определить аналогично отношению принадлежности. Имеем снова два случая:

(1)        Если Х является головой списка, тогда результатом удаления будет хвост этого списка.

(2)        Если Х находится в хвосте списка, тогда его нужно удалить оттуда.

        удалить( X, [X | Хвост], Хвост).

        удалить( X, [Y | Хвост], [ Y | Хвост1]  ) :-

               удалить( X, Хвост, Хвост1).

как и принадлежит, отношение удалить по природе своей недетерминировано. Если в списке встречается несколько вхождений элемента X, то удалить сможет исключить их все при помощи возвратов. Конечно, вычисление по каждой альтернативе будет удалять лишь одно вхождение X, оставляя остальные в неприкосновенности. Например:

        ?- удалить( а, [а, b, а, а], L].

        L = [b, а, а];

        L = [а, b, а];

        L = [а, b, а];

        nо                 (нет)

При попытке исключить элемент, не содержащийся в списке, отношение удалить потерпит неудачу.

Отношение удалить можно использовать в обратном направлении для того, чтобы добавлять элементы в список, вставляя их в произвольные места. Например, если мы хотим во все возможные места списка [1, 2, 3]  вставить атом а,  то мы можем это сделать, задав вопрос: 'Каким должен быть список L, чтобы после удаления из него элемента а   получился список  [1, 2, 3]?'

        ?- удалить( а, L, [1, 2, 3] ).

        L = [а, 1, 2, 3];

        L = [1, а, 2, 3];

        L = [1, 2, а, 3];

        L = [1, 2, 3, а];

        nо                    

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

0

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

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