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

4. Программирование при помощи процедур.

int max (int x, int y) //1

{

if (x>=y) return x;

else return y;

}

M=max(max(a,b),c)

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

void max(int x, int y, int m) //2

{

if (x>=y) m=x;

else m=y;

return;

}

max(a,b,m); max(m,c,m) – два вызова функции

void max(int x, int y) //3

{

if x>=y x=y;

return;

}

max(a,b); max(a,c) – два вызова функции

Варианты 2 и 3 обладают свойствами функций, но имеют побочный эффект из-за присваивания.

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

Строго функциональные языки не допускают побочных эффектов.

5. Символьные данные в строго-функциональных языках.

Определим класс символьных выражений, которые еще называют S-выражения.

S-выражения состоят из атомов.

(Иван Петров 33 года)

((Иван 17)(Мария 25)(Василий 6))

((Мой дом)имеет(большие(светлые окна)))

Атомы бывают символьные и числовые.

S-выражения – неделимая последовательность букв и цифр, содержащая хотя бы один символ, отличающий его от чисел.

К символьным атомам применяется только операция сравнения.

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

Простейшее S-выражение – это атом, сложное – набор атомов, разделенных пробелом.

Общие правила S-выражений можно просуммировать в рекурсивном определении:

1. атом есть S-выражение.

2. последовательность S выражений, заключенная в скобки, является S-выражением (списком)

Формула: S-выражение:

p+q (плюс p q)

p-q (минус p q)

p*q (умн p q)

p/q (дел p q)

p’ (степ p q)

x2+2x-31 =>

(плюс(степ x 2)(минус(умн 2 x)31))

(минус(плюс(степ x 2)(умн 2 x))31)

6.Элементарные селекторы, конструкторы и предикаты.

1) car – применяется к списку и ее результатом является первый элемент списка (head)

x

car (x)

(AB)

A

((AB)(CD))

(AB)

(A)

A

car – элементарный селектор

car :: [a] → a

car [ ] = error “ “

car (x:xs) = x

2) cdr – возвращает S-выражение без первого элемента

x

cdr(x)

(AB)

(B)

((AB)(CD))

((CD))

(A)

NIL

cdr :: [a] → [a]

cdr [ ] = [ ]

cdr (x:xs) = xs

Две взаимовып-ие(наверно взаимодополняющие, мб взаимовыполнимые) функции называются селекторами. С их помощью из списка можно выбрать любой элемент.

третий(х)=car(cdr(cdr x)))

3) cons - примитивный конструктор берет два S-выражения и соединяет их в одно выражение

x

y

cons(x,y)

A

(BC)

(ABC)

(AB)

(CD)

((AB)(CD))

A

NIL

(A)

двучлен(x,y)=cons(x,cons(y,NIL))

квадрат(a,b,c,d)=двучлен(двучлен(a,b),двучлен(c,d))

Элементарные предикаты.

Предикат – функция, возвращающая значение либо «истина», либо «ложь».

атом(x) определяет является ли S-выражение атомом или нет.

x

атом(х)

A

True

(A)

False

NIL

False/True

(ABC)

False

слово

True

127

True

(127)

False

f(x) = если атом (х), то NIL, иначе car (x)

Если car была частично определена, то f(x) всюду определенная функция.

равно (x,y) – сравнивает 2 атома (ложь, если не равны и если хоть 1 элемент не является списком)

Предикаты нужны для построения условных функций.

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