Списки в Прологе – 2

1. Выведите список из целых чисел

Предикат имеет один аргумент – список, который необходимо вывести.

Domains

intlist = integer*

Predicates

writeList(intlist)

Clauses

writeList([]):-write(‘ ‘).

writeList([H|T]):-write(H,’ ‘), writeList(T).

Goal

writeList([3,4,1]).

Если список пустой, ничего не делаем. Иначе выводи голову списка, а затем его хвост.

При первом просмотре целевое утверждение таково writeList([3,4,1]). Оно удовлетворяет второму правилу. H становится равным 3, а T равным [4,1]. Пролог печатает 1 и вызывает рекурсивно writeList([4,1]).

Этот вызов снова удовлетворяет второму правилу. На этот раз H=4, а T=[1]. Пролог печатает 4 и вызывает рекурсивно writeList([1]).

И этот вызов подходит под второе правило. H=1, а T=[]. Пролог печатает 1 и вызывает writeList([]).

writeList([]) завершает цепочку вызовов.

2. Найдите длину списка

Предикат имеет два аргумента – список и длина.

Domains

intlist = integer*

Predicates

length(intlist, integer)

Clauses

length([], 0).

length([_|T], L):-length(T, TL), L=TL+1.

Goal

length([3,4,1,2,5], L).

Длина пустого списка – ноль, а длина непустого списка (представленного в виде объединения первого элемента и хвоста) равна длине хвоста плюс единица.

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

Похожие записи

Добавить комментарий