Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
семинар 3.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
143.36 Кб
Скачать

Упражнения

3. 1.    (а)    Используя отношение конк, напишите цель, соответствующую вычеркиванию трех последних элементов списка L, результат - новый список L1. Указание: L - конкатенация L1 и трехэлементного списка.

(b)    Напишите последовательность целей для порождения списка L2, получающегося из списка L вычеркиванием его трех первых и трех последних элементов.

3. 2.    Определите отношение

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

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

3. 3.    Определите два предиката

        четнаядлина( Список)    и    нечетнаядлина( Список)

таким образом, чтобы они были истинными, если их аргументом является список четной или нечетной длины соответственно. Например, список [а, b, с, d] имеет четную длину, a [a, b, c] - нечетную.

3. 4.    Определите отношение

        обращение( Список, ОбращенныйСписок),

которое обращает списки. Например,

        обращение( [a, b, c, d], [d, c, b, a] ).

3. 5.    Если принять такие определения

        :- ор( 300, xfy, играет_в).         :- ор( 200, xfy, и).

то два следующих терма представляют собой синтаксически правильные объекты:

        Tepмl = джимми играет_в футбол и сквош         Терм1 = сьюзан играет_в теннис и баскетбол и волейбол

Как эти термы интерпретируются пролог-системой? Каковы их главные функторы и какова их структура?

3. 6.    Предложите подходящее определение операторов ("работает", "в", "нашем"), чтобы можно было писать предложения типа:

        диана работает секретарем в нашем отделе.

а затем спрашивать:

        ?- Кто работает секретарем в нашем отделе.         Кто = диана

        ?- диана работает Кем.         Кем = секретарем в нашем отдела

3. 7.    Рассмотрим программу:

        t( 0+1, 1+0).

        t( X+0+1, X+1+0).

        t( X+1+1, Z) :-             t( X+1, X1),             t( X1+1, Z).

Как данная программа будет отвечать на ниже перечисленные вопросы, если '+' "- это (как обычно) инфиксный оператор типа yfx?

(a)    ?- t( 0+1, А).

(b)    ?- t( 0+1+1, В).

(с)    ?- t( 1+0+1+1+1, С).

(d)    ?- t( D, 1+1+1+0).

3. 8.    В предыдущем разделе отношения между списка ми мы записывали так:

        принадлежит( Элемент, Список),         конк( Список1, Список2, Список3),         удалить( Элемент, Список, НовыйСписок),   . . .

Предположим, что более предпочтительной для нас является следующая форма записи:

        Элемент входит_в Список,         конкатенация_списков Список1 и Список2               дает Список3,         удаление_элемента Элемент из_списка Список               дает НовыйСписок, ...

Определите операторы "входит_в", "конкатенация_списков", "и" и т.д. таким образом, чтобы обеспечить эту возможность. Переопределите также и соответствующие процедуры.

3. 9.    Определите отношение

        mах( X, Y, Мах)

так, чтобы Мах равнялось наибольшому из двух чисел Х и Y.

3. 10.    Определите предикат

        максспис( Список, Мах)

так, чтобы Мах равнялось наибольшему из чисел, входящих в Список.

3. 11.    Определите предикат

        сумспис( Список, Сумма)

так, чтобы Сумма равнялось сумме чисел, входящих в Список.

3. 12.    Определите предикат

        упорядоченный( Список)

который принимает значение истина, если Список представляет собой упорядоченный список чисел. Например: упорядоченный [1, 5, 6, 6, 9, 12] ).

3. 13.    Определите предикат

        подсумма( Множ, Сумма, ПодМнож)

где Множ это список чисел, Подмнож подмножество этих чисел, а сумма чисел из ПодМнож равна Сумма. Например:

        ?- подсумма( [1, 2. 5. 3. 2], 5, ПМ).

        ПМ = [1, 2, 2];         ПМ = [2, 3];         ПМ = [5];         . . .

3. 14.    Определите процедуру

        между( Nl, N2, X)

которая, с помощью перебора, порождает все целые числа X, отвечающие условию Nl <=X <=N2.

3. 15.    Определите операторы 'если', 'то', 'иначе' и ':=" таким образом, чтобы следующее выражение стало правильным термом:

        если Х > Y то Z := Х иначе Z := Y

Выберите приоритеты так, чтобы  'если' стал главным функтором. Затем определите отношение 'если' так, чтобы оно стало как бы маленьким интерпретатором выражений типа 'если-то-иначе'. Например, такого

        если Вел1 > Вел2 то Перем := Вел3         иначе Перем := Вел4

где Вел1, Вел2, Вел3 и Вел4 - числовые величины (или переменные, конкретизированные числами), а Перем - переменная. Смысл отношения 'если' таков: если значение Вел1 больше значения Вел2, тогда Перем конкретизируется значением Вел3, в противном случае - значением Вел4. Приведем пример использования такого интерпретатора:

        ?-  Х = 2, Y = 3,              Вел2 is 2*X,              Вел4 is 4*X,              Если Y>Вел2 то Z:=Y иначе Z:=Вел4.

             Если Z > 5 то W := 1 иначе W :=0.

        Х = 2         Y = 3         Z = 8         W = 1

        Вел2 = 4         Вел4 = 8

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]