Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² с: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² языкС Π‘ΠΈ : Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

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

c++ — Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² условии if

Если я Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² условии

if (function() == 0) {...}

ΠΎΠ½Π° выполнится Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π²Π½Π΅ условия, это Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов?

Π§Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² отличаСтся ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π²Π½Π΅ условия?

1

НСт, это Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π½Π΅ влияСт. Никакой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚.


Π’ сосСднСм ΠΎΡ‚Π²Π΅Ρ‚Π΅ вспомнили ΠΏΡ€ΠΎ short-circuiting — свойство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² && ΠΈ || Π½Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ (ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° достаточно для опрСдСлСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Но это происходит Π²Π΅Π·Π΄Π΅ — ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ условий if-ΠΎΠ², ΠΈ снаруТи.

13

Если функция выполняСтся, Ρ‚ΠΎ ΠΎΠ½Π° выполняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π²Π½Π΅ условия.

Вся Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ Π² «Π΅ΡΠ»ΠΈ выполняСтся» — Π² слоТном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ &&

ΠΈ ||, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… справСдливо сокращСнноС вычислоСниС, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ. Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ вычислСниС — это Ссли вычисляя условия, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ условия, Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ части Π½Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ. НапримСр, Π² A && B, Ссли вычислСниС A Π΄Π°Π΅Ρ‚ false, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π»ΠΎ B — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ false. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС B Π½Π΅ вычисляСтся.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²

if (i == 0 && function() == 0) 

ΠΏΡ€ΠΈ i, Π½Π΅ Ρ€Π°Π²Π½ΠΎΠΌ 0, function() Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ просто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

2

Π’Π°ΠΊΠΆΠ΅ скаТу, Ρ‡Ρ‚ΠΎ Π² Π‘++ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Ρ‘ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. НапримСр, Ссли Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ decltype:

#include <iostream>
int func()
{
    std::cout << "Hello from func!" << std::endl;
    return 123;
}
int main()
{
    decltype(func()) var;
    return 0;
}

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

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅

РСгистрация Ρ‡Π΅Ρ€Π΅Π· Google

РСгистрация Ρ‡Π΅Ρ€Π΅Π· Facebook

РСгистрация Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ‡Ρ‚Ρƒ

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· рСгистрации

ΠŸΠΎΡ‡Ρ‚Π°

НСобходима, Π½ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ показываСтся

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· рСгистрации

ΠŸΠΎΡ‡Ρ‚Π°

НСобходима, Π½ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ показываСтся

НаТимая Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Β», Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с нашими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ соглашСниСм, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ΠΎ ΠΊΡƒΠΊΠΈ

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

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

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

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

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

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

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

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

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

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

ЕдинствСнный ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΡΠ»Ρ‹ΡˆΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² строгой статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСмантичСски Π²Π΅Ρ€Π½Ρ‹. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это случаСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π²ΠΎ избСТания срача Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ ΡƒΡ‡Π΅Π», ΠΈΠ»ΠΈ нСсогласСн, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ стилСй, ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ программсистом Π½Π° скриптовых языках 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).

ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ для программистов: прСдисловиС
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ: ΡΡƒΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ
Π’ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, большиС ΠΈ ΠΌΠ°Π»Ρ‹Π΅
ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ КлСйсли

Ѐункция, рСкурсивноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, упраТнСния ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° C

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C Π§Ρ‚Π΅Π½ΠΈΠ΅: 3 ΠΌΠΈΠ½.

Ѐункция обСспСчиваСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ сопровоТдСниС, ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

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

НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ свои вопросы ΠΈ прСдлоТСния Π½ΠΈΠΆΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π― ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС.

НСобходимыС знания

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π½Π° C, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, рСкурсия

Бписок ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ рСкурсий

  1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΡƒΠ± любого числа с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для опрСдСлСния Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π°, Π΄Π»ΠΈΠ½Ρ‹ окруТности ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΊΡ€ΡƒΠ³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  3. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ максимум ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя числами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  4. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ число Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  5. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ число простым, Армстронгом ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ числом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  6. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС простыС числа ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  7. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π²Ρ‹Π²ΠΎΠ΄Π° всСх ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… чисСл ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  8. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π²Ρ‹Π²ΠΎΠ΄Π° всСх чисСл Армстронга ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  9. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π²Ρ‹Π²ΠΎΠ΄Π° всСх ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… чисСл ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  10. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния стСпСни любого числа с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  11. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π²Ρ‹Π²ΠΎΠ΄Π° всСх Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ n с использованиСм рСкурсии.
  12. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π²Ρ‹Π²ΠΎΠ΄Π° всСх Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ с использованиСм рСкурсии.
  13. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ сумму всСх Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ n с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  14. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ сумму всСх Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.
  15. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС C для поиска рСвСрса любого числа с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  16. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ число ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.
  17. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния суммы Ρ†ΠΈΡ„Ρ€ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  18. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° любого числа с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  19. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ n-Π³ΠΎ Ρ‡Π»Π΅Π½Π° Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ с использованиСм рСкурсии.
  20. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния ΠΠžΠ” (HCF) Π΄Π²ΡƒΡ… чисСл с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  21. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния НОК Π΄Π²ΡƒΡ… чисСл с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  22. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для отобраТСния всСх элСмСнтов массива с использованиСм рСкурсии.
  23. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для нахоТдСния суммы элСмСнтов массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.
  24. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C для поиска максимального ΠΈ минимального элСмСнтов Π² массивС с использованиСм рСкурсии.

ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C

.
ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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

© 2019 Π¨Ρ‚ΠΈΡ€Π»ΠΈΡ† Π‘Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… салонов Π² ΠŸΠ΅Ρ€ΠΌΠΈ

Цифровая ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ†Π²Π΅Ρ‚Π½ΠΎΠ΅ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², сканированиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ризография Π² ΠŸΠ΅Ρ€ΠΌΠΈ.

#, ## ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строками
#ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
#ошибка вывСсти сообщСниС ΠΎΠ± ошибкС
#Ссли, #ifdef, #ifndef, #else, #элиф, #эндиф условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
#include Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ содСрТимоС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»
#строка ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ строку ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅
#ΠΏΡ€Π°Π³ΠΌΠ° конкрСтная рСализация ΠΊΠΎΠΌΠ°Π½Π΄Π°
#undef ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ прСпроцСссор ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π½Ρ‹ΠΉ прСпроцСссор ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ останавливаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
абс Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
акос арккосинус
asctime тСкстовая вСрсия Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
ΠΊΠ°ΠΊ арксинус
ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ останавливаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²Π΄Π°
Π°Ρ‚Π°Π½ арктангСнс
Π°Ρ‚Π°Π½2 арктангСнс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π½Π°ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Π½Ρ‚Ρ‹
Π²Ρ‹Ρ…ΠΎΠ΄ устанавливаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚
ΠΎΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку Π² Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ число
Π°Ρ‚ΠΎΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку Π² Ρ†Π΅Π»ΠΎΠ΅ число
Π°Ρ‚ΠΎΠ» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку Π² Π΄Π»ΠΈΠ½Π½ΡƒΡŽ
поиск Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск
ΠΊΠ°Π»Π»ΠΎΠΊ выдСляСт ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ кусок памяти
ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ наимСньшСС Ρ†Π΅Π»ΠΎΠ΅ число Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ошибки
часы Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°
ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ косинус
кош гипСрболичСский косинус
врСмя Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ вСрсия Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
врСмя Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ€Π°Π·
Ρ€Π°Π·Π΄Π΅Π» Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ частноС ΠΈ остаток Π΄ΠΈΠ²ΠΈΠ·ΠΈΠΈ
Π²Ρ‹Ρ…ΠΎΠ΄ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
эксп Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ «Π΅», Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² данная ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ
Π·Π°Π²ΠΎΠ΄Ρ‹ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π½ΠΎΠΌΠ΅Ρ€Π°
fΠ·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»
feof Π²Π΅Ρ€Π½ΠΎ, Ссли Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°
ошибка провСряСт Ρ„Π°ΠΉΠ» Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ
Π·Π°ΠΏΠΎΠ΄Π»ΠΈΡ†ΠΎ записываСт содСрТимоС Π²Ρ‹Π²ΠΎΠ΄Π° Π±ΡƒΡ„Π΅Ρ€
Ρ„Π³Π΅Ρ‚ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ пСрсонаТа ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°
fgetpos ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€
fgets ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку символов ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊ
этаТ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наибольшСС Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅ большС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния
Ρ„ΠΌΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ остаток ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅
Ρ„ΠΎΠΏΠ΅Π½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»
Ρ„ΠΏΡ€ΠΈΠ½Ρ‚Ρ„ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»
Ρ„ΠΏΡƒΡ‚ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ символ Π² Ρ„Π°ΠΉΠ»
фпс Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строку Π² Ρ„Π°ΠΉΠ»
Ρ…Π»Π΅Π± Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°
бСсплатно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС
Ρ„Ρ€ΠΈΠΎΠΏΠ΅Π½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя
частота Ρ€Π°Π·Π»Π°Π³Π°Π΅Ρ‚ число Π½Π° Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
фсканф Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ· Ρ„Π°ΠΉΠ»
поиск ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто Π² Ρ„Π°ΠΉΠ»
фсСтпос ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто Π² Ρ„Π°ΠΉΠ»
Ρ„ΡƒΡ‚ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€
fзапись Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ символ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°
Π³Π΅Ρ‚Ρ‡Π°Ρ€ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ символ ΠΈΠ· БВАНДАРВНЫЙ ИН
getenv ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ срСдС пСрСмСнная
ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строку ΠΈΠ· БВАНДАРВНЫЙ ИН
гмврСмя Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя ΠΏΠΎ Π“Ρ€ΠΈΠ½Π²ΠΈΡ‡Ρƒ
ΠΈΠ·Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ true, Ссли символ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ
ΠΈΡΠ°Π»ΡŒΡ„Π° true, Ссли символ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΉ
ΠΊΠΎΠ΄ true, Ссли символ являСтся элСмСнтом управлСния пСрсонаТ
isdigit истина, Ссли символ являСтся Ρ†ΠΈΡ„Ρ€ΠΎΠΉ
Π˜Π·Π³Ρ€Π°Ρ„ true, Ссли символ являСтся графичСским пСрсонаТ
Π½ΠΈΠΆΠ½ΠΈΠΉ true, Ссли символ Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр
isprint true, Ссли символ являСтся ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹ΠΌ пСрсонаТ
ΠΈΠΏΡƒΠ½ΠΊΡ‚ true, Ссли символ пунктуация
isspace true, Ссли символ ΠΏΡ€ΠΎΠ±Π΅Π» пСрсонаТ
Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ истина, Ссли символ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС пСрсонаТ
isxdigit true, Ссли символ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ символ
Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа
лдэксп вычисляСт число Π² Π½Π°ΡƒΡ‡Π½ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Π»Π΄ΠΈΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ частноС ΠΈ остаток дСлСния Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа
мСстноС врСмя Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ врСмя
ΠΆΡƒΡ€Π½Π°Π» Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ
ΠΆΡƒΡ€Π½Π°Π» 10 Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ ΠΏΠΎ основанию 10
Π»ΠΎΠ½Π΄ΠΆΠΌΠΏ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
ΠΌΠ°Π»Π»ΠΎΠΊ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ
ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΡ‰Π΅Ρ‚ Π² массивС ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ появлСниС пСрсонаТа
ΠΏΠ°ΠΌΡΡ‚ΡŒ сравниваСт Π΄Π²Π° Π±ΡƒΡ„Π΅Ρ€Π°
ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π±ΡƒΡ„Π΅Ρ€ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ
ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π±ΡƒΡ„Π΅Ρ€ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ
Π½Π°Π±ΠΎΡ€ памяти заполняСт Π±ΡƒΡ„Π΅Ρ€ пСрсонаТ
ΠΌΠΊΡ‚Π°ΠΉΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄Π°Π½ΠΎ врСмя
ΠΌΠΎΠ΄Ρ„ Ρ€Π°Π·Π»Π°Π³Π°Π΅Ρ‚ число Π½Π° Ρ†Π΅Π»ΠΎΠ΅ ΠΈ Π΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ части
ошибка ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ тСкущая ошибка Π½Π° STDERR
ΠΏΠ°Ρƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² БВАНДАРВНЫЙ Π’Π«Π₯ΠžΠ”
ΠΏΡƒΡ‚ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ символ Π² ΠΏΠΎΡ‚ΠΎΠΊ
ΠΏΡƒΡ‚Ρ‡Π°Ρ€ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ символ Π² БВАНДАРВНЫЙ Π’Π«Π₯ΠžΠ”
ставит Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строку Π² БВАНДАРВНЫЙ Π’Π«Π₯ΠžΠ”
сорт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ сортировку
ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
Ρ€Π°Π½Π΄ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ псСвдослучайноС число