Π£ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅ ΠΏΠΎ ΡΠ·ΡΠΊΡ Nim (Π§Π°ΡΡΡ I)
- ΠΠ²ΡΠΎΡ: Andreas Rumpf
- ΠΠ΅ΡΡΠΈΡ: 2.1.1
- ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄: Morthan
- ΠΡΠ°Π²ΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΡ Π½Π° nimib: janAkali
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
"Der Mensch ist doch ein Augentier -- SchΓΆne Dinge wΓΌnsch' ich mir."
(Π¦ΠΈΡΠ°ΡΠ° ΠΈΠ· ΠΏΠ΅ΡΠ½ΠΈ Β«MorgensternΒ» Π³ΡΡΠΏΠΏΡ Β«RammsteinΒ». ΠΡΠΈΠΌΠ΅ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄: Β«ΠΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ β Π³Π»Π°Π·Π°ΡΡΡΠΉ Π·Π²Π΅ΡΡ. ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΡΠ°ΡΠΈΠ²ΡΡ Π²Π΅ΡΠ΅ΠΉΒ».)
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅Π±Π½ΠΈΠΊΠΎΠΌ ΠΏΠΎ ΡΠ·ΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Nim.
ΠΡΠΎΡ ΡΡΠ΅Π±Π½ΠΈΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Ρ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ - ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ.
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Nim (Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅):
-
ΠΠ·Ρ Nim - Π½Π΅ΠΆΠ½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π²ΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ
-
ΠΡΡΡΠΈ Nim Π·Π° 5 ΠΌΠΈΠ½ΡΡ - Π±ΡΡΡΡΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Nim Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ 5 ΠΌΠΈΠ½ΡΡ
-
Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Nim - Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ°
ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° Π² ΡΡΠΎΠΌ ΡΡΠ΅Π±Π½ΠΈΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Nim, ΡΠ»Π΅Π΄ΡΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ ΠΏΠΎ ΡΡΠΈΠ»Ρ ΡΠ·ΡΠΊΠ° Nim.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅:
- Π’Π²ΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
- ΠΠ΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ
- ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
var - ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
let - ΠΠΎΠ½ΡΡΠ°Π½ΡΡ
- ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
- ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
- ΠΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°
block - ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΎΡΡΡΡΠΏΡ
- ΠΡΠΎΡΠ΅Π΄ΡΡΡ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ
- ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
- ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ
- ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
- ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈe
enum - ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ
Ordinal - ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ
range - ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
set - ΠΠΎΠ»Ρ Π±ΠΈΡΠΎΠ²
- ΠΠ°ΡΡΠΈΠ²
array - ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
seq - ΠΡΠΊΡΡΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ
openarray - ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
varargs - Π‘ΡΠ΅Π·Ρ
Slice - ΠΠ±ΡΠ΅ΠΊΡΡ
object - ΠΠΎΡΡΠ΅ΠΆΠΈ
tuple - Π‘ΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ
refΠΈptr - ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΠΈΠΏ
proc - ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΈΠΏ
distinct
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈe
- ΠΠΎΠ΄ΡΠ»ΠΈ
Π’Π²ΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
ΠΠ°ΡΠ½ΡΠΌ Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "Hello World":
# ΡΡΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
echo "ΠΠ°ΠΊ ΡΠ΅Π±Ρ Π·ΠΎΠ²ΡΡ? "
var name: string = readLine(stdin)
echo "ΠΡΠΈΠ²Π΅Ρ, ", name, "!"
Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² ΡΠ°ΠΉΠ» greetings.nim. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ:
$ nim compile --run greetings.nim
Π‘ ΠΊΠ»ΡΡΠΎΠΌ
--runNim Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°:$ nim compile --run greetings.nim Π°ΡΠ³ΡΠΌΠ΅Π½Ρ1 Π°ΡΠ³ΡΠΌΠ΅Π½Ρ2
Π£ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ Π΅ΡΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
$ nim c greetings.nim # ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅ΠΊΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ $ nim c -r greetings.nim # ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅ΠΊΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΅ΡEΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π½Π΅ Π½ΡΠΆΠ΅Π½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
$ nim r greetings.nim # ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΊΠ΅Ρ ΠΏΠ°ΠΏΠΊΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΅ΡΠΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ°Π½Π΄Ρ, ΠΊΠ»ΡΡΠΈ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ°Π½Π΄Ρ:
$ nim --fullhelp
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Nim ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ (debug), ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ ΡΠ΅Π»ΠΈΠ·Π½ΡΡ Π²Π΅ΡΡΠΈΡ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ»ΡΡ
-d:release, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ:$ nim compile -d:release --run greetings.nimΠΠ»Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π° ΠΈ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ»ΡΡ
-d:release. ΠΠ»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ "Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ" ΡΠ·ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ C, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ-d:danger, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠΈΠΌΡΠ΅, ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Nim ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ C.
Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΎ Ρ ΠΎΠ±ΡΡΡΠ½Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ: ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π±Π΅Π· ΠΎΡΡΡΡΠΏΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Nim Π³ΡΡΠΏΠΏΠΈΡΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΡΡΡΠΏΠΎΠ². ΠΡΡΡΡΠΏΡ Π΄Π΅Π»Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ, ΡΠ°Π±ΡΠ»ΡΡΠΈΡ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΎΠ±ΡΠ°ΠΌΠ»ΡΡΡΡΡ Π΄Π²ΠΎΠΉΠ½ΡΠΌΠΈ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ. ΠΠΎΠΌΠ°Π½Π΄Π° var ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ name ΠΈ ΡΠΈΠΏΠΎΠΌ string, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π΅ΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅,
ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π΅ΡΠ½ΡΠ»Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° readLine. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ readLine
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΡΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ (ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ²).
ΠΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ:
var name = readLine(stdin)
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠΎΡΠΌΠ° Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠ°Ρ Π² Nim: ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΡΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡΡ.
ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° "hello world" ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ: echo, readLine ΠΈ Ρ.Π΄. ΠΡΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅
std/system, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ·
ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΠ΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Nim ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅. ΠΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Nim ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ², ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ², ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π·Π½Π°ΠΊΠΎΠ² ΠΏΡΠ½ΠΊΡΡΠ°ΡΠΈΠΈ.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ "; ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ β Π² ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ '.
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΠΊΡΠ°Π½ΠΈΡΡΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΡΠ»ΡΡΠ΅ΠΌ \; \n ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ,
\t β ΡΠ°Π±ΡΠ»ΡΡΠΈΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ²Π°ΡΡ ΡΡΡΡΠ΅ (raw) ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ:
r"C:\program files\nim"
Π ΡΡΡΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»Π°Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΡΠ»ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΡΡΡΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ.
Π’ΡΠ΅ΡΠΈΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ
Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ², ΡΡΠΎ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅
Π»ΠΈΡΠ΅ΡΠ°Π»Ρ. ΠΠ½ΠΈ ΠΎΠ±ΡΠ°ΠΌΠ»ΡΡΡΡΡ ΡΡΠΎΠΉΠ½ΡΠΌΠΈ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ: """...""",
ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ, ΠΈ \ Π² Π½ΠΈΡ
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΡΡΡΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ. ΠΠ½ΠΈ
ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄ HTML-ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Π° ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠ΅ΡΡΡΠΊΠΈ #. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ##:
# ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ.
var myVariable: int ## Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, Π²Ρ ΠΎΠ΄ΡΡ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ, ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ΡΠ°ΠΉΠ»Π°! ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ #[ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ]#.
ΠΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ:
##[ ΠΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ]##
#[
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΠΊΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°
Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΎΡΡΡΡΠΏΠ°ΠΌ.
yes("ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π·Π°Π΄Π°ΡΡ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ?")
#[
ΠΠ°ΠΌΠ΅ΡΠΊΠ°: ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ!
]#
]#
discard """Π‘ΡΠ°ΡΡΠΉ ΡΡΠΈΠ»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ."""
Π§ΠΈΡΠ»Π°
Π§ΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΏΠΈΡΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠΎΠ². ΠΠ»Ρ
ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΡΠ°Π·ΡΡΠ΄Ρ ΠΏΠΎΠ΄ΡΡΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ: 1_000_000
(ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½).
Π§ΠΈΡΠ»Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΎΡΠΊΡ (ΠΈΠ»ΠΈ e, ΠΈΠ»ΠΈ E) ΡΡΠΈΡΠ°ΡΡΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»Π°ΠΌΠΈ
ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ: 1.0e9 (ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄).
Π¨Π΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ
Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° 0x, Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ β Ρ 0b, Π° Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΡΠ΅ β Ρ 0o. ΠΠ΅Π΄ΡΡΠΈΠΉ Π½ΠΎΠ»Ρ
Π±Π΅Π· 'ΠΎ' Π½Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠ΅.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ var
ΠΠΎΠΌΠ°Π½Π΄Π° var ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ:
var x, y: int # ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ x ΠΈ y, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΡΠΈΠΏ `int`
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ let
ΠΠΎΠΌΠ°Π½Π΄Π° let ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ var, Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ
ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ: ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ:
let x = "abc" # Π²Π²ΠΎΠ΄ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ `x` ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
x = "xyz" # Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ: Π²ΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ `x`
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΡΡΡΠΏΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ ΡΠ΅Π»ΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ:
let # ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ `var` ΠΈ `const` x, y: int # Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ m, n, o: string
ΠΠΎΠ½ΡΡΠ°Π½ΡΡ
ΠΠΎΠ½ΡΡΠ°Π½ΡΡ - ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΎΠ±ΡΠ·Π°Π½ΠΎ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ! :
var a = 5
const
x = "abc" # ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° x ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ "abc"
b = 1
c = b + 5 # ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
d = a + 3 # Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ: Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π Π°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ let ΠΈ const ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: let Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π°, Π° const ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ΅ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ Β»:
const input = readLine(stdin) # ΠΡΠΈΠ±ΠΊΠ°: ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ let input = readLine(stdin) # Π° ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π°Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ, Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΌΠ΅ΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ:
var x = "abc" # Π²Π²ΠΎΠ΄ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ `x` ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
x = "xyz" # ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `x`
= - ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ
=Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ, Π½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ Π² Π±ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Nim.
Π ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
var x, y = 3 # ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ `x` ΠΈ `y` Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3
echo "x ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ", x
echo "y ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ", y
x = 42 # ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `x` Π½Π° 42, Π½Π΅ ΠΌΠ΅Π½ΡΡ `y`
echo "x ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ", x
echo "y ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ", yx ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3 y ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3 x ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 42 y ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3
ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π»ΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π½ΡΠΆΠ½Ρ Π΅ΡΡ ΡΠΈΠΊΠ»Ρ ΠΈ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ.
ΠΠΎΠΌΠ°Π½Π΄Π° if
ΠΠΎΠΌΠ°Π½Π΄Π° if β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
let name = readLine(stdin)
if name == "":
echo "ΠΠ΅Π΄Π½ΡΠ³Π°, ΡΡ ΠΏΠΎΡΠ΅ΡΡΠ» ΡΠ²ΠΎΡ ΠΈΠΌΡ?"
elif name == "ΠΈΠΌΡ":
echo "ΠΡΠ΅Π½Ρ ΡΠΌΠ΅ΡΠ½ΠΎ, ΡΠ΅Π±Ρ Π·ΠΎΠ²ΡΡ ΠΈΠΌΡ."
else:
echo "ΠΡΠΈΠ²Π΅Ρ, ", name, "!"
ΠΠ΅ΡΠΎΠΊ elif ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΠΎΠ»Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅, Π²Π΅ΡΠΊΠ° else Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ elif ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ else if, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡ
ΠΎΡΡΡΡΠΏΠΎΠ².
("" ΡΡΠΎ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°, ΠΎΠ½Π° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².)
ΠΠΎΠΌΠ°Π½Π΄Π° case
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ case. ΠΠ½Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠΎΠΊ:
let name = readLine(stdin)
case name
of "":
echo "ΠΠ΅Π΄Π½ΡΠ³Π°, ΡΡ ΠΏΠΎΡΠ΅ΡΡΠ» ΡΠ²ΠΎΡ ΠΈΠΌΡ?"
of "name":
echo "ΠΡΠ΅Π½Ρ ΡΠΌΠ΅ΡΠ½ΠΎ, ΡΠ΅Π±Ρ Π·ΠΎΠ²ΡΡ ΠΈΠΌΡ."
of "Dave", "Frank":
echo "ΠΡΡΡΠΎΠ΅ ΠΈΠΌΡ!"
else:
echo "ΠΡΠΈΠ²Π΅Ρ, ", name, "!"
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ of ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΡΡ
Π·Π°ΠΏΡΡΡΠΌΠΈ.
ΠΠΎΠΌΠ°Π½Π΄Π° case ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈ
ΡΡΡΠΎΠΊΠ°ΠΌΠΈ. (Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.) ΠΠ»Ρ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π»
ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΡ
ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
# ΡΡa ΠΊΠΎΠΌΠ°Π½Π΄a Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΡΠ½Π΅Π½Π° ΠΏΠΎΠ·ΠΆΠ΅:
from strutils import parseInt
echo("ΠΠ°Π·ΠΎΠ²ΠΈ ΡΠΈΡΠ»ΠΎ: ")
let n = parseInt(readLine(stdin))
case n
of 0..2, 4..7: echo("ΠΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°: {0, 1, 2, 4, 5, 6, 7}")
of 3, 8: echo("ΠΡΠΎ ΡΠΈΡΠ»ΠΎ Π»ΠΈΠ±ΠΎ 3, Π»ΠΈΠ±ΠΎ 8")
ΠΠΏΡΠΎΡΠ΅ΠΌ, ΠΊΠΎΠ΄ Π²ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠΊΡΡΡΡ
Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ n, Π° ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
0..8.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ, Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° (Ρ ΠΎΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²), ΠΌΡ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΎ, ΡΠΊΠ°Π·Π°Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½ΠΈΡΠ΅Π³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ:
case n
of 0..2, 4..7: echo("ΠΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°: {0, 1, 2, 4, 5, 6, 7}")
of 3, 8: echo("ΠΡΠΎ ΡΠΈΡΠ»ΠΎ Π»ΠΈΠ±ΠΎ 3, Π»ΠΈΠ±ΠΎ 8")
else: discard
ΠΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° discard ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° case Ρ ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ else ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈ,
ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ,ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΡΡΠ΅Π·Π°Π΅Ρ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΊΡΡΡΡ
Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: Π²ΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΊ, Π²Π΅ΡΠΊΠ° else ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°.
Π ΡΠ΅Π»ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° case ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΡΠΈΠΏΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. Π’ΠΎ ΡΡΠΎ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΎΡ
Π²Π°Ρ Π²ΡΠ΅Ρ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ - ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π²Π΅ΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Π° while
ΠΠΎΠΌΠ°Π½Π΄Π° while ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΠΊΠ»:
echo "ΠΠ°ΠΊ ΡΠ΅Π±Ρ Π·ΠΎΠ²ΡΡ? "
var name = readLine(stdin)
while name == "":
echo "ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π°Π·ΠΎΠ²ΠΈ ΡΠ²ΠΎΡ ΠΈΠΌΡ: "
name = readLine(stdin) # `var` ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
# Π·Π΄Π΅ΡΡ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΠΈΠΊΠ» while ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½, ΡΡΠΎΠ±Ρ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΅Π³ΠΎ ΠΈΠΌΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ,
ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π½Π°ΠΆΠΌΡΡ Enter (Ρ.Π΅. Π½Π΅ Π²Π²Π΅Π΄ΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ).
ΠΠΎΠΌΠ°Π½Π΄Π° for
ΠΠΎΠΌΠ°Π½Π΄Π° for ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΈΠΊΠ» ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° countup:
echo "Π‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ 5: "
for i in countup(1, 5):
echo iΠ‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ 5: 1 2 3 4 5
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ $ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (int) ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Π² ΡΡΡΠΎΠΊΡ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ i Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΊΠ»ΠΎΠΌ for ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ countup Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΠΈΠΏ. i ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ 1, 2, .., 5.
ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ echo. ΠΡΠΎΡ ΠΊΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅:
echo "Π‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ 5: "
var i = 1
while i <= 5:
echo i
inc i # ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ i Π½Π° 1Π‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ 5: 1 2 3 4 5
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΡΡΡΡ Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , Π² Nim ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ
..ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΡΠΎ ΠΈcountup:for i in 1 .. 5: echo i
ΠΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠΎΠ»Ρ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ (Ρ ΠΎΡΡ ΠΎΠ½ Π½Π΅ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ Π½ΡΠΆΠ΅Π½):
echo "Π‘ΡΠΈΡΠ°Π΅ΠΌ ΠΎΡ 5 Π΄ΠΎ 1: "
for i in countdown(5, 1):
echo iΠ‘ΡΠΈΡΠ°Π΅ΠΌ ΠΎΡ 5 Π΄ΠΎ 1: 5 4 3 2 1
0-ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΡΡ ΠΈΠΌΠ΅Π΅Ρ 2 ΡΠ΄ΠΎΠ±Π½ΡΡ
ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ..< ΠΈ .. ^1 (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ
ΠΈΠ½Π΄Π΅ΠΊΡΠ°) ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΡΡΡ Π΄ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΌ Π²Π΅ΡΡ
Π½ΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π»:
for i in 0 ..< 3: # ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΡΠΎ ΠΈ 0 .. 2
echo i0 1 2
var s = "Hello"
for i in 0 ..< s.len:
echo i0 1 2 3 4
var s = "Hello"
for idx, c in s[0 .. ^1]: # ^1 ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ^2 - ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅
echo idx, ": ", c0: H 1: e 2: l 3: l 4: o
ΠΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρe ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π΄Π»Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ):
* items and mitems, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ
* ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈ
* pairs and mpairs ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ ΡΠ°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
* (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ)
for index, item in ["a","b"].pairs:
echo item, " Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ", indexa Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0 b Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 1
ΠΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° block
Π£ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠΊΠ° Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ: ΠΎΠ½ΠΈ ΠΎΡΠΊΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ x Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΠΈΠΊΠ»Π°:
while false:
var x = "hi"
echo(x) # Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° while ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π²ΠΈΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π²
ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ. ΠΠΎΠΌΠ°Π½Π΄Ρ block ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ Π½ΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ
ΡΠ²Π½ΠΎ:
block myblock:
var x = "hi"
echo(x) # ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠ΅ΡΠΊΠ° Π±Π»ΠΎΠΊΠ° (myblock Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅) Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°.
ΠΠΎΠΌΠ°Π½Π΄Π° break
ΠΠ· Π±Π»ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΎΡΠ½ΠΎ Π²ΡΠΉΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ break. ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄
while, for ΠΈΠ»ΠΈ block. ΠΠ½Π° Π²ΡΡ
ΠΎΠ΄ΠΈΡ ΠΈΠ· Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅
Π·Π°Π΄Π°Π½Π° ΠΌΠ΅ΡΠΊΠ° Π±Π»ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ Π²ΡΠΉΡΠΈ:
block myblock:
echo "Π²Ρ
ΠΎΠ΄ΠΈΠΌ Π² Π±Π»ΠΎΠΊ"
while true:
echo "ΡΠΈΠΊΠ»"
break # ΠΏΠΎΠΊΠΈΠ΄Π°Π΅ΠΌ ΡΠΈΠΊΠ», Π½ΠΎ Π½Π΅ Π±Π»ΠΎΠΊ
echo "ΠΌΡ Π²ΡΡ Π΅ΡΡ Π² Π±Π»ΠΎΠΊΠ΅"
echo "ΡΠΆΠ΅ Π²Π½Π΅ Π±Π»ΠΎΠΊΠ°"Π²Ρ ΠΎΠ΄ΠΈΠΌ Π² Π±Π»ΠΎΠΊ ΡΠΈΠΊΠ» ΠΌΡ Π²ΡΡ Π΅ΡΡ Π² Π±Π»ΠΎΠΊΠ΅ ΡΠΆΠ΅ Π²Π½Π΅ Π±Π»ΠΎΠΊΠ°
block myblock2:
echo "Π²Ρ
ΠΎΠ΄ΠΈΠΌ Π² Π±Π»ΠΎΠΊ"
while true:
echo "ΡΠΈΠΊΠ»"
break myblock2 # ΠΏΠΎΠΊΠΈΠ΄Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½Π½ΡΠΉ Π±Π»ΠΎΠΊ (ΠΈ ΡΠΈΠΊΠ»)
echo "ΠΌΡ Π²ΡΡ Π΅ΡΡ Π² Π±Π»ΠΎΠΊΠ΅"
echo "ΡΠΆΠ΅ Π²Π½Π΅ Π±Π»ΠΎΠΊΠ°"Π²Ρ ΠΎΠ΄ΠΈΠΌ Π² Π±Π»ΠΎΠΊ ΡΠΈΠΊΠ» ΡΠΆΠ΅ Π²Π½Π΅ Π±Π»ΠΎΠΊΠ°
ΠΠΎΠΌΠ°Π½Π΄Π° continue
ΠΠ°ΠΊ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π° continue Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ ΠΊ
ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ:
for i in 1 .. 5:
if i <= 3: continue
echo i4 5
ΠΠΎΠΌΠ°Π½Π΄Π° when
ΠΡΠΈΠΌΠ΅Ρ:
when system.hostOS == "windows":
echo("ΡΡΠΎ Windows ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ!")
elif system.hostOS == "linux":
echo("ΡΡΠΎ Linux ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ!")
elif system.hostOS == "macosx":
echo("ΡΡΠΎ Mac OS X!")
else:
echo("Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
ΠΠΎΠΌΠ°Π½Π΄Π° when ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ if, Π½ΠΎ Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ:
- ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ;
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Π½ΡΡΡΠΈ Π²Π΅ΡΠΊΠΈ Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ;
- ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ Π²Π΅ΡΠΊΠ΅ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π΅ΡΠ½ΡΠ»ΠΎ true.
ΠΠΎΠΌΠ°Π½Π΄Π°
whenΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ#ifdefΡΠ·ΡΠΊΠ° C.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΎΡΡΡΡΠΏΡ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΠΎΡΡΡΡΠΏΠΎΠ² Nim.
Π Nim Π΅ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:
ΠΡΠΎΡΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅, Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° return, Π½Π΅ ΠΌΠΎΠ³ΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄.
Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ if, when, for, while ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΈΡΡΡΡΡ Ρ ΠΎΡΡΡΡΠΏΠΎΠΌ, Π° ΠΏΡΠΎΡΡΡΠ΅ β
Π½Π΅Ρ:
var x, y = true
# Π΄Π»Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΎΡΡΡΡΠΏ Π½Π΅ Π½ΡΠΆΠ΅Π½:"
if x: x = false
# Π½ΡΠΆΠ΅Π½ ΠΎΡΡΡΡΠΏ Π΄Π»Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ if:
if x:
if y:
y = false
else:
y = true
# Π½ΡΠΆΠ΅Π½ ΠΎΡΡΡΡΠΏ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ:
if x:
x = false
y = false
Π§Π°ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π°ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΡΡΡΡΠΏΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ :
if thisIsaLongCondition() and
thisIsAnotherLongCondition(1,
2, 3, 4):
x = true
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΡΡΡΡΠΏΡ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΡΡ .
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΠΈ ΡΠΎΡΠ΅ΠΊ Ρ Π·Π°ΠΏΡΡΠΎΠΉ (;) Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ
ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ:
# Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ fac(4) Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
const fac4 = (var x = 1; for i in 1..4: x *= i; x)
echo "ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° 4 ΡΠ°Π²Π΅Π½ ", fac4ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° 4 ΡΠ°Π²Π΅Π½ 24
ΠΡΠΎΡΠ΅Π΄ΡΡΡ
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ echo ΠΈ readLine ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ
ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. (Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΎΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.) Π Nim Π½ΠΎΠ²ΡΠ΅
ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° proc:
proc yes(question: string): bool =
echo(question, " (Π΄/Π½)")
while true:
case readLine(stdin)
of "Π΄", "Π", "Π΄Π°", "ΠΠ°": return true
of "Π½", "Π", "Π½Π΅Ρ", "ΠΠ΅Ρ": return false
else: echo("ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π±ΡΠ΄ΡΡΠ΅ ΡΡΠ½Π΅Π΅: Π΄Π° ΠΈΠ»ΠΈ Π½Π΅Ρ?")
if yes("Π£Π΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅?"):
echo("ΠΠ·Π²ΠΈΠ½ΠΈ, ΠΠ΅ΠΉΠ², Ρ Π±ΠΎΡΡΡ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.")
else:
echo("Π― Π΄ΡΠΌΠ°Ρ ΡΡ Π·Π½Π°Π΅ΡΡ Π² ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Ρ
ΡΠΆΠ΅ ΠΌΠ΅Π½Ρ.")
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ yes, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠΏΡΠΎΡ ΠΈ
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΡΠ²Π΅ΡΠΈΠ» Β«ΠΠ°Β», ΠΈ false, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΡΠ²Π΅ΡΠΈΠ» Β«ΠΠ΅ΡΒ».
ΠΠΎΠΌΠ°Π½Π΄Π° return ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡ Π²ΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ (ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΈΠΊΠ»Π°
while).
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ (question: string): bool ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ
ΠΈΠΌΠ΅Π½Π΅ΠΌ question, ΡΠΈΠΏΠΎΠΌ string ΠΈ Π²Π΅ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° bool.
bool ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠΈΠΏ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ true ΠΈ
false. Π£ΡΠ»ΠΎΠ²ΠΈΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ
if ΠΈΠ»ΠΈ while Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ bool.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅,
questionΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π°"Π£Π΄Π°Π»ΠΈΡΡ Π²ΡΠ΅..."β ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΡΡΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ result
Π Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ result, ΠΊΠΎΡΠΎΡΠ°Ρ
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΌΠ°Π½Π΄Π° return Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ return result.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ result Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
return Π½Π΅ Π±ΡΠ»ΠΎ.
proc sumTillNegative(x: varargs[int]): int =
for i in x:
if i < 0:
return
result = result + i
echo sumTillNegative() # Π²ΡΠ²Π΅Π΄Π΅Ρ 0
echo sumTillNegative(3, 4, 5) # Π²ΡΠ²Π΅Π΄Π΅Ρ 12
echo sumTillNegative(3, 4 , -1 , 6) # Π²ΡΠ²Π΅Π΄Π΅Ρ 7
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠ°ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ result Π²ΡΠ΅Π³Π΄Π° ΡΠΆΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ°
ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π΅Ρ ΡΠ½ΠΎΠ²Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ var result, ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π΅Ρ Π·Π°ΡΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ result Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΈΠΏΠ°.
ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ nil, ΡΠ°ΠΊ ΡΡΠΎ ΠΈΡ
, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ,
ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ.
ΠΡΠΎΡΠ΅Π΄ΡΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ return ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ result
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°:
proc helloWorld(): string =
"Hello, World!"
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ "Hello, World!":
echo helloWorld()Hello, World!
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
Π ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΡΡΠΎ Π΄Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
ΠΡΠ»ΠΈ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½ΡΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π΅Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π² ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ
ΠΏΠΎΠΌΠΎΡΡΡ var. ΠΠ°ΡΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΡΠΌ:
proc printSeq(s: seq, nprinted: int = -1) =
var nprinted = if nprinted == -1: s.len else: min(nprinted, s.len)
for i in 0 .. <nprinted:
echo s[i]
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
var ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ:
proc divmod(a, b: int; res, remainder: var int) =
res = a div b # ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅
remainder = a mod b # ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π²Π·ΡΡΠΈΠ΅ ΠΎΡΡΠ°ΡΠΊΠ°
var
x, y: int
echo "Π΄ΠΎ: x = ", x, "; y = ", y
divmod(8, 5, x, y) # ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ x ΠΈ y
echo "ΠΏΠΎΡΠ»Π΅: x = ", x, "; y = ", yΠ΄ΠΎ: x = 0; y = 0 ΠΏΠΎΡΠ»Π΅: x = 1; y = 3
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, res ΠΈ remainder ΡΠ²Π»ΡΡΡΡΡ var ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ
ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ.
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ
var ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²Π»ΡΡΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆ (tuple).
ΠΠΎΠΌΠ°Π½Π΄Π° discard
Π Nim Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π§ΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ,
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Ρ Π²ΡΠ·ΠΎΠ²Π°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄Ρ discard:
discard yes("ΠΠΎΠΆΠ½ΠΎ ΠΌΠ½Π΅ Π·Π°Π΄Π°ΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ?")
ΠΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠ²Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ»ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ
Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Ρ ΠΏΡΠ°Π³ΠΌΠΎΠΉ discardable:
proc p(x, y: int): int {.discardable.} =
return x + y
p(3, 4) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΡΠ²Π°Π΅Ρ, ΡΡΠΎ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΡΡΠ΄Π½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΠ½ΠΈ ΠΈΠ΄ΡΡ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ . Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ:
proc createWindow(x, y, width, height: int; title: string;
show: bool): Window
var w = createWindow(show = true, title = "My Application",
x = 0, y = 0, height = 600, width = 800)
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° createWindow, ΠΏΠΎΡΡΠ΄ΠΎΠΊ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Ρ
Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, Π½ΠΎ ΡΡΠΎ ΡΡ
ΡΠ΄ΡΠ°Π΅Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ:
var w = createWindow(0, 0, title = "My Application",
height = 600, width = 800, true)
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ createWindow ΡΡΠ°Π»ΠΎ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π΅ΡΠ»ΠΈ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΈΡ
Π½Π΅ ΡΠΊΠ°Π·Π°Π»:
proc createWindow(x = 0, y = 0, width = 500, height = 700,
title = "unknown",
show = true): Window =
discard
var w = createWindow(title = "My Application", height = 600, width = 800)
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ createWindow Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π»ΠΈΡΡ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅Ρ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ title: string = "unknown".
ΠΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
Nim Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ C++:
proc toString(x: int): string =
result =
if x < 0: "ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅"
elif x > 0: "ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅"
else: "Π½ΠΎΠ»Ρ"
proc toString(x: bool): string =
if x: result = "true"
else: result = "false"
echo toString(13) # Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° toString(x: int)
echo toString(true) # Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° toString(x: bool)ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ true
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
toStringΠ² Nim ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ$
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ±Π΅ΡΠ΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° toString. ΠΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ±ΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ
ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΡΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ (ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ
ΡΠ°Π·ΠΎΠ±ΡΠ°Π½ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅). ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΌ ΡΡΡΠΏΡΠΈΠ·Π°ΠΌ ΠΈ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π°
Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ±
ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Nim ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΎΠΉ β ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΡΡΠΎΠ³ΠΎ Π² ΡΠΎΠΌ,
ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ + ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°. ΠΠ°ΡΡΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π² ΠΈΠ½ΡΠΈΠΊΡΠ½ΠΎΠΉ a + b ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΎΠΉ Π½ΠΎΡΠ°ΡΠΈΠΈ +a. ΠΠ½ΡΠΈΠΊΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΠΉ β Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄ΠΈΠ½.
ΠΠΎΡΡΡΠΈΠΊΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ: a @ @ b
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ (a) @ (@b) ΠΈΠ»ΠΈ (a@) @ (b)? ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΡΡΠΈΠΊΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² Nim Π½Π΅Ρ, ΡΡΠΎ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ (a) @ (@b).
ΠΡΠΎΠΌΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²-ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»ΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ and, or ΠΈ not,
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΡΠ°ΠΊΠΈΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²: + - * \ / < > = @ $ ~ & % ! ? ^ . |
Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ - ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ. ΠΠΈΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ @!?+~, Π½ΠΎ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΡΠ°Π΄Π°ΡΡ.
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² Π°ΠΏΠΎΡΡΡΠΎΡΡ:
proc `$` (x: myDataType): string = discard
# ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ $ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Ρ myDataType, ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ $,
# ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΡΠΈΠΏΠΎΠ²
ΠΡΠ° Π½ΠΎΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ:
if `==`( `+`(3, 4), 7): echo("ΠΡΡΠΈΠ½Π°")ΠΡΡΠΈΠ½Π°
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈ Ρ.Π΄. Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. (ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, Π² ΠΊΠ°ΠΊΠΎΠΉ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Nim.) ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Ρ :
# ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅:
proc even(n: int): bool
proc odd(n: int): bool =
assert(n >= 0) # Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΡΠ²Π°Π»ΠΈΠΌΡΡ Π² ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ
if n == 0: false
else:
n == 1 or even(n-1)
proc even(n: int): bool =
assert(n >= 0) # Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΡΠ²Π°Π»ΠΈΠΌΡΡ Π² ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ
if n == 1: false
else:
n == 0 or odd(n-1)
ΠΠ΄Π΅ΡΡ odd Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ even ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, even Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΡΡΠ΅ΡΠΈΡΡΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠ»ΠΎΠΆΠ΅Π½: ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ = ΠΈ ΡΠ΅Π»ΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. assert Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅
ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠΎΠ΄ΡΠ»ΠΈ.
Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΡΠ·ΡΠΊΠ° ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π±ΡΠ΄ΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ΅Π»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π² Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ, Nim ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ proc, func ΠΈ method. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΠΏΠ΅ΠΊΡΠ°Ρ
Nim
Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ Π² ΡΠ²ΠΎΠΈΡ
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ
, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ ΡΠΈΡΡΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌΡΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ
ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π ΡΡΡΠ½ΠΎΡΡΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ
ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ: ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ const) ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ func Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠΌ Π΄Π»Ρ proc, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ
{.noSideEffects.}. ΠΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡ ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΊΠ°ΠΊ var, Π° ΡΠ°ΠΊΠΆΠ΅ Π»ΡΠ±ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ref. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎ Π·Π²ΡΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ, ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ
ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ°Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ (Π΄Π²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌΠΈ),
ΠΊΠ°ΠΊΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ, Ρ Π΄ΡΡΠ³ΠΎΠΉ
ΡΡΠΎΡΠΎΠ½Ρ, Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ RootObj. ΠΡΠΎ ΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ
ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ΅Π±Π½ΠΈΠΊΠ°.
ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ ΠΏΡΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ ΠΏΠΎΠ΄ΡΡΡΡΠΎΠΌ:
echo("Π‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ Π΄Π΅ΡΡΡΠΈ: ")
for i in countup(1, 10):
echo($i)Π‘ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎ Π΄Π΅ΡΡΡΠΈ: 1 2 3 4 5 6 7 8 9 10
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ°ΠΌΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ countup Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΈΠΊΠ»Π΅? ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ:
proc countup(a, b: int): int =
var res = a
while res <= b:
return res
inc(res)
Π£Π²Ρ, ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π°
Π²Π΅ΡΠ½ΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΡ ΡΡΠΎ Β«Π²Π΅ΡΠ½ΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡΒ»
Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ yield. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π»ΠΎΡΡ Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ proc Π½Π°
iterator ΠΈ Π²ΠΎΡ ΠΎΠ½ β Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ:
iterator countup(a, b: int): int =
var res = a
while res <= b:
yield res
inc(res)
ΠΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ:
- ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠΈΠΊΠ»ΠΎΠ²
for; - ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
return, Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρyield; - Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π½Π΅Ρ Π½Π΅ΡΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
result; - ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ;
- ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΡΠΎΠΈΡΡ inline ΠΈΡΠ΅ΡΠ°ΡΠΎΡ (ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ±ΡΠ°Π½ΠΎ Π² Π±ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°).
ΠΠ΄Π½Π°ΠΊΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ closure, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Β«ΠΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°Β». ΠΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ
ΠΈΠΌΠ΅ΡΡ ΡΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΡΠΎ ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ: Ρ Π½ΠΈΡ
ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½.
ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ,
ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ
split ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ std/strutils.
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π»Ρ Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ bool
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ Π² Nim Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ bool ΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ true ΠΈ
false. Π£ΡΠ»ΠΎΠ²ΠΈΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ
while```,`` if, elifΠΈwhenΠ΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏbool`.
ΠΠ»Ρ ΡΠΈΠΏΠ° bool ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ not, and, or, xor, <, <=, >, >=, !=
ΠΈ ==. ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ and ΠΈ or Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅Ρ:
while p != nil and p.name != "xyz":
# p.name Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ p == nil
p = p.next
Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ char
Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ Π² Nim Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ char. ΠΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π²Π΅Π½ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΠΉΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» UTF-8, ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΡΠ°ΡΡΡ. ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ Π² ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ:
Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²
UTF-8, ΡΠ°ΠΊ ΠΊΠ°ΠΊ UTF-8 Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ
Π² ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ.
Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ==, <, <=, > ΠΈ >=. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ $
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ char Π² string. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ; Π΄Π»Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ord. ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·
ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΈΠΌΠ²ΠΎΠ» Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ chr.
Π‘ΡΡΠΎΠΊΠΈ string
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Nim ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ ΠΊ ΡΡΡΠΎΠΊΠ΅
Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°. Π‘ΡΡΠΎΠΊΠΈ Π² Nim ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ Π½ΡΠ»ΡΠΌ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ»Π΅ Π΄Π»ΠΈΠ½Ρ.
ΠΠ»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ len; Π΄Π»ΠΈΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ
Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΠΎΠ»Ρ. ΠΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΌΡ Π½ΡΠ»Ρ - ΠΎΡΠΈΠ±ΠΊΠ°, ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ±Ρ Nim ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² cstring Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠΎΠΊ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΡΡΠΎΠΊΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ & Π΄Π»Ρ
ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ ΡΡΡΠΎΠΊ ΠΈ add Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΡΡΡΠΎΠΊΠ΅.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎΠΏΡΡΡΠΈΠΌΡ Π»ΡΠ±ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ UTF-8, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΠ½ΠΈ, ΡΠΊΠΎΡΠ΅Π΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π°ΠΉΡΠΎΠ². ΠΠΏΠ΅ΡΠ°ΡΠΈΡ s[i] ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ i-ΠΉ char ΡΡΡΠΎΠΊΠΈ, Π° Π½Π΅ i-ΠΉ ΡΠ½ΠΈΠΊΠΎΠ΄
ΡΠΈΠΌΠ²ΠΎΠ» unichar.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ "".
Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° int
Nim ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ: int, int8, int16, int32,
int64, uint, uint8, uint16, uint32 ΠΈ uint64.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ int. Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ
ΡΡΡΡΠΈΠΊΡ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΈΡ
ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΊ ΡΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌΡ ΡΠΈΠΏΡ:
let
x = 0 # int
y = 0'i8 # int8
z = 0'i64 # int64
u = 0'u # uint
echo "x ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(x)
echo "y ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(y)
echo "z ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(z)
echo "u ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(u)x ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int y ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int8 z ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int64 u ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ uint
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ
Π² ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΠΊ ΡΡΠΎ
ΡΠ°Π·ΠΌΠ΅Ρ int ΡΠ°Π²Π΅Π½ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ +, -, *, div, mod, <, <=, ==, !=, > ΠΈ >=
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄Π»Ρ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π». ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ and, or, xor ΠΈ not ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄Π»Ρ
ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΈΡΠΎΠ²ΡΠΉ ΡΠ΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° shl, Π° ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° shr. ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΄Π²ΠΈΠ³Π°
Π²ΡΠ΅Π³Π΄Π° ΡΡΠ°ΠΊΡΡΡΡ ΡΠ²ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ
ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΡΠ΅ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ RangeDefect (Π΅ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ).
Π§ΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ float
Nim ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ: float, float32 ΠΈ
float64.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠΏ float. Π ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ float Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 64
Π±ΠΈΡΠ°.
ΠΠΈΡΠ΅ΡΠ°Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΡΡΠΈΠΊΡ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΈΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΊ ΡΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡ ΡΠΈΠΏΡ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ:
var
x = 0.0 # float
y = 0.0'f32 # float32
z = 0.0'f64 # float64
echo "x ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(x)
echo "y ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(y)
echo "z ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ ", typeof(z)x ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ float64 y ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ float32 z ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ float64
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ +, -, *, /, <, <=, ==, !=, > ΠΈ >= ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄Π»Ρ
ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ IEEE-754.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ
Π·Π°ΠΏΡΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ: ΠΌΠ΅Π½ΡΡΠΈΠ΅ ΡΠΈΠΏΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ΅. Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π½Π΅
ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠΈΠΏΡ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ toInt ΠΈ toFloat.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π² Nim Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ:
var
x: int32 = 1.int32 # ΡΠΎ ΠΆΠ΅, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² int32(1)
y: int8 = int8('a') # 'a' == 97'i8
z: float = 2.5 # int(2.5) ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π΄ΠΎ 2
sum: int = int(x) + int(y) + int(z)
echo "x = ", x, "; y = ", y, "; z = ", z
echo "int(x) + int(y) + int(z) = ", sumx = 1; y = 97; z = 2.5 int(x) + int(y) + int(z) = 100
ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΡ $ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΡΠ±ΠΎΠΉ
Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π² ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ echo. ΠΠ΄Π½Π°ΠΊΠΎ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ $ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ
ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π΅Π³ΠΎ Π΄Π»Ρ Π½ΠΈΡ
.
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ·Π½Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π½Π΅ ΠΏΡΠΈΠ±Π΅Π³Π°Ρ ΠΊ
Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° $. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ
repr, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π³ΡΠ°ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΡΡ
ΡΠΈΠΏΠΎΠ² Π΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ
$ ΠΈ repr:
var
myBool = true
myCharacter = 'n'
myString = "nim"
myInteger = 42
myFloat = 3.14
echo "bool ", $myBool, ":", repr(myBool)
echo "char ", $myCharacter, ":", repr(myCharacter)
echo "string ", $myString, ":", repr(myString)
echo "int ", $myInteger, ":", repr(myInteger)
echo "float ", $myFloat, ":", repr(myFloat)bool true:true char n:'n' string nim:"nim" int 42:42 float 3.14:3.14
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ
ΠΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π² Nim ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ type:
type
biggestInt = int64 # ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ, ΡΠ°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
biggestFloat = float64 # ΡΠΈΠΏ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΡΠ°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ type Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈe enum
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΎΡΠ½ΠΎΡΡΡΠ°ΡΡΡ ΠΊ ΡΠΈΠΏΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π»ΠΈΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π½ΡΡΡΠ΅Π½Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΡΠ»Ρ 0, Π²ΡΠΎΡΠΎΠΉ β ΡΠΈΡΠ»Ρ 1 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΡΠΈΠΌΠ΅Ρ:
type
Direction = enum
north, east, south, west
var x = south
echo typeof(x) # `x` ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ `Direction`
echo $x # a Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `south`Direction south
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ.
ΠΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ:
Direction.south.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ $ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² Π΅Π³ΠΎ ΠΈΠΌΡ, Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ord
β Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ»Ρ Π»ΡΡΡΠ΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΡΠ²Π½ΠΎ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ. Π‘ΠΈΠΌΠ²ΠΎΠ», ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ²Π½ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΏΠ»ΡΡ 1.
Π―Π²Π½ΠΎ ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠΈ:
type
MyEnum = enum
a = 2, b = 4, c = 89
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ Ordinal
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ, char, bool (ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ) β Π²ΡΠ΅ ΠΎΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ
ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΡ
ΡΠΈΠΏΠΎΠ² Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
| ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ |
|---|---|
ord(x) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x |
inc(x) |
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ x Π½Π° 1 |
inc(x, n) |
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ x Π½Π° n; n β ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ |
dec(x) |
ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ x Π½Π° 1 |
dec(x, n) |
ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ x Π½Π° n; n β ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ |
succ(x) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° x ΡΠ»Π΅ΠΌΠ΅Π½Ρ |
succ(x, n) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ n-ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° x |
pred(x) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ° x |
pred(x, n) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ n-Π³ΠΎ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ° x |
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ inc, dec, succ ΠΈ pred ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π²ΡΠ·Π²Π°Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
RangeDefect ΠΈΠ»ΠΈ OverflowDefect. (ΠΡΠ»ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ΄ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ ΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ.)
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ range
ΠΡΠΎΡ ΡΠΈΠΏ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ (Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°). ΠΡΠΈΠΌΠ΅Ρ:
type
MySubrange = range[0..5]
MySubrange ΡΡΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ int, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ 0 Π΄ΠΎ 5. ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΡΡ
Π΄ΡΡΠ³ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° MySubrange ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ
Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· Π΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² (ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ) ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ.
ΠΠΎΠ΄ΡΠ»Ρ system ΠΈΠΌΠ΅Π΅Ρ Π²Π°ΠΆΠ½ΡΠΉ ΡΠΈΠΏ Natural, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΊΠ°ΠΊ range[0..high(int)] (high Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ). ΠΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ
Ρ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°. ΠΡΠΎ ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ:
Π²Π°Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ Π»ΠΈΡΡ ΠΏΠΎ ΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ
ΡΠΈΡΠ»Π° Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ. Π’ΠΈΠΏ Natural ΡΠ·ΡΠΊΠ° Nim ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠΉ
ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° set
Π’ΠΈΠΏ set ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
- int8-int16
- uint8/byte-uint16
- char
- enum
- ΠΏΠΎΠ΄Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΡ
ΡΠΈΠΏΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
range[-10..10]
ΠΈΠ»ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΌ. ΠΠΎΠ³Π΄Π° Π²Ρ ΡΠΎΠ·Π΄Π°ΡΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ² ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ,
Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΡΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ 0 Π΄ΠΎ DefaultSetElements-1,
Π³Π΄Π΅ DefaultSetElements Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ (2^8). ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° - ΡΡΠΎ MaxSetElements, ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½Π°
(2^16). Π’ΠΈΠΏΡ Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ 0 Π΄ΠΎ
MaxSetElements-1.
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π΅ΠΊΡΠΎΡΡ Π±ΠΈΡΠΎΠ². ΠΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅:
var s: set[int64] # Error: set is too large; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ `std/sets` Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΡ
ΡΠΈΠΏΠΎΠ²
# Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ 2^16 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π² Nim ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Ρ Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° -
std/sets, Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°: {} ΡΡΠΎ ΠΏΡΡΡΠΎΠ΅
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. ΠΡΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ ΠΏΠΎ ΡΠΈΠΏΡ Ρ Π»ΡΠ±ΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²):
type
CharSet = set[char]
var
x: CharSet
x = {'a'..'z', '0'..'9'} # ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π±ΡΠΊΠ²Ρ ΠΎΡ 'a' Π΄ΠΎ 'z'
# ΠΈ ΡΠΈΡΡΡ ΠΎΡ '0' Π΄ΠΎ '9'
ΠΠΎΠ΄ΡΠ»Ρ std/setutils ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΠ· ΠΈΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ²:
import std/setutils
let uniqueChars = myString.toSet
ΠΠ»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
| ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| A + B | ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² |
| A * B | ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² |
| A - B | ΡΠ°Π·Π½ΠΎΡΡΡ Π΄Π²ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² (A Π±Π΅Π· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² B) |
| A == B | ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² |
| A <= B | ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° (A ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ B ΠΈΠ»ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ B) |
| A < B | ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° (A ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ B) |
| e in A | ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΊΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ (A ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ e) |
| e notin A | A Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ e |
| contains(A, e) | A ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ e |
| card(A) | ΠΌΠΎΡΠ½ΠΎΡΡΡ A (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² A) |
| incl(A, elem) | ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ A = A + {elem} |
| excl(A, elem) | ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ A = A - {elem} |
ΠΠΎΠ»Ρ Π±ΠΈΡΠΎΠ²
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ»Π°Π³ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ΅ (ΠΈ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅)
ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ or.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈ ΠΊΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π²ΠΌΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
type
MyFlag* {.size: sizeof(cint).} = enum
A
B
C
D
MyFlags = set[MyFlag]
proc toNum(f: MyFlags): int = cast[cint](f)
proc toFlags(v: int): MyFlags = cast[MyFlags](v)
assert toNum({}) == 0
assert toNum({A}) == 1
assert toNum({D}) == 8
assert toNum({A, C}) == 5
assert toFlags(0) == {}
assert toFlags(7) == {A, B, C}
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠΈΡΠ»Π° 2.
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Ρ C, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ cint (distinct cint).
ΠΠ»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ³ΠΎΠ³ ΠΊΠΎΠ΄Π° Ρ C, ΡΠΌΠΎΡΡΠΈ - bitsize pragma.
ΠΠ°ΡΡΠΈΠ² array
ΠΠ°ΡΡΠΈΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΡΠ΅ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠΉ ΡΠΈΠΏ.
ΠΠ°ΡΡΠΈΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ []:
type
IntArray = array[0..5, int] # ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π», ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ 0 Π΄ΠΎ 5
var
x: IntArray
x = [1, 2, 3, 4, 5, 6]
for i in low(x)..high(x):
echo x[i], " Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ", i1 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0 2 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 1 3 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 2 4 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 3 5 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 4 6 Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 5
ΠΠΎΡΠ°ΡΠΈΡ x[i] ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ i-ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ x. ΠΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π³ΡΠ°Π½ΠΈΡ (Π»ΠΈΠ±ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π²ΠΎ
Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ). ΠΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠ°Π³ΠΌΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΠΊΠ»ΡΡΠΎΠΌ
--bound_checks:off.
ΠΠ°ΡΡΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ-Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Nim. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ.
ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° len Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°. low(a) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π° a, Π° high(a) β Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
type
Direction = enum
north, east, south, west
BlinkLights = enum
Off, On, slowBlink, mediumBlink, fastBlink
LevelSetting = array[north..west, BlinkLights]
var
level: LevelSetting
level[north] = On
level[south] = slowBlink
level[east] = fastBlink
echo "repr(level) = ", repr(level)
echo "low(level) = ", low(level)
echo "len(level) = ", len(level)
echo "high(level) = ", high(level)repr(level) = [On, fastBlink, slowBlink, Off] low(level) = north len(level) = 4 high(level) = west
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² (ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ) Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅. Π Nim Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΎΠΉ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π³Π΄Π΅ level ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΠΏΡ ΠΌΠ°ΡΠΊΠ° ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎ ΡΡΠΎΠ²Π½ΡΠΌ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ:
type
LightTower = array[1..3, LevelSetting]
var
tower: LightTower
tower[1][north] = slowBlink
tower[1][east] = mediumBlink
echo "len(tower) = ", len(tower)
echo "len(tower[1]) = ", len(tower[1])
echo "repr(tower) = ", repr(tower)
# Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²
#tower[north][east] = on
#tower[0][1] = onlen(tower) = 3 len(tower[1]) = 4 repr(tower) = [[slowBlink, mediumBlink, Off, Off], [Off, Off, Off, Off], [Off, Off, Off, Off]]
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° len Π²Π΅ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. Π§ΡΠΎΠ±Ρ Π΅ΡΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΡΠΈΡΠΎΠ΄Ρ LightTower, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° LevelSetting, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΡΠΈΠΏ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ:
type LightTower = array[1..10, array[north..west, BlinkLights]]
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π½ΡΠ»Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π΅ΡΡΡ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ Π½ΡΠ»Ρ Π΄ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠΈΠ½ΡΡ ΠΎΠ΄ΠΈΠ½:
type
IntArray = array[0..5, int] # ΠΌΠ°ΡΡΠΈΠ², ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ 0 Π΄ΠΎ 5
QuickArray = array[6, int] # ΠΌΠ°ΡΡΠΈΠ², ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ 0 Π΄ΠΎ 5
var
x: IntArray
y: QuickArray
x = [1, 2, 3, 4, 5, 6]
y = x
for i in low(x)..high(x):
echo "i = ", i, "; ", "x[i] = ", x[i], "; y[i] = ", y[i]i = 0; x[i] = 1; y[i] = 1 i = 1; x[i] = 2; y[i] = 2 i = 2; x[i] = 3; y[i] = 3 i = 3; x[i] = 4; y[i] = 4 i = 4; x[i] = 5; y[i] = 5 i = 5; x[i] = 6; y[i] = 6
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ seq
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΠΌΠ°ΡΡΠΈΠ²Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡ Π΄Π»ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Ρ ΡΡΡΠΎΠΊ). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΎΠ½ΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΊΡΡΠ΅ ΠΈ ΡΡΠ°ΡΡΠ²ΡΡΡ Π² ΡΠ±ΠΎΡΠΊΠ΅ ΠΌΡΡΠΎΡΠ°.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΡΡΡΡ int, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΡΡ Ρ 0. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ len, low ΠΈ high
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠΎΡΠ°ΡΠΈΡ x[i] ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ i-ΠΌΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ x.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° [], ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ³ΠΎ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ @. ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ newSeq.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ openarray.
ΠΡΠΈΠΌΠ΅Ρ:
var
x: seq[int] # ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π»
x = @[1, 2, 3, 4, 5, 6] # @ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ Π² ΠΊΡΡΠ΅
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Ρ @[].
ΠΠΎΠΌΠ°Π½Π΄Π° for, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π΄Π²ΡΠΌΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΎΡΠΌΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° for ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ,
ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΈΠ· ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° items() ΠΌΠΎΠ΄ΡΠ»Ρ std/system.
ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΎΡΠΌΡ Ρ Π΄Π²ΡΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, Π° Π²ΡΠΎΡΠ°Ρ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° for ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°
pairs() ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ system. ΠΡΠΈΠΌΠ΅ΡΡ:
for i in @[3, 4, 5]:
echo($i)3 4 5
for i, value in @[3, 4, 5]:
echo "ΠΏΠΎΠ·ΠΈΡΠΈΡ: ", $i, ", Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:", $valueΠΏΠΎΠ·ΠΈΡΠΈΡ: 0, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:3 ΠΏΠΎΠ·ΠΈΡΠΈΡ: 1, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:4 ΠΏΠΎΠ·ΠΈΡΠΈΡ: 2, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:5
ΠΡΠΊΡΡΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ openarray
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡΠΊΡΡΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
Π§Π°ΡΡΠΎ Π²ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈ: ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌ Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΊΡΡΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΡΡΡΡ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΠΈ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ 0. ΠΠ»Ρ Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ len, low ΠΈ high. ΠΡΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΈΠΏ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
var
fruits: seq[string] # ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ
# ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 'nil'
capitals: array[3, string] # ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ
fruits = @[] # ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΊΡΡΠ΅ ΠΏΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π½Π°
# ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ 'fruits'
capitals = ["New York", "London", "Berlin"] # ΠΌΠ°ΡΡΠΈΠ² 'capitals' ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ
# ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π»ΠΈΡΡ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
fruits.add("Banana") # ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 'fruits' Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ
# ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ Π² Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
fruits.add("Mango")
proc openArraySize(oa: openArray[string]): int =
oa.len
assert openArraySize(fruits) == 2 # ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
# Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
assert openArraySize(capitals) == 3 # Π½ΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠΆΠ΅
Π’ΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ: ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½ΡΠΆΠ΄Π° Π² Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ΅Π΄ΠΊΠΎ ΠΈ ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² varargs
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ varargs Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΡΠΊΡΡΡΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²
ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²
ΠΌΠ°ΡΡΠΈΠ²:
proc myWriteln(f: File, a: varargs[string]) =
for s in items(a):
write(f, s)
write(f, "\n")
myWriteln(stdout, "abc", "def", "xyz")
# ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π²:
myWriteln(stdout, ["abc", "def", "xyz"])
ΠΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ varargs ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅:
proc myWriteln(f: File, a: varargs[string, `$`]) =
for s in items(a):
write(f, s)
write(f, "\n")
myWriteln(stdout, 123, "abc", 4.0)
# ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π²:
myWriteln(stdout, [$123, $"abc", $4.0])
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ $ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ a.
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ $, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠΉ ΠΊ ΡΡΡΠΎΠΊΠ°ΠΌ, Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ.
Π‘ΡΠ΅Π·Ρ Slice
Π‘ΡΠ΅Π·Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΡΠΈΠΏΡ ΠΏΠΎΠ΄Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΏΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. Π‘ΡΠ΅Π· β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Slice, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π΅ Π³ΡΠ°Π½ΠΈΡΡ, a ΠΈ b.
Π‘Π°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΡΠ΅Π· Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Slice Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ².
var
a = "Nim is a programming language"
b = "Slices are useless."
echo a[7 .. 12] # --> 'a prog'
b[11 .. ^2] = "useful"
echo b # --> 'Slices are useful.'a prog Slices are useful.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ΅Π·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ°Π½ΠΈΡΡ ΡΡΠ΅Π·Π° ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΈΡ ΡΠΈΠΏΠΎΠΌ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ΅Π·Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΡΡΡΠΎΠΊ, ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Ρ. Π΄., Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² Nim ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ Ρ Π½ΡΠ»Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΡΠΎΠΊΠ° b ΠΈΠΌΠ΅Π΅Ρ Π΄Π»ΠΈΠ½Ρ 19, ΠΈ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΡΡ
ΡΠ°ΠΊ:
"Slices are useless."
| | |
0 11 17 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
^19 ^8 ^2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Ρ ^
Π³Π΄Π΅ b[0 .. ^1] ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ b[0 .. b.len-1] ΠΈ b[0 ..< b.len], ΠΈ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ^1
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠ°Π·Π°Π½ΠΈΡ b.len-1. Π‘ΠΌ. ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
Π ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ ΡΡΠΎ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΡΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ "useless" ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Ρ Π½Π° "useful":
b[11 .. ^2] β Π²ΡΠ±ΠΈΡΠ°Π΅Ρ "useless", Π° b[11 .. ^2] = "useful" Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ "useless" Π½Π°
"useful", Π΄Π°Π²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ "Slices are useful.".
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 1: Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠΈ:
b[^8 .. ^2] = "useful"ΠΈΠ»ΠΈb[11 .. b.len-2] = "useful", ΠΈΠ»ΠΈb[11 ..< b.len-1] = "useful".
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 2: ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π±Π»ΠΎΠ½
^Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉintΡΠΈΠΏΠ°BackwardsIndex, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡlastIndexΠΊΠ°ΠΊconst lastIndex = ^1ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Ρ ΠΊΠ°ΠΊb[0 .. lastIndex].
ΠΠ±ΡΠ΅ΠΊΡΡ object
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏ object. ΠΠ±ΡΠ΅ΠΊΡ β ΡΡΠΎ ΡΠΈΠΏ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ: ΠΏΡΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΡΠ΅ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Foo ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Foo(ΠΏΠΎΠ»Π΅: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ...), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ»Ρ. ΠΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
type
Person = object
name: string
age: int
var person1 = Person(name: "Peter", age: 30)
echo person1.name # "Peter"
echo person1.age # 30
var person2 = person1 # ΠΊΠΎΠΏΠΈΡ person1
person2.age += 14
echo person1.age # 30
echo person2.age # 44
# ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ
let person3 = Person(age: 12, name: "Quentin")
doAssert person3.age == 12
# Π½Π΅ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ
let person4 = Person(age: 3)
# Π½Π΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
# Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°.
doAssert person4.name == ""Peter 30 30 44
ΠΠΎΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΠΈΠ΄Π½Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ,
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ *.
type
Person* = object # ΡΠΈΠΏ Π²ΠΈΠ΄Π΅Π½ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
name*: string # ΠΏΠΎΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
age*: int
ΠΠΎΡΡΠ΅ΠΆΠΈ tuple
ΠΠΎΡΡΠ΅ΠΆΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Π²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ-Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠΈΠΏΠΎΠ²-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΈΠΏΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌΠΈ β ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ»Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ () ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ. ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ°. ΠΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π·Π΄Π΅ΡΡ Π½Π΅Π»ΡΠ·Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΡ ΡΠΈΠΏΠ° ΠΊΠΎΡΡΠ΅ΠΆΠ°.
ΠΠ°ΠΊ ΠΈ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΠΈΡΡ t.ΠΏΠΎΠ»Π΅. ΠΠ΄Π½Π°ΠΊΠΎ Ρ
ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ β ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ: t[i], Π³Π΄Π΅ i Π΄ΠΎΠ»ΠΆΠ½ΠΎ
Π±ΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ.
type
# Π’ΠΈΠΏ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°:
# ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ (name) ΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ° (age).
Person = tuple
name: string
age: int
# ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
PersonX = tuple[name: string, age: int]
# Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ
PersonY = (string, int)
var
person: Person
personX: PersonX
personY: PersonY
person = (name: "Peter", age: 30)
# Person ΠΈ PersonX ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ
personX = person
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠ° Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ:
personY = ("Peter", 30)
# ΠΠΎΡΡΠ΅ΠΆ Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ,
# Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ.
person = personY
personY = person
# Π§Π°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
person = ("Peter", 30)
echo person.name # "Peter"
echo person.age # 30
echo person[0] # "Peter"
echo person[1] # 30
# ΠΠΎΡΡΠ΅ΠΆΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
var building: tuple[street: string, number: int]
building = ("Rue del Percebe", 13)
echo building.street
# ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ β ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠΏΠΎΠ²!
# person = building
# --> Error: type mismatch: got (tuple[street: string, number: int])
# but expected 'Person'Peter 30 Peter 30 Rue del Percebe
Π₯ΠΎΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΈΠΏ ΠΊΠΎΡΡΠ΅ΠΆΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠΎΡΡΠ΅ΠΆΠΈ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΈΠΏΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ.
Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ
ΠΡΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ°Π·Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΏΠΎΠ»Ρ
ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° splitFile ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ os Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΈΠΌΡ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡΡΠ΅ΠΆΠ°.
ΠΠ»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠ±ΠΊΠΈ, ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π²Π΅ΡΡ ΠΊΠΎΡΡΠ΅ΠΆ)! ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
import std/os
let
path = "usr/local/nimc.html"
(dir, name, ext) = splitFile(path) # β
ΠΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°
baddir, badname, badext = splitFile(path) # β ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ!
echo dir # Π²ΡΠ²Π΅Π΄Π΅Ρ "usr/local"
echo name # Π²ΡΠ²Π΅Π΄Π΅Ρ "nimc"
echo ext # Π²ΡΠ²Π΅Π΄Π΅Ρ ".html"
# ΠΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΡΡΠ΅ΠΆ:
echo baddir # (dir: "usr/local", name: "nimc", ext: ".html")
echo badname # (ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅)
echo badext # (ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅)usr/local nimc .html (dir: "usr/local", name: "nimc", ext: ".html") (dir: "usr/local", name: "nimc", ext: ".html") (dir: "usr/local", name: "nimc", ext: ".html")
Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΈΠΊΠ»Π°Ρ
for:
let points = [(10, 'a'), (20, 'b'), (30, 'c')]
for (x, c) in points:
echo x
# ΠΡΠ²Π΅Π΄Π΅Ρ: 10; 20; 30
# ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ:
for i, (x, c) in points:
echo i, c
# ΠΡΠ²Π΅Π΄Π΅Ρ: 0a; 1b; 2c10 20 30 0a 1b 2c
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ±Π»ΠΈΡΠ½Ρ β ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π΄Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ°.
Π‘ΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ref ΠΈ ptr
Π‘ΡΡΠ»ΠΊΠΈ (ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ) ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡΒ». ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
Nim ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ (traced) ΠΈ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ (untraced) ΡΡΡΠ»ΠΊΠΈ. ΠΠ΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ. ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΊΡΡΠ΅ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΌΡΡΠΎΡΠ°, Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ β Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Β«ΠΆΠ΅Π»Π΅Π·ΡΒ») ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· Π½ΠΈΡ Π½Π΅Π»ΡΠ·Ρ.
ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ ref, Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ β ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ
ptr.
ΠΡΡΡΠ°Ρ subscript-Π½ΠΎΡΠ°ΡΠΈΡ [] ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ, ΡΠΎ Π΅ΡΡΡ Π΄Π»Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΠ»ΠΊΠ°. ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ . (Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»Ρ
ΠΊΠΎΡΡΠ΅ΠΆΠ°/ΠΎΠ±ΡΠ΅ΠΊΡΠ°) ΠΈ [] (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°/ΡΡΡΠΎΠΊΠΈ/ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ)
Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ²:
type
Node = ref NodeObj
NodeObj = object
le, ri: Node
data: int
var
n: Node
new(n)
n.data = 9
# Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠΈΡΠ°ΡΡ n[].data, ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ!
ΠΠ»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°
new:
var n: Node
new(n)
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ alloc, dealloc ΠΈ
realloc. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ std/system ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΠΈΠΌ
Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ.
ΠΡΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½ΠΈ Π½Π° ΡΡΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ nil.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΠΈΠΏ proc
ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΠΈΠΏ ΡΡΠΎ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ) ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ nil. Nim ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Ρ Π½ΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ:
proc greet(name: string): string =
"ΠΡΠΈΠ²Π΅Ρ, " & name & "!"
proc bye(name: string): string =
"ΠΠΎΠΊΠ°, " & name & "."
proc communicate(greeting: proc (x: string): string, name: string) =
echo greeting(name)
communicate(greet, "ΠΠΆΠΎΠ½")
communicate(bye, "ΠΡΡΠΈ")ΠΡΠΈΠ²Π΅Ρ, ΠΠΆΠΎΠ½! ΠΠΎΠΊΠ°, ΠΡΡΠΈ.
ΠΠ΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΡΠΌΠ° Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΡΠΈΠΏΠΎΠ²: ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠΎΡΠΌΡ Π²ΡΠ·ΠΎΠ²Π°. Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅.
ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΈΠΏ distinct
ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌ ΠΈ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ. ΠΠ°ΠΌ ΡΠ²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ»Ρ ΠΏΠΎΠΌΠΎΡΠΈ Π² ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΈΠΏ, ΡΠ°ΠΊ ΠΈ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΏ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° (type casting).
ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅.
ΠΠΎΠ΄ΡΠ»ΠΈ
Nim ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ°ΡΡΠΈ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠΊΡΡΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
import. ΠΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΎΠΉ
(*):
# ΠΠΎΠ΄ΡΠ»Ρ A
var
x*, y: int
proc `*` *(a, b: seq[int]): seq[int] =
# ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ:
newSeq(result, len(a))
# ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠΈΡΡ Π΄Π²Π΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ:
for i in 0..len(a)-1: result[i] = a[i] * b[i]
when isMainModule:
# ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ``*`` Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ:
assert(@[1, 2, 3] * @[1, 2, 3] == @[1, 4, 9])
ΠΠΎΠ΄ΡΠ»Ρ A ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ x ΠΈ *, Π½ΠΎ Π½Π΅ y.
ΠΠΎΠΌΠ°Π½Π΄Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ .
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π΅ΡΡΡ ΠΎΡΠΎΠ±Π°Ρ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° isMainModule, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΡΠΈΠ½Π½Π°, Π΅ΡΠ»ΠΈ
ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΡ
ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅ΡΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° module.symbol. ΠΡΠ»ΠΈ
ΡΠΈΠΌΠ²ΠΎΠ» Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ. Π‘ΠΈΠΌΠ²ΠΎΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² Π΄Π²ΡΡ
(ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΡΠ°Π·Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»ΡΡ
ΠΈ ΠΎΠ±Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ ΡΡΠ΅ΡΡΠΈΠΌ:
# ΠΠΎΠ΄ΡΠ»Ρ A
var x*: string
# ΠΠΎΠ΄ΡΠ»Ρ B
var x*: int
# ΠΠΎΠ΄ΡΠ»Ρ C
import A, B
write(stdout, x) # ΠΎΡΠΈΠ±ΠΊΠ°: x Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½
write(stdout, A.x) # ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Ρ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡ
var x = 4
write(stdout, x) # Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ Π½Π΅Ρ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ x ΠΌΠΎΠ΄ΡΠ»Ρ C
ΠΠΎ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ. ΠΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ:
# ΠΠΎΠ΄ΡΠ»Ρ A
proc x*(a: int): string = $a
# ΠΠΎΠ΄ΡΠ»Ρ B
proc x*(a: string): string = $a
# ΠΠΎΠ΄ΡΠ»Ρ C
import A, B
write(stdout, x(3)) # ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Ρ: Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ A.x
write(stdout, x("")) # ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Ρ: Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ B.x
proc x*(a: int): string = nil
write(stdout, x(3)) # Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΡ: ΠΊΠ°ΠΊΠΎΠΉ `x` Π²ΡΠ·ΡΠ²Π°ΡΡ?
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² except
ΠΠ±ΡΡΠ½ΠΎ, ΠΊΠΎΠΌΠ°Π½Π΄Π° import Π·Π°Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, ΡΠΊΠ°Π·Π°Π²
ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Ρ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ except.
import mymodule except y
ΠΠΎΠΌΠ°Π½Π΄Π° from
ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ import, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ Π²ΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ from import - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ:
from mymodule import x, y, z
ΠΠΎΠΌΠ°Π½Π΄Π° from ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π΄Π»Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π²
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ, ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ, Π½ΠΎ Π΄Π»Ρ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ
ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡ.
from mymodule import x, y, z
x() # ΠΈΡΠΏΠΎΠ»ΡΠ·yeΠΌ x Π±Π΅Π· ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
from mymodule import nil
mymodule.x() # Π½ΡΠΆΠ½ΠΎ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ x, ΡΠΊΠ°Π·Π°Π² ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
x() # ΠΡΠΈΠ±ΠΊΠ°: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ x Π±Π΅Π· ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΡΠ΅, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
from mymodule as m import nil
m.x() # m ΡΡΠΎ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π΄Π»Ρ mymodule
ΠΠΎΠΌΠ°Π½Π΄Π° include
ΠΠΎΠΌΠ°Π½Π΄Π° include Π΄Π΅Π»Π°Π΅Ρ Π½Π΅ΡΡΠΎ, ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π΅ΡΡ ΠΎΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ: ΠΎΠ½Π°
Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π° ΡΠ²ΠΎΡ ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ
Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²:
include fileA, fileB, fileC