Породження комбінаторних об’єктів, Детальна інформація
Породження комбінаторних об’єктів
Інтерпретатор Ліспа називається EVAL, його можна як і інші функції викликати з програми. У звичайній роботі інтерпретатор викликати не має потреби, оскільки його виклик має місце неявно. Зайвий виклик інтерпретатора може зняти ефект блокування (QUOTE), або дозволить знайти значення виразу. EVAL – це універсальна функція Ліспа, яка може обчислити довільний правильно побудований лісповський вираз.
Якщо об’єкт — атом, функція повертає зміст комірки значення об’єкту.
Якщо CAR-елемент об’єкта є іменем обчислюваної функції або LAMBDA, функція обчислює кожний елемент CDR-частини об’єкта і додає CAR-елемент об’єкта до списку результатів.
Якщо 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) ) 5 49
Діалог з інтерпретатором Ліспа на верхньому (командному) рівні можна описати простим циклом:
(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))
NIL NIL ((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, тільки аргументи функції приймає не окремо, а списком.
Якщо функція — ім’я визначеної користувачем функції або тіло LAMBDA, APPLY пов’язує формальні аргументи функції з фактичними аргументами, обчислює тіло функції, відтворює вихідні значення формальних аргументів і повертає значення обчислення тіла функції.
Якщо функція — не ім’я функції і не тіло LAMBDA, APPLY генерує переривання по помилці “невизначена функція”.
Якщо об’єкт — атом, функція повертає зміст комірки значення об’єкту.
Якщо CAR-елемент об’єкта є іменем обчислюваної функції або LAMBDA, функція обчислює кожний елемент CDR-частини об’єкта і додає CAR-елемент об’єкта до списку результатів.
Якщо 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) ) 5 49
Діалог з інтерпретатором Ліспа на верхньому (командному) рівні можна описати простим циклом:
(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))
NIL NIL ((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, тільки аргументи функції приймає не окремо, а списком.
Якщо функція — ім’я визначеної користувачем функції або тіло LAMBDA, APPLY пов’язує формальні аргументи функції з фактичними аргументами, обчислює тіло функції, відтворює вихідні значення формальних аргументів і повертає значення обчислення тіла функції.
Якщо функція — не ім’я функції і не тіло LAMBDA, APPLY генерує переривання по помилці “невизначена функція”.
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021