Зворотний зв'язок

Породження комбінаторних об’єктів.

Якщо CAR-елемент об’єкта є іменем необчислюваної функції, EVAL додає CAR-елемент об’єкта до CDR-елемента об’єкта без обчислення останнього.

Якщо CAR-елемент об’єкта є макрофункцією, EVAL рекурсивно обчислює результат додавання CAR-елемента об’єкта до його CDR-елемента.

Якщо CAR-елемент об’єкта не є функцією, EVAL повертає помилку “невизначена функція” та генерує переривання по помилці.

$ (SETQ a ‘b b ‘c)$ (EVAL ‘(CONS ‘A ‘(B C))) $ (EVAL ‘(PRIN1 ‘(a b c)))

$ (EVAL a)(A B C)(a b c) (a b c)

c

$ (DEFUN a (n)$ (EVAL ‘(a 3))$ (EVAL (LAMBDA (n) (* n n)) 7)

(+ n 2) )549

Діалог з інтерпретатором Ліспа на верхньому (командному) рівні можна описати простим циклом:

(SETQ e (READ))введення виразу

(SETQ v (EVAL e))обчислення виразу

(PRINT v)друк результата

При виконанні тіла необчислювальної функції ми можемо використати функцію EVAL для обчислення аргументів.

(DEFUIN f3 (NLAMBDA (x y)(SETQ k 5 l 6)(f3 k l)

(+ (EVAL x) (EVAL y))) )11

3. CONSTANTP <об’єкт>

Об’єкт є константою тоді і тільки тоді, коли (EVAL <об’єкт>) повертає <об’єкт>. Символ NIL, числа та списки, в яких CAR-елемент є символ QUOTE, в muLisp є константами. Якщо <об’єкт> — константа, функція CONSTANTP повертає Т, інакше — NIL.

$ (CONSTANTP ())$ (CONSTANTP 23.543)(DEFUN CONSTANTP (obj)

T T((NULL obj))

$ (CONSTANTP ‘v)$ (CONSTANTP ‘(a b c))((NUMBERP obj))

NILNIL((ATOM obj) NIL)

$ (CONSTANTP ‘(QUOTE (a b c)))(EQ (CAR obj) ‘QUOTE) )

T

4. APPLY <функція> <арг1> <арг2> ... <арг-список>

Застосовує функцію до списку аргументів. (APPLY f x1 x2 ... xN) еквівалентно (f x1 x2 ... xN). Використання функції APPLY є більщ гнучким у порівнянні з прямим викликом функції. Діє як і функція FUNCALL, тільки аргументи функції приймає не окремо, а списком.


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат