Засоби та принципи програмування на Ліспі, Детальна інформація
Засоби та принципи програмування на Ліспі
(DEFUN PUD (tree) (DEFUN PLR (tree)
((NULL tree)) ((NULL tree))
(PRIN1 (CAR tree)) (SPACES 3) (PLR (CADR tree))
(PUD (CADR tree)) (PRIN1 (CAR tree)) (SPACES 3)
(PUD (CDDR tree)) ) (PLR (CDDR tree)) )
Функція REVT (Reverse Tree) обертає дерево: кожне праве піддерево стає лівим піддеревом і навпаки.
(DEFUN REVT (tree)
((NULL tree) NIL)
(CONS (CAR tree) (CONS (REVT (CDDR tree)) (REVT (CADR tree)))) )
Розглянемо приклади:
$ (SETQ a (INSL ‘(5 1 7 3 9 2 4 8 10) NIL)) $ (SETQ b (REVT a))
$ (PLR a) $ (PLR b)
1 2 3 4 5 7 8 9 10 T 10 9 8 7 5 4 3 2 1
Функція HEIGHT обчислює висоту дерева. Вважатимемо, що висота порожнього дерева дорівнює 0. Висота непорожнього дерева дорівнює максимумові між висотами лівого та правого піддерев плюс одиниця. (HEIGHT a) = 4, де a взято з попереднього прикладу.
(DEFUN HEIGHT (tree)
((NULL tree) 0)
(MAX (ADD1 (HEIGHT (CADR tree)))
(ADD1 (HEIGHT (CDDR tree)))) )
6. Робота з файлами
По замовченню за пристрій потокового вводу (CIS - Current Input Stream) береться консоль.
Для читання даних з вхідного потоку використовують функцію READ. Після виконання команди (SETQ a (READ)) ви повинні ввести з консолі вираз, який буде прочитано та присвоєно змінній а. При цьому якщо буде введено декілька об’єктів, то змінній а буде присвоєно перший об’єкт. Наприклад, якщо ви введете: as bf gh, то змінна a прийме значення as. Якщо Ви хочете ввести список (складний об’єкт), то його необхідно вводити в круглих дужках: (as df gh).
Функція (CLEAR-INPUT) чистить буфер вводу. В будь-якому випадку повертається NIL.
Функція (READ-LINE) читає елементи з CIS поки не буде прочитано символ переходу на новий рядок (). Повертається символ, Р-ім’я якого складається з усіх прочитаних символів як ті були розташовані у вхідному рядку, окрім .
Функція (READ-CHAR) читає наступний елемент з CIS та повертає його.
Функція (UNREAD-CHAR) повертає в CIS останній прочитаний символ.
Функція (LISTEN) повертає T якщо CIS не порожній, та NIL якщо ми дійшли до кінця файлу.
Функції (OPEN-INPUT-FILE “”) та (CLOSE-INPUT-FILE “”) використовуються для відкриття та закриття файла для вводу.
Функції (OPEN-OUTPUT-FILE “”) та (CLOSE-OUTPUT-FILE “”) відповідно відкривають та закривають файл для виводу інформації.
PAGE
((NULL tree)) ((NULL tree))
(PRIN1 (CAR tree)) (SPACES 3) (PLR (CADR tree))
(PUD (CADR tree)) (PRIN1 (CAR tree)) (SPACES 3)
(PUD (CDDR tree)) ) (PLR (CDDR tree)) )
Функція REVT (Reverse Tree) обертає дерево: кожне праве піддерево стає лівим піддеревом і навпаки.
(DEFUN REVT (tree)
((NULL tree) NIL)
(CONS (CAR tree) (CONS (REVT (CDDR tree)) (REVT (CADR tree)))) )
Розглянемо приклади:
$ (SETQ a (INSL ‘(5 1 7 3 9 2 4 8 10) NIL)) $ (SETQ b (REVT a))
$ (PLR a) $ (PLR b)
1 2 3 4 5 7 8 9 10 T 10 9 8 7 5 4 3 2 1
Функція HEIGHT обчислює висоту дерева. Вважатимемо, що висота порожнього дерева дорівнює 0. Висота непорожнього дерева дорівнює максимумові між висотами лівого та правого піддерев плюс одиниця. (HEIGHT a) = 4, де a взято з попереднього прикладу.
(DEFUN HEIGHT (tree)
((NULL tree) 0)
(MAX (ADD1 (HEIGHT (CADR tree)))
(ADD1 (HEIGHT (CDDR tree)))) )
6. Робота з файлами
По замовченню за пристрій потокового вводу (CIS - Current Input Stream) береться консоль.
Для читання даних з вхідного потоку використовують функцію READ. Після виконання команди (SETQ a (READ)) ви повинні ввести з консолі вираз, який буде прочитано та присвоєно змінній а. При цьому якщо буде введено декілька об’єктів, то змінній а буде присвоєно перший об’єкт. Наприклад, якщо ви введете: as bf gh, то змінна a прийме значення as. Якщо Ви хочете ввести список (складний об’єкт), то його необхідно вводити в круглих дужках: (as df gh).
Функція (CLEAR-INPUT) чистить буфер вводу. В будь-якому випадку повертається NIL.
Функція (READ-LINE) читає елементи з CIS поки не буде прочитано символ переходу на новий рядок (
Функція (READ-CHAR) читає наступний елемент з CIS та повертає його.
Функція (UNREAD-CHAR) повертає в CIS останній прочитаний символ.
Функція (LISTEN) повертає T якщо CIS не порожній, та NIL якщо ми дійшли до кінця файлу.
Функції (OPEN-INPUT-FILE “
Функції (OPEN-OUTPUT-FILE “
PAGE
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021