НОУ ІНТУІТ, Лекція, Списки

У класі list мови Visual Prolog визначено велику кількість предикатів обробки списків. Це предикати, що обчислюють довжину списку, максимальний та мінімальний елементи списку, предикати видалення дублікатів зі списку, предикати звернення списку, предикати сортування списку та багато інших. У тому числі є предикати вищих порядків.

У цьому розділі обговорюються предикати класу list. Вводяться анонімні предикати. Розглядаються алгоритми сортування. Крім цього, списки використовуються для моделювання множин та операцій над ними.

7.1. Анонімні предикати

Анонімні предикати відповідають виразам. Визначення анонімного предикату полягає у фігурних дужках. Це визначення має складатися тільки з однієї пропозиції, при цьому в заголовку правила немає імені предикату, пишуться тільки його аргументи. Заголовок може бути порожнім.

Наприклад, -функції відповідає анонімний предикат, а -виразу y" style = "display: inline; "> — анонімний предикат Y>" style="display: inline; ">. Вираз у фігурних дужках може використовуватися безпосередньо, як Y>(2, 3)" style="display: inline; ">, а також може бути присвоєно змінною:

Анонімні предикати можна визначати як у функціональному стилі, так і в предикатному стилі, як було показано вище. Вони можуть бути детермінованими, так і недетермінованими. Їхня особливість полягає в тому, що всі їхні аргументи мають бути вхідними.

Анонімні предикати належать до відповідних предикатних доменів і можуть використовуватися в аргументах предикатів вищих порядків. Наприклад:

Функція pred повертає функції, визначені на множині елементів домену real . Анонімні предикати можуть бутивкладеними (докладніше про анонімні предикати та їх використання див. [18]).

7.2. Предикати вищих порядків

Предикати вищих порядків – це предикати, серед аргументів яких є інші предикати. Наприклад, нижче використовуються предикати другого порядку, визначені класі list :

Предикат map перетворює список поелементно, у разі він збільшує значення кожного елемента списку на 2. Предикат filter/2 залишає у списку елементи, які відповідають деякому критерію. У цьому випадку він залишає у списку лише парні елементи. У кожному випадку створюється новий перелік, який повертає предикат. Анонімний предикат, визначення якого знаходиться прямо в аргументі кожного з цих предикатів, у першому випадку є процедурним (він визначений у вигляді функції), а в другому детермінованим.