WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Мова програмування Лісп - Реферат

Мова програмування Лісп - Реферат

кладе символ в стек (список) .
Операція заміни значення символа здійснюється за допомогою функції SET. Вона присвоює символу значення , або зв'язує з . Для скорочення замість SET ' пишуть SETQ (SET Quote). Як результат функція присвоєння повертає другий аргумент.
$ (SET 'fox '(a s d)) $ (SETQ vowels '(a e i o u)))
$ (SETQ fox '(a s d)) $ (SETQ vowels (CONS 'y vowels))
(a s d) (y a e i o u)
Функція SETQ дозволяє здійснювати заміну значень декільком символам в одній команді: (SETQ a 1 b 2 c 3). При цьому зміни виконуються послідовно зліва направо. Після цього значенням символу a стане 1, b - 2, c - 3.
Функція PSETQ ідентична до функції SETQ за винятком того, що всі форми оцінюються до того, як будуть здійснені будь-які заміни. Проілюструємо це на прикладі. Значення символа Sym позначатимемо через Val(Sym).
$ (SETQ w 1 e 2) Val(w)=1, Val(e)=2 $ (SETQ w 1 e 2) Val(w)=1, Val(e)=2
$ (SETQ w e e w) Val(w)=2, Val(e)=2 $ (PSETQ w e e w) Val(w)=2, Val(e)=1
При виконанні операції заміни необхідно розрізняти символ та значення. При старті системи mulLsp значенням кожного символа є він сам. Якщо ми введемо DOG, то і результатом буде DOG. Присвоїмо символові DOG значення CAT: (SET 'DOG 'CAT). Результатом виразу (SET DOG 'HEN) буде HEN, але значення HEN ми присвоювали не символу DOG, а значенню символа DOG, тобто символу CAT. Значення символа DOG залишилося без зміни. Розглянемо результат наступних дій:
(SET 'car 'road) Val(car) = road Val(road) = road
(SET car flower) Val(car) = road Val(road) = flower Val(flower) = flower
(SET 'car car) Val(car) = road Val(road) = flower Val(flower) = flower
(SET road car) Val(car) = road Val(road) = flower Val(flower) = road
(SET 'road 4) Val(car) = road Val(road) = 4 Val(flower) = road
(SET road 'hen) помилка, 4 не є символом і не може приймати інші значення
POP повертає голову списка (вершину стека) і замінює значення на його хвіст. PUSH кладе в стек та змінює його значення на збільшений стек.
$ (SETQ a '(q w e r t)) Val(a) = (q w e r t)
$ (POP a) Val(a) = (w e r t)
$ (PUSH 'n a) Val(a) = (n w e r t)
Завдання
1. Побудувати список, який задовільняє наступним умовам:
а) містить два підсписки, перший з яких має три атоми, а другий - чотири атоми;
б) містить три атоми, але його хвіст дорівнює NIL;
в) містить три складені об'єкти, і лише його другий елемент є атомом;
г) голова списку містить три атоми, а кількість атомів в усьому списку дорівнює 3.
д) містить тільки порожній список, а голова списку не є атомом.
е) голова та хвіст є списками з підсписками.
2. Що буде в результаті обчислення наступних виразів:
a) (CONS NIL NIL) г) (ATOM (CDR '(q NIL)))
б) (CONS (CAR '((q w))) (CDR '((q (w e))))) д) (EQL NIL 'NIL)
в) (EQL (CDR '(q)) NIL) е) (PUSH nil nil) (EQL (ATOM '(q w)) nil)
3. Скласти вираз, який би за вхідними даними побудував би заданий результат.
a) дано: (A, B, C), (X, Y, Z). побудувати: (A, Y, Z).
б) дано: ((one 1) (two 2 3) (three 4 5 6)) побудувати: 5.
в) дано: ((q w (r) t) y) побудувати: NIL
г) дано: ((q (w (e) r) t) y) побудувати: ((q) w (e) r)
д) дано: (q (w e)) побудувати: w, e
е) дано: (q w) побудувати: (((q w)))
4. Скласти вираз, який надає значення вхідним даним та вираз, який будує заданий результат, використовуючи лише вихідні символи.
а) дано: one=1, two=2, three=3 зробити: one=2, two=3, three=1.
б) дано: Val(house)=sky, Val(sky)=house зробити: Val(sky)=sky, Val(house)=house
в) дано: Val(lst)=(q) зробити: Val(lst)=(((q) q) q)
г) дано: Val(q)=w, Val(w)=s зробити: Val(q)=(s s)
5. Не використовуючи селекторні функції:
а) дано: Val(a) = (q w e r t y) зробити: Val(a) = q
б) дано: Val(a) = (q w e r t y) зробити: Val(a) = (w)
6. Вказати значення всіх змінних після виконання наступних дій:
(SET one 'two)
(SETQ two 'one)
(SET three two four 'one two three)
(PSETQ four one three 'four two three one four)
II Варіант завдань
1. Побудувати список, який задовільняє наступним умовам:
а) голова та хвіст списку дорівнює NIL.
б) серед елементів списку є три списки, але жодного складного об'єкту.
в) серед елементів списку немає атомів, хвіст голови не є порожнім списком, але хвіст хвоста є порожнім списком.
г) усі елементи списку - атоми, при чому перший та третій елементи - символи, другий та четвертий - не символи, а п'ятий - не символ і не число.
2. Що буде в результаті обчислення наступних виразів:
а) (CADR '(nil (nil)))
б) (CONS (ATOM '(ATOM '(q w e))) '(NIL))
в) (CONS '(q w) '(e r) '(t y))
г) (EQL (ATOM (CDR '(nil))) (CADDDR '(w e r t y))
д) (EQL (CONS nil) (CADR '(q (nil) w)))
е) (CDR '(CDR (CONS '(q) '(w))))
3. Вказати значення всіх змінних після виконання наступних дій:
а) (SETQ one two two three three one)
(SET one three)
(PSETQ one two two three three one)
б) (SETQ a '(a b) b '(b c) c '(c a))
(SET (CADR b) (CONS a))
(SETQ a (CADR a) b (CADR b) c (CADR c))
Зауваження: якщо a = (a b), b = (b c), c = ((a b)), то після
(SETQ a (CADR a)) буде a = b, b = (b c), c = ((a b)),
а після (SETQ a (EVAL (CADR a))) буде a = (b c), b = (b c), c = ((a b)).
Відповіді
1. а) ((q w e)(r t y u)) г) ((q w e))
б) ((q w e)) д) ((NIL))
в) ((q w) e (r t) (y)) е) ( (e (p)) (2 9 (9)) )
2. a) (NIL) г) (ATOM (NIL)) = NIL
б) (CONS '(q w) NIL) = ((q w)) д) (EQL NIL 'NIL) = T
в) (EQL NIL NIL) = Т е) (EQL NIL (NIL)) = NIL
3. а) (CONS (CAR '(A B C)) (CDR '(X Y Z)))
б) (CADDR (CADDR '((one 1) (two 2 3) (three 4 5 6))))
в) (CDDR '((q w (r) t) y))
г) (SETQ t '((q (w (e) r) t) y))
(CONS (CONS (CAAR t) NIL) (CADAR t))
д) (SETQ a '(q (w e)))
(CAADR a) -> w, (CADADR a) -> e
е) (cons (cons '(q w) nil) nil)
4. a) $ (SETQ one 1 two 2 three 3) в) (CONS (CONS lst lst) lst)
$ (PSETQ one two two three three one)
б) $ (PSETQ house sky sky house) г) (SETQ q (CONS w (CONS w)))
$ (PSETQ house sky sky house)
5. а) $ (SETQ a '(q w e r t y)) б) $ (POP a) Val(a) = (w e r t y)
$ (SETQ a (POP a)) $ (SETQ a (POP a)) Val(a) = w
$ (SETQ a (CONS aNIL))
6. Val(one) = two
Val(one) = two, Val(two) = one
Val(one) = two, Val(two) = one, Val(three) = one, Val(four) = four
Val(one) = four, Val(two) = one, Val(three) = four, Val(four) = two
II Варіант завдань
1. а) (NIL) в) ((e к) (e))
б) (()()()) г) (q 3 r 3 ())
2. а) (NIL) в) ((q w) e r) д) NIL (порівняння списків а не атомів!)
б) (NIL NIL) г) T е) ((CONS (QUOTE (Q)) (QUOTE (W))))
3.а)one two three б) a b c
------------------------------- -------------------------------
two three two (a b) (b c) (c a)
two two two (a b) (b c) ((a b))
two two two b c NIL
Loading...

 
 

Цікаве