Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
здесь ВСЁ.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
317 Кб
Скачать
☆
  1. Формы организации временного контекста (let/let*).

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

Контекстом называется переменная и её связь в данный момент времени.

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

(let* ((p1 f1)(p2 f2)...(pn fn)) F)

В начальный момент времени вычисляются фактические параметры и связываются с формальными а)одновременно c let б) последовательно с let*. Далее вычисляется значение формы F.

>(let ((x 5)(y 10)) (+ x y))

15

>(let ((x 5)(y (*x 2))) (+ x y))

ошибка. x ещё не связан

>(let* ((x 5)(y (*x 2))) (+ x y))

15

  1. Последовательная и одновременная передача параметров вычисляемой формы.

В начальный момент времени вычисляются фактические параметры и связываются с формальными а)одновременно c let б)последовательно с let*. Далее вычисляется значение формы F.

>(let ((x 5)(y 10)) (+ x y))

15

>(let ((x 5)(y (*x 2))) (+ x y))

ошибка. x ещё не связан

>(let* ((x 5)(y (*x 2))) (+ x y))

15

  1. Форма организации условных вычислений cond.

cond-выражение - форма организации ветвящихся выражений в лиспе. Каждый аргумент функции COND должен быть списком ровно из двух элементов. 

(cond

(p1 f11 f12...f1n)

(p2 f21 f22...f2n)

(pl fl1 fl2...fln)

)

)

)

37. Последовательные вычисления в Лиспе.

Последовательно вычисляются предикаты p1,p2,pl, до тех пор пока значение какого либо предиката не будет отлично от него. Если такой предикат найден не будет, то вернётся NIL. Если предикат p2 найдет, то вычисляется последовательно fij, и значение последней формы возвращается в качестве всего выражения. Последовательность форм может отсутствовать, тогда возвращается значение соответствующего предиката.

(defun f(x)

(cond

((<= x -3)(+ x 3))

( (and(> x -3)(< x 0)) (* x x))

( (and(> x 0)(<= x 5)) (sqrt x))

(t (+(*x x) 100))

)

)

)

Помимо формы cond в lisp'е существует целый ряд других форм, организующих ветвление. Наиболее популярные формы - форма if, организующая ветвление на 2 направление. Форма case, обеспечивающая порядок между ветвями.

(if pred fthen felse)

(prog1 f1 f2 ... fk)

(prog2 f1 f2 ... fk)

(progn f1 f2 ... fk)

38. Формы организации циклических вычислений do и do*.

Do и Do*

(do

((v1 v10 f1) (v2 v20 f2)...(vn vn0 fn)) v1 - переменная цикла, v10 - начальное значение, f1 - форма изменения переменной v1

(p fp1 fp2 ... fpn) - ветвь выхода из цикла. p - предикат, в случае истинности которого вычисляются fp1, fp2 ... fpn и значение последнего возвращается как результат работы всего выражения

F1 F2 Fk - последовательность форм, тело цикла

39. Принципы работы по организации ввода-вывода в Лиспе.

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

(setq p

(open _filename_ :direction)

)

(print p x y)

40. Рекуррентные отношения.

Рекурсивная функция предполагает, что задача, с помощью рекурентных отношений, может быть описана, и известно решение для простых "условий". f(n)->f(m) n>m; f(n)=n*f(n-1) f(1)=1; Простая предполагает наличие явного вызова функции в её теле. Пример: >(nth 3 '(a b c d e f)) d >(defun nth (p list) (cond((nil list) list); ((p 0) (car list)); (t (nth (- p 1) (cdr list)) ))

41. Примитивные рекурсивные функции

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

В качестве исходных функций обычно применяются нуль-функция, функция проецирования и функция последования. Нуль-функция имеет значение ноль на всей области определения. Функция проецирования выделяет элемент последовательности, а функция последования генерирует очередной элемент последовательности. Классическим примером примитивно рекурсивных функций является функция, вычисляющая факториал числа. Рекурсивное определение функции, вычисляющей факториал числа, практически повторяет его математическое представление. Лисповское определение функции следующее.

>(defun fact (n)

(cond

((= n 0) 1)

(t (* n (fact (- n 1)))))

)

FACT

>(fact 5)

120

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]