Π Π°Π·Π½ΠΎΠ΅

Ѐункция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — SqrTT

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Ѐункция (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ѐункция (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)?

Π£ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, см. функция.

Ѐу́нкция — Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΒ β€” это поимСнованная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Ѐункция, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚Π΅ΠΎΡ€ΠΈΠΈ систСм, функция Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΒ β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ систСма (подсистСма, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°), Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ воздСйствия Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ скалярной Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (структура, индСксный массив ΠΈ Ρ‚.ΠΏ.). По Ρ…ΠΎΠ΄Ρƒ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Ρ‚Π°ΠΊΠΆΠ΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² управляСмой систСмС, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Π΅.

ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт

ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ называСтся любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ срСды, ΠΊΡ€ΠΎΠΌΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти, Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ. ВСорСтичСски Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ являСтся использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ…, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… возвращаСтся вычислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ). Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ программирования любая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой Π½Π°Π±ΠΎΡ€ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. НаиболСС извСстный язык программирования, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ эту ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒΒ β€” Лисп. Π’ Π½Ρ‘ΠΌ любая опСрация, любая конструкция языка, любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ константы, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НаиболСС ΠΏΠΎΠ»Π½ΠΎ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования рСализуСтся Π² языкС Π₯аскСлл.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ПаскалС) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ значСния) Ρ‡Ρ‘Ρ‚ΠΊΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ синтаксисом языка. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² языкС Π‘ΠΈ, β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ частным случаСм (подмноТСством) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° (псСвдотипа[источник нС указан 757Β Π΄Π½Π΅ΠΉ]) void β€” пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

АргумСнты ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся ссылкой Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ»ΠΈ ссылкой), Ρ‚ΠΎ функция, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° своСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°), Π»ΠΈΠ±ΠΎ самим Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ссылаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚).

Ѐункция Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Вакая функция Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Бсылки

Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ понятия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ? β€” Π₯Π°Π±Ρ€ Q&A

D3lphi

Ѐункция — ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° — ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния.
ΠœΠ΅Ρ‚ΠΎΠ΄ — это функция ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, которая ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу ΠΈΠ»ΠΈ экзСмпляру класса.

ΠΊΠ°ΠΊ Π±Ρ‹ Π΄Π°, Π½ΠΎ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° самом Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ³ΠΎΠΌΠΎΠ½ΠΈΡ‚ΡŒ хаос Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° ))

Π² дальнСйшСм, всС интСрСснСС всС эти понятия контСкстно зависимыС, контСкстом являСтся ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ язык

1 — Π² контСкстС ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ, ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… понятий ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΎ ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано D3lphi, это Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ классу. класс, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ понятиС ООП основанного Π½Π° классах (ΡˆΠ°Ρ€ΠΌ ситуации Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ООП Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π·Π½ΠΎΠ΅ ;))

Π² этом случаС Ρ‡Π°Ρ‰Π΅ принято ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ — это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Ρ‡Π΅Π»Π½ΠΎΠ² класса (Π±Ρ‹Π²Π°ΡŽΡ‚ Π΅Ρ‰Π΅ поля, свойства, интСрфСйсы Π½ΠΎ это ΡƒΠΆΠ΅ контСкст ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка) .. ΠΈ ΠΊΠ°ΠΊ Π²Π΅Ρ€Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Griboks — ΠΎΠ½ рСализуСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ

Π½ΠΎ .. Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ языков, Π³Π΄Π΅ понятия ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅

Π° Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ .. эта ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° частично присутствуСт Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных языках, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ языки, Π³Π΄Π΅ любой ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функция

2 — ΠΈΠ· контСкста языков:

понятиС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π² явном Π²ΠΈΠ΄Π΅, Ρ‡Π°Ρ‰Π΅ всСго ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π° языках Ρ‚ΠΈΠΏΠ° Fortran, Pascal ΠΈΠ»ΠΈ родствСнных, ΠΈ Π»ΠΈΠ±ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Π²ΠΎΠΎΠ±Ρ‰Π΅, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ Π±Ρ‹Π» Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ скромнСС

сСйчас Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ языки, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Π‘ΠΈ синтаксисС, Π΄Π°ΠΆΠ΅ java ΠΈ js Π² Π΄Π°Π½Π½ΠΎΠΌ вопросС станут родствСнниками классичСского Π‘ΠΈ

Π° Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ понятия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.. Π° Π½Π° случай, ΠΊΠΎΠ³Π΄Π° функция Π½Π΅ обязана Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ Π»ΠΈΠ±ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, просто указываСтся Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния void

смСшСниС всСго этого Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ C# — Π² этом языкС, всС Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π° любой исполняСмый ΠΊΠΎΠ΄ это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функциями (Π² Ρ‚Ρ‡ void функциями)

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π±ΠΎΠ»ΡŒΒ­ΡˆΠΈΡ… ΠΏΠΎΠ΄Β­Ρ…ΠΎΒ­Π΄Π° β€” ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΠ΅ ΠΈΒ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠ΅. Они сущС­ствСн­но ΠΎΡ‚Π»ΠΈΒ­Ρ‡Π°Β­ΡŽΡ‚Β­ΡΡ Π»ΠΎΠ³ΠΈΒ­ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΒ­Ρ‚Ρ‹, Π΅Ρ‰Ρ‘ ΠΈΒ ΡΠΎΠ·Π΄Π°Β­ΡŽΡ‚ ΠΏΡƒΡ‚Π°Β­Π½ΠΈΒ­Ρ†Ρƒ в назва­ни­ях. БСй­час объ­яс­ним.

πŸ€” Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ β€” это ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

❌ НСт. Π€ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠ΅ β€” это Π½Π΅ ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΠΈ. Π€ΡƒΠ½ΠΊΒ­Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²Β Π»ΡŽΠ±Ρ‹Ρ… язы­ках про­грам­ми­ро­ва­ния: ΠΈΒ Π² Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½Ρ‹Ρ…, ΠΈΒ Π² ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½Ρ‹Ρ…. ΠžΡ‚Π»ΠΈΒ­Ρ‡ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния ΠΎΡ‚ ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΒ­Π³ΠΎ β€” Π²Β ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠΎΠ΄Β­Ρ…ΠΎΒ­Π΄Π΅.

ΠœΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π°: инструкция ΠΈΠ»ΠΈ ΠΊΠ½ΠΈΠ³Π° ΠΏΡ€Π°Π²ΠΈΠ»

ΠŸΡ€Π΅Π΄Β­ΡΡ‚Π°Π²ΡŒΒ­Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Β­Π²Π°Β­Π΅Β­Ρ‚Π΅ ΠΊΠ°Ρ„Π΅-ΡΡ‚ΠΎΠ»ΠΎΠ²ΡƒΡŽ. БСй­час у вас Ρ‚Π°ΠΌ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° сотруд­ни­ков: ΠΏΠΎΠ²Π°Β­Ρ€Π° и адми­ни­стра­то­ры.

Для ΠΏΠΎΠ²Π°Β­Ρ€ΠΎΠ² Π²Ρ‹ ΠΏΠΈΡˆΠ΅Β­Ρ‚Π΅ Ρ‡Ρ‘Ρ‚Β­ΠΊΠΈΠ΅ ΠΏΠΎΡˆΠ°Β­Π³ΠΎΒ­Π²Ρ‹Π΅ инструк­ции для ΠΊΠ°ΠΆΒ­Π΄ΠΎΒ­Π³ΠΎ блю­да. Напри­мСр:

  1. ΠΠ°Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ΄Ρ‹ Π²Β ΠΊΠ°ΡΡ‚Ρ€ΡŽΒ­Π»ΡŽ
  2. ΠŸΠΎΡΡ‚Π°Β­Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΡΡ‚Ρ€ΡŽΒ­Π»ΡŽ с водой Π½Π° огонь
  3. Π”ΠΎΠ±Π°Β­Π²ΠΈΡ‚ΡŒ Π²Β ΠΊΠ°ΡΡ‚Ρ€ΡŽΒ­Π»ΡŽ с водой ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎ соли
  4. Если Π½ΡƒΠΆΒ­Π½ΠΎ ΠΏΡ€ΠΈΒ­Π³ΠΎΒ­Ρ‚ΠΎΒ­Π²ΠΈΡ‚ΡŒ 10 ΠΏΠΎΡ€Β­Ρ†ΠΈΠΉ, Π²Π·ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ свёк­лу. Если Π½ΡƒΠΆΒ­Π½ΠΎ ΠΏΡ€ΠΈΒ­Π³ΠΎΒ­Ρ‚ΠΎΒ­Π²ΠΈΡ‚ΡŒ 20 ΠΏΠΎΡ€Β­Ρ†ΠΈΠΉ, Π²Π·ΡΡ‚ΡŒ Π΄Π²Π΅ свёк­лы.
  5. ΠŸΠΎΡ‡ΠΈΒ­ΡΡ‚ΠΈΡ‚ΡŒ всю свёк­лу, ΠΊΠΎΡ‚ΠΎΒ­Ρ€ΡƒΡŽ Π²Ρ‹ взя­ли
  6. …

ΠŸΠΎΠ²Π°Ρ€ Π΄ΠΎΠ»Β­ΠΆΠ΅Π½ ΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Ρ‚ΡŒ этим инструк­ци­ям Ρ€ΠΎΠ²Β­Π½ΠΎ Π²Β Ρ‚ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΒ­ΡΡ‚ΠΈ, Π²Β ΠΊΠΎΡ‚ΠΎΒ­Ρ€ΠΎΠΉ Π²Ρ‹ ΠΈΡ… напи­са­ли. НСль­зя сна­ча­ла ΠΏΠΎΡ‡ΠΈΒ­ΡΡ‚ΠΈΡ‚ΡŒ свёк­лу, Π°Β ΠΏΠΎΡ‚ΠΎΠΌ Π²Π·ΡΡ‚ΡŒ Π΅Ρ‘. НСль­зя ΠΏΠΎΡΠΎΒ­Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΡΡ‚Ρ€ΡŽΒ­Π»ΡŽ, Π²Β ΠΊΠΎΡ‚ΠΎΒ­Ρ€ΠΎΠΉ Π½Π΅Ρ‚ Π²ΠΎΠ΄Ρ‹. ΠŸΠΎΡ€ΡΒ­Π΄ΠΎΠΊ дСй­ствий Π²Π°ΠΆΠ΅Π½ и опрС­дС­ля­Ст­ся Π²Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€ ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния. Π’Ρ‹ ΠΏΠΎΠ²Π΅Β­Π»Π΅Β­Π²Π°Β­Π΅Β­Ρ‚Π΅ испол­ни­тС­лСм. МоТ­но ΡΠΊΠ°Β­Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ испол­ни­тС­ли Π²Ρ‹ΠΏΠΎΠ»Β­Π½ΡΒ­ΡŽΡ‚ ваши зада­ния.

Для адми­ни­стра­то­ра Π²Ρ‹ ΠΏΠΈΡˆΠ΅Β­Ρ‚Π΅ Π½Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΒ­Ρ†ΠΈΡŽ, Π°Β ΠΊΠ°ΠΊ Π±Ρ‹ ΠΊΠ½ΠΈΒ­Π³Ρƒ ΠΏΡ€Π°Β­Π²ΠΈΠ»:

  • Π£ нас нСль­зя со сво­им. Если гости ΠΏΡ€ΠΈΒ­ΡˆΠ»ΠΈ со сво­им, Ρ‚ΠΎ ΡΠ΄Π΅Β­Π»Π°Ρ‚ΡŒ ΠΈΠΌ Π·Π°ΠΌΠ΅Β­Ρ‡Π°Β­Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ΅-Ρ‚ΠΎ.
  • Π’ Π·Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΒ­Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ чисто. Если Π²Β Π·Π°Π»Π΅ гряз­но, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡƒΠ±ΠΎΡ€Β­Ρ‰ΠΈΒ­ΠΊΠ°.
  • Если ΠΎΠ±Ρ€Π°Β­Π·ΠΎΒ­Π²Π°Β­Π»Π°ΡΡŒ ΠΎΡ‡Π΅Β­Ρ€Π΅Π΄ΡŒ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Β­Π½ΠΈΒ­Ρ‚Π΅Π»ΡŒΒ­Π½ΡƒΡŽ кас­су.

Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹, Π½ΠΎ ΠΈΡΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒ ΠΈΡ… адми­ни­стра­тор Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ в этой ΠΏΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΒ­ΡΡ‚ΠΈ, Π°Β Π² любой Π½Π° своё усмот­рС­ниС. МоТ­но ΡΠΊΠ°Β­Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Β­Ρ‡Π° это­го Ρ‡Π΅Π»ΠΎΒ­Π²Π΅Β­ΠΊΠ° β€” ΠΈΡΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΠΈ адми­ни­стра­то­ра, ΠΈΒ ΠΌΡ‹ опи­са­ли ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹ΠΌ эти Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния.

❌ ΠŸΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­ΡΡ‚Ρ‹, Π½Π΅ Π±ΠΎΠΌΒ­Π±ΠΈΒ­Ρ‚Π΅

ΠšΠΎΠ½Π΅Ρ‡Β­Π½ΠΎ ΠΆΠ΅, это ΡƒΠΏΡ€ΠΎΒ­Ρ‰Π΅Β­Π½ΠΎ для пони­ма­ния. Π’Ρ‹ сами ΠΏΠΎΠΏΡ€ΠΎΒ­Π±ΡƒΠΉΒ­Ρ‚Π΅ это Π½ΠΎΡ€Β­ΠΌΠ°Π»ΡŒΒ­Π½ΠΎ ΠΎΠ±ΡŠΒ­ΡΡΒ­Π½ΠΈΡ‚ΡŒ (ΠΌΠΎΠΆΒ­Π½ΠΎ пря­мо Π²Β ΠΊΠΎΠΌΒ­ΠΌΠ΅Π½Β­Ρ‚Π°Ρ…).

Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΒ­ΠΌΠ΅Β­Ρ€Ρ‹ язы­ков: C, Π‘++, Go, Pascal, Java, Python, Ruby

Π˜ΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΠ΅ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅ устро­С­но Ρ‚Π°ΠΊ:

Π’ язы­кС Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹Π΅ этот язык ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒ. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹ ΠΌΠΎΠΆΒ­Π½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Β ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ Π°Π²Ρ‚ΠΎΒ­ΠΌΠ°Β­Ρ‚ΠΈΒ­Π·ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΒ­Ρ‚ΠΈΠΏΒ­Π½Ρ‹Π΅ вычис­лС­ния. Π’Β ΠΊΠ°ΠΊΠΎΠΌ поряд­кС запи­са­ны ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹ Π²Π½ΡƒΡ‚Β­Ρ€ΠΈ ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹, Π²Β Ρ‚ΠΎΠΌ ΠΆΠ΅ поряд­кС ΠΎΠ½ΠΈ ΠΈΒ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒΒ­ΡΡ.

Π•ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Β­Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Β­Π½Ρ‹Π΅ ΠΈΒ ΠΈΠ·ΠΌΠ΅Β­Π½ΡΡ‚ΡŒΒ­ΡΡ Π²ΠΎ врС­мя Ρ€Π°Π±ΠΎΒ­Ρ‚Ρ‹ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹. ΠŸΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Π°Ρ β€” это ячСй­ка для Π΄Π°Π½Β­Π½Ρ‹Ρ…. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½ΡƒΡŽ Π½ΡƒΠΆΒ­Π½ΠΎΒ­Π³ΠΎ Π½Π°ΠΌ Ρ‚ΠΈΠΏΠ°, ΠΏΠΎΠ»ΠΎΒ­ΠΆΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π·Π½Π°Β­Ρ‡Π΅Β­Π½ΠΈΠ΅, Π°Β ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΌΠ΅Β­Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΒ­Π³ΠΎΠ΅.

Если ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠ΅ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π·Π½Π°Β­Ρ‡Π΅Β­Π½ΠΈΠ΅, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΒ­ΡΠ΅Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΎΡ‚ исход­ных Π΄Π°Π½Β­Π½Ρ‹Ρ…, Π½ΠΎ ΠΈΒ ΠΎΡ‚ Π΄Ρ€ΡƒΒ­Π³ΠΈΡ… ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Ρ‹Ρ…. Напри­мСр, у нас Π΅ΡΡ‚ΡŒ функ­ция, кото­рая Π²ΠΎΠ·Β­Π²Ρ€Π°Β­Ρ‰Π°Β­Π΅Ρ‚ Ρ€Π°Π·Β­ΠΌΠ΅Ρ€ скид­ки ΠΏΡ€ΠΈ ΠΏΠΎΠΊΡƒΠΏΒ­ΠΊΠ΅ Π²Β ΠΎΠ½Π»Π°ΠΉΠ½-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅. ΠœΡ‹ добав­ля­См Π²Β ΠΊΠΎΡ€Β­Π·ΠΈΒ­Π½Ρƒ Ρ‚ΠΎΠ²Π°Ρ€ ΡΡ‚ΠΎΒ­ΠΈΒ­ΠΌΠΎΒ­ΡΡ‚ΡŒΡŽ 1000 β‚½, а функ­ция Π΄ΠΎΠ»ΠΆΒ­Π½Π° Π½Π°ΠΌ Π²Π΅Ρ€Β­Π½ΡƒΡ‚ΡŒ Ρ€Π°Π·Β­ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΒ­Ρ‡ΠΈΠ²Β­ΡˆΠ΅ΠΉΒ­ΡΡ скид­ки. Но Ссли скид­ка зави­сит ΠΎΡ‚ дня Π½Π΅Π΄Π΅Β­Π»ΠΈ, Ρ‚ΠΎ функ­ция сна­ча­ла ΠΏΡ€ΠΎΒ­Π²Π΅Β­Ρ€ΠΈΡ‚, ΠΊΠ°ΠΊΠΎΠΉ сСго­дня дСнь, ΠΏΠΎΡ‚ΠΎΠΌ посмот­рит ΠΏΠΎ Ρ‚Π°Π±Β­Π»ΠΈΒ­Ρ†Π΅, какая сСго­дня скид­ка.

ΠŸΠΎΠ»ΡƒΒ­Ρ‡Π°Β­Π΅Ρ‚Β­ΡΡ, Ρ‡Ρ‚ΠΎ Π²Β Ρ€Π°Π·Β­Π½Ρ‹Π΅ Π΄Π½ΠΈ функ­ция ΠΏΠΎΠ»ΡƒΒ­Ρ‡Π°Β­Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ 1000 β‚½, Π½ΠΎ Π²ΠΎΠ·Β­Π²Ρ€Π°Β­Ρ‰Π°Β­Π΅Ρ‚ Ρ€Π°Π·Β­Π½Ρ‹Π΅ зна­чС­ния β€” Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΒ­Ρ‚Π°Β­Π΅Ρ‚ ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΠ΅ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° всё зави­сит ΠΎΡ‚ Π΄Ρ€ΡƒΒ­Π³ΠΈΡ… ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Ρ‹Ρ….

ΠŸΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΡΡ‚ΡŒ выпол­нС­ния ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΠΌ рСгу­ли­ру­Ст­ся про­грам­ми­стом. Он Π·Π°Π΄Π°Β­Ρ‘Ρ‚ Π½ΡƒΠΆΒ­Π½Ρ‹Π΅ усло­вия, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹ΠΌ дви­ТСт­ся ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠ°. Вся Π»ΠΎΠ³ΠΈΒ­ΠΊΠ° ΠΏΠΎΠ»Β­Π½ΠΎΒ­ΡΡ‚ΡŒΡŽ про­ду­мы­ва­Ст­ся про­грам­ми­стом β€” ΠΊΠ°ΠΊ ΠΎΠ½ ска­ТСт, Ρ‚Π°ΠΊ ΠΈΒ Π±ΡƒΠ΄Π΅Ρ‚. Π­Ρ‚ΠΎ Π·Π½Π°Β­Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Β­Ρ€Π°Β­Π±ΠΎΡ‚Β­Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ‡Β­Π½ΠΎ ΠΏΡ€Π΅Π΄Β­ΡΠΊΠ°Β­Π·Π°Ρ‚ΡŒ, Π²Β ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ кусок ΠΊΠΎΠ΄Π° выпол­нит­ся β€” ΠΊΠΎΠ΄ полу­ча­Ст­ся прСд­ска­зу­С­мым, с понят­ной Π»ΠΎΠ³ΠΈΒ­ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΒ­Ρ‚Ρ‹.

Если у нас ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹ΠΉ счи­та­Ст скид­ку, Π΄ΠΎΠ»Β­ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Β­Π²Π°Ρ‚ΡŒΒ­ΡΡ Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΏΡ€ΠΈ Ρ„ΠΈΠ½Π°Π»ΡŒΒ­Π½ΠΎΠΌ ΠΎΡ„ΠΎΡ€ΠΌΒ­Π»Π΅Β­Π½ΠΈΠΈ Π·Π°ΠΊΠ°Β­Π·Π°, Ρ‚ΠΎ ΠΎΠ½ выпол­нит­ся ΠΈΠΌΠ΅Π½Β­Π½ΠΎ в этот ΠΌΠΎΠΌΠ΅Π½Ρ‚. Он Π½Π΅ посчи­та­Ст скид­ку Π·Π°Ρ€Π°Β­Π½Π΅Π΅ ΠΈΒ Π½Π΅ про­пу­стит ΠΌΠΎΠΌΠ΅Π½Ρ‚ оформ­лС­ния.

πŸ‘‰ Π‘ΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠ΅Β­Ρ€Π°Β­Ρ‚ΠΈΠ²Β­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ про­грам­мист опи­сы­ва­Ст Ρ‡Ρ‘Ρ‚Β­ΠΊΠΈΠ΅ шаги, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΒ­Π½Ρ‹ при­вС­сти ΠΊΠΎΠ΄ ΠΊΒ Π½ΡƒΠΆΒ­Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ.

Π—Π²ΡƒΒ­Ρ‡ΠΈΡ‚ Π»ΠΎΠ³ΠΈΡ‡Β­Π½ΠΎ, ΠΈΒ Π±ΠΎΠ»ΡŒΒ­ΡˆΠΈΠ½Β­ΡΡ‚Π²ΠΎ про­грам­ми­стов ΠΏΡ€ΠΈΒ­Π²Ρ‹ΠΊΒ­Π»ΠΈ ΠΈΠΌΠ΅Π½Β­Π½ΠΎ ΠΊΒ Ρ‚Π°ΠΊΠΎΒ­ΠΌΡƒ повС­дС­нию ΠΊΠΎΠ΄Π°. Но Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠ΅ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΒ­Ρ‚Π°Β­Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€Β­ΡˆΠ΅Π½Β­Π½ΠΎ ΠΈΠ½Π°Β­Ρ‡Π΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΒ­ΠΌΠ΅Β­Ρ€Ρ‹ язы­ков: Haskell, Lisp, Erlang, Clojure, F#

Бмысл Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π°Π΄Π°Β­Ρ‘ΠΌ Π½Π΅ ΠΏΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΡΡ‚ΡŒ Π½ΡƒΠΆΒ­Π½Ρ‹Ρ… Π½Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄, а опи­сы­ва­См вза­и­мо­дСй­ствиС ΠΌΠ΅ΠΆΒ­Π΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈΒ ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠ°Β­ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΒ­ΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΒ­Ρ‚Π°Β­ΡŽΡ‚ ΠΎΠ±ΡŠΒ­Π΅ΠΊΒ­Ρ‚Ρ‹ Π²Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠΈ, Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ здСсь это рСа­ли­зу­Ст­ся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ всСй ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹.

Напри­мСр, в ООП Π½ΡƒΠΆΒ­Π½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΒ­Π΅ΠΊΒ­Ρ‚Ρ‹ ΠΈΒ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π° ΠΈΡ… вза­и­мо­дСй­ствия ΠΌΠ΅ΠΆΒ­Π΄Ρƒ собой, Π½ΠΎ Ρ‚Π°ΠΊΒ­ΠΆΠ΅ ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΈΒ Π½Π°ΠΏΠΈΒ­ΡΠ°Ρ‚ΡŒ про­сто ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹ΠΉ Π½Π΅ при­вя­зан ΠΊΒ ΠΎΠ±ΡŠΒ­Π΅ΠΊΒ­Ρ‚Π°ΠΌ. Он ΠΊΠ°ΠΊ Π±Ρ‹ сто­ит в сто­ронС и вли­я­Ст Π½Π° Ρ€Π°Π±ΠΎΒ­Ρ‚Ρƒ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹ Π²Β Ρ†Π΅Π»ΠΎΠΌ β€” отправ­ля­Ст ΠΎΠ΄Π½ΠΈ ΠΎΠ±ΡŠΒ­Π΅ΠΊΒ­Ρ‚Ρ‹ Π²Π·Π°Β­ΠΈΒ­ΠΌΠΎΒ­Π΄Π΅ΠΉΒ­ΡΡ‚Π²ΠΎΒ­Π²Π°Ρ‚ΡŒ с дру­ги­ми, ΠΎΠ±Ρ€Π°Β­Π±Π°Β­Ρ‚Ρ‹Β­Π²Π°Β­Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Β­Ρ‚Ρ‹ ΠΈΒ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π€ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠ΅ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅ здСсь ΠΈΠ΄Ρ‘Ρ‚ Π΅Ρ‰Ρ‘ даль­шС. Π’Β Π½Ρ‘ΠΌ вСсь ΠΊΠΎΠ΄ β€” это ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π° Ρ€Π°Π±ΠΎΒ­Ρ‚Ρ‹ с дан­ны­ми. Π’Ρ‹ про­сто Π·Π°Π΄Π°Β­Ρ‘Β­Ρ‚Π΅ Π½ΡƒΠΆΒ­Π½Ρ‹Π΅ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π°, Π°Β ΠΊΠΎΠ΄ сам раз­би­ра­Ст­ся, ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΡ‚ΡŒ.

Если ΠΌΡ‹ срав­ним ΠΏΡ€ΠΈΠ½Β­Ρ†ΠΈΒ­ΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΒ­Π³ΠΎ ΠΏΠΎΠ΄Β­Ρ…ΠΎΒ­Π΄Π° с импС­ра­тив­ным, Ρ‚ΠΎ Сдин­ствСн­ноС, Ρ‡Ρ‚ΠΎ сов­па­дёт, β€” ΠΈΒ Ρ‚Π°ΠΌ, ΠΈΒ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹Π΅ язык ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Β­Π½ΡΡ‚ΡŒ. Всё ΠΎΡΡ‚Π°Π»ΡŒΒ­Π½ΠΎΠ΅ β€” Ρ€Π°Π·Β­Π½ΠΎΠ΅.

ΠšΠΎΠΌΠ°Π½Β­Π΄Ρ‹ ΠΌΠΎΠΆΒ­Π½ΠΎ ΡΠΎΠ±ΠΈΒ­Ρ€Π°Ρ‚ΡŒ Π²Β ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹, Π½ΠΎ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Β­Π΅Ρ‚ зна­чС­ния. НСт Ρ€Π°Π·Β­Π½ΠΈΒ­Ρ†Ρ‹, Π²Β ΠΊΠ°ΠΊΠΎΠΌ поряд­кС Π²Ρ‹ Π½Π°ΠΏΠΈΒ­ΡˆΠ΅Β­Ρ‚Π΅ ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹ β€” это ΠΆΠ΅ про­сто ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π°, Π°Β ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π° ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΒ­ΡŽΡ‚Β­ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΒ­Π½ΠΎ, Π°Β Π½Π΅ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎ Π½ΠΈΡ… ска­за­ли.

ΠŸΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Ρ‹Ρ… Π½Π΅Ρ‚. Π’Π΅Ρ€Β­Π½Π΅Π΅, ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Π²Β Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΒ ΠΊΠΎΡ‚ΠΎΒ­Ρ€ΠΎΒ­ΠΌΡƒ ΠΌΡ‹ ΠΏΡ€ΠΈΒ­Π²Ρ‹ΠΊΒ­Π»ΠΈ. Π’Β Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠΌ язы­кС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΒ­ΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, и послС это­го Π·Π½Π°Β­Ρ‡Π΅Β­Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Β­Π½ΠΈΡ‚ΡŒΒ­ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ кон­стан­ты β€” запи­са­ли и всё, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΒ­Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΏΡ€ΠΎΒ­Ρ‡ΠΈΒ­Ρ‚Π°Ρ‚ΡŒ. Π‘Π°ΠΌΠΈ ΠΆΠ΅ ΠΏΡ€ΠΎΒ­ΠΌΠ΅Β­ΠΆΡƒΒ­Ρ‚ΠΎΡ‡Β­Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Β­Ρ‚Ρ‹ хра­нят­ся в функ­ци­ях β€” ΠΎΠ±Ρ€Π°Β­Ρ‚ΠΈΠ²Β­ΡˆΠΈΡΡŒ ΠΊΒ Π½ΡƒΠΆΒ­Π½ΠΎΠΉ, Π²Ρ‹ всС­гда ΠΏΠΎΠ»ΡƒΒ­Ρ‡ΠΈΒ­Ρ‚Π΅ иско­мый Ρ€Π΅Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Ρ‚.

Π€ΡƒΠ½ΠΊΒ­Ρ†ΠΈΠΈ всС­гда Π²ΠΎΠ·Β­Π²Ρ€Π°Β­Ρ‰Π°Β­ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈΒ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Β­Ρ‡Π΅Β­Π½ΠΈΠ΅, Ссли Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΡΡ‚ΡƒΒ­ΠΏΠ°Β­ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈΒ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Β­Π½Ρ‹Π΅. Если Π²Β ΠΏΡ€ΠΎΒ­ΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Ρ€Π΅ ΠΌΡ‹ ΠΎΡ‚Π΄Π°Β­Π²Π°Β­Π»ΠΈ Π²Β Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΡŽ сум­му Π²Β 1000 β‚½, Π°Β Π½Π° Π²Ρ‹Ρ…ΠΎΒ­Π΄Π΅ ΠΏΠΎΠ»ΡƒΒ­Ρ‡Π°Β­Π»ΠΈ скид­ку в зави­си­мо­сти ΠΎΡ‚ дня Π½Π΅Π΄Π΅Β­Π»ΠΈ, Ρ‚ΠΎ Π²Β Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΠΌ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠΈ Ссли функ­ция ΠΏΠΎΠ»ΡƒΒ­Ρ‡ΠΈΡ‚ в качС­ствС ΠΏΠ°Ρ€Π°Β­ΠΌΠ΅Ρ‚Β­Ρ€Π° 1000 β‚½, Ρ‚ΠΎ ΠΎΠ½Π° всС­гда Π²Π΅Ρ€Β­Π½Ρ‘Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΒ Ρ‚Ρƒ ΠΆΠ΅ скид­ку нСза­ви­си­мо ΠΎΡ‚ Π΄Ρ€ΡƒΒ­Π³ΠΈΡ… ΠΏΠ΅Ρ€Π΅Β­ΠΌΠ΅Π½Β­Π½Ρ‹Ρ….

МоТ­но про­вС­сти ана­ло­гию с матС­ма­ти­кой и сину­са­ми: синус 90 гра­ду­сов всС­гда Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΒ­Π½ΠΈΒ­Ρ†Π΅, Π²Β ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ Π΅Π³ΠΎ Π½ΠΈ посчи­та­ли ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ‹ ΡƒΠ³Π»Ρ‹ у нас Π΅Ρ‰Ρ‘ Π½ΠΈ Π±Ρ‹Π»ΠΈ Π²Β Π·Π°Π΄Π°Β­Ρ‡Π΅. Π’ΠΎ ΠΆΠ΅ самоС и здСсь β€” всё прСд­ска­зу­С­мо и зави­сит Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Β­Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Β­ΠΌΠ΅Ρ‚Β­Ρ€ΠΎΠ².

ΠŸΠΎΡΠ»Π΅Β­Π΄ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎΡΡ‚ΡŒ выпол­нС­ния ΠΏΠΎΠ΄Β­ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΠΌ опрС­дС­ля­Ст сам ΠΊΠΎΠ΄ и ком­пи­ля­тор, Π°Β Π½Π΅ про­грам­мист. КаТ­дая ΠΊΠΎΠΌΠ°Π½Β­Π΄Π° β€” это ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ, поэто­му Π½Π΅Ρ‚ Ρ€Π°Π·Β­Π½ΠΈΒ­Ρ†Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ запи­шСм это ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ, Π²Β Π½Π°Ρ‡Π°Β­Π»Π΅ ΠΈΠ»ΠΈ Π²Β ΠΊΠΎΠ½Β­Ρ†Π΅ ΠΊΠΎΠ΄Π°. Π“Π»Π°Π²Β­Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ у нас это ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ Π±Ρ‹Π»ΠΎ, а ком­пи­ля­тор сам раз­бС­рёт­ся, Π²Β ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΡ‚ΡŒ.

Π’ рус­ском язы­кС всё Ρ€Π°Π±ΠΎΒ­Ρ‚Π°Β­Π΅Ρ‚ Ρ‚ΠΎΡ‡Β­Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅: Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π° пра­во­пи­са­ния ΠΈΒ Π³Ρ€Π°ΠΌΒ­ΠΌΠ°Β­Ρ‚ΠΈΒ­ΠΊΠΈ. Нам Π½Π΅Π²Π°ΠΆΒ­Π½ΠΎ, Π²Β ΠΊΠ°ΠΊΠΎΠΌ поряд­кС ΠΌΡ‹ ΠΈΡ… ΠΈΠ·ΡƒΒ­Ρ‡ΠΈΒ­Π»ΠΈ, Π³Π»Π°Π²Β­Π½ΠΎΠ΅ β€” Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ ΠΌΡ‹ ΠΈΡ… воврС­мя при­мС­ня­ли ΠΏΡ€ΠΈ напи­са­нии тСк­ста ΠΈΠ»ΠΈ в уст­ной Ρ€Π΅Ρ‡ΠΈ. Напри­мСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сна­ча­ла ΠΏΡ€ΠΎΠΉΒ­Ρ‚ΠΈ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ Β«ΠΆΠΈ-ши», Π°Β ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ ΠΏΡ€ΠΎ Β«Π½Π΅ с гла­го­ла­ми», Π½ΠΎ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΡ‚ΡŒ ΠΌΡ‹ ΠΈΡ… Π±ΡƒΠ΄Π΅ΠΌ Π²Β Ρ‚ΠΎΠΌ поряд­кС, ΠΊΠ°ΠΊΠΎΠΉ трС­бу­Ст­ся в тСк­стС.

πŸ‘‰ ΠŸΠΎΠ»ΡƒΒ­Ρ‡Π°Β­Π΅Ρ‚Β­ΡΡ, Ρ‡Ρ‚ΠΎ смысл Ρ„ΡƒΠ½ΠΊΒ­Ρ†ΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎΒ­Π³ΠΎ про­грам­ми­ро­ва­ния Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ ΠΎΠΏΠΈΒ­ΡΠ°Ρ‚ΡŒ Π½Π΅ сами Ρ‡Ρ‘Ρ‚Β­ΠΊΠΈΠ΅ шаги ΠΊΒ Ρ†Π΅Π»ΠΈ, Π°Β ΠΏΡ€Π°Β­Π²ΠΈΒ­Π»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΒ­Ρ€Ρ‹ΠΌ ком­пи­ля­тор сам Π΄ΠΎΠ»Β­ΠΆΠ΅Π½ Π΄ΠΎΠΉΒ­Ρ‚ΠΈ Π΄ΠΎ Π½ΡƒΠΆΒ­Π½ΠΎΒ­Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Β­Ρ‚Π°.

Π’ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ / Π₯Π°Π±Ρ€

Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΡΡ‚Π°Ρ‚ΡŒΡ Π² Ρ†ΠΈΠΊΠ»Π΅ «ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ для программистов».

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹, ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹.

ΠšΠΎΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΈΠΏΡ‹?

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

Π‘ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ языком, любая комбинация Π±Π°ΠΉΡ‚ΠΎΠ² производимая обСзьянами Π±ΡƒΠ΄Π΅Ρ‚ принята ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Но Π² высокоуровнСвых языках, высоко цСнится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компилятор способСн ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ лСксичСскиС ΠΈ грамматичСскиС ошибки. МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ просто ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹, Π° ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹ останутся Π±Π΅Π· Π±Π°Π½Π°Π½ΠΎΠ², Π·Π°Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большС шансов Π±Ρ‹Ρ‚ΡŒ осмыслСнными. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² обСспСчиваСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΏΡ€ΠΎΡ‚ΠΈΠ² бСссмыслСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках нСсоотвСтствия Ρ‚ΠΈΠΏΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, Π² строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… статичСски провСряСмых языках нСсоотвСтствия Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Ρ‡Ρ‚ΠΎ отсСиваСт мноТСство Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ шанс Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ.

Π˜Ρ‚Π°ΠΊ, вопрос Π² Ρ‚ΠΎΠΌ, Ρ…ΠΎΡ‚ΠΈΠΌ Π»ΠΈ ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹ Π±Ρ‹Π»ΠΈ счастливы, ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?
(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π½Π΅ стоит ΠΎΡΠΊΠΎΡ€Π±Π»ΡΡ‚ΡŒΡΡ, Π°Π²Ρ‚ΠΎΡ€ просто Π»ΡŽΠ±ΠΈΡ‚ ΠΌΠ΅Π½Π΅Π΅ скучныС ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρ‹, Ρ‡Π΅ΠΌ Π“Π‘Π§ ΠΈ «случайныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚Β», Π° Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ программистов обСзьянами).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ†Π΅Π»ΡŒ мыслСнного экспСримСнта с ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ обСзьянами β€” созданиС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ собрания сочинСний ШСкспира (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΈΠ»ΠΈ Π’ΠΎΠΉΠ½Π° ΠΈ ΠœΠΈΡ€ Волстого). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π΅Π·ΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΡˆΠ°Π½ΡΡ‹ Π½Π° успСх. Аналог ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ дальшС: послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π ΠΎΠΌΠ΅ΠΎ объявлСн Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² убСдится, Ρ‡Ρ‚ΠΎ Π½Π° Π½Π΅ΠΌ Π½Π΅ растут Π»ΠΈΡΡ‚ΡŒΡ ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π»ΠΎΠ²ΠΈΡ‚ Ρ„ΠΎΡ‚ΠΎΠ½Ρ‹ своим ΠΌΠΎΡ‰Π½Ρ‹ΠΌ Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ.

Π’ΠΈΠΏΡ‹ Π½ΡƒΠΆΠ½Ρ‹ для компонуСмости

ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ стрСлок. НС Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²Π΅ стрСлки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпонованы: Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠΉ стрСлки Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с исходным ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли вторая функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΉ. ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… композиция Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°. Π§Π΅ΠΌ сильнСС систСма Ρ‚ΠΈΠΏΠΎΠ² языка, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ это ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ автоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ.

ЕдинствСнный ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΡΠ»Ρ‹ΡˆΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² строгой статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСмантичСски Π²Π΅Ρ€Π½Ρ‹. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это случаСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π²ΠΎ избСТания срача Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ ΡƒΡ‡Π΅Π», ΠΈΠ»ΠΈ нСсогласСн, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ стилСй, ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ программсистом Π½Π° скриптовых языках duck-typing Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Тизнь. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, duck-typing Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π² строгой систСмС Ρ‚ΠΈΠΏΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· templates, traits, type classes, interfaces, ΠΌΠ½ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Π° нСльзя ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строго Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ.) ΠΈ, Π² любом случаС, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ язык содСрТит ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ систСму Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π”Π°ΠΆΠ΅ Haskell ΠΈΠΌΠ΅Π΅Ρ‚ unsafeCoerce. Но Ρ‚Π°ΠΊΠΈΠ΅ конструкции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ. ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ Π€Ρ€Π°Π½Ρ†Π° ΠšΠ°Ρ„ΠΊΠΈ, Π“Ρ€Π΅Π³ΠΎΡ€ Π—Π°ΠΌΠ·Π°, Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ систСму Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ прСвращаСтся Π² гигантского ΠΆΡƒΠΊΠ°, ΠΈ ΠΌΡ‹ всС Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ это ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΏΠ»ΠΎΡ…ΠΎ πŸ™‚.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я часто ΡΠ»Ρ‹ΡˆΡƒ, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ строгая типизация Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° программиста. Π― ΠΌΠΎΠ³Ρƒ ΡΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сам написал нСсколько обьявлСний ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Π‘++, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΡ‚ Π΅ΡΡ‚ΡŒ тСхнология, Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ², которая позволяСт компилятору вывСсти Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ· контСкста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ Π‘++, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ auto, ΠΈ компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ‚ΠΈΠΏ Π·Π° вас.

Π’ Haskell, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π΄ΠΊΠΈΡ… случаСв, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, всС Ρ€Π°Π²Π½ΠΎ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ сСмантикС ΠΊΠΎΠ΄Π°, ΠΈ обьявлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ошибки компиляции. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π² Haskell β€” Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². ПозТС, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ становятся Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ компилятором коммСнтариями.

Бтрогая статичСская типизация часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π° для нСтСстирования ΠΊΠΎΠ΄Π°. Иногда Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Haskell-программисты говорят: «Если ΠΊΠΎΠ΄ собираСтся, ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.Β» ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, коррСктная с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½Π° Π² смыслС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π² рядС исслСдований Haskell Π½Π΅ стал сильно ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ языки ΠΏΠΎ качСству ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² коммСрчСских условиях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ Π±Π°Π³ΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ уровня качСства, Ρ‡Ρ‚ΠΎ Π² основном связано с экономикой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ толСрантности ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ ΠΎΡ‡Π΅Π½ΡŒ слабо связано с языком программирования ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ, сколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² отстаСт ΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠ»ΠΈ поставляСтся с сильно сниТСнным Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ.

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

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· нСсоотвСтствий, Π½ΠΎ тСстированиС практичСски всСгда вСроятностный, Π° Π½Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ процСсс (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, имСлся Π²Π²ΠΈΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ тСстов: Π²Ρ‹ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ Π½Π΅ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹, Π° Π½Π΅ΠΊΡƒΡŽ Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ.) ВСстированиС β€” плохая Π·Π°ΠΌΠ΅Π½Π° Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ коррСктности.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹?

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ описаниС Ρ‚ΠΈΠΏΠΎΠ²: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой мноТСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ΠΈΠΏΡƒ Bool (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π² Haskell) соотвСтствуСт мноТСство ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов: True ΠΈ False. Π’ΠΈΠΏ Char β€” мноТСство всСх символов Unicode, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ‘a’ ΠΈΠ»ΠΈ ‘Δ…’.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ бСсконСчными. Π’ΠΈΠΏ String, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ сути, синонимом списка Char, β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€ бСсконСчного мноТСства.

Когда ΠΌΡ‹ обьявляСм x, ΠΊΠ°ΠΊ Integer:

x :: Integer

ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это элСмСнт мноТСства Ρ†Π΅Π»Ρ‹Ρ… чисСл. Integer Π² Haskell β€” бСсконСчноС мноТСство, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ любой точности. Π•ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ мноТСство Int, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΊΠ°ΠΊ int Π² C++.

Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тонкости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΊ мноТСствам слоТным. Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Ρ‹Π΅ опрСдСлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ мноТСство всСх мноТСств; Π½ΠΎ, ΠΊΠ°ΠΊ я ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», я Π½Π΅ Π±ΡƒΠ΄Ρƒ строгим ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ катСгория мноТСств, которая называСтся Set, ΠΈ ΠΌΡ‹ с Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π’ Set, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β€” это мноТСства, Π° ΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡ‹ (стрСлки) β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Set β€” особая катСгория, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ. НапримСр, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ пустоС мноТСство Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ элСмСнтов. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ мноТСства ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ элСмСнты ΠΎΠ΄Π½ΠΎΠ³ΠΎ мноТСства Π² элСмСнты Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄Π²Π° элСмСнта Π² ΠΎΠ΄ΠΈΠ½, Π½ΠΎ Π½Π΅ ΠΎΠ΄ΠΈΠ½ элСмСнт Π² Π΄Π²Π°. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ тоТдСствСнная функция ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт мноТСства Π² сСбя, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π― ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ постСпСнно Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ всю эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ вмСсто этого Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ всС эти понятия Π² чисто ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ стрСлок.

Π’ идСальном ΠΌΠΈΡ€Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ просто ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ Π² Haskell β€” мноТСства, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Haskell β€” матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. БущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° малСнькая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: матСматичСская функция Π½Π΅ выполняСт ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄ β€” ΠΎΠ½Π° Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚. Ѐункция Π² Haskell Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Π²Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ссли ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ большим ΠΎΠ½ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ. Но Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, ΠΈ Ρ‚Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Haskell ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ функция, ΠΈΠ»ΠΈ Π½Π΅Ρ‚ β€” знамСнитая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° остановки β€” Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠ°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΡƒΡ‡Π΅Π½Ρ‹Π΅-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Π³Π΅Π½ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ идСю, ΠΈΠ»ΠΈ грязный Ρ…Π°ΠΊ, Π² зависимости ΠΎΡ‚ вашСй Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, β€” Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π½Π½Ρ‹ΠΌ bottom (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ (bottom) ΡΠ»Ρ‹ΡˆΠΈΡ‚ΡΡ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎ-Π΄ΡƒΡ€Π°Ρ†ΠΊΠΈ Π½Π° русском, Ссли ΠΊΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, поТалуйста, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΉΡ‚Π΅.), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обозначаСтся _|_ ΠΈΠ»ΠΈ Π² Unicode βŠ₯. Π­Ρ‚ΠΎ Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» соотвСтствуСт Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ. Π’Π°ΠΊ функция, объявлСнная ΠΊΠ°ΠΊ:

f :: Bool -> Bool

ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ True, False, ΠΈΠ»ΠΈ _|_; послСднСС Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ функция Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ bottom Π² систСму Ρ‚ΠΈΠΏΠΎΠ², ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния Π·Π° bottom, ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ bottom явно. ПослСднСС, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния undefined:

f :: Bool -> Bool
f x = undefined

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ undefined вычисляСтся Π² bottom, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π²ΠΎ всС Ρ‚ΠΈΠΏΡ‹, Π² Ρ‚ΠΎΠΌ числС ΠΈ Bool. МоТно Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

f :: Bool -> Bool
f = undefined

(Π±Π΅Π· x) ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ bottom Π΅Ρ‰Π΅ ΠΈ Ρ‡Π»Π΅Π½ Ρ‚ΠΈΠΏΠ° Bool -> Bool.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ bottom, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ частичными, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Из-Π·Π° bottom, катСгория Ρ‚ΠΈΠΏΠΎΠ² Haskell ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, называСтся Hask, Π° Π½Π΅ Set. Π‘ тСорСтичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, это источник нСскончаСмых ослоТнСний, поэтому Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠΉ Π½ΠΎΠΆ мясника ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΡƒ эти рассуТдСния. Π‘ прагматичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ bottom ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Hask ΠΊΠ°ΠΊ с ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ Set.

Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ матСматичСская модСль?

Как программист, Π²Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с синтаксисом ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ языка программирования. Π­Ρ‚ΠΈ аспСкты языка, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² самом Π½Π°Ρ‡Π°Π»Π΅ спСцификации языка. Но смысл ΠΈ сСмантику языка Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ; это описаниС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС страниц, Ρ€Π΅Π΄ΠΊΠΎ достаточно Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎ. ΠžΡ‚ΡΡŽΠ΄Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ дискуссии срСди языковых ΡŽΡ€ΠΈΡΡ‚ΠΎΠ², ΠΈ вся кустарная ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³, посвящСнных Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°Π½ΠΈΡŽ тонкостСй языковых стандартов.

Π•ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства для описания сСмантики языка, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΡ… слоТности ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Ρ…, акадСмичСских языков, Π° Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π³ΠΈΠ³Π°Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ программирования. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов называСтся опСрационная сСмантика ΠΈ описываСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Он опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C++, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рассуТдСния, часто Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… «абстрактной ΠΌΠ°ΡˆΠΈΠ½Ρ‹Β».

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ сСмантику, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΠ΅ свойство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹, ΠΏΠΎ сути, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Β«Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅Β» Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

НС Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ программисты Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. ΠœΡ‹ всСгда Β«Π΄ΡƒΠΌΠ°Π΅ΠΌΒ», Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Никто Π½Π΅ сидит Π·Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, говоря: «О, я просто Π½Π°ΠΏΠΈΡˆΡƒ нСсколько строк ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ происходит.» (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π°Ρ…, Ссли Π±Ρ‹…) ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΡ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. ΠœΡ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½Ρ‹, Ссли это Π½Π΅ Ρ‚Π°ΠΊ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΡƒΠΌΠ°Π΅ΠΌ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ пишСм, ΠΈ ΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄Π΅Π»Π°Π΅ΠΌ это, запуская ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² Π½Π°ΡˆΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Π°Ρ…. ΠŸΡ€ΠΎΡΡ‚ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° всСми ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈ для исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, люди β€” Π½Π΅Ρ‚! Если Π±Ρ‹ ΠΌΡ‹ Π±Ρ‹Π»ΠΈ, Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ понадобились ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹.

Но Π΅ΡΡ‚ΡŒ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°. Она называСтся Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикой ΠΈ основана Π½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π’ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ языковой конструкции описана матСматичСсая интСрпрСтация. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свойство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ просто Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡƒ. Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΎΡ€Π΅ΠΌ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹, люди, строили матСматичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тысячи Π»Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ мноТСство Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π·Π°Π΄Π°Ρ‡ΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ сталкиваСмся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, довольно просты, Ссли Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹. (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: для Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ пытаСтся ΠΎΠ±ΠΈΠ΄Π΅Ρ‚ΡŒ программистов.)

Рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π² Haskell, языкС, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС:

fact n = product [1..n]

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ [1..n] β€” это список Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ n. Ѐункция product ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ всС элСмСнты списка. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, взятоС ΠΈΠ· ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с C:

int fact(int n) {
    int i;
    int result = 1;
    for (i = 2; i <= n; ++i)
        result *= i;
    return result;
}

НуТно Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ? (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π°Π²Ρ‚ΠΎΡ€ слСгка схитрил, взяв Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Haskell. На самом Π΄Π΅Π»Π΅, Ρ…ΠΈΡ‚Ρ€ΠΈΡ‚ΡŒ Π±Ρ‹Π»ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, чСстноС описаниС ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½Π΅ слоТнСС):

fact 0 = 1
fact n = n * fact (n - 1)

Π₯ΠΎΡ€ΠΎΡˆΠΎ, я сразу ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ! Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ матСматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ½ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ: Какова матСматичСская модСль для чтСния символа с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎ сСти? Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя это Π±Ρ‹Π» Π±Ρ‹ Π½Π΅Π»ΠΎΠ²ΠΊΠΈΠΉ вопрос, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊ довольно Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ объяснСниям. Казалось, дСнотационная сСмантика Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа Π²Π°ΠΆΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для написания ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикой. ΠŸΡ€ΠΎΡ€Ρ‹Π² ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. Π•ΡƒΠ³Π΅Π½ΠΈΠΎ МодТи ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ эффСкты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΌΠΎΠ½Π°Π΄Ρ‹. Π­Ρ‚ΠΎ оказалось Π²Π°ΠΆΠ½Ρ‹ΠΌ наблюдСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π»ΠΎ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС Π½ΠΎΠ²ΡƒΡŽ Тизнь ΠΈ сдСлало чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΈ Π΄Π°Π»ΠΎ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π― Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΌΠΎΠ½Π°Π΄Π°Ρ… ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ большС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½Ρ‹Ρ… инструмСнтов.

Одним ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… прСимущСств наличия матСматичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ для программирования являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ коррСктности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ софт, Π½ΠΎ Π΅ΡΡ‚ΡŒ области программирования, Π³Π΄Π΅ Ρ†Π΅Π½Π° сбоя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ, ΠΈΠ»ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ чСловСчСская Тизнь находится ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·ΠΎΠΉ. Но Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ написании Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для систСмы здравоохранСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка Haskell ΠΈΠ΄ΡƒΡ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°ΠΌΠΈ коррСктности.

ЧистыС ΠΈ ГрязныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ функциями Π² C++ ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ языкС, Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ функциями. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ функция β€” просто ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² значСния.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° языкС программирования: такая функция, имСя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция для получСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° числа, вСроятно, ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ само Π½Π° сСбя. Она Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° вызываСтся с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ числа Π½Π΅ мСняСтся с Ρ„Π°Π·Π°ΠΌΠΈ Π›ΡƒΠ½Ρ‹.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, вычислСниС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° числа Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта, Π²Ρ€ΠΎΠ΄Π΅ Π²Ρ‹Π΄Π°Ρ‡ΠΈ вкусного Π½ΠΈΡˆΡ‚ΡΡ‡ΠΊΠ° вашСй собакС. «Ѐункция», которая это Π΄Π΅Π»Π°Π΅Ρ‚, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ смодСлирована матСматичСской Ρ„ΡƒΠ½ΠΊΡ†Π΅ΠΉ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ²

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ β€” это мноТСства, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСсьма экзотичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. НапримСр, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ соотвСтствуСт пустому мноТСству? НСт, это Π½Π΅ void Π² C++, хотя этот Ρ‚ΠΈΠΏ называСтся Void Π² Haskell. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½ΠΈ ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Void, Π½ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСтС Π΅Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, Π²Π°ΠΌ придСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Void, Π° Π΅Π³ΠΎ Ρ‚Π°ΠΌ просто Π½Π΅Ρ‚. Π§Ρ‚ΠΎ касаСтся Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ эта функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ β€” Π½Π΅ сущСствуСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Она ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ (хотя этого Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ случится, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это функция, которая ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Π° ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π₯аскСллСры Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π΅:

absurd :: Void -> a

(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π½Π° Π‘++ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: Π² Π‘++ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.)

(ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ a β€” это пСрСмСнная Ρ‚ΠΈΠΏΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.) Π­Ρ‚ΠΎ имя Π½Π΅ случайно. БущСствуСт Π±ΠΎΠ»Π΅Π΅ глубокая интСрпрСтация Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΎΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠšΠ°Ρ€Ρ€ΠΈ-Π“ΠΎΠ²Π°Ρ€Π΄Π°. Π’ΠΈΠΏ Void прСдставляСт Π½Π΅ΠΏΡ€Π°Π²Π΄ΠΈΠ²ΠΎΡΡ‚ΡŒ, Π° функция absurd β€” ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ· лоТности слСдуСт Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, ΠΊΠ°ΠΊ Π² латинской Ρ„Ρ€Π°Π·Π΅ Β«ex falso sequitur quodlibet.Β» (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΈΠ· лоТности слСдуСт Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.)

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ одноэлСмСнтному мноТСству. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ просто Β«Π΅ΡΡ‚ΡŒΒ». Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ сразу Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Π½ΠΎ это void Π² C++. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ функциях ΠΎΡ‚ ΠΈ Π² этот Ρ‚ΠΈΠΏ. Ѐункция ΠΈΠ· void всСгда ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°. Если это чистая функция, ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

int f44() { return 44; }

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ эта функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ», Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ». Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ эта функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚? ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ СдинствСнный экзСмпляр, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ явно Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅. Π’ Haskell, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΡ‚ΡŒ символ этого значСния: пустая ΠΏΠ°Ρ€Π° скобок (). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ· Π·Π° Π·Π°Π±Π°Π²Π½ΠΎΠ³ΠΎ совпадСния (ΠΈΠ»ΠΈ Π½Π΅ совпадСния?), Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ void выглядит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ Π² C++ ΠΈ Π² Haskell. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·-Π·Π° любви Π₯аскСля ΠΊ лаконичности, Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ для Ρ‚ΠΈΠΏΠ°, конструктора ΠΈ СдинствСнного значСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ одноэлСмСнтному мноТСству. Π’ΠΎΡ‚ эта функция Π² Haskell:

f44 :: () -> Integer
f44 () = 44

ΠŸΠ΅Ρ€Π²Π°Ρ строка ΠΎΠ±ΡŒΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ f44 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ (), Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ Β«Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Β», Π² Ρ‚ΠΈΠΏ Integer. Вторая строка опрСдСляСт, Ρ‡Ρ‚ΠΎ f44 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½-ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ СдинствСнный конструктор для Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ () Π² число 44. Π’Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, прСдоставляя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ():

f44 ()

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ каТдая функция ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ эквивалСнтна Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (здСсь, выбираСтся Integer 44). На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ f44, ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠΌ прСдставлСнии числа 44. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ прямоС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ элСмСнтов мноТСства Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (стрСлку). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π½Π΅ΠΊΠΈΠΉ Ρ‚ΠΈΠΏ А находятся Π²ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΌ соотвСтствии с элСмСнтами мноТСства A.

А ΠΊΠ°ΠΊ насчСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… void, ΠΈΠ»ΠΈ, Π² Haskell, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ? Π’ C++ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Π½ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½Π΅ настоящиС, Π² матСматичСском смыслС этого слова. Чистая функция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚: ΠΎΠ½Π° отбрасываСт свой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈ, функция ΠΈΠ· мноТСства А Π² одноэлСмСнтноС мноТСство ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² СдинствСнный элСмСнт этого мноТСства. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ А Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½Π° такая функция. Π’ΠΎΡ‚ ΠΎΠ½Π° для Integer:

fInt :: Integer -> ()
fInt x = ()

Π’Ρ‹ Π΄Π°Π΅Ρ‚Π΅ Π΅ΠΉ любоС Ρ†Π΅Π»ΠΎΠ΅ число, ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. БлСдуя Π΄ΡƒΡ…Ρƒ лаконичности, Haskell позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ подчСркивания Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отбрасываСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Код Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅:

fInt :: Integer -> ()
fInt _ = ()

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ зависит ΠΎΡ‚ значСния, Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ для любого Ρ‚ΠΈΠΏΠ° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ парамСтричСски ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ сСмСйство Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ вмСсто ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Как Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· любого Ρ‚ΠΈΠΏΠ° Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ unit:

unit :: a -> ()
unit _ = ()

Π’ C++ Π²Ρ‹ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π΅ Ρ‚Π°ΠΊ:

template<class T>
void unit(T) {}

(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π΄Π°Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² noop, Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ):

template<class T>
void unit(T&&) {}

Π”Π°Π»Π΅Π΅ Π² Β«Ρ‚ΠΈΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²Β» Π½Π°Π±ΠΎΡ€ ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов. Π’ C++ ΠΎΠ½ называСтся bool, Π° Π² Haskell, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Bool. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² C++ bool являСтся встроСнным Ρ‚ΠΈΠΏΠΎΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² Haskell ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

data Bool = True | False

(Π§ΠΈΡ‚Π°Ρ‚ΡŒ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стоит Ρ‚Π°ΠΊ: Bool ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ True ΠΈΠ»ΠΈ False.) Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ ΠΈ Π² C++:

enum bool {
    true,
    false
};

Но C++ пСрСчислСниС Π½Π° самом Π΄Π΅Π»Π΅ Ρ†Π΅Π»ΠΎΠ΅ число. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ C++11 Β«class enumΒ», Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ класса: bool::true ΠΈΠ»ΠΈ bool::false, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ нСобходимости Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Bool просто Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π΄Π²Π° значСния ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ΄Π½ΠΎ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ True ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” False.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Bool Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ. НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Data.Char Π² Haskell содСрТит ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ IsAlpha ΠΈΠ»ΠΈ isDigit. Π’ C++ Π΅ΡΡ‚ΡŒ похоТая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° <cctype>, которая ΠΎΠ±ΡŒΡΠ²Π»ΡΠ΅Ρ‚, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ isalpha ΠΈ isdigit, Π½ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ int, Π° Π½Π΅ Π±ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НастоящиС ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² <locale> ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ctype::is(alpha, c) ΠΈ ctype::is(digit, c).

ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ для программистов: прСдисловиС
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ: ΡΡƒΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ

Π’ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, большиС ΠΈ ΠΌΠ°Π»Ρ‹Π΅
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ КлСйсли

Ѐункция (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) ВикипСдия

Π£ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, см. функция.

Ѐу́нкция Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Β β€” Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ связываСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€[en], Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΈ бСзымянныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎ связан адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ инструкции (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°), входящСй Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСдаётся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ возвращаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°Β β€” Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ данная функция Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π°.

Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ пустоС. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ синтаксис, Π² частности, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова.

Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ объявлСна ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, содСрТит список ΠΈΠΌΡ‘Π½ ΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (ΠΈΠ»ΠΈ: Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²), Π° Ρ‚Π°ΠΊΠΆΠ΅, Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ значСния. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит исполняСмый Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΎΠ΄Π½ΠΈΡ… языках программирования объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСпосрСдствСнно прСдваряСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² рядС Π΄Ρ€ΡƒΠ³ΠΈΡ… языков Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π° ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ привСсти Π΅Ρ‘ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, объявлСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния класса, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π’Π°ΠΊΠΆΠ΅ Π² языках с ООП Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ объявлСниС абстрактной(Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· объявлСния Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ссылкС: для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ создаётся локальная копия ΠΈ Π»ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° самом Π΄Π΅Π»Π΅, происходят с локальной ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° самой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎ ссылкС, происходят с самой ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Ѐункция опрСдСляСт ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ (Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ) ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΊΡƒΠ΄Π° входят Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ нСпосрСдствСнно Π² Ρ‚Π΅Π»Π΅ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ[ | ]

JavaScript[

структура ΠΈ интСрпрСтация. Π§Π°ΡΡ‚ΡŒ I β€” Β«Π₯Π°ΠΊΠ΅Ρ€Β»

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

Π― Π½Π°Ρ‡Π°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Π² дСтствС, ΠΈ Π³ΠΎΠ΄Π°ΠΌ ΠΊ Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΈ пяти ΠΌΠ½Π΅ казалось, Ρ‡Ρ‚ΠΎ я всС знаю ΠΈ понимаю. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ стало Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΌΠΎΠ΅Π³ΠΎ ΠΌΠΎΠ·Π³Π°, всС мыслимыС ΠΊΠ½ΠΈΠ³ΠΈ ΠΎ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹. Но Ρƒ мСня ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Π±ΡƒΠ΄Ρ‚ΠΎ я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ½ΠΊΠΎΠ΅ ΠΈ Π½Π΅ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π² дСвяностыС Π³ΠΎΠ΄Ρ‹, Π² школС мСня ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Pascal (ΠΎ Π΄Π°, слава Turbo Pascal 5.5! β€” ΠŸΡ€ΠΈΠΌ. Ρ€Π΅Π΄.), ΠΏΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π» C ΠΈ C++. Π’ унивСрситСтС Fortran ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Java, ΠΊΠ°ΠΊ основной инструмСнт Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅. Π― Π·Π½Π°Π» Python ΠΈ Π΅Ρ‰Π΅ нСсколько языков, Π½ΠΎ всС это Π±Ρ‹Π»ΠΎ Π½Π΅ Ρ‚ΠΎ. А ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ образования Π² области Computer Science Ρƒ мСня Π½Π΅ Π±Ρ‹Π»ΠΎ. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π»Π΅Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Атлантику я Π½Π΅ ΠΌΠΎΠ³ Π·Π°ΡΠ½ΡƒΡ‚ΡŒ, ΠΈ ΠΌΠ½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Каким-Ρ‚ΠΎ Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρƒ мСня ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ оказалась ΠΊΠ½ΠΈΠ³Π° ΠΏΡ€ΠΎ язык программирования Haskell. МнС каТСтся, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° я понял истинный смысл выраТСния «красота Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΆΠ΅Ρ€Ρ‚Π²Β».

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° мСня ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ я Π²Ρ‹ΡƒΡ‡ΠΈΠ» Haskell, я Ρ‚Π°ΠΊ ΠΈ Π³ΠΎΠ²ΠΎΡ€ΡŽ: Π² самолСтС. Π­Ρ‚ΠΎΡ‚ эпизод ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΌΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²ΠΎΠΎΠ±Ρ‰Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ знакомства ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ казались ΠΌΠ½Π΅ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ понятными. ΠŸΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°ΠΏΡ€ΡΡ‡ΡŒΡΡ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ вопрос Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. И знаСшь, ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π΄Π΅ΡΡΡ‚ΡŒ Π»Π΅Ρ‚, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты стали Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… языков, лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π² Java, Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² β€” Π² Π‘++, сопоставлСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ β€” Π² Scala. МногиС Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΡ€Ρ‹Π². И Π² этой сСрии статСй я расскаТу Ρ‚Π΅Π±Π΅ ΠΏΡ€ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π½Ρ‹Π΅ языки ΠΈ ΠΈΡ… особСнности.

Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρ‡ΠΈΠΊΠΈ часто Π½Π° ΠΏΠΎΡ‚Π΅Ρ…Ρƒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ всякиС списки ΠΈ Ρ‚ΠΎΠΏΡ‹. НапримСр, «список ΠΊΠ½ΠΈΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ‚Π΅Π±Π΅ Π½Π΅ исполнилось Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒΒ». Если Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ΠΎ ΠΌΠ½ΠΎΠΉ стояла Π·Π°Π΄Π°Ρ‡Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ список ΠΊΠ½ΠΈΠ³ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ‚Π΅Π±Π΅ сколько-Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π΅ исполнилось, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто, бСзусловно, Π΄ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΊΠ½ΠΈΠ³Π΅ АбСльсона ΠΈ Бассмана Β«Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ интСрпрСтация ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ». МнС Π΄Π°ΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° каТСтся, Ρ‡Ρ‚ΠΎ компилятор ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ любого языка Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π» эту ΠΊΠ½ΠΈΠ³Ρƒ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΈ Π΅ΡΡ‚ΡŒ язык, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Ρ‚Π°ΠΊ это Lisp. Π’ΠΎΠΎΠ±Ρ‰Π΅, это Ρ†Π΅Π»ΠΎΠ΅ сСмСйство языков, ΠΊΡƒΠ΄Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ довольно популярный сСйчас язык для JVM ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Clojure. Но Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка ΠΎΠ½ Π½Π΅ особо ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Для этого Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык Scheme, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² MIT ΠΈ Π΄ΠΎ сСрСдины двухтысячных Π³ΠΎΠ΄ΠΎΠ² слуТил основным языком для обучСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π₯отя сСйчас Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ курс с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ упомянутая ΠΊΠ½ΠΈΠ³Π°, Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° курс ΠΏΠΎ Python, ΠΎΠ½Π° всС Π΅Ρ‰Π΅ Π½Π΅ потСряла своСй Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ОблоТка Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Β«Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ интСрпрСтация ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ»

ΠŸΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ языкС Scheme ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ± ΠΈΠ΄Π΅Π΅, стоящСй Π·Π° языками Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Lisp ΠΎΡ‡Π΅Π½ΡŒ старый (ΠΈΠ· всСх языков высокого уровня ΡΡ‚Π°Ρ€ΡˆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Fortran), ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΌ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ стали доступны ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования, примСняСмыС сСйчас. Π”Π°Π»Π΅Π΅ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Lisp, имСя Π² Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ β€” Scheme.

Бинтаксис Π² языкС Lisp, Ρ…ΠΌ, слСгка спорный. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ идСя, лСТащая Π² основС синтаксиса, ΠΊΡ€Π°ΠΉΠ½Π΅ проста ΠΈ построСна Π½Π° основС Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… S-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ прСфиксная запись, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ‚Π΅Π±Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 2 + 3 записываСтся ΠΊΠ°ΠΊ (+ 2 3). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности. ΠšΡΡ‚Π°Ρ‚ΠΈ, (+ 2 10 (* 3.14 2)) Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ :). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это Π½Π°Π±ΠΎΡ€ списков, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ прСфиксная нотация. Π’ случаС языка Lisp сама ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ β€” «Ссли Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΎ Ρ‡Π΅ΠΌ я» πŸ˜‰ β€” ΠΏΠΎ сути, Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Вакая запись Π΄Π΅Π»Π°Π΅Ρ‚ синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Lisp ΠΎΡ‡Π΅Π½ΡŒ простым.
Π Π°Π· ΡƒΠΆ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ языкС программирования, Ρ‚ΠΎ слСдуСт ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² этом языкС.

Π’ΡƒΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСбольшоС отступлСниС. БущСствуСт ΠΎΠ΄Π½Π° Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ, Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² соврСмСнной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½Π΅Π½Π°. НуТно всС-Ρ‚Π°ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² матСматичСском смыслС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса вычислСний, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС, скорСС, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Π½ΠΈΠ΅, Π·Π½Π°Π½ΠΈΠ΅, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π½Π° вопрос Β«ΠΊΠ°ΠΊ?Β». ИмСнно поэтому АбСльсон ΠΈ Бассман Π² своСй ΠΊΠ½ΠΈΠ³Π΅ это ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ. Π’ соврСмСнной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ это Π½Π΅ принято. Но я всС ΠΆΠ΅ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ эти Π΄Π²Π° смысла слова «функция» хотя Π±Ρ‹ Ρƒ сСбя Π² Π³ΠΎΠ»ΠΎΠ²Π΅.

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ β€” это Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. НачнСм с Π½Π΅ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ простого:

(define (sq-roots a b c)
   (let ((D (- (* b b) (* 4 a c))))
        (if (&lt; D 0)
          (list)
          (let ((sqrtD (sqrt D)))
               (let ((x1 (/ (- (- b) sqrtD) (* 2.0 a)))
                     (x2 (/ (+ (- b) sqrtD) (* 2.0 a))))
                    (list x1 x2))))))

Π”Π°, это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ уравнСния Π½Π° Scheme. Но этого Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ всС особСнности синтаксиса. Π—Π΄Π΅ΡΡŒ sq-roots β€” это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π² конструкции let, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, слишком ΠΌΠ½ΠΎΠ³ΠΎ скобок. Но это Π½Π΅ Ρ‚Π°ΠΊ, просто сначала ΠΌΡ‹ опрСдСляСм список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π—Π΄Π΅ΡΡŒ (list) β€” это пустой список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΡ€Π½Π΅ΠΉ Π½Π΅Ρ‚, Π° (list x1 x2) β€” это список ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎ выраТСниях. Π’ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sq-roots ΠΌΡ‹ использовали ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ if. Π’ΠΎΡ‚ здСсь-Ρ‚ΠΎ ΠΈ начинаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках if β€” это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° else. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НСльзя Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ синтаксис, Π½Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ² ΠΎ синтаксичСском сахарС. Π’ языках программирования синтаксичСским сахаром Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, Π° лишь ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· языка C. МногиС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ массивы Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ срСдство выраТСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π”Π°, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, массивы Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΈ a[i] для языка C β€” это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ *(a + i). Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠΎΠ±Ρ‰Π΅ довольно Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, с Π½ΠΈΠΌ связан Π·Π°Π±Π°Π²Π½Ρ‹ΠΉ эффСкт: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ опСрация слоТСния остаСтся ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π² случаС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ послСднСС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ *(i + a), Π° это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ синтаксичСского сахара ΠΈΠ· выраТСния i[a]! ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ удалСния синтаксичСского сахара Π² английском языкС называСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ словом desugaring.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ языку Scheme, слСдуСт привСсти Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синтаксичСского сахара. Для опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΈ Π² случаС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово (Π² Lisp ΠΈ Scheme это называСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ) define. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, (define pi 3.14159) опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ pi. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

(define square (lambda (x) (* x x)))

это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ

(define (square x) (* x x))

ПослСдняя строчка выглядит Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Однако понятно, Ρ‡Ρ‚ΠΎ достаточно ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ нСобязатСлСн. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°ΠΆΠ½Π΅Π΅? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π±Π°Π·ΠΎΠ²Ρ‹Ρ… свойств Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков β€” Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса. ПослСднСС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π² качСствС значСния.

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° let с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния лямбда-выраТСния, Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ соотвСтствиС:

(let ((x 5) (y 2)) (* x y))
(apply (lambda (x y) (* x y)) (list 5 2))

Π—Π΄Π΅ΡΡŒ ΠΎΠ±Π° выраТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эквивалСнтными, Π° apply просто примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ списку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Π±Ρ‹Π²Π°ΡŽΡ‚ чистыми ΠΈ нСчистыми. ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΈ, ΠΊ Π½ΠΈΠΌ относятся Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Haskell ΠΈ Clean. Π’ чистых языках Π½Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС присваивания ΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ. Π­Ρ‚ΠΎ создаСт ряд трудностСй, хотя Π² ΡƒΠΆΠ΅ упомянутых языках это Ρ€Π΅ΡˆΠ΅Π½ΠΎ довольно Ρ…ΠΈΡ‚Ρ€ΠΎΡƒΠΌΠ½ΠΎ, ΠΈ Π½Π° этих языках ΠΏΠΈΡˆΡƒΡ‚ ΠΊΠΎΠ΄ с большим количСством Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π―Π·Ρ‹ΠΊΠΈ Ρ‚ΠΈΠΏΠ° Lisp, OCaml ΠΈΠ»ΠΈ Scala Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами, ΠΈ Π² этом смыслС Π΄Π°Π½Π½Ρ‹Π΅ языки Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹.

Наша Π·Π°Π΄Π°Ρ‡Π° β€” ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основныС ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π° Scheme. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π±Π΅Π· использования Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл, Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ set!, которая позволят ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Обо всСм этом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠ½ΠΈΠ³Π΅ SICP. БСйчас остановимся Π½Π° самом сущСствСнном для нас.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ смущаСт Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, β€” это отсутствиС Ρ†ΠΈΠΊΠ»ΠΎΠ². А ΠΊΠ°ΠΊ ΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ? ΠœΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ· нас ΡƒΡ‡Π°Ρ‚, Ρ‡Ρ‚ΠΎ рСкурсия β€” это ΠΏΠ»ΠΎΡ…ΠΎ. АргумСнтируСтся это Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ рСкурсия Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… языках программирования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° нСэффСктивно. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС слСдуСт Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΊΠ°ΠΊ тСхничСский ΠΏΡ€ΠΈΠ΅ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· самой сСбя, ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΊΠ°ΠΊ процСсс. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках поддСрТиваСтся оптимизация хвостовой рСкурсии ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° говорят, рСкурсии с аккумулятором. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

ΠŸΡƒΡΠΊΠ°ΠΉ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” succ ΠΈ prev. ΠŸΠ΅Ρ€Π²Π°Ρ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число, Π½Π° 1 большСС, Ρ‡Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° вторая β€” Π½Π° 1 мСньшСС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ слоТСния, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ двумя способами:

(define (add x y)
  (if (eq? y 0) x (add (succ x) (prev y))))

(define (add-1 x y)
  (if (eq? y 0) x (succ (add-1 x (prev y)))))

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ случаСм? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ способ вычислСния для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ случая ΠΏΠΎ шагам, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

(add 3 4) =&gt;
(add 4 3) =&gt;
(add 5 2) =&gt;
(add 6 1) =&gt;
(add 7 0) =&gt;
7

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

(add-1 3 4) =&gt;
(succ (add-1 3 3)) =&gt;
(succ (succ (add-1 3 2))) =&gt;
(succ (succ (succ (add-1 3 1)))) =&gt;
(succ (succ (succ (succ (add-1 3 0))))) =&gt;
(succ (succ (succ (succ 3)))) =&gt;
(succ (succ (succ 4))) =&gt;
(succ (succ 5)) =&gt;
(succ 6) =&gt;
7

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΈ Π² Ρ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ², процСсс вычислСния ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ отличаСтся. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС количСство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти Π½Π΅ мСняСтся, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ растСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ процСсс являСтся ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” рСкурсивым. Π’Π°ΠΊ, для написания эффСктивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π²ΠΎΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСполнСния стСка.

Один ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… элСмСнтов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, наряду с рСкурсиСй, β€” списки. Они ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ основу для слоТных структур Π΄Π°Π½Π½Ρ‹Ρ…. Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках, списки ΡΠ²Π»ΡΡŽΡ‚ΡΡ односвязными ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π³ΠΎΠ»ΠΎΠ²Π° β€” хвост. Для создания списка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция cons, Π° для доступа ΠΊ Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΈ хвосту списка β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ car ΠΈ cdr соотвСтствСнно. Π’Π°ΠΊ, список (list 1 2 3) β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ (cons 1 (cons 2 (cons 3 '()))). Π—Π΄Π΅ΡΡŒ '() β€” пустой список. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, типичная функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списка выглядит Ρ‚Π°ΠΊ:

(define (sum lst)
  (if (null? lst)
    0
    (+ (car lst) (sum (cdr lst)))))

Π­Ρ‚Π° функция просто суммируСт элСмСнты списка. Π’Π°ΠΊ выглядят ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списков, Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… статСй я расскаТу ΠΏΠΎΡ‡Π΅ΠΌΡƒ. А сСйчас лишь Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ссли Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² слоТСнии Π½Π° 1, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая вычисляСт Π΄Π»ΠΈΠ½Ρƒ списка.

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

(define (map f lst)
  (if (null? lst)
    lst
    (cons (f (car lst)) (map f (cdr lst)))))

Ѐункция map примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту списка. Как Π±Ρ‹ это странно Π½ΠΈ выглядСло, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Π΄Π»ΠΈΠ½Ρ‹ списка length Ρ‡Π΅Ρ€Π΅Π· sum ΠΈ map:

(define (length lst)
   (sum (map (lambda (x) 1) lst)))

Если Ρ‚Ρ‹ Π²Π΄Ρ€ΡƒΠ³ сСйчас Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ всС это ΠΊΠ°ΠΊ-Ρ‚ΠΎ слишком просто, Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ Π²ΠΎΡ‚ Π½Π°Π΄ Ρ‡Π΅ΠΌ: ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ списков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠΈΡ… порядков?

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cons, car ΠΈ cdr Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ удовлСтворяли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ: для любого списка lst Π²Π΅Ρ€Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (cons (car lst) (cdr lst)) совпадаСт с lst. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

(define (cons x xs)
  (lambda (pick)
    (if (eq? pick 1) x xs)))

(define (car f) (f 1))

(define (cdr f) (f 2))

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π—Π΄Π΅ΡΡŒ функция cons Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ Π² зависимости ΠΎΡ‚ этого Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π›Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ выполняСтся для этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Одна приятная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка Lisp Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· списков, Π° список β€” это основная структура Π΄Π°Π½Π½Ρ‹Ρ… Π² языкС. БущСствуСт способ просто Β«Π·Π°ΠΊΠ°Π²Ρ‹Ρ‡ΠΈΡ‚ΡŒΒ» тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»Π°ΡΡŒ ΠΊΠ°ΠΊ список Π°Ρ‚ΠΎΠΌΠΎΠ².

Атомы β€” это просто ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ выраТСния, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ('hello 'world), Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ '(hello world), ΠΈΠ»ΠΈ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (quote (hello world)). НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² Lisp Π΅ΡΡ‚ΡŒ строки, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ quote. Π§Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ вычислСниями. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ этим ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ систСмы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ способны ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, с Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ, уравнСниями ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ слоТными матСматичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (Ρ‚Π°ΠΊΠΈΡ… систСм ΠΌΠ½ΠΎΠ³ΠΎ, основными ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ слуТат систСмы Maple ΠΈ Mathematica).

МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ символьноС Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΏΡ€Π°Π²ΠΈΠ»Π° диффСрСнцирования прСдставляСт сСбС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ ΡˆΠΊΠΎΠ»Ρ‹ (хотя Π½Π° самом Π΄Π΅Π»Π΅ всС Ρ‡ΡƒΡ‚ΡŒ слоТнСС β€” здСсь ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡƒΡŽ, просто считая Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ константами, Π½ΠΎ это нисколько Π½Π΅ услоТняСт ΡΡƒΡ‚ΡŒ Π΄Π΅Π»Π°).

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я лишь ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π» ΡΡƒΡ‚ΡŒ Π΄Π΅Π»Π°, Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΎΡΡ‚Π°Π²Π»ΡŽ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ я надСюсь, Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ ΠΊΠ½ΠΈΠ³Ρƒ Β«Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ интСрпрСтация ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ»).

(define (deriv exp var)
  (cond ((number? exp) 0)
    ((variable? exp)
     (if (same-variable? exp var) 1 0))
    ((sum? exp)
     (make-sum (deriv (addend exp) var)
               (deriv (augend exp) var)))
    ((product? exp)
     (make-sum
       (make-product (multiplier exp)
                     (deriv (multiplicand exp) var))
       (make-product (deriv (multiplier exp) var)
                     (multiplicand exp))))
    (else
     (error "unknown expression type - DERIV" exp))))

Π—Π΄Π΅ΡΡŒ функция deriv прСдставляСт собой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° диффСрСнцирования Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ проходят Π² школС. Данная функция Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ number?, variable? ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ элСмСнт выраТСния. Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ make-product ΠΈ make-sum. Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠΊΠ° нСизвСстная Π½Π°ΠΌ конструкция cond β€” это Π°Π½Π°Π»ΠΎΠ³ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch Π² Ρ‚Π°ΠΊΠΈΡ… языках программирования, ΠΊΠ°ΠΊ C ΠΈ Java.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ довольно часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ top-down ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° сначала ΠΏΠΈΡˆΡƒΡ‚ΡΡ самыС ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ нСбольшиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

(define (variable? x) (symbol? x))

(define (same-variable? v1 v2)
  (and (variable? v1) (variable? v2) (eq? v1 v2)))

(define (make-sum a1 a2) (list '+ a1 a2))

(define (make-product m1 m2) (list '* m1 m2))

(define (sum? x)
  (and (pair? x) (eq? (car x) '+)))

(define (addend s) (cadr s))

(define (augend s) (caddr s))

(define (product? x)
  (and (pair? x) (eq? (car x) '*)))

(define (multiplier p) (cadr p))

(define (multiplicand p) (caddr p))

РСализация Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ cadr ΠΈ caddr. Π­Ρ‚ΠΎ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнты списка соотвСтствСнно.

Если Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Scheme, Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½ΠΎ Π±Π΅Π· упрощСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

(deriv '(+ x 3) 'x) =&gt;
(+ 1 0)
(deriv '(* (* x y) (+ x 3)) 'x) =&gt;
(+ (* (* x y) (+ 1 0))
(* (+ (* x 0) (* 1 y)) (+ x 3)))

Для Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… случаСв (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 0) Π·Π°Π΄Π°Ρ‡Π° упрощСния Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ довольно Π»Π΅Π³ΠΊΠΎ. Π­Ρ‚ΠΎΡ‚ вопрос остаСтся Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ взяты ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ SICP, поэтому Π² случаС возникновСния трудностСй ΠΌΠΎΠΆΠ½ΠΎ просто ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ источнику (ΠΊΠ½ΠΈΠ³Π° находится Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ доступС).

Как ΠΈ любой Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚, Lisp ΠΈΠΌΠ΅Π΅Ρ‚ большиС возмоТности Π² ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎ большСй части связанныС с использованиСм макросов. К соТалСнию, этот вопрос Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π”Π°Π²Π°ΠΉ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ синтаксичСский сахар ΠΈΠ· опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅:

(define (desugar-define def)
  (let ((fn-args (cadr def))
        (body (caddr def)))
  (let ((name (car fn-args))
        (args (cdr fn-args)))
       (list 'define name (list 'lambda args body)))))

Π­Ρ‚Π° функция прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сформированными опрСдСлСниями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

(desugar-define '(define (succ x) (+ x 1))) =&gt;
(define succ (lambda (x) (+ x 1)))

Однако это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ (define x 5).
Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ синтаксичСский сахар Π² большой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, содСрТащСй мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

(define (sugared? def)
  (and (eq? (car def) 'define)
       (list? (cadr def))))

Π’Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прямо Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ desugar-define, сдСлав Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ нуТдаСтся Π² ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ синтаксичСского сахара, ΠΎΠ½ΠΎ просто Π±Ρ‹ Π½Π΅ мСнялось (Π΄Π°Π½Π½ΠΎΠ΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ остаСтся Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ). ПослС Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² список ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ map:

(map desugar-define prog)

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ ставил сСбС Π·Π°Π΄Π°Ρ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Scheme сколь-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. МнС ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько интСрСсных особСнностСй языка ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ читатСля ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Π­Ρ‚ΠΎΡ‚ чудСсный язык ΠΏΡ€ΠΈ всСй Π΅Π³ΠΎ простотС ΠΈΠΌΠ΅Π΅Ρ‚ своС ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ особСнности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π§Ρ‚ΠΎ касаСтся инструмСнта для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со Scheme, Ρ‚ΠΎ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π΄ΡƒΡ…ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ°Ρ…Π½ΡƒΡ‚ΡŒΡΡ Π½Π° MIT-Scheme, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ β€” ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ прСкрасной ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ срСдой Dr. Racket. Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… статСй я ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ расскаТу, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scheme.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅? Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

  • Home
  • ВСстированиС

      • Назад
      • Agile Testing
      • BugZilla
      • Cucumber
      • ВСстированиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
      • 000 JTL
      • 000
      • 000 JR
      • 000 9274000
      • 000

        000 JM

      • LoadRunner
      • Π ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС
      • МобильноС тСстированиС
      • Mantis
      • ΠŸΠΎΡ‡Ρ‚Π°Π»ΡŒΠΎΠ½
      • QTP
      • Назад
      • Π¦Π΅Π½Ρ‚Ρ€ качСства (ALM)
      • RPA
      • SAP Testing
      • 000
      • RPA
      • 0003 SAP Testing Management
      • So0004 TestLink

  • SAP

      • Назад
      • ABAP
      • APO 9 0004
      • ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • FICO
      • 000
      • MM

        MM

        MM

        • Назад
        • PI / PO
        • PP
        • SD
        • SAPUI5
        • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
        • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
        • Successfactors
        • SAP Tutorials

      Назад

    • Web

      • Web
      • Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ AngularJS

      • ASP.Net
      • C
      • C #
      • C ++
      • CodeIgniter
      • Π‘Π£Π‘Π”
      • JavaScript
      • Назад
      • Java
      • JSP
      • Kotlin
      • Linux
      • Linux
      • Kotlin
      • Linux
      • js

      • Perl
      • Назад
      • PHP
      • PL / SQL
      • PostgreSQL
      • Python
      • ReactJS
      • Ruby & Rails
      • Scala
      • SQL
      • 000

      • SQL
      • 000

        0003 SQL

        000

        0003 SQL

        000

      • UML
      • VB.Net
      • VBScript
      • Π’Π΅Π±-слуТбы
      • WPF
  • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Π΅!

      • Назад
      • БухгалтСрский ΡƒΡ‡Π΅Ρ‚
      • Алгоритмы
      • Android
      • Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½
      • Business Analyst
      • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-сайта
      • CCNA
      • ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния
      • 00030003 COBOL 9000 Compiler
          9000 ВстроСнныС систСмы

        • 00030002 9000 Compiler 9000
        • Ethical Hacking
        • Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ Excel
        • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Go
        • IoT
        • ITIL
        • Jenkins
        • MIS
        • Π‘Π΅Ρ‚ΡŒ
        • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма
        • Назад
        • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠžΠ±Π·ΠΎΡ€Ρ‹
        • Salesforce
        • SEO
        • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния
        • VB A
    • Big Data

        • Назад
        • AWS
        • BigData
        • Cassandra
        • Cognos
        • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
        • 0003

        • HBOps
        • 0003

        • HBOps
        • 0003

        • MicroStrategy

    .

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, прСимущСства ΠΈ прилоТСния

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — это ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ всС ΠΈ вся Π² чисто матСматичСских функциях. Π­Ρ‚ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ стиля программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ фокусируСтся Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π° Π½Π΅ Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ (Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования).

    Clojure, Common Lisp, Erlang, Haskell ΠΈ Scala — ΠΎΠ΄Π½ΠΈ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстных языков программирования, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования основана Π½Π° лямбда-исчислСнии, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½ΠΈΠΆΠ΅:

    Лямбда-исчислСниС

    ВмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ выраТСния. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся для присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΡ†Π΅Π½ΠΊΠ° выраТСния Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Лямбда-исчислСниС составляСт основу ΠΏΠΎΡ‡Ρ‚ΠΈ всСх ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… языков Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.

    Разработанная Алонзо Π§Π΅Ρ€Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Lambda Calculus прСдставляСт собой основу для изучСния вычислСний с функциями.ВсС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда-исчислСния, вычислимо. Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ самым Π΅ΠΌΠΊΠΈΠΌ языком программирования ΠΈΠ· всСх.

    По своим Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ возмоТностям лямбда-исчислСниС ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°, Π·Π°Π»ΠΎΠΆΠΈΠ²ΡˆΡƒΡŽ основу ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ стиля программирования. ΠŸΡ€ΠΎΡ‰Π΅ говоря, лямбда-исчислСниС прСдставляСт собой Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ основу, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡ… ΠΎΡ†Π΅Π½ΠΊΡƒ.

    Π­Ρ‚ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

    Π•ΡΡ‚ΡŒ 5 самых Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ.

    ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… свойства:

    • ВсСгда ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π­Ρ‚ΠΎ свойство Ρ‚Π°ΠΊΠΆΠ΅ извСстно ΠΊΠ°ΠΊ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ
    • .

    • Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ любой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚.Π΅. Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ΠΈΠ»ΠΈ скрытого Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, построСнныС с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹, Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ.Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ написаниС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

    Когда ΠΊΠΎΠ΄ написан с использованиСм стиля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚:

    • Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹
    • Π Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ инструкции
    • Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

    РСкурсия

    Π’ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ² for ΠΈ while. ВмСсто этого языки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.РСкурсия рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ сСбя, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

    Бсылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ языкС программирования, Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ хранят Π½Π° протяТСнии всСго выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ ссылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ языковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания.Для сохранСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. БостояниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ постоянно Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

    Бсылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ устраняСт Π΄Π°ΠΆΠ΅ малСйшиС ΡˆΠ°Π½ΡΡ‹ Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… эффСктов ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ фактичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ высокого порядка

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стилС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ пСрвоклассными функциями. Π­Ρ‚ΠΈ пСрвоклассныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ сохранСны Π² структурах Π΄Π°Π½Π½Ρ‹Ρ….

    Ѐункция Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка — это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ / ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ функциями Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Π² языках Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСизмСняСмыС

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСизмСняСмы, Ρ‚. Π•. НСвозмоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ послС Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.Π₯отя ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ.

    ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ языкС программирования Π΄Π°Π΅Ρ‚ прСимущСства Π² Ρ„ΠΎΡ€ΠΌΠ΅ сохранСния состояния Π½Π° протяТСнии всСго выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

    • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… состояний ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависят ΠΎΡ‚ Π²Π²ΠΎΠ΄Π°, ΠΈΡ… Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, прСдоставляСмоС Ρ‚Π°ΠΊΠΈΠΌΠΈ функциями, Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΈΠΌΠΈ.АргумСнты ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ ΠΈΡ… сигнатурой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
    • Из-Π·Π° ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° Π΅Π΅ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ, рСализация ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° становится эффСктивной
    • Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ вычислСния, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ оцСниваСтся ΠΈ сохраняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ трСбуСтся.
    • ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ нСизмСняСмый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ производят скрытого Π²Ρ‹Π²ΠΎΠ΄Π°. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ нСизмСняСмыС значСния, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ тСстированиС.
    • Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ рассматриваСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ значСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π­Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

    НСдостатки

    • НСизмСняСмыС значСния Π² сочСтании с рСкурсиСй ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
    • Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях запись чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡŽ читаСмости ΠΊΠΎΠ΄Π°
    • Π₯отя ΠΏΠΈΡΠ°Ρ‚ΡŒ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π»Π΅Π³ΠΊΠΎ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… с ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ прилоТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ с опСрациями Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° слоТно.
    • НаписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² рСкурсивном стилС вмСсто использования для Π½ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ

    ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

    Часто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки программирования ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² акадСмичСских цСлях, Π° Π½Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ коммСрчСского ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

    Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, нСсколько извСстных языков программирования, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Clojure, Erlang, F #, Haskell ΠΈ Racket, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ мноТСства коммСрчСских ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

    WhatsApp ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Erlang, язык программирования, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 100 сотрудникам ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 1,5 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π°ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

    Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ знамСносСц стиля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования — Haskell.Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Facebook Π² своСй систСмС Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ спама. Π”Π°ΠΆΠ΅ JavaScript, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… языков программирования, дСмонстрируСт свойства динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка.

    Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования Π²Π°ΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ языки программирования Π²Π΅Π»ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… областях. НапримСр, R Π² статистикС ΠΈ J, K ΠΈ Q Π² финансовом Π°Π½Π°Π»ΠΈΠ·Π΅.

    НСкоторыС элСмСнты этой ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ программирования Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Lex / Yacc ΠΈ SQL, для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ измСняСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

    Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, эта ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²:

    • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ
    • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ матСматичСских вычислСний

    Π‘Π²ΠΎΠ΄ΠΊΠ°

    Помимо чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков программирования, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках программирования. Π•ΡΡ‚ΡŒ нСсколько ΠΊΠ½ΠΈΠ³ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

    Π’

    C ++ 11, C # 3.0 ΠΈ Java 8 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ конструкции для облСгчСния стиля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.Одним ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ярких ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ языка программирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования, являСтся язык программирования Scala.

    Π₯отя Scala ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ написана Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты ΠΈ измСняСмыС состояния. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ состояниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ стилями программирования.

    Π•Ρ‰Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚:

    .

    Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° F #

    • 8 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — это ΡΡ‚ΠΈΠ»ΡŒ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΏΠΎΡ€ дСлаСтся Π½Π° использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ нСизмСняСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — это ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сочСтаСтся со статичСскими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ F #.Π’ Ρ†Π΅Π»ΠΎΠΌ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ:

    • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ основныС конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅
    • ВыраТСния вмСсто ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ
    • НСизмСняСмыС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
    • Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°ΠΆΠ½Π΅Π΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ

    Π’ этой сСрии статСй Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования с использованиСм F #. ΠŸΠΎΠΏΡƒΡ‚Π½ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ F #.

    ВСрминология

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

    • Ѐункция — функция — это конструкция, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ элСмСнт ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€. Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ воплощаСтся Π² Тизнь, особСнно ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с коллСкциями Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ самая основная (ΠΈ ваТная) концСпция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.
    • Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ — Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ — это конструкция Π² ΠΊΠΎΠ΄Π΅, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.Π’ F # это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ привязано ΠΈΠ»ΠΈ явно ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
    • Чистота — Чистота — это Ρ‚Π°ΠΊΠΎΠ΅ свойство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. Чистая функция ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ своих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
    • Бсылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ — Бсылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ — это свойство Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, Π½Π΅ влияя Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
    • ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ — ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° мСстС. Π­Ρ‚ΠΎ контрастируСт с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° мСстС.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ эти основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    Бамая распространСнная ΠΈ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ конструкция Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — это функция. Π’ΠΎΡ‚ простая функция, которая добавляСт 1 ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ числу:

      ΠΏΡƒΡΡ‚ΡŒ addOne x = x + 1
      

    Π•Π³ΠΎ подпись Ρ‚ΠΈΠΏΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

      val addOne: x: int -> int
      

    Подпись ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π° Ρ‚Π°ΠΊ: Β« addOne ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ int с ΠΈΠΌΠ΅Π½Π΅ΠΌ x ΠΈ создаст int Β».Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, addOne — это , ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² Π½Π°Π±ΠΎΡ€ Ρ†Π΅Π»Ρ‹Ρ… чисСл. ΠœΠ°Ρ€ΠΊΠ΅Ρ€ -> ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ это сопоставлСниС. Π’ F # Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° сигнатуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚.

    Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½Π° подпись? Π’ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ рСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ часто ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Π°, Ρ‡Π΅ΠΌ фактичСская сигнатура Ρ‚ΠΈΠΏΠ°! Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ addOne добавляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ числу, интСрСсСн Π²ΠΎ врСмя выполнСния, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int , Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ сигнатуры Π΅Π΅ Ρ‚ΠΈΠΏΠ°), диагностика Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ addOne . Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»Ρ‡ΠΎΠΊ ΠΊ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

    ВыраТСния

    ВыраТСния — это конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… дСйствиС, выраТСния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ выраТСния ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

    Рассмотрим ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ addOne . Π’Π΅Π»ΠΎ addOne — это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

      // 'x + 1' - это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅!
    ΠΏΡƒΡΡ‚ΡŒ addOne x = x + 1
      

    Π­Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Ρ‚ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ addOne . НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строка :

      ΠΏΡƒΡΡ‚ΡŒ addOne x = x.ToString () + "1"
      

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ подпись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

      val addOne: x: 'a -> строка
      

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для любого Ρ‚ΠΈΠΏΠ° Π² F # ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ToString () , Ρ‚ΠΈΠΏ x Π±Ρ‹Π» сдСлан ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ автоматичСскоС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅), Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ — это строка .

    ВыраТСния — это Π½Π΅ просто Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π£ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ производят Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ — , Ссли :

      // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎ Π»ΠΈ 'x' с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° mod
    ΠΏΡƒΡΡ‚ΡŒ isOdd x = x% 2 <> 0
    
    ΠΏΡƒΡΡ‚ΡŒ addOneIfOdd input =
        ΠΏΡƒΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ =
            Ссли Π²Ρ…ΠΎΠ΄ isOdd, Ρ‚ΠΎ
                Π²Π²ΠΎΠ΄ + 1
            Π΅Ρ‰Π΅
                Π²Π²ΠΎΠ΄
    
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
      

    Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ if Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ , сдСлав Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ if Ρ‚Π΅Π»ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ addOneIfOdd .Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ выраТСниях, — это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ производят Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    Π•ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, unit , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ. НапримСр, рассмотрим эту ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

      ΠΏΡƒΡΡ‚ΡŒ printString (str: string) =
        printfn "Π‘Ρ‚Ρ€ΠΎΠΊΠ°:% s" str
      

    Подпись выглядит Ρ‚Π°ΠΊ:

      val printString: str: string -> unit
      

    Π‘Π»ΠΎΠΊ Π’ΠΈΠΏ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ фактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ возвращаСтся.Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Β«Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΒ», нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρƒ Π½Π΅Π΅ Π½Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

    Π­Ρ‚ΠΎ Ρ€Π΅Π·ΠΊΠΎ контрастируСт с ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π³Π΄Π΅ эквивалСнт , Ссли конструкция являСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° созданиС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ часто выполняСтся с ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. НапримСр, Π² C # ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записан Ρ‚Π°ΠΊ:

      bool IsOdd (int x) => x% 2! = 0;
    
    int AddOneIfOdd (Π²Π²ΠΎΠ΄ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа)
    {
        var result = input;
    
        Ссли (IsOdd (ввод))
        {
            Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π²Π²ΠΎΠ΄ + 1;
        }
    
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;
    }
      

    Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ C # ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Π² стилС C Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° основС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

    Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π₯отя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ измСнСния, эти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

    ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅:

    • ВсСгда Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π²Ρ…ΠΎΠ΄Π°.
    • НС ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

    Π’ этом контСкстС ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ матСматичСских функциях.Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ своих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. Π’ матСматичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f (x) = x + 1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ f (x) зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ значСния x . Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с чистыми функциями Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

    ΠŸΡ€ΠΈ написании чистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ функция Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ своих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий, приводящих ΠΊ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктам.

    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСчистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° зависит ΠΎΡ‚ глобального измСняСмого состояния:

      ΠΏΡƒΡΡ‚ΡŒ измСняСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 1
    
    ΠΏΡƒΡΡ‚ΡŒ addOneToValue x = x + Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
      

    Ѐункция addOneToValue явно нСчистая, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² любоС врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ 1.Π­Ρ‚ΠΎΠ³ΠΎ шаблона зависимости ΠΎΡ‚ глобального значСния слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

    Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСчистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° выполняСт ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт:

      ΠΏΡƒΡΡ‚ΡŒ addOneToValue x =
        printfn "x is% d" x
        Ρ… + 1
      

    Π₯отя эта функция Π½Π΅ зависит ΠΎΡ‚ глобального значСния, ΠΎΠ½Π° записываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x Π² Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π₯отя Π² этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция Π½Π΅ чистая.Если другая Ρ‡Π°ΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависит ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ внСшнСго ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ Π±ΡƒΡ„Π΅Ρ€Π° Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° эту Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° printfn Π΄Π΅Π»Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ чистой:

      ΠΏΡƒΡΡ‚ΡŒ addOneToValue x = x + 1
      

    Π₯отя эта функция ΠΏΠΎ своСй сути Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ , Ρ‡Π΅ΠΌ прСдыдущая вСрсия с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ printfn , ΠΎΠ½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ эта функция Π΄Π΅Π»Π°Π΅Ρ‚, это Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.Π’Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ любоС количСство Ρ€Π°Π· Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΎΠ½Π° просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, обСспСчиваСмая чистотой, — это Ρ‚ΠΎ, ΠΊ Ρ‡Π΅ΠΌΡƒ стрСмятся ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ программисты.

    ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ

    НаконСц, ΠΎΠ΄Π½Π° ΠΈΠ· самых Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования — Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ. Π’ F # всС значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСизмСняСмы. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° мСстС, Ссли Π²Ρ‹ явно Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΈΡ… ΠΊΠ°ΠΊ измСняСмыС.

    На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с нСизмСняСмыми значСниями ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ мСняСтС свой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ с «МнС Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΒ» Π½Π° «МнС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β».

    НапримСр, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 1 ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния, Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ:

      ΠΏΡƒΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 1
    ΠΏΡƒΡΡ‚ΡŒ secondValue = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1
      

    Π’ F # ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ , Π° Π½Π΅ измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ; вмСсто этого ΠΎΠ½ выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ равСнства:

      ΠΏΡƒΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 1
    value = value + 1 // ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅!
      

    НСкоторыС языки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΡƒΡ‚Π°Ρ†ΠΈΡŽ. Π’ F # это поддСрТиваСтся, Π½ΠΎ это Π½Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

    Π­Ρ‚Π° концСпция распространяСтся Π΄Π°ΠΆΠ΅ Π½Π° структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ нСизмСняСмыС структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€Ρ‹ (ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅), ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. По сути, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ добавлСния элСмСнта Π² Π½Π°Π±ΠΎΡ€ Π½Π΅ измСняСт Π½Π°Π±ΠΎΡ€, Π° создаСт Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π‘ΠΊΡ€Ρ‹Ρ‚Π½ΠΎ это часто достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…, которая позволяСт эффСктивно ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ….

    Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со значСниями ΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ заставляСт вас Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, которая Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ измСняСт, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½Π° создала Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этого. Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ равСнство ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌΠΎΡΡ‚ΡŒ.

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

    Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы ΠΈΡ… использования Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

    ΠŸΠ΅Ρ€Π²ΠΎΠΊΠ»Π°ΡΡΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, показывая, ΠΊΠ°ΠΊ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… контСкстах.

    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

    БСрия Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅Β» — Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ рСсурс для изучСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π° F #. Π’ Π½Π΅ΠΌ ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ Π»Π΅Π³ΠΊΠΎ читаСтся основы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ F # для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ.

    .

    Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Β· GitHub Pages

    Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Β· GitHub Pages

    Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

    Π‘Π°ΠΉΡ‚, настроСнный ΠΏΠΎ этому адрСсу, Π½Π΅
    ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

    Если это ваш сайт, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ рСгистр ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° соотвСтствуСт URL-адрСсу.
    Для ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Ρ… URL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, http://example.com/ ) Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ
    index.html Ρ„Π°ΠΉΠ».

    ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ
    для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании GitHub Pages .

    .

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *