Быстрый старт: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Racket с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ

ΠœΡΡ‚ΡŒΡŽ Π€Π»Π°Ρ‚Ρ‚

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ прСдоставляСт ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² язык программирования Racket, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для рисования ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Racket для своих худоТСствСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ интСрСсныС ΠΈ ΠΏΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. Π’Π΅Π΄ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° стоит ΠΏΡΡ‚ΡŒΡΠΎΡ‚ "hello world".


1. Готовы…

Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Racket , установитС ΠΈ запуститС DrRacket.


2. Установка…

ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ DrRacket для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π° IDE DrRacket.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для создания ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, которая являСтся Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ тСкстовой ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² DrRacket:

#lang slideshow

Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ β€œΠ’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒβ€. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ тСкстовый курсор пСрСмСстится Π² ниТнюю Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, которая являСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ взаимодСйствия.

Если Π²Ρ‹ использовали DrRacket Ρ€Π°Π½ΡŒΡˆΠ΅, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ DrRacket, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π² исходном ΠΊΠΎΠ΄Π΅, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡƒΠ½ΠΊΡ‚ мСню β€œΠ―Π·Ρ‹ΠΊ Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ язык…” ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ β€œΠ’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒβ€.

3. НачнСм!

Когда Π²Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ послС символа > Π² ΠΎΠΊΠ½Π΅ взаимодСйствия ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Enter, DrRacket ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ просто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ число 5 ΠΈΠ»ΠΈ строка β€œΠ³Π°Π»Π΅Ρ€Π΅Ρ искусств”:

> 5
5
> "галСрСя искусств"
"галСрСя искусств"

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ скобку ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ выраТСния для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ скобку, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

> (circle 10)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ circle являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выводится ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ числа ΠΈΠ»ΠΈ строки. АргумСнт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ circle опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡ€ΡƒΠ³Π° Π² пиксСлях. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, сущСствуСт функция rectangle, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ:

> (rectangle 10 20)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ circle Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚:

> (circle 10 20)
circle: arity mismatch;
ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ соотвСтствуСт Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ
количСство
ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅: 1 плюс Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами
#:border-color ΠΈ #:border-width
Π·Π°Π΄Π°Π½Π½ΠΎΠ΅: 2
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹...:
10
20

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ DrRacket подсвСчиваСт Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Π²Π°Π»ΠΎ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Π½ΠΎ розовая подсвСтка Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² этой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ).

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ конструкторам ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ circle ΠΈ rectangle, сущСствуСт функция hc-append, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Когда Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Racket, это выглядит Ρ‚Π°ΠΊ:

> (hc-append (circle 10) (rectangle 10 20))

ДСфис Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hc-append являСтся просто Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°; это Π½Π΅ hc минус append. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинаСтся с h, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π±ΡƒΠΊΠ²Π° c, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ.

Если Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ΡΡŒ вопросом, ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, способ стСка ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ? β€” пСрСмСститС тСкстовый курсор Π½Π° имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hc-append ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ F1 Π² DrRacket. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ ΠΎΠΊΠ½ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΈ ΠΎΠ½ΠΎ даст Π²Π°ΠΌ ссылку Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ для hc-append. НаТмитС Π½Π° ссылку, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Если Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ это Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° hc-append ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² этом ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅.


4. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ нСсколько Ρ€Π°Π·, ΠΏΡ€ΠΎΡ‰Π΅ Π΄Π°Ρ‚ΡŒ ΠΈΠΌ ΠΈΠΌΠ΅Π½Π°. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (вСрхняя ΠΎΠ±Π»Π°ΡΡ‚ΡŒ) ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΄Π²Π° опрСдСлСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ содСрТимоС области ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

#lang slideshow
(define c (circle 10))
(define r (rectangle 10 20))

Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ β€œΠ’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒβ€ Π΅Ρ‰Π΅ Ρ€Π°Π·. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ввСсти c ΠΈΠ»ΠΈ r:

> r

> (hc-append c r)

> (hc-append 20 c r c)

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, функция hc-append ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ числовой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. Когда число прСдоставлСно, ΠΎΠ½ΠΎ опрСдСляСт количСство пространства, добавляСмого ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ.

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ define для c ΠΈ r Π² области взаимодСйствия вмСсто области ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ β€” это мСсто, Π³Π΄Π΅ ΠΆΠΈΠ²Π΅Ρ‚ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ сохраняСтС, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ взаимодСйствия ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… исслСдований ΠΈ Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ define, ΠΊΠ°ΠΊ ΠΈ наши опрСдСлСния Ρ„ΠΎΡ€ΠΌ, Π½ΠΎ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ скобкой ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой:

(define (square n)
; Π’ΠΎΡ‡ΠΊΠ° с запятой Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ строки.
; Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅ β€” это Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
(filled-rectangle n n))

Бинтаксис опрСдСлСния ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ синтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

> (square 10)

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ опрСдСлСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ†Π΅Π½Π΅Π½Ρ‹ Π² области взаимодСйствия, выраТСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· области ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² области взаимодСйствия. ΠžΡ‚Π½Ρ‹Π½Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ наши ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ вмСстС, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π»ΡŽΠ±ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π΅, поэтому Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ хотя Π±Ρ‹ опрСдСлСния Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ.


5. Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ связываниС

Π€ΠΎΡ€ΠΌΠ° define ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСстах для создания Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… связываний. НапримСр, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

(define (four p)
  (define two-p (hc-append p p))
  (vc-append two-p two-p))
> (four (circle 10))

image

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ, Racketeers ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ let ΠΈΠ»ΠΈ let* для локального связывания. Одним ΠΈΠ· прСимущСств let являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Π² любой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ выраТСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΎ связываСт ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ define для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°:

(define (checker p1 p2)
  (let ([p12 (hc-append p1 p2)]
        [p21 (hc-append p2 p1)])
    (vc-append p12 p21)))
> (checker (colorize (square 10) "red")
           (colorize (square 10) "black"))

Π€ΠΎΡ€ΠΌΠ° let связываСт ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, поэтому связывания Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Π€ΠΎΡ€ΠΌΠ° let*, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², позволяСт Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌ связываниям ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ связывания:

(define (checkerboard p)
  (let* ([rp (colorize p "red")]
         [bp (colorize p "black")]
         [c (checker rp bp)]
         [c4 (four c)])
    (four c4)))
> (checkerboard (square 10))


6. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это значСния

ВмСсто Π²Ρ‹Π·ΠΎΠ²Π° circle ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ просто circle ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

circle
#<procedure:circle>

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ circle связан с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ (Ρ‚Π°ΠΊΠΆΠ΅ извСстной ΠΊΠ°ΠΊ Β«ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Β»), Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ c связан с ΠΊΡ€ΡƒΠ³ΠΎΠΌ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΊΡ€ΡƒΠ³Π°, Π½Π΅Ρ‚ простого способа ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, поэтому DrRacket просто распСчатываСт #procedure:circle.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это значСния, ΠΊΠ°ΠΊ ΠΈ числа ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅ красиво). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это значСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

(define (series mk)
  (hc-append 4 (mk 5) (mk 10) (mk 20)))
> (series circle)

> (series square)

Когда вызываСтся функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, функция-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ часто Π½Π΅ Π½ΡƒΠΆΠ½Π° Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ define Π±Ρ‹Π»Π° Π±Ρ‹ Ρ…Π»ΠΎΠΏΠΎΡ‚Π½ΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ имя ΠΈ Π½Π°ΠΉΡ‚ΠΈ мСсто для опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся использованиС lambda, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаСт Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

> (series (lambda (size) (checkerboard (square size))))

ИмСна Π² скобках послС lambda β€” это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ послС ΠΈΠΌΠ΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² β€” это Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ИспользованиС слова Β«lambdaΒ» вмСсто «функция» ΠΈΠ»ΠΈ Β«ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Β» являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ истории ΠΈ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹ Racket.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ define для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° самом Π΄Π΅Π»Π΅ являСтся сокращСниСм для простого define, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ lambda Π² качСствС значСния. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ series ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ

(define series
  (lambda (mk)
    (hc-append 4 (mk 5) (mk 10) (mk 20))))

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Racketeers ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с define вмСсто Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄ΠΎ lambda.


7. ЛСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

Racket β€” это язык с лСксичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² тСкстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ выраТСния опрСдСляСт связываниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ Π² Ρ‚Π΅Π»Π΅ lambda, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rgb-series использованиС mk Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ lambda относится ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ rgb-series, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это связываниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² тСкстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ:

(define (rgb-series mk)
  (vc-append
   (series (lambda (sz) (colorize (mk sz) "red")))
   (series (lambda (sz) (colorize (mk sz) "green")))
   (series (lambda (sz) (colorize (mk sz) "blue")))))
> (rgb-series circle)

> (rgb-series square)

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ rgb-maker ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

(define (rgb-maker mk)
  (lambda (sz)
    (vc-append (colorize (mk sz) "red")
               (colorize (mk sz) "green")
               (colorize (mk sz) "blue"))))
> (series (rgb-maker circle))

> (series (rgb-maker square))

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ составлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ rgb-maker создаСт Ρ€Π°Π·Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с использованиСм rgb-series.


8. Бписки

Racket наслСдуСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ своСго стиля ΠΎΡ‚ языка Lisp, Ρ‡ΡŒΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Β«LISt ProcessorΒ», ΠΈ списки ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Racket.

Ѐункция list ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список, содСрТащий Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ значСния:

> (list "red" "green" "blue")
'("red" "green" "blue")

> (list (circle 10) (square 10))

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, список распСчатываСтся ΠΊΠ°ΠΊ одинарная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ΠΈ ΠΏΠ°Ρ€Π° скобок, ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΡ… Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ элСмСнтов списка. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ мСсто для ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ скобки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ для Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ (circle 10), Ρ‚Π°ΠΊ ΠΈ для распСчатанных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ β€˜(β€œred” β€œgreen” β€œblue”). ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ° β€” это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅, ΠΊΠ°ΠΊ обсуТдаСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π² DrRacket, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ скобок Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ синим Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ скобок Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ список, Ρ‚ΠΎ Π²Ρ‹, скорСС всСго, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· элСмСнтов. Ѐункция map ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту списка; ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ список, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

(define (rainbow p)
  (map (lambda (color)
         (colorize p color))
       (list "red" "orange" "yellow" "green" "blue" "purple")))

1> (rainbow (square 5))

(imageΒ imageΒ imageΒ imageΒ imageΒ image)

Другая функция, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со списками, β€” это apply. Как ΠΈ map, ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ список, Π½ΠΎ функция, пСрСданная Π² apply, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. Ѐункция apply особСнно ΠΏΠΎΠ»Π΅Π·Π½Π° с функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ vc-append:

> (apply vc-append (rainbow (square 5)))

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ (vc-append (rainbow (square 5))) Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ vc-append Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ списка Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°; ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ любоС количСство ΠΈΠ· Π½ΠΈΡ…. Ѐункция apply соСдиняСт Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈ списком этих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ значСния.


9. ΠœΠΎΠ΄ΡƒΠ»ΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² ΠΎΠΊΠ½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ начинаСтся с

#lang slideshow

вСсь ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π² ΠΎΠΊΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, находится Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΈΠ· модуля, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ slideshow, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ экспортируСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ list ΠΈ map.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ require. НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° pict/flash прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ filled-flash:

(require pict/flash)
> (filled-flash 40 30)

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами:

НСкоторыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ Π² дистрибутив Racket ΠΈΠ»ΠΈ установлСны Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. НапримСр, имя модуля pict/flash ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ β€œflash.rkt”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€œpict”». Когда имя модуля Π½Π΅ содСрТит косой Ρ‡Π΅Ρ€Ρ‚Ρ‹, ΠΎΠ½ΠΎ относится ΠΊ Ρ„Π°ΠΉΠ»Ρƒ β€œmain.rkt”.

НСкоторыС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Install Package… Π² мСню File DrRacket ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки raco pkg. НапримСр, установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° β€œavl” Π΄Π΅Π»Π°Π΅Ρ‚ доступным ΠΌΠΎΠ΄ΡƒΠ»ΡŒ avl.

ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сайтС https://pkgs.racket-lang.org/ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· рСпозитория Git, Π²Π΅Π±-сайта, Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π‘ΠΌ. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π² Racket для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ….

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ваши опрСдСлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ мСню Save Definitions DrRacket.

НСкоторыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ° ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. НапримСр, Π² DrRacket, Ссли Π²Ρ‹ сохранитС свои опрСдСлСния Π΄ΠΎ сих ΠΏΠΎΡ€ Π² Ρ„Π°ΠΉΠ»Π΅ β€œquick.rkt” ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ строку

(provide rainbow square)

Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ Π² DrRacket, ввСсти Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ β€œuse.rkt” Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ β€œquick.rkt”:

#lang racket
(require "quick.rkt")
(rainbow (square 5))

ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запуститС β€œuse.rkt”, список Ρ€Π°Π΄ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ β€œuse.rkt” написан с использованиСм Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° racket, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам ΠΏΠΎ сСбС Π½Π΅ прСдоставляСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ создания ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, Π½ΠΎ прСдоставляСт require ΠΈ синтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Racketeers ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΈ ΠΏΡƒΡ‚ΠΈ, основанныС Π½Π° коллСкциях. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, разработанная Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, каТСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚, особСнно Ссли рСализация Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git.


10. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ стоит ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ:

(require slideshow/code)
1> (code (circle 10))

ВмСсто ΠΊΡ€ΡƒΠ³Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ссли Π±Ρ‹ ΠΎΠ½ использовался ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, создал Π±Ρ‹ ΠΊΡ€ΡƒΠ³. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, code β€” это Π½Π΅ функция, Π° новая синтаксичСская Ρ„ΠΎΡ€ΠΌΠ° для создания ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ; Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π΅ являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° вмСсто этого манипулируСтся синтаксичСской Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΊΠΎΠ΄Π°.

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π² Π²ΠΈΠ΄Ρƒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ racket прСдоставляСт require ΠΈ синтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ экспортом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ синтаксичСскиС Ρ„ΠΎΡ€ΠΌΡ‹. Π’ этом смыслС Racket Π½Π΅ являСтся языком Π²ΠΎΠΎΠ±Ρ‰Π΅; это скорСС идСя ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ язык, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅ языки.

Один ΠΈΠ· способов ввСдСния Π½ΠΎΠ²ΠΎΠΉ синтаксичСской Ρ„ΠΎΡ€ΠΌΡ‹ β€” это использованиС define-syntax с syntax-rules:

(define-syntax pict+code
  (syntax-rules ()
    [(pict+code expr)
     (hc-append 10
                expr
                (code expr))]))
> (pict+code (circle 10))

Π’Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ являСтся макросом. Π§Π°ΡΡ‚ΡŒ (pict+code expr) β€” это шаблон для использования макроса; экзСмпляры шаблона Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ экзСмплярами ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся (hc-append 10 expr (code expr)). Π’ частности, (pict+code (circle 10)) соотвСтствуСт ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ с (circle 10) Π² качСствС expr, поэтому ΠΎΠ½ замСняСтся Π½Π° (hc-append 10 (circle 10) (code (circle 10))).

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, этот Π²ΠΈΠ΄ синтаксичСского Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ дСйствуСт Π² ΠΎΠ±Π΅ стороны: ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ языка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ для выраТСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π½ΠΎ слоТнСС для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ½ΡΡ‚ΡŒ. Как оказалось, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Racket постоянно Π΄Π°ΡŽΡ‚ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΈΡˆΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Racket, ΠΈ для всСх, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ этими ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅.

На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° исходный ΠΊΠΎΠ΄ этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ начинаСтся с #lang, Π½ΠΎ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Racket; Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ‹ создаСм этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, запуская Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Racket. Нам приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, Ρ‡Π΅ΠΌ просто syntax-rules, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ синтаксис Racket достаточно для написания Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ синтаксичСскоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Racket ΠΌΠΎΠΆΠ΅Ρ‚ увСсти вас Π΄Π°Π»Π΅ΠΊΠΎ.


11. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

БистСма ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ слоТного Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стоит ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Racket. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ lambda, ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ особСнно Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для графичСских интСрфСйсов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. API для GUI ΠΈ графичСской систСмы Racket выраТаСтся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ классов.

Π‘Π°ΠΌΠ° систСма классов Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ racket/class, Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° racket/gui/base прСдоставляСт классы GUI ΠΈ рисования. По соглашСнию, классам ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° %:

(require racket/class
         racket/gui/base)
(define f (new frame% [label "МоС искусство"]
                      [width 300]
                      [height 300]
                      [alignment '(center center)]))
> (send f show #t)

Π€ΠΎΡ€ΠΌΠ° new создаСт экзСмпляр класса, Π³Π΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ label ΠΈ width, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π€ΠΎΡ€ΠΌΠ° send Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ show, с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ послС ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°; Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ #t Π² Π΄Π°Π½Π½ΠΎΠΌ случаС являСтся логичСской константой «истина».

ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, сгСнСрированныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ slideshow, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ рисования графичСского ящика для отобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² контСкстС рисования, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ холст Π² Ρ€Π°ΠΌΠΊΠ΅. Ѐункция make-pict-drawer ΠΈΠ· slideshow прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ рисования ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ make-pict-drawer Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ рисования холста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° холстС:

(define (add-drawing p)
  (let ([drawer (make-pict-drawer p)])
    (new canvas% [parent f]
                 [style '(border)]
                 [paint-callback (lambda (self dc)
                                   (drawer dc 0 0))])))
> (add-drawing (pict+code (circle 10)))
#(struct:object:canvas% ...)

> (add-drawing (colorize (filled-flash 50 30) "yellow"))
#(struct:object:canvas% ...)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ холст растягиваСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ Ρ€Π°ΠΌΠΊΠ° управляСт своими Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ элСмСнтами ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.


12. ΠšΡƒΠ΄Π° ΠΈΠ΄Ρ‚ΠΈ дальшС

Π­Ρ‚ΠΎΡ‚ Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ курс Π² Racket Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… способов прСдставлСния ΠΈ различия Lisp ΠΈΠ»ΠΈ Scheme: прСфиксной арифмСтичСской записи, символов, цитирования ΠΈ квазицитирования списков, eval, пСрвоклассных ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΠ΄Π΅ΠΈ, Ρ‡Ρ‚ΠΎ вся синтаксис Π½Π° самом Π΄Π΅Π»Π΅ просто lambda Π² маскировкС. Π₯отя всС это являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Racket, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ повсСднСвной программирования Π² Racket.

ВмСсто этого программисты Racket ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, записСй, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ, вмСсто «минималистского» языка β€” ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто описываСтся ΠΊΠ°ΠΊ Scheme β€” Racket ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ язык с ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ инструмСнтов.

Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ€ΠΏΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ, ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ «Как ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹Β». Если Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΅Π³ΠΎ ΠΈΠ»ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΡƒΠ΄Π° вас ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊΠ½ΠΈΠ³Π°, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ Β«ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ: Π²Π΅Π±-прилоТСния Π² RacketΒ».

Для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… программистов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ знакомство с Racket с систСмной Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π° Π½Π΅ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ, ваша ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ остановка β€” Β«Π‘ΠΎΠ»ΡŒΡˆΠ΅: систСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с RacketΒ».

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ язык ΠΈ инструмСнты Racket Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ «Руководству ΠΏΠΎ RacketΒ».