1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии


Скачать 260.62 Kb.
Название 1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии
страница 9/9
Тип Документы
rykovodstvo.ru > Руководство эксплуатация > Документы
1   2   3   4   5   6   7   8   9

32. Реализация вспомогательных функций для работы со списками (обращение по индексу, длина, мэпинг)


Получает в списке items n-й элемент:
(define (list-ref items n)

(if (= n 0)

(car items)

(list-ref (cdr items)(- n 1))

)

)

Получить длину списка:
(define (length items)(if (null? items) 0 (+ 1 (length (cdr items)))))

Применение функции ко всем элементам (мэпинг — отображение):
(define (map proc items)

(if (null? items)

nil

(cons (proc (car items))

(map proc (cdr items))

)

)

)

33. Горизонтальные барьеры абстракции. Диспетчеризация по типу


Горизонтальные барьеры отделяют «высокоуровневые» операции от «низкоуровневых» представлений.
Концептуальный уровень <-> Логический уровень <-> Физический уровень.
Главное, что нет вызовов физического из концептуального уровня.
Вертикальный барьер даёт нам возможность отдельно разрабатывать и добавлять альтернативные представления. У одной и той же логики может быть несколько реализаций. Функционально они одинаковы, но по-разному работают. Необходимо поддерживать несколько реализаций одного интерфейса. Подходы:

  • Диспетчеризация по типу

  • Программирование, управляемое данными


Диспетчеризация по типу

Рассматриваем пример с точкой на плоскости. Будем использовать две системы координат: декартову и полярную. У функций для декартовых координат будет префикс d_, а у полярных — p_. Создаём соответствующие конструкторы, которые внутри автоматически пересчитывают в нужные координаты:

  • d_cons(x,y)

  • d_cons(r,ϴ)

И дополнительные методы:

  • d_get_x

  • d_get_y

  • d_get_r

  • d_get_ϴ

Такой же набор функций для точки в полярной системе координат, но реализация другая.

Любые данные (точки) представляются в виде:

(метка (b c))

Метка показывает, в каком виде хранится пара, декартовая или полярная система.
(define (get_x point)

(if (eq? (car point) `dec)

(d_get_x (cdr point))

(p_get_x (cdr point))

)

)

34. Программирование, управляемое данными








Операции ↓




Реализации →

d_x

d_y




p_x

p_y


Занести в таблицу значений: (put операция код_реализации функция)

Возвращает нужную функцию:(get op type)

(define (install decart)

(put `get_x `dec d_gex_x)

(put `get_y `dec d_gex_y)

)

(define (install decart)

(define …)

(define …)

)

(define (get_x point)

(

(get `get_x (car point))

(cdr point)

)

)

В этом и в предыдущем методе функция-селектор делает столбик таблицы, а install делает строчку. Это как управление сообщениями. Каждая функция соответствует типу.

35. Система с обобщёнными операциями


Обобщённые — это значит, что может принимать аргументы разных типов.



В код зашиваем еще и информацию, какие аргументы. Тип первого аргумента соответствует первому столбцу.


n+i

i+i

n+r

...















36. Приведение типов. Реализация


Добавляются столбцы, которые реализуют приведение. Сколько типов, столько и столбцов.

+

coercion-int

...




n → i

...




i → i

...




r → i

...




a+b: если типы одинаковые, то вычисляем. Иначе приводим. Когда два аргумента, можем жёстко прописать, что именно к чему приводить.

Иерархия типов. Если не можем выполнить приведение, переходим к надтипу.

Для каждой операции определяется набор допустимых значений типов аргументов и правил получения типа результат. Используется иерархия типов.


37,38. Моделирование объектов.Особые формы set! и begin. Моделирование простых объектов


Моделирование внешних объектов.

Нужна операция для изменения состояния объекта - это какая-то простая\составная информация.

Какое-то время выполняется процесс. Время жизни объекта никак не связано со временем процесса.

Моделирование объектов всегда требует операцию присваивания.

Особая форма set: (set! <�что> <�как>)

(begin .. ) набор операций, которые надо выполнить; возвращает результат их выполнения.
(define balance 100)

(define (withdraw amount)

(if (<= amount balance)

(begin

(set! balance (- balance amount))

balance

)

“No money, no honey”)

)

Надо спрятать баланс
(define (new-withdraw)

(let ((balance 100))

(lambda (amount)

(if <= amount balance)

(begin

(set! balance (- balance amount))

balance

)

“No money, no honey”)))

))
(define (make-withdraw balance)

(lambda (amount)

(if (>= balance amount)

(begin (set! balance (- balance amount))

balance)

"Недостаточно денег на счете")))
При помощи make-withdraw можно следующим образом создать два объекта W1 и W2:

(define W1 (make-withdraw 100)) - счет1

(define W2 (make-withdraw 100)) - счет 2
(W1 50)

50

(W2 70)

30
Реализуем счет с тремя операциями: get/check - сколько денег

withdraw

add
(define (make balance)

(define (get) balance)

(define (withdraw amount) … )

(define (add amount) … )

(define (dispatch m)

(cond

((= m ‘get) get)

((= m ‘withdraw) withdraw)

((= m ‘add) add)

(else “error”)

)

)

ditpatch

)
Call:

(define a (make 100))

((a `add) 50)

((a `withdraw) 20)

(a `get)

39. Моделирование сложных объектов


Ха, а модель не поменялась. Каждый объект — абстракция (набор функций: конструктор, селектор, и вводится мутатор). Отличие от простых объектов в том, что в сложных объектах более одного поля, и соответственно больше селекторов и методов.
(make `get)

(make `withdraw)

(define p (cons a b))

(set! p ...)

(set! p (cons (car p) new_b))
Механизм изменяемые пары:
(define (cons x y)

(define (set_x value)...)

(define (set_y value) (set! y value))

(define (get_x ) x)

(define (dispatch m)

(cond

((= m ‘get_x) get_x)

((= m ‘set_x) set_x)



(else “error”)

)

)

dispatch

)

(define (car p) ((p ‘get_x)))

(define (set_car! p value)

((p ‘set_x) value)

)

40. Оператор присваивания. Достоинства и недостатки его использования


Императивные языки — те, где есть оператор присваивания.

  • Достоинства:

  • простота и привычность

  • генератор случайных чисел (внутренняя переменная, которую пересчитываем)

(define rand

(define x (rand_init))

(lambda ()

(set! x (rand_update))

)

)

  • Недостатки:

  • нужна формальная модель вычисления

  • для каждой переменной надо знать значение до и после set. Не подходит модель аппликативная и нормальная. Нужна другая.

(a (b value) (c value)) не понятно, какое будет value.

  • усложняется сравнение данных

(define a (make 100))

(define b (make 100))

(= a b) Сравнивать объекты или содержимое -?

  • важен порядок действий. Можно вычислять аргументы параллельно, поэтому нужна синхронизация потоков.

41. Модель вычисления с окружениями


[ тут понятнее http://newstar.rinet.ru/~goga/sicp/sicp.pdf стр 227 ]
Главный принцип - необходимо хранить значение переменной, а не вычислять каждый раз заново.

Окружение — набор кадров

Кадр — таблица связываний

[небесной красоты картинка]
Есть окружение более высокого уровня.

При запросе переменной она ищется сначала в последнем кадре, потом в родительском. Новый кадр создается в конце.

Процедура = пара:

  • Ссылка на окружение, где была создана эта процедура

  • Тело процедуры


(define x 10) ; создается новый кадр

(define (f x) 0)

(define (lambda (x) 0))

[еще картинка]

Когда (f 10) создается новое окружение, у которого в качестве родительского окружения указывается окружение, в котором создана функция, … .

Окружение живет, пока на него существуют ссылки (привет, garbage collector)
(define (h x) (lambda))

42. Моделирование потоков


Параллелизм:

(parallel-execute p1 p2 p3 …)
Сериализация доступа:
(make-serializer) - создание сериализатора, который может создать функцию f(x), гарантирующую, что в один момент времени будет выполняться только одна из них. Иными словами, на входе функция, на выходе lock-функция.
Пример:

(define s (make-serializer)) — создание сериализатора

(define s-put (s put)) — создание lock-функции s-put на основе функции put c помощью cериализатора s.
Семафоры:

(make-mutex) - аналогично.

(define m (make-mutex))

(m ‘acquire) - залочить

(m ‘release) - освободить
Реализация make-serializer:

(define (make-serializer)

(let (m (make-mutex)))

(lambda (p)

(define (serialized-p .args)

(begin (m ‘acquire)

let ((val p .args)))

(begin (m ‘release)

val))))

serialized-p)))

.args - для тех случаев, когда количество параметров четко не определенно.
Поток - упорядоченное множество данных небольшого объема (заявок). Заявки передаются из внешней среды в приложение, а приложение возвращает результат. (От меня) По сути, поток в лиспе - это список, у которого определен только текущий элемент. Остальные элементы пока неизвестны. Они находятся с помощью функции.
Операции работы с потоками (с префиксом stream-):

  • Проверка на пустоту: (stream-null? S)

  • Получение первого элемента: (stream-car S)

  • Получение продолжения: (stream-cdr S)

  • Создание потока: (cons-stream x y)

  • Пустой поток (не операция): the-empty-stream


Поток:

( элемент ; функция, возвращающая продолжение )



( элемент ; функция, возвращающая продолжение )



и т.д.

Функции:

  • Получение n-го элемента потока

(define (stream-ref s n)

(if (= n 0) (stream-car s)

(stream-ref (stream-cdr s) (- n 1))))

  • Маппинг

(define (stream-map s p)

(if (stream-null? s)

the-empty-stream

(cons-stream

(p (stream-car s)

(stream-map (stream-cdr s) p)

)

)

)
Работа с потоками (реализация):

Для начала, нужны две функции:

(define (delay x) (lambda () x)) - создает отложенное вычисление функции

(define (force x) (x)) - вычисляет функцию

(define (cons-stream x y))

(cons x (delay y)))

(define (stream-car s) (car s))

(define (stream-cdr s) (force (cdr s)))
Примеры потоков:

  • цифорки :3

(define (integers n)

(cons-stream n

(integers (+ n 1))))

  • случайные цифорки :3

(define random

(cons-stream random_init

(stream-map rand-update random)))
Недостатки:

  1. Не понятно, как представить задачу в виде потока.

  2. Параллелизм: неизвестно, какому потоку отдать приоритет.


Мне печеньки за последний билет ♥ ты супер :*
1   2   3   4   5   6   7   8   9

Похожие:

1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Дмитриев Михаил Николаевич гбоу школа №1586 | Москва, Улица Дружбы...
Проектная работа представляет собой программное приложение, разработанное как для уроков физики и химии, так и для индивидуальных...
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon 1. Если атомы растворимого компонента в замещают в узлах решетки...
Диаграмма состояния сплавов, образующих с ограниченной растворимостью в твердом состоянии с перитектикой, изображена на рис
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Семантика Синтаксис Морфология
К 28 Семантика. Синтаксис. Морфология. — М.: Главная редакция восточной литературы издательства «Наука», 1988. — 309 с
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Учебное пособие включает в себя материалы к 9 практическим занятиям...
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Методическое руководство к выполнению лабораторных работ по биоорганической...
Скелет их молекул построен только из атомов углерода. В зависимости от последовательности соединения атомов углерода в углеродном...
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Инструкция по составлению финансового отчета (краткие комментарии) №
Основные требования к форме и составу документации, подтверждающей расход (Комментарии)
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Основная образовательная программа высшего образования Направление...
Целью курса синтаксиса современного русского литературного языка является знакомство студентов с синтаксисом как центральной лингвистической...
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Издание третье
Панин, его стилистической системы, описана роль писателей, публицистов, общест­венных деятелей в развитии норм литературного языка....
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon 6. Злаки специального назначения
Особую группу газонных злаков составляют виды, отличающиеся хорошей приспособленностью к специфическим условиям. Они могут быть использованы...
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Урока: Образовательные
Развить понятие о взаимном влиянии атомов, зависимости применения от свойств веществ
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Учебно-методическое пособие по английскому языку для студентов первого...
Введение. Своеобразие английского языка. Его роль в современном мире как языка международного и межкультурного общения
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Методическая разработка «Рекомендации по переводу научного текста»
Деловой иностранный язык играет большую роль в процессе изучения иностранного языка в колледже. Деловой язык делает акцент на конкретные...
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Проблемная технология на уроках английского языка в 9 классе Автор: Закирова Татьяна Валерьевна
Маоу «сош №7 с углубленным изучением английского языка» г. Перми, учитель английского языка высшей квалификационной категории
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Сведения о чу дпо «Чувашский учебно-курсовой комбинат»
Предмет и виды деятельности Учреждения, виды реализуемых образовательных программ
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon Курсовая работа На тему: «клиника и лечение трихинеллеза»
Экспериментально трихинеллезом заражаются все виды млекопитающих животных и многие виды птиц
1. Синтаксис языка лисп. Списки. Атомы. Виды атомов. Комментарии icon «Углубленное изучение английского языка» по направлению подготовки...
Повышение уровня культуры образования, а также культуры общения, мышления и речи. 3 Знакомство с культурой стран изучаемого языка...

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск