Шаг 28.
Практическое занятие №1. Простейшие типы данных языка LISP. Работа в интерактивном режиме. Функция COND

    На этом шаге мы приведем несколько задач и их решения.

Простейшие типы данных языка LISP
Работа в интерактивном режиме. Функция COND



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

    "От первых (студентов) регулярно можно услышать, что они прочитали насквозь главу учебника, поняли досконально все, что в ней содержится, но тем не менее затрудняются в решении ряда задач, предлагаемых в конце главы. Обычно эти трудности разрешаются одним и тем же способом, как это происходило в истории науки. Студент находит с помощью или без помощи своего инструктора способ уподоблять задачу тем, с которыми он уже встречался. Усмотрев такое сходство, уловив аналогию между двумя и более различающимися задачами, студент начинает интерпретировать символы и сам приводить их в соответствие с природой теми способами, которые еще раньше доказали свою эффективность. Скажем формула закона F=ma функционировала как своего рода инструмент, информируя студента о том, какие существуют аналогии для нее, обозначая своего рода гештальт, через призму которого следует рассматривать данную ситуацию.

    Формирующаяся таким образом способность видеть во всем многообразии ситуаций нечто сходное между ними ... представляет собой, я думаю, главное, что приобретает студент, решая задачи-образцы с карандашом и бумагой или в хорошо оборудованной лаборатории. После того, как он выполнил определенное число таких задач или упражнений (это число может сильно меняться в зависимости от его индивидуальных особенностей), он смотрит на ситуацию уже как ученый, теми же самыми глазами, что и другие члены группы по данной специальности. Для него эти ситуации не будут уже больше такими же, как те, с которыми он имел дело, приступая к выполнению учебных заданий. Теперь он владеет способом видения, проверенным временем и разрешенным научной группой" [1, с.246-247].

   

Простейшие типы данных языка LISP.

    1. Изобразите с помощью графической нотации следующие S-выражения:

  1. (A . (CAT . (EATS . MICE))). Решение можно посмотреть здесь;
  2. (A . (CAT . EATS) . MICE). Решение можно посмотреть здесь;
  3. ((A . CAT) . (EATS . MICE)). Решение можно посмотреть здесь;
  4. (A . ((B . (C . NIL)) . ((D . (E . NIL)) . NIL)));
  5. ((A . NIL) . NIL).

    2. Эквивалентны ли следующие S-выражения:

  1. (NIL) и (NIL . NIL). Решение можно посмотреть здесь;
  2. ((A B)) и ((A . B) . NIL);
  3. ((A B)) и (NIL . (A B))?

    3. Переведите следующие точечные записи в списочные:

  1. (A . (B . (C . NIL))). Решение можно посмотреть здесь;
  2. ((A . NIL) . NIL);
  3. (NIL . (A . NIL));
  4. (A . ((B . (C . NIL)).((D . (E . NIL)) . NIL)));
  5. ((A . (B .NIL)) . (C . ((D . NIL) . (E . NIL))));
  6. (A . (B . ((C . (D . ((E . NIL) . (NIL))) . NIL)))).

    4. Переведите следующие списочные записи в точечные, используя графическую нотацию:

  1. (W (X)). Решение можно посмотреть здесь;
  2. ((W) X);
  3. (NIL NIL NIL);
  4. (V (W) X (Y Z));
  5. ((V W) (X Y) Z);
  6. (((V) W X) Y Z).

   

Работа в интерактивном режиме. Функция COND.

    1. Какая из функций, чье имя начинается с C, кончается R и содержит буквы A и D (например, CAADR) возвращает:

  1. (3 4), будучи примененной к (1 2 (3 4))? Решение можно посмотреть здесь;
  2. (3 4), будучи примененной к (1 2 3 4) ?
  3. (6 3), будучи примененной к ((4 (6 3) 8) 7) ?
  4. 12, будучи примененной к (5 ((12) 23 34)) ?
  5. (12), будучи примененной к (5 ((12) 23 34)) ?

    2. Какая функция, примененная к списку более чем из трех элементов, возвращает:

  1. список, состоящий из третьего элемента исходного списка;
  2. третий элемент исходного списка;
  3. сумму первого и второго элементов списка;
  4. произведение первого, второго и третьего элементов списка.

    3. Для каждого из следующих условий определить условное выражение, которое возвращает значение T, если условие удовлетворяется и NIL в противном случае:

  1. первый элемент списка LST есть 12. Решение можно посмотреть здесь;
  2. первый элемент списка LST есть атом;
  3. список LST имеет менее трех элементов;
  4. второй элемент списка LST больше, чем третий;
  5. список LST пуст;
  6. список LST имеет не более четырех элементов.

    4. Напишите условное выражение, которое:

  1. возвращает NIL, если абсолютное значение разности между ее первым и вторым аргументами X и Y меньше, чем ее третий аргумент Z, и T - в противном случае. Решение можно посмотреть здесь;
  2. возвращает NIL, если L является атомом и T в противном случае;
  3. возвращает для списка LST, содержащего три элемента, первый из них, который является атомом, или список (1 2 3 4), если в списке нет элементов, являющихся атомами;
  4. возвращает T, если значение аргумента равно 1, и 0 в противном случае.

    5. Напишите условное выражение, которое проверяет является ли ее аргумент:

  1. списком, содержащим два элемента. Решение можно посмотреть здесь;
  2. списком из двух атомов;
  3. списком из трех элементов;
  4. списком из трех атомов;
  5. атомом;
  6. списком.

    6. Пусть L1 и L2 - списки. Напишите условное выражение, которое возвращает T, если первые два элемента этих списков соответственно равны друг другу, и NIL в противном случае.
Решение можно посмотреть здесь;

    7. Числовой список содержит 2 элемента. Напишите условное выражение, возвращающее больший из элементов списка.

    8. Числовой список содержит 3 элемента. Напишите условное выражение, возвращающее меньший из элементов списка.


(1)Кун Т. Структуры научных революций. - М.: Прогресс, 1977. - 300 с.


    На следующем шаге мы приведем правила работы с системой программирования muLISP81.




Простейшие типы данных языка LISP Работа в интерактивном режиме. Функция COND




Предыдущий шаг Содержание Следующий шаг