Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Основные положения программирования на Лиспе.

Лабораторная работа № 1.

Тема: Ознакомительная работа в среде Lisp. Базовые функции Лиспа. Символы, свойства символов. Средства языка для работы с числами.

Цель: Ознакомиться со средой Lisp. Изучить базовые функции Лиспа, символы и их свойства, средства для работы с числами.

 

1. Основные положения программирования на Лиспе.

2. Загрузка системы, системный редактор.

3. Базовые функции языка. Символы, свойства символов.

4. Средства языка для работы с числами.

5. Задание к лабораторной работе.

6. Вопросы.

 

Теоретическое введение.

 

Основные положения программирования на Лиспе.

· Лисп ориентирован на обработку нечисловых задач. Он основан на алгебре списочных структур, лямбда-исчислении и теории рекурсий.

· Язык имеет функциональную направленность, т.е. любое предложение заключенное в скобки, введенное вне редактора считается функцией и выполняется сразу после нажатия «ENTER».

· Чтобы предотвратить вычисление значения выражения, нужно перед этим выражением поставить апостроф «’». Апостроф перед выражением – сокращение функции Лиспа QUOTE.

· В Лиспе формы представления программы и обрабатываемых ею данных одинаковы. И то и другое представляется списочной структурой, имеющей одинаковую форму.

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

· Основные типы данных языка – атомы и списки.

Атомы это символы и числа.

Список упорядоченная последовательность, элементами которой являются атомы либо списки. Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Несколько пробелов между символами эквивалентны одному пробелу. Первый элемент списка называется «головой», а остаток, т.е. список без первого элемента, называется «хвостом». Список, в котором нет ни одного элемента, называется пустым и обозначается «()» либо NIL.

Символ – это имя, состоящее из букв, цифр и специальных знаков, которое обозначает какой-нибудь предмет, объект, действие. В Лиспе символы обозначают числа, другие символы или более сложные структуры, программы (функции) и другие лисповские объекты. Символы могут состоять как из прописных, так и из строчных букв, хотя в большинстве Лисп-систем прописные и строчные буквы отождествляются и представляются прописными буквами.

· Символы Т и NIL имеют в Лиспе специальное назначение: Т – обозначает логическое значение истина, a NIL – логическое значение ложь.

· При генерации или считывании Лиспом нового символа, за его величину принимается он сам. Такая ссылка символа на себя называется автоссылкой.

· Создание программы на Лиспе – написание некоторой функции, возможно сложной, при вычислении использующей другие функции либо рекурсивно саму себя. На практике, написание программ осуществляется записью в файл определений функций, данных и других объектов с помощью имеющегося в программном окружении редактора.

· Необязательно делать отступы в строках выражений, входящих в функции. На самом деле, по желанию, вы можете написать всю программу в одну строку. Однако отступы в строках и пустые строки делают структуру программы понятной и читабельной. Так же выравнивание начальных и конечных скобок основных выражений помогают убедиться в балансе скобок.

· Определения функций могут храниться в файлах и загружаться используя функцию RDS

(RDS ‘<имя файла>)

· Эта функция считывает файл выражений и выполняет эти выражения. <Имя файла> - это строковая константа, которая представляет собой имя файла без расширения (подразумевается расширение "lsp").

· Вы можете сгенерировать ваши собственные исходные файлы с использованием либо редактора LISP, либо редактора внешних текстов, соответствующего ОС вашей ЭВМ и генерирующего стандартные текстовые файлы ASCII.

 

Загрузка системы

· В качестве редактора можно использовать онлайн-редактор, который можно запустить по адресу:

https://www.tutorialspoint.com/execute_lisp_online.php.

Данная среда включает:

- текстовый редактор;

- исполнитель кода.

 

Загрузка системы

· Функции разбора.

· Функция CAR возвращает в качестве значения первый элемент списка:

(CAR список) → S- выражение (атом либо список).

 

· Функция CDR – возвращает в качестве значения хвостовую часть списка, т. е. список, получаемый из исходного списка после удаления из него головного элемента:

(CDR список) → список

Примеры:

 

(write (car '(a b c d e f)))

(write (cdr '(a b c d e f)))

(write (cons 'a '(b c)))

(write (list 'a '(b c) '(e f)))

(write (append '(b c) '(e f) '(p q) '() '(g)))

(write (last '(a b c d (e f))))

(write (reverse '(a b c d (e f))))

Результат:

A

(B C D E F)

(A B C)

(A (B C) (E F))

(B C E F P Q G)

((E F))

((E F) D C B A)

 

· Объединение команд

(cadadr '(a (c d) (e f g))) → d

cadadr = car cdr car cdr.

 

 

· Функция создания CONS.

· Функция CONS строит новый список из переданных ей в качестве аргументов головы и хвоста.

(CONS голова хвост)

Для того чтобы можно было включить первый элемент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком. Значением функции CONS всегда будет список:

(CONS s-выражение список) → список

(write (cons 'a '(b c)))

(write (cons 'ab 'cd))

(write (cons NIL '(a b c)))

(write (cons '(a b c) NIL))

(write (cons 1 nil))

(write (cons 1 (cons 2 nil)))

(write (cons 1 (cons 2 (cons 3 nil))))

(write (cons 'a (cons 'b (cons 'c nil))))

(write (car (cons 'a (cons 'b (cons 'c nil)))))

(write (cdr (cons 'a (cons 'b (cons 'c nil)))))

 

 

Результат:

(A B C)(AB. CD)(NIL A B C)((A B C))(1)(1 2)(1 2 3)(A B C)A(B C)

 

· Вложенные вызовы CAR и CDR

· Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, в Лиспе для этого используется более короткая запись. Желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции:

(C...R список)

· Вместо многоточия записывается нужная комбинация из букв А и D (для CAR и CDR соответственно). В один вызов можно объединять не более четырех функций CAR и CDR.

 

· Функция LIST - создает список из элементов. Она возвращает в качестве своего значения список из значений аргументов. Количество аргументов произвольно.

 

Примеры

(write (list 1 2))(write (list 'a 'b))(write (list 1 nil))(write (list 1 2 3))(write (list 'a 'b 'c))(write (list 3 4 'a (car '(b. c)) (* 4 -2)))(write (list (list 'a 'b) (list 'c 'd 'e)))

Результат

(1 2)(A B)(1 NIL)(1 2 3)(A B C)(3 4 A B -8)((A B) (C D E))

 

 

1. Запишите последовательности вызовов CAR и CDR, выделяющие из приведенных ниже списков символ «а». Упростите эти вызовы с помощью функций C...R.

а) (1 2 3 а4)

б) (1 2 3 4а)

в) ((1) (2 3) (а 4))

г) ((1) ((2 За) (4)))

Д) ((1) ((2 3 а 4)))

е) (1 (2 ((3 4(5 (6 а))))))

 

2. Каково значение каждого из следующих выражений:

(ATOM (CAR (QUOTE ((1 2) 3 4))));

(NULL (CDDR (QUOTE ((5 6) (7 8)))));

(EQUAL (CAR (QUOTE ((7)))) (CDR (QUOTE (5 7))));

(ZEROP (CADDDR (QUOTE (3 2 1 0))));

3.

4. Проделайте следующие вычисления с помощью интерпретатора Лиспа:

а) 3.234*(45.6+2.43)

б) 55+21.3+1.54*2.5432-32

в) (34-21.5676-43)/(342+32*4.1)

5. Определите значения следующих выражений:

а)‘(+2 (*3 5))

б) (+2‘(*3 5))

в) (+ 2 (’ * 3 5))

г) (+ 2 (* 3 ’5))

д) (quote ’quote)

(quote 6)



<== предыдущая лекция | следующая лекция ==>
Образец заявки на участие в студенческой научной конференции | III. Работа с функциями Базы данных
Поделиться с друзьями:


Дата добавления: 2017-04-14; Мы поможем в написании ваших работ!; просмотров: 318 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

4315 - | 4116 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 8.485 с.