Cтраница 3
Рассмотренные в этой главе процедуры обработки списков не проверяют, пуст ли список ( пустой список имеет счетчик, содержащий 0, но в нем нет ни одного элемента данных) перед выполнением операций добавления, удаления или поиска. Чтобы исправить эту ошибку, модифицируйте пример 5.1 так, чтобы содержимое регистра АХ становилось первым элементом списка, если он пуст. [31]
Эта последовательность рисунков показывает результат вставки элементов с ключами A SER CHIN G в первоначально пустой список пропусков. [32]
При отсутствии ведущего узла функция нуждается в механизме информирования вызывающей функции в случае, когда оставляется пустой список. Одно из решений для C состоит в передаче указателя на список как ссылочного параметра. Второй механизм предусматривает прием функциями обработки списков указателей на списки, ввода в качестве аргументов и возврат указателей на списки вывода. Он уже задействован в программе ЗЛО. Этот принцип устраняет необходимость использования ведущих узлов. [33]
Второй пример проясняет то обстоятельство, что предикат в качестве полноправного элемента сглаженного списка допускает и пустой список. [34]
Чтобы представить список в виде структуры Пролога, мы должны выбрать некоторый характерный атом для представления пустого списка и функтор для структуры, которая представляет список с головой и хвостом. Структура должна иметь размерность 2, первый ее компонент должен представлять голову, а второй - хвост. [35]
В этих тестах косвенно проверяется и второе базовое состояние, так как рекурсивные состояния сокращают входной аргумент до пустого списка. [36]
![]() |
Пример списка. [37] |
Операция включения элемента в голову списка сразу же объясняет, как можно вообще формировать любой список: начать с пустого списка и последовательно добавлять в начало элементы. [38]
Включение и исключение элементов здесь осуществляется так же, как и в нециклических списках ( а что можно сказать о включении в пустой список. [39]
Поскольку аргументом функции является список, следует рассмотреть два правила: первое - если список пуст, то результатом будет nil, поскольку инвертирование пустого списка порождает пустой список; второе - если список имеет вид х:: L, инвертировать его следует путем инвертирования L и добавления списка [ х ] в конец результирующего списка. [40]
Из только что доказанного, теоремы 23.11 и теоремы 32.2 получаем сводимость вопроса о доказуемости произвольной формулы Ф в исчислении предикатов к вопросу о доказуемости пустого списка в подходящем исчислении резольвент. [41]
![]() |
Сводимый уграф и по-следователыгость его сведения. [42] |
Здесь ( как и обычно) программа представляет собой последовательность глобальных описаний переменных, процедур и функций, за которой следует оператор вызова основной процедуры; пустой список обозначается через 0, а неопределенное значение - через и; - - - это операция добавления элемента в произвольное место списка, а э - операция извлечения произвольного элемента из списка. [43]
Поскольку аргументом функции является список, следует рассмотреть два правила: первое - если список пуст, то результатом будет nil, поскольку инвертирование пустого списка порождает пустой список; второе - если список имеет вид х:: L, инвертировать его следует путем инвертирования L и добавления списка [ х ] в конец результирующего списка. [44]
Третий пример на рисунке показывает, что объектами списка могут быть, в свою очередь, списки, а четвертый - что в качестве объекта списка может выступать пустой список. В сокращенном синтаксисе могут быть все списки, являющиеся входными для программы, в том же самом синтаксисе выдаются программой и выходные списки. Важно понять, каким образом списки сопоставляются. На рис. 3.5 пояснено, что список, имеющий форму [ Н Т ], сопоставляется с любым непустым списком, а также показано, какие подстановки на место переменных Н и Т делаются в различных случаях. [45]