Создание фреймов
и извлечение информации из них.
Задание 31: Создать фреймы, описывающие
фрагмент библиотечной системы (содержащие как декларативную, так и процедуральную
(в том числе использующую переменные ФРЛ-среды) составляющие).
Задание 32: Добавить во фреймы, определенные
в предыдущем задании, дополнительную информацию всеми возможными способами.
Задание 33: Извлечь из определенных
фреймов информацию по заданному множеству запросов.
Задание 34: Реализовать функцию последовательного
просмотра на экране фреймов из заданного списка. Предусмотреть запрос
о направлении дальнейшего просмотра списка фреймов.
(setq time 2001)
(deframeq Card1
(Section ($value ( Roman) ) ($default ( Story) ))
(Popularity ($default (0)))
(Year ($value 1980))
(BookName ($value (Voina_i_Mir)))
(Author ($value (Tolstoi)))
(Age ($value (GetAge (PARM: time ) (STATUS: EVAL) )))
)
(deframeq Card2
(Section ($value ( Roman) ) ($default ( Story) ))
(Popularity ($default (0)))
(Year ($value 1970))
(BookName ($value (Karenina)))
(Author ($value (Tolstoi)))
(Age ($value (GetAge (PARM: time ) (STATUS: EVAL) )))
)
(deframeq Card3
(Section ($default ( Story) ))
(Popularity ($default (0)))
(Year ($value 1965))
(BookName ($value (Sunday)))
(Author ($value (Tolstoi)))
(Age ($value (GetAge (PARM: time ) (STATUS: EVAL) )))
)
(deframeq Card4
(Section ($value ( Roman) ) ($default ( Story) ))
(Popularity ($default (0)))
(Year ($value 1990))
(BookName ($value (Voina_i_Mir)))
(Author ($value (Tolstoi)))
(Age ($value (GetAge (PARM: time ) (STATUS: EVAL) )))
)
(deframeq Card5
(Section ($default ( Story) ))
(Popularity ($default (0)))
(Year ($value 1999))
(BookName ($value ((Hercule Poirot))))
(Author ($value (Kristi)))
(Age ($value (GetAge (PARM: time ) (STATUS: EVAL) )))
)
(passertq GetAge (time3) ( (AddPopularity :Frame) (- time3 (car (fget
:FRAME Year )))))
(defun ChangeYear (F Ye)
(fdelete F Year $value)
(fput F Year $value Ye)
)
(defun AddPopularity (F P)
(Setq P (car (fget F Popularity)))
(fdelete F Popularity)
(fput F Popularity $value (+ P 1))
)
(defun RunFView (FL Num Fl2 A)
(loop
(princ "This is Number ")(princ Num)
(princ " Called ")(print (car FL))
(Print "Print it?")
(if (equal (read input) 'y) (FPrint (list (car FL))))
(Princ "That was Number ")(princ Num)
(princ " Called ")(print (car FL))
(print "Show next (n), previous (p) or exit (x) ?")
(setq A (read input))
((or (Equal A 'x) (and (not (Equal A 'p)) (not (Equal A 'n)))) (Print
"Good-Bye!!"))
(cond ((and (Equal A 'p)
(not (NULL Fl2))
)
(setq Num (Sub1 Num))
(setq Fl (Cons (car FL2) FL))
(setq FL2 (cdr FL2))
)
((and (Equal A 'n)
(not (Null (cdr FL)))
)
(setq Num(Add1 Num))
(setq Fl2 (Cons (car FL) Fl2))
(setq FL (cdr FL))
)
)
)
)
(defun FView (FL)
(cond ((Null FL) (Print "Nil"))
(T (RunFView FL 1))
)
)
©Bear
Labs, Inc. 2001, All Rights Reserved.