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

Функции

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

Благодаря скобкам тексты на LISP сравнительно легко читаются, что облегчает понимание смысла программ. За правильным соотношением числа скобок в современных версиях LISP следит сама машина.

Используемое в LISP так называемое функциональное программирование основывается на той простой идее, что в результате каждого действия возникает значение. Значение становится аргументами следующих действий и конечный результат всей задачи выдается пользователю.

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

Auto LISP работает в режиме интерпретации. Внутри интерпретатора находится вычислитель, который выполняет следующие действия:

определяет первый элемент, который является именем выполняемой функции;

определяет следующие элементы, которые являются аргументами, необходимыми для выполнения заданной функции;

(+(- 4 1) (*5 2))

В этом случае аргументами функции «сложить» являются выражения, которые в свою очередь необходимо вычислить.

Универсальные функции

QUOTE – блокирует вычисление выражения.

‘< S – выражение> или (QUOTE<S – выражение>).

Пример:

:(+ 2 3)

5

:(SETQx’(+2 3))

(+ 2 3)

EVAL – вычисляет любое правильно составленное выражение LISP. Он нужен для снятия эффекта блокировки вычисления:

(EVAL<S – выражение>).

Пример: (EVAL(QUOTE(+2 3)))

5

: (SETQa’(+ 2 3))

(+ 2 3)

: (EVALa)

5

Псевдофункции

Псевдофункции – это функции, которые образуют связь между символом и его значением.

К псевдофункциям относятся:

SETQ – связывает имя со значением выражения.

(SETQ<символ 1> <S – выражение>).

Пример: (SETQ b 123 S 4.4).

: (SETQ max (+ b a).

SET – вычисляет имя и связывает его со значением выражения.

: (SET e (+ b c))

: 127.7

(SETQ x ‘(a b)) эквивалентна (SET’x ‘(a b)).

Вычислительные функции

Сложение (+ <число> < число>).

: (+ 2 3)

: 5

Вычитание (- <число> …)

: (-5 1 2)

2.

Умножение (*< число> < число>).

Деление (/ <число> <число>).

Абсолютная величина угла (ABS <число>).

Прибавление 1 (1+ <число>).

Вычитание 1 (1- <число>).

Синус угла (SIN <число>); угол в радианах.

Квадратный корень числа (SQRT <число>).

Арктангенс (ATAN <число>).

Косинус (COS <число>).

Экспонента (EXP <число>).

Возведение числа в степень (EXPT <число - основание> <число - степень>).

Максимальное из чисел (MAX <число> <число>).

Минимальное из чисел (MIN <число> <число>).

Остаток от деления (REM <число> <число>).

Наибольший общий делитель (GCD <число> <число>).

Базовые функции разбора и анализа списков

Базовые функции разбора и анализа списков образуют в определенном смысле систему аксиом языка – алгебру обработки списков. Их можно разбить на функции разбора CAR, CDR, функции создания CONS и функции проверки ATOM, EQ. Базовые функции проверки называют базовыми предикатами. Предикаты – это функции, которые проверяют некоторые условия.

CAR – возвращает первый элемент списка.

(CAR <список>).

Пример:

: (CAR’ (a (a1 a2)))

a

: (CAR’ (( a1 a2) a))

(a1 a2).

CDR – возвращает хвост списка. Результатом является всегда список.

(CDR<список>).

Пример:

: СDR’ (a (a1 a2))

(a1 a2)

: CDR’ ((a1 a2) a)

(a).

CONS – конструктор списков. CONS возвращает список, который получается из списка, заданного вторым аргументом, добавлением в его начало элемента, заданного первым аргументом.

(CONS <новый первый элемент> <список>)

Пример:

: (CONS’ a’ (b c d))

(a b c d)

: (CONS’ (a e)’ (b c d))

((a e) b c d).

CONS может воспринимать атом на месте аргумента <список>, конструирую структуру, которая называется «точечная пара». Показывая точечную пару на экране, Auto LISP выводит точку между первым и вторым элементами списка. Точечная пара занимает меньше памяти, чем обычный список, и позволяет использовать функцию CDR для извлечения второго атома.

:(CONS’ a’ b)

  1. B)

: (CAR(CONS’ a’ b))

A

: CDR (CONS’ a’ b))

B.

EQ – физическое равенство. EQ проверяет тождественность двух S – выражений.

Пример:

: (SETQ f1’ (a b c))

: (SETQ f2’ (a b d))

: (SETQ f3 f2)

: (EQ f1 f3)

NIL

: (EQ f1 f2)

NIL

: (EQ f3 f2)

T.

Встроенный функции обработки списков

В LISP включено множество встроенных функций для различных действий и ситуаций. Такие функции называют базовыми примитивами обработки списков – встроенными функциями обработки списков. К ним относятся:

LAST – выделяет последний элемент списка:

: (LAST’ (a a1 a2))

a2

: (LAST’ (a(a1 a2)))

(a1 a2).

LIST – создает список из элементов.

: (LIST’ a’ b)

(a b)

: (LIST’ (+ 2 3) 2)

((+2 3)2)

: (LIST (+2 3)2)

(5 2).

APPEND – объединяет несколько списков.

: (SETQ a’ (a1 a2)

b’ (b1 b2)

‘

: (APPEND a b)

(a1 a2 b1 b2).

SUBST – заменяет элемент в списке.

: (SETQ ex’ (a b (c d)b))

: (SUBST’ gg’ b ex)

(a gg (cd) gg).

MEMBER выделяет часть списка. MEMBER определяет список, начиная с заданного выражения.

: MEMBER’ c’ (a b c d e))

(c d e).

NTH – выделят n-й элемент списка:

: (NTH O’ (a b c d e))

A

: (NTH 3’ (a b c d e))

D.

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