Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

2.2.3 Списки

Текст A CAT EATS MICE можно изобразить в виде следующего S-выражения (A.(CAT.(EATS.MICE))).

Поскольку последовательность символов используют часто, в ЛИСПе выделяют специальный тип S-выражения, который называют списком.

Список - частный случай точечной пары.

Список - это S-выражение, которое определяется следующим образом:

<список>:=NIL|(<s-выражение>.<список>)

NIL- атом,использующийся для обозначения пустого списка ().

Определение списка можно переписать, используя понятия "первого элемента" и "хвоста" списка:

<список>::=<пустой список>|(<первый элемент>.<хвост>)

<пустой список>::=NIL

<первый элемент>::=S-выражение

<хвост>::=<список>

Не всякая точечная пара является списком, но любой непустой список можно представить в виде точечной пары.

Пример:

(s1.(s2.(s3. ...(sn.NIL)...)=(s1 s2 ...sn)

Список - последовательность элементов, заключенная в круглые скобки (элемент- атом или список).

Чтобы перейти от точечной записи к линейной,надо просмотреть точечную запись списка и заменить каждую конструкцию ".(" на пробел , а соответствующие им парные скобки удалить.

(A.(CAT.(EATS.(MICE.NIL)))) <==> (A CAT EATS MICE)

NIL

A CAT EATS MICE

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

2.2.4 Арифметические функции языка лисп

Лисп - язык функционального программирования. Функция - это вполне общее понятие в языках программирования. Например, если мы хотим использовать математическое выражение sin(x), то в PL1 мы запишем это так: J=SIN(X),а в ЛИСПе:

(SIN X).

Операция сложения на языке PL1 запишется в форме

x+y,

а на ЛИСПе:

(PLUS X Y).

Мы могли бы записать аналогично в PL1, используя процедуру PLUS(x,y). Но обычно мы этого не делаем, потому что PL1, FORTRAN - алгебраические языки, в которых четыре наиболее употребительных действия (+,-,*,/) обрабатываются специальным образом. Можно использовать функцию в других функциях:

(SIN (SIN X))

(PLUS X (PLUS Y Z)).

Основные арифметические функции:

1).(PLUS x1 x2 ... xn) -> x1+x2+...+xn <->(+ x1 x2 ... xn)

2).(TIMES x1 x2 ... xn)-> x1*x2*...*xn <->(* x1 x2 ... xn)

3).(MIN x1 x2 ... xn) -> минимум

4).(MAX x1 x2 ... xn) -> максимум

5).(DIFFERENCE X Y) -> X-Y <->(- X Y)

6).(QUOTIENT X Y) -> целая часть от (X/Y) <->(/ X Y)

7).(REMAINDER X Y) -> остаток от (X/Y) <->(REM X Y)

8).(DIVIDE X Y) -> (частное.остаток)

9).(EXPT X Y) -> X в степени Y

10).(ADD1 X) -> X+1

11).(SUB1 X) -> X-1

12).(ABS X) -> |X|

13).(MINUS X) -> -X

Функции называются арифметическими,т.к. аргументы- числа. Лисп работает с целыми и вещественными(с фиксированной или плавающей точкой) числами.

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