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

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

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

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

'qw) $ (EQL (CAR '(q w)) q) $ (EQL (CAR '(q,w) NIL)
T T F
При написаннi програм на Лiспi часто виникає запитання: чи є даний об'єкт атомом? Це питання вирiшує предикат ATOM. Вiн повертає Т, якщо об'єкт є атомом i NIL в iншому випадку. Порожнiй список NIL є атомом.
$ (ATOM qwerty) $ (ATOM '(q w e)) $ (ATOM '())
T F T
$ (ATOM '(q)) $ (ATOM 3)
F T
Функцiї призначення
Функцiї призначення застосовуються для надання значень програмним змiнним. До них вiдносяться:
1. (SET symbol object) - замiна символа об'єктом
2. (SETQ sym1 form1 sym2 form2 ...) - спецiальна форма функцiї SET
3. (PSETQ sym1 form1 sym2 form2 ... ) - спецiальна форма функцiї SET
4. (POP symbol) - повертає вершину стека (списку)
5. (PUSH symbol form) - кладе символ symbol в стек (список) form.
Операцiя замiни значення символа здiйснюється за допомогою функцiї SET. Вона присвоює символу symbol значення object, або зв'язує symbol з object. Для скорочення замiсть SET ' пишуть SETQ (SET Quote). Як результат функцiя присвоєння повертає другий аргумент.
$ (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)
Функцiя SETQ дозволяє здiйснювати замiну значень декiльком символам в однiй командi: (SETQ a 1 b 2 c 3). При цьому змiни виконуються послiдовно злiва направо. Пiсля цього значенням символу a стане 1, b - 2, c - 3.
Функцiя PSETQ iдентична до функцiї SETQ за винятком того, що всi форми оцiнюються до того, як будуть здiйсненi будь-якi замiни. Проiлюструємо це на прикладi. Значення символа 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
При виконаннi операцiї замiни необхiдно розрiзняти символ та значення. При стартi системи mulLsp значенням кожного символа є вiн сам. Якщо ми введемо DOG, то i результатом буде DOG. Присвоїмо символовi DOG значення CAT: (SET 'DOG 'CAT). Результатом виразу (SET DOG 'HEN) буде HEN, але значення HEN ми присвоювали не символу DOG, а значенню символа DOG, тобто символу CAT. Значення символа DOG залишилося без змiни. Розглянемо результат наступних дiй:
(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 не є символом i не може приймати iншi значення
POP повертає голову списка (вершину стека) i замiнює значення symbol на його хвiст. PUSH кладе в стек та змiнює його значення на збiльшений стек.
$ (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)
Завдання
I Варiант завдань
1. Побудувати список, який задовiльняє наступним умовам:
а) мiстить два пiдсписки, перший з яких має три атоми, а другий - чотири атоми;
б) мiстить три атоми, але його хвiст дорiвнює NIL;
в) мiстить три складенi об'єкти, i лише його другий елемент є атомом;
г) голова списку мiстить три атоми, а кiлькiсть атомiв в усьому списку дорiвнює 3.
д) мiстить тiльки порожнiй список, а голова списку не є атомом.
е) голова та хвiст є списками з пiдсписками.
2. Що буде в результатi обчислення наступних виразiв:
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. Скласти вираз, який би за вхiдними даними побудував би заданий результат.
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. Скласти вираз, який надає значення вхiдним даним та вираз, який будує заданий результат, використовуючи лише вихiднi символи.
а) дано: 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. Не використовуючи селекторнi функцiї:
а) дано: Val(a) = (q w e r t y) зробити: Val(a) = q
б) дано: Val(a) = (q w e r t y) зробити: Val(a) = (w)
6. Вказати значення всiх змiнних пiсля виконання наступних дiй:
(SET one 'two)
(SETQ two 'one)
(SET three two four 'one two three)
(PSETQ four one three 'four two three one four)
II Варiант завдань
1. Побудувати список, який задовiльняє наступним умовам:
а) голова та хвiст списку дорiвнює NIL.
б) серед елементiв списку є три списки, але жодного складного об'єкту.
в) серед елементiв списку немає атомiв, хвiст голови не є порожнiм списком, але хвiст хвоста є порожнiм списком.
г) усi елементи списку - атоми, при чому перший та третiй елементи - символи, другий та четвертий - не символи, а п'ятий - не символ i не число.
2. Що буде в результатi обчислення наступних виразiв:
а) (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. Вказати значення всiх змiнних пiсля виконання наступних дiй:
а) (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)),
то пiсля (SETQ a (CADR a)) буде a = b, b = (b c), c = ((a b)),
а пiсля (SETQ a (EVAL (CADR a))) буде a = (b c), b = (b c), c = ((a b)).
(EVAL a) - обчислити значення символа а, або повернути його значення.
Loading...

 
 

Цікаве