Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Точечная запись (нотация) списков



Тема : Точечная запись списков.

Основные термины, ключевые слова: внутреннее представление списков, списочная ячейка, точечная пара.

Инструмент для выполнения работы: интерпретатор языка Lisp под Windows – XLispWin.

Содержание отчета:

- титульный лист установленного образца;

- краткие теоретические сведения;

- задание на работу;

- точечная запись списка согласно варианту;

- выводы по работе.

Основные теоретические сведения. Оперативная память машины, на которой работает Лисп, логически разбивается на области, которые называются списочными ячейками. Списочная ячейка состоит из двух частей, поля CAR и CDR. Каждое поле содержит указатель на объект или другую списочную ячейку. Указатели между ячейками образуют цепочку, по которой можно из предыдущей ячейки попасть в следующую. Графически списочная ячейка представляется прямоугольником (рис. 1), разделенным на две части – поля CAR и CDR.

 

       
   
 
 

 

 


Рис. 1. Графическое представление точечной пары

 

Изображение одноуровнего списка состоит из последовательности ячеек, связанных друг с другом через указатели в правых частях ячеек (рис. 2).

Правое поле последней ячейки списка в качестве признака конца списка ссылается на пустой список (ячейка перечеркнута). Указатели полей CAR ячеек списка List ссылаются на атомарные структуры, в данном случае на атомы A, B, C.

List

                       
   
     
 
 
     

 

 


A B C

 

Рис. 2. Внутренне представление одноуровнего списка (A B C)

 

При определении базового примитива CONS упоминалось, что ее вторым аргументом обязательно должен быть список. Сейчас это ограничение снимается и в дальнейшем результатом функции (cons ‘a ‘b) будет являться новая структура (a. b), называемая точечной парой. Точечная пара – это не список, а более общее символьное выражение. Название происходит от использования в ее записи символа точки, обязательно выделенного с обеих сторон пробелами. Выражение слева от точки (атом, список, другая точечная пара) соответствует полю CAR, а выражение с права от точки – полю CDR.

Точечная нотация позволяет расширить класс объектов, представляемых с помощью списков. Ситуацию сравнивают с использованием дробей или комплексных чисел в арифметике.

Любой список можно записать в точечной нотации. Преобразование можно осуществить на всех уровнях следующим образом: (a1 a2 …an) ↔ (a1. (a2. …(an. NIL)…)). Например, список (a b c) в точечной нотации представляется следующим образом (a. (b. (c. NIL))).

Внимание! Не забывайте о пробелах слева и справа от символа точки.

Интерпретатор, получив подобное выражение, транслирует его к списочной структуре.

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

 

Индивидуальные задания

Необходимо записать предложенный список в точечной нотации, оттранслировать запись и получить исходный список. Перед записью точечной нотации использовать блокировку вычислений или использовать псевдофункцию SETQ, например, для рассмотренного ранее в тексте примера: ‘ (a. (b. (c. NIL))) или (setq dotted_pair ‘(a. (b. (c. NIL)))).

Варианты заданий.

1. (a (b c) (d) e);

2. ((a s) d (e f));

3. (a s (e r) (y));

4. ((a s d)(q w e));

5. ((a)(b)(c));

6. (a () b (c) d);

7. (() b (c d));

8. (a s d (r) t);

9. (q (w (e r) t) a);

10. (a ((s)) b (w));

11. (((s a) q) d);

12. (q (a s) ((z x)));

13. (((a(b c))) t);

14. (a (()) b (c d));

15. ((a s d)()(q w e));

16. (() (a s d) ());

17. (q (a s) f (w e));

18. ((a s d) (g) (q w e));

19. (s () d () e);

20. ((a s)(e)(q w));

Для каждого варианта необходимо выполнить собственное задание и задание под номером на 1 больше. Например, первый вариант выполняет задание 1 и 2, второй – 2 и 3, etc.

 

Лабораторная работа 10

Рекурсия в Лиспе

Тема : основы рекурсивного программирования.

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

Инструмент для выполнения работы: интерпретатор языка Lisp под Windows –XLispWin.

Содержание отчета:

- титульный лист установленного образца;

- краткие теоретические сведения;

- задание на работу;

- программа на языке Лисп, описывающая индивидуальное задание;

- выводы по работе.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-09; Просмотров: 1275; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.02 с.)
Главная | Случайная страница | Обратная связь