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

28. Выделение элементов списка в Эрланге с помощью примитивов.

hd(X)- Голова списка Х - аналог car tl(X)- Хвост списка Х - - аналог cdr

29. Выделение элементов списка в Эрланге с использованием образцов

Как и из всего остального, мы можем извлекать элементы из списка с помощью

оператора сопоставления по образцу. Если у нас имеется не пустой список L , тогда

выражение [X|Y]=L , где Х и У - это несвязанные переменные, поместит голову списка

в Х, а хвост списка - в У.

30. Порядок вычисления лямбда выражений

Лямбда-выражение пришло из математической теории под названием "Лямбда - исчисление Чёрча". Лямбда - выражение - это анонимная функция, т.е. не имеющее названия.

(lambda (x) (* x 2)) - лисп

Лx.(*x 2) - Чёрч

Само лямбда-выражение не является вычислимым и приведет к ошибки при подачи его на интерпретатор.

Как применять:

((lambda (p1 p2 ... pn) F) f1 f2 ... fn)

Порядок вычисления соответствует энергичной стратегии вычисления, принятой в лиспе:

1)Вычисляются f1 f2 fn

2)Формальные и фактические параметры связываются

3)вычисляется форма

4)возвращается значение вычисления

5)связи возвращаются в первоначальное состояние

31. Функция определения функций (связывание символов)

Значения символов хранятся в ячейках, закрепленных за каждым символом. Если в эту ячейку положить значение, то символ будет связан (bind) сo значением. В процедурных языках говорят "будет присвоено значение".

Для Лиспа есть отличие:

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

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

Для связывания символов используется три функции: SET, SETQ , SETF

1) SET: связывает символ со значением, предварительно вычисляя значения аргументов. В качестве значения функция SET возвращает значение второго аргумента.

2) SETQ: аналогична SET, но не вычисляет значение первого аргумента. Буква q на блокировку.

3) SETF: действует аналогично SETQ, но может использоваться для присвоения символу не только значения.

  1. Ключевой параметр optional, key, res.

В языке Lisp различают, кроме обычных, обязательных и позиционных, — необязательные (факультативные), ключевые и серийные (многократные, с переменным числом значений) параметры. Виды параметров обозначаются пометкой &optional, &key и &rest соответственно, размещаемой перед параметрами в lambda списке формальных аргументов. При этом серийный параметр должен быть последним в списке. Необязательный параметр может иметь начальное значение, устанавливаемое по умолчанию, т.е. если этот параметр не задан при вызове функции.

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

33. Карринговая форма записи функций нескольких переменных.

Карринговая форма записи функции - конкатенация нескольких функций. Является частью лямбда-исчислений чёрча. Можно и в ленивых и в энергичных исчислениях. Только в энергичных исчислениях практически ничего не даёт.

Функция двух переменных x и y f(x,y) = x + y может быть рассмотрена как функция одной переменной x, возвращающая функцию одной переменной y, то есть как выражение ?x.?y.x+y Такой приём работает точно так же для функций любой арности. Это показывает, что функции многих переменных могут быть без проблем выражены в ?-исчислении. Описанный процесс превращения функций многих переменных в функцию одной переменной называется карринг (также: каррирование), в честь американского математика Хаскелла Карри.