Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pol_Grem_-_ANSI_Common_Lisp_High_tech_-_2012.pdf
Скачиваний:
27
Добавлен:
12.03.2016
Размер:
4.85 Mб
Скачать

152

Глава 8. Символы

(defun generate-text (n &optional (prev ’|.|)) (if (zerop n)

(terpri)

(let ((next (random-next prev))) (format t "~A " next) (generate-text (1- n) next))))

(defun random-next (prev)

(let* ((choices (gethash prev *words*)) (i (random (reduce #’+ choices

:key #’cdr))))

(dolist (pair

choices)

(if (minusp

(decf i (cdr pair)))

(return

(car pair))))))

Рис. 8.3. Гене­ра­ция­ текста­

Итоги главы

1.Именем­ симво­ла­ может­ быть любая­ строка,­ но симво­лы,­ созда­вае­мые­ с помо­щью­ read, по умолча­нию­ преоб­ра­зу­ют­ся­ к верхне­му­ реги­ст­ру­.

2.С симво­ла­ми­ связа­ны­ списки­ свойств, кото­рые­ функцио­ни­ру­ют­ по­ добно­ ассо­циа­тив­ным­ спискам,­ хотя­ и имеют­ другую­ форму­.

3.Симво­лы ­– это доволь­но­ внуши­тель­ные­ объек­ты­ и больше­ напо­ми­­ нают­ структу­ры,­ неже­ли­ просто­ имена­.

4.Паке­ты­ отобра­жа­ют­ строки­ в симво­лы­. Чтобы­ создать­ новый­ сим­ вол, при­надле­жа­щий­ паке­ту,­ необ­хо­ди­мо­ этот символ­ интер­ни­ро­­ вать в него­. Симво­лы­ не обяза­тель­но­ долж­ны быть интер­ни­ро­ва­ны­.

5.С помо­щью­ паке­тов­ реали­зу­ет­ся­ модуль­ность,­ огра­ни­чи­ваю­щая­ об­ ласть дейст­вия­ имен. По умолча­нию­ програм­мы­ будут­ нахо­дить­ся­ в пользо­ва­тель­ском­ паке­те,­ одна­ко­ большие­ програм­мы­ часто­ разде­­ ляют­ся­ на несколь­ко­ паке­тов,­ имеющих­ собст­вен­­ное назна­че­ние­.

6.Симво­лы­ одно­го­ паке­та­ могут­ быть доступ­ны­ в другом­. Ключе­вые­ слова­ само­вы­чис­ляе­мы­ и доступ­ны­ из любо­го­ паке­та­.

7.В програм­мах,­ рабо­таю­щих­ с отдель­ны­ми­ слова­ми,­ удобно­ пред­ ставлять­ слова­ с помо­щью­ симво­лов­.

Упражнения

1.Могут­ ли два симво­ла­ иметь одно­ имя, но не быть экви­ва­лент­ны­ми­ с точки­ зрения­ eql?

2.Оцени­те­ разли­чие­ между­ коли­че­ст­вом­ памя­ти,­ исполь­зо­ван­ной­ для представ­ле­ния­ строки­ "FOO" и симво­ла­ foo.

Упражнения

153

3.В вызо­ве­ defpackage, приве­ден­ном­ на стр. 148, исполь­зо­ва­лись­ лишь строки­. Тем не менее­ вместо­ строк мы могли­ бы восполь­зо­вать­ся­ симво­ла­ми­. Чем это может­ быть чрева­то?­

4.Добавь­те­ в програм­му­ на рис. 7.1 код, кото­рый­ поме­ща­ет­ ее содер­жи­­ мое в пакет­ "RING". Анало­гич­но­ для кода­ на рис. 7.2 создай­те­ пакет­ "FILE". Уже имеющий­ся­ код должен­ остать­ся­ без изме­не­ний­.

5.Напи­ши­те­ програм­му,­ прове­ряю­щую,­ была­ ли задан­ная­ цита­та­ про­ изве­де­на­ с помо­щью­ Henley (см. раздел 8.8).

6.Напи­ши­те­ версию­ Henley, кото­рая­ прини­ма­ет­ слово­ и произ­во­дит­ предло­же­ние,­ в сере­ди­не­ кото­ро­го­ нахо­дит­ся­ задан­ное­ слово­.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]