.

Числовi функцiї (реферат)

Язык: украинский
Формат: реферат
Тип документа: Word Doc
0 1931
Скачать документ

Реферат на тему:

Числовi функцiї

Числовi функцiї виконують основнi математичнi операцiї над цiлими та
дробовими числами. Користувач може обрати для роботи точну або наближену
рацiональну арифметику. Для точної рацiональної арифметики розмiр цiлих
чисел, чисельникiв та знаменникiв обмежений приблизно до 25000
десяткових знакiв.

Примiтивними числовими функцiями є додавання, вiднiмання, множення та
дiлення. В мовi програмування Лiсп вони є n-арними, тобто кiлькiсть
їхнiх аргументiв необмежена. Синтаксис числових функцiй наступний:

1. (+ … ). 3. (* … )

2. ( – … ) 4. (/ … )

Функцiя додавання повертає суму своїх аргументiв. Функцiя вiднiмання
повертає рiзницю першого аргумента та суми всiх iнших аргументiв.
Функцiя множення повертає добуток своїх аргументiв. Функцiя дiлення
повертає частку вiд дiлення першого аргумента та добутку iнших
аргументiв.

$ (+ 2 4 6 7) $ (- 20 3 5 6) $ (* 2 4 6) $ (/ 24 2 2 3)

19 6 48 2

Функцiї збiльшення та зменшення мають наступний синтаксичний вигляд:

1. (ADD1 n). Повертає значення, яке на одиницю бiльше за аргумент.

2. (SUB1 n). Повертає значення, яке на одиницю менше за аргумент.

3. (INCQ sym n) Збiльшує значення символа sym на число n.

4. (DECQ sym n) Зменшує значення символа sym на число n.

Якщо функцiю додавання (вiднiмання) одиницi запустити без аргументiв, то
виникне переривання по помилцi: недостатня кiлькiсть аргументiв. Якщо у
функцiю INCQ або DECQ передати один аргумент – символ, то збiльшення
(зменшення) значення символа вiдбудеться на одиницю. Окрiм того, що
функцiї INCQ та DECQ повертають результат арифметичної дiї, значення
символiв, якi передаються до них як аргументи, змiнюється.

$ (ADD1 6) $ (SUB1 10)

7 9

$ (SETQ S 10) $ (INCQ S 14) $ (DECQ S 4)

10 24 30

Функцiї MIN та MAX повертають символ з вiдповiдно мiнiмальним
(максимальним) значенням.

1. (MIN … ). $ (MIN 12 3 45 67) $ (MAX 1 2 5 3)

2. (MAX … ). 3 5

Числовi вирази в Лiспi записуються у префiкснiй формi. Вираз 3 * 5 + 5 *
7 для обчислення треба подати у виглядi (+ (* 3 5) (* 5 7)), вираз (3 +
6) * 7 – у виглядi (* (+ 3 6) 7).

Функцiї порiвняння менше та бiльше мають n аргументiв.

1. ( n1 n2 … nM) Повертає iстину, якщо n1 > n2 > … > nM.

3. ( /= n1 n2 … nM) Повертає iстину, якщо iснують хоча б два числа,
якi не дорiвнюють одне одному.

До функцiй порiвняння також вiдносяться =.

$ (= 5 3 3 2) $ ( /= 4 4 5)

T T T

$ ( (CAR lst1) (CAR lst2)) (COMELEMENT lst1 (CDR lst2)))

(+ 1 (COMELEMENT (CDR lst1) (CDR lst2))) )

В файлi irratnal.lsp мiститься великий набiр iррацiональних та
трансцендентних функцiй. Аргументи тригонометричних функцiй задаються в
радiанах.

1. (EXP x) експонента e^x

2. (EXPT x y) степiнь x^y

3. (LOG x y) логарифм logyx. Якщо y не задано, основа вважається рiвною
e.

4. (LN x) натуральний логарифм

5. (SQRT x) квадратний корiнь

6. (ISQRT x) цiла частина з квадратного кореня

7. (SIN x) та (ASIN x) сiнус та арксiнус

8. (COS x) та (ACOS x) косинус та арккосинус

9. (TAN x) та (ATAN x) тангенс та арктангенс

10.(RANDOM n) генерується натуральне число, менше за n.

Контрольнi конструкцiї

MuLisp використовує неявну форму PROGN для обчислення форм, якi
складають тiло функцiї. Окрiм того, iнтерпретатор muLisp розпiзнає в
тiлi функцiї неявнi COND конструкцiї. Неявнi COND-и роблять визначення
функцiй читабельними, короткими та ефективними. Спецiальнi форми
забезпечують контроль за обчисленням форм в процесi виконання програм.
Розглянемо деякi контрольнi iнструкцiї.

1. QUOTE об’єкт. Повертає об’єкт obj без його обчислення. QUOTE може
використовуватися для запобiгання обчислення значень констант, якi
передаються як аргумент функцiї, що обчислюється.

$ (SETQ a 125)

$ a $ (QUOTE a) $ (CAR (CONS 4 7)) $ (CAR ‘(CONS 4 7))

125 a 4 CONS

2. LOOP форма1 форма2 … формаN. Повторно обчислює форми у послiдовному
порядку доти, поки не зустрiнеться неявний COND з предикатом, не рiвним
NIL. Розглянемо функцiю LENGTH обчислення довжини списку. В першому
стовпчику запропоновано рекурсивний, в лiвому – нерекурсивний варiант
програми.

(DEFUN LENGTHr (lst) (DEFUN LENGTH (lst)

((NULL lst) 0) (SETQ ct 0)

(+ 1 (LENGTHr (CDR lst))) (LOOP

) ((NULL lst) ct)

(SETQ lst (CDR lst) ct (+ 1 ct))

) )

3. IF предикат [THEN] форма1 [ELSE] форма2. Якщо значення предиката не
дорiвнює NIL, то видається [THEN] форма, iнакше видається [ELSE] форма.

$ (IF (EQL ‘r ‘r) (CAR ‘(q w e r t y)) (CDR ‘(q w e r t y))) – q

$ (IF (EQL ‘r ‘w) (CAR ‘(q w e r t y)) (CDR ‘(q w e r t y))) – (w e r
t y)

4. IDENTITY об’єкт. Повертає об’єкт без жодних змiн. Ця функцiя
застосовується для використання змiнних як предикатiв в умовних виразах.

5. PROGN форма1 форма2 … формаN. Послiдовно обчислює форми та повертає
результат обчислення формиN.

6. PROG1 форма1 форма2 … формаN. Послiдовно обчислює форми та повертає
результат обчислення форми1. Функцiю використовують для того, щоб
вводити допомiжнi змiннi для збереження результатiв в процесi обчислення
iнших виразiв.

$ (SETQ a ‘(q w e r t y)) $ a

$ (PROG1 (CAR a) (SETQ a (CDR a))) (w e r t y)

q

7. COND cond1 cond2 … condN. Обчислює CAR кожної COND форми доти, доки
не зустрiнеться деяке значення, вiдмiнне вiд NIL, або доки всi предикати
не будуть обчисленi. В першому випадку COND обчислює CDR елемент cons –
форми з предикатом, який не дорiвнює NIL, як тiло функцiї,
використовуючи неявну функцiю PROGN. Якщо CDR – елемент COND форми, яка
не дорiвнює NIL, є порожнiм, то повертається значення предиката. Якщо
обчисленi всi предикати та всi вони повернули NIL, то COND повертає NIL.

8. COMMENT коментар. Iгнорує свої аргументи та повертає NIL. Визначає
засiб включення коментарiв безпосередньо у визначенi функцiї.

9. RETURN об’єкт. Зупиняє виконання функцiї, яка мiстить RETURN,
звiльняє стек та повертає об’єкт в ролi свого значення.

10. RESTART Закриває всi вiдкритi файли, вiдмовляється вiд поточного
середовища та iнiцiює нову систему muLisp. Всi зв’язки мiж змiнними,
функцiї користувача та значення властивостей поточного середовища
знищуються.

11. SYSTEM Закриває всi вiдкритi файли, завершує виконання muLisp та
повертає керування операцiйнiй системi.

12. EXECUTE програма командний рядок. Зупиняється робота системи muLisp,
передається керування програмi з командним рядком. EXECUTE повертає код
виходу з програми або NIL, якщо не знайдена.

$ (EXECUTE “command.com” “/c dir c:”)

Обчислення рекурсивних функцiй

1. Факторiалом числа n називається число (позначається n!), яке
рекурсивно визначається наступним чином:

0! = 1 $ (DEFUN FACTORIAL (n) $ (FACTORIAL 10)

N! = N*(N-1)! якщо N>0. ((ZEROP n) 1) 3628800

(* n (FACTORIAL (- n 1))) )

Якщо в рекурсивнiй програмi аргументом буде велике число, то може
виникнути переповнення стеку. Використовуючи команду циклу LOOP можна
уникнути екурсивного виклику. Наступна функцiя буде бiльш ефективною:

$ (DEFUN FACTORIAL1 (n rslt) $ (FACTORIAL1 10)

(SETQ rslt 1) 3628800

(LOOP

((ZEROP n) rslt ) $ (FACTORIAL 0 a)

(SETQ rslt (* n rslt)) 1

(SETQ n (- n 1)) ) )

2. Послiдовнiсть чисел, кожен елемент якої дорiвнює сумi двох
попереднiх, а першi два елементи дорiвнюють 1, називається послiдовнiстю
Фiбоначчi. N-те число послiдовностi Фiбоначчi F(N) може бути знайдене за
рекурсивною формулою:

F(0)=1, F(1)=1, F(N) = F(N-1) + F(N-2).

$ (DEFUN FIBON (n) $ (FIBON 20)

(( b,

НСД(a, b – a), якщо a b,

НСД(a, b mod a), якщо a

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Оставить комментарий

avatar
  Подписаться  
Уведомление о
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020