["827β91-62","943β29-29","493β29-28"]
ΠΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄Π½ΠΎ!
ΠΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π» ΠΈ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π³ΠΎΡΡ ΠΊΠ»ΡΡΠ° Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΎΡΡ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ:
ghci> Map.fromListWith max [(2,3),(2,100),(3,29),(3,11),(4,22),(4,15)]
fromList [(2,100),(3,29),(4,22)]
ΠΠ»ΠΈ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΌΠΈΡΡ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π»ΠΈΡΡ:
ghci> Map.fromListWith (+) [(2,3),(2,100),(3,29),(3,11),(4,22),(4,15)]
fromList [(2,103),(3,40),(4,37)]
ΠΡ ΡΡΠΎ ΠΆ, ΠΌΠΎΠ΄ΡΠ»Ρ Data.Map, Π΄Π° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ·ΡΠΊΠ° Haskell Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΈ. ΠΠ°Π»Π΅Π΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠ΄ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈ Haskell β Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΏΡ, ΡΠ»ΡΠΆΠ°ΡΠΈΠ΅ ΡΡ ΠΎΠΆΠΈΠΌ ΡΠ΅Π»ΡΠΌ, Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π² Π½ΡΠΆΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΈΠ·Π²Π½Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ.
ΠΠΎΠ΄ΡΠ»Ρ Geometry
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΌΠ° ΠΈ ΠΏΠ»ΠΎΡΠ°Π΄ΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³ΡΡ. Π Π½Π°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Geometry.hs.
Π Π½Π°ΡΠ°Π»Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΅Π³ΠΎ ΠΈΠΌΡ. ΠΡΠ»ΠΈ ΠΌΡ Π½Π°Π·Π²Π°Π»ΠΈ ΡΠ°ΠΉΠ» Geometry.hs, ΡΠΎ ΠΈΠΌΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Geometry. ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
module Geometry
( sphereVolume
, sphereArea
, cubeVolume
, cubeArea
, cuboidArea
, cuboidVolume
) where
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΏΠ»ΠΎΡΠ°Π΄ΠΈ ΠΈ ΠΎΠ±ΡΡΠΌΡ Π΄Π»Ρ ΡΡΠ΅Ρ (sphere), ΠΊΡΠ±ΠΎΠ² (cube) ΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ΠΎΠ² (cuboid). Π‘ΡΠ΅ΡΠ° β ΡΡΠΎ ΠΊΡΡΠ³Π»Π°Ρ ΡΡΡΠΊΠ° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π³ΡΠ΅ΠΉΠΏΡΡΡΡΠ°, ΠΊΡΠ± β ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½Π°Ρ ΡΡΡΠΊΠ°, ΠΏΠΎΡ ΠΎΠΆΠ°Ρ Π½Π° ΠΊΡΠ±ΠΈΠΊ Π ΡΠ±ΠΈΠΊΠ°, Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ β ΡΠΎΡΡ-Π²-ΡΠΎΡΡ ΠΏΠ°ΡΠΊΠ° ΡΠΈΠ³Π°ΡΠ΅Ρ. (ΠΠ΅ΡΠΈ, ΠΊΡΡΠΈΡΡ Π²ΡΠ΅Π΄Π½ΠΎ!)
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π½Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
module Geometry
( sphereVolume , sphereArea
, cubeVolume
, cubeArea
, cuboidArea
, cuboidVolume
) where
sphereVolume :: Float β> Float
sphereVolume radius = (4.0 / 3.0) * pi * (radius 3)
sphereArea :: Float β> Float
sphereArea radius = 4 * pi * (radius 2)
cubeVolume :: Float β> Float
cubeVolume side = cuboidVolume side side side
cubeArea :: Float β> Float
cubeArea side = cuboidArea side side side
cuboidVolume :: Float β> Float β> Float β> Float
cuboidVolume a b c = rectArea a b * c
cuboidArea :: Float β> Float β> Float β> Float
cuboidArea a b c = rectArea a b * 2 + rectArea a c * 2 + rectArea c b * 2
rectArea :: Float β> Float β> Float
rectArea a b = a * b
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ, Π½ΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠ΅ΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΡΠ± β ΡΡΠΎ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΈ ΠΎΠ±ΡΡΠΌ, ΡΡΠ°ΠΊΡΡΡ ΠΊΡΠ± ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ Ρ ΡΠ°Π²Π½ΡΠΌΠΈ ΡΡΠΎΡΠΎΠ½Π°ΠΌΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ rectArea, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΏΠΎ Π΅Π³ΠΎ ΡΡΠΎΡΠΎΠ½Π°ΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ° β ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°Π΅Ρ ΡΡΠΎΡΠΎΠ½Ρ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ rectArea Π² ΡΡΠ½ΠΊΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡΡ cuboidArea ΠΈ cuboidVolume), Π½ΠΎ Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΎΡΠΈΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΡΡΡ ΠΌΠ΅ΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΡΠΆΠ°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π½Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΠΎ ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ rectArea ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅), ΠΈ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΈΠ² β Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ, Π·Π°ΠΏΠΈΡΠ΅ΠΌ:
import Geometry
Π€Π°ΠΉΠ» Geometry.hs Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, ΡΡΠΎ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΠ°Ρ Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
ΠΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΠΠΎΠ΄ΡΠ»ΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ΄Π°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Geometry ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π² Π½Π΅Π³ΠΎ Π²Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΡΡΠΈ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Geometry. Π ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΡΡΠΈ ΡΠ°ΠΉΠ»Π°: Sphere.hs, Cuboid.hs ΠΈ Cube.hs. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
ΠΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Sphere.hs:
module Geometry.Sphere
( volume
, area
) where
volume :: Float β> Float
volume radius = (4.0 / 3.0) * pi * (radius 3)
area :: Float β> Float
area radius = 4 * pi * (radius 2)
Π€Π°ΠΉΠ» Cuboid.hs Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
module Geometry.Cuboid
( volume
, area
) where
volume :: Float β> Float β> Float β> Float
volume a b c = rectArea a b * c
area :: Float β> Float β> Float β> Float
area a b c = rectArea a b * 2 + rectArea a c * 2 + rectArea c b * 2
rectArea :: Float β> Float β> Float
rectArea a b = a * b
Π Π²ΠΎΡ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Cube.hs:
module Geometry.Cube
( volume
, area
) where
import qualified Geometry.Cuboid as Cuboid
volume :: Float β> Float
volume side = Cuboid.volume side side side
area :: Float β> Float
area side = Cuboid.area side side side
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» Sphere.hs Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Geometry ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠ°ΠΊ Geometry.Sphere. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΠΊΡΠ±Π° ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°. Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅Ρ ΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΡ Π²ΠΏΡΠ°Π²Π΅ ΡΠ°ΠΊ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ .
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Ρ ΠΏΠ°ΠΏΠΊΠΎΠΉ Geometry, ΡΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΌ:
import Geometry.Sphere
ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ area ΠΈ volume, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠΈΡΠ»ΡΡ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΈ ΠΎΠ±ΡΡΠΌ ΡΡΠ΅ΡΡ. ΠΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ:
import qualified Geometry.Sphere as Sphere
import qualified Geometry.Cuboid as Cuboid
import qualified Geometry.Cube as Cube
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Sphere.area, Sphere.volume, Cuboid.area ΠΈ Ρ. Π΄., ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠΈΡΠ»ΠΈΡ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠΉΠΌΠ°Π΅ΡΠ΅ ΡΠ΅Π±Ρ Π·Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»ΡΠΆΠ°Ρ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅Π»ΠΈ, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎΠ·Π΄Π½Π΅Π΅ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎ ΡΡ ΠΎΠΆΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
7
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ²
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΏΡ ΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ Haskell. ΠΠ· ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅!
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ β Bool, Int, Char, Maybe ΠΈ Π΄Ρ. ΠΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ? ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ data. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΈΠΏ Bool:
data Bool = False | True
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ data ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ . Π§Π°ΡΡΡ Π΄ΠΎ Π·Π½Π°ΠΊΠ° ΡΠ°Π²Π΅Π½ΡΡΠ²Π° Π²Π²ΠΎΠ΄ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠΏΠ°, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Bool. Π§Π°ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π½Π°ΠΊΠ° ΡΠ°Π²Π΅Π½ΡΡΠ²Π° β ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΏ. Π‘ΠΈΠΌΠ²ΠΎΠ» | ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΈΠ»ΠΈΒ». ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ°ΠΊ: ΡΠΈΠΏ Bool ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ True ΠΈΠ»ΠΈ False. Π ΠΈΠΌΡ ΡΠΈΠΏΠ°, ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠΏΠΈΡΠ½ΠΎΠΉ Π±ΡΠΊΠ²Ρ.
Π Π°ΡΡΡΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΠΈΠΏ Int ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΠ°ΠΊ:
data Int = β2147483648 | β2147483647 | ... | β1 | 0 | 1 | 2 | ... | 2147483647
ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Int. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΈΠΏ Int ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΈΠ½Π°ΡΠ΅ β Π²ΠΈΠ΄ΠΈΡΠ΅, Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΠΉΠΌΡ ΡΠΈΡΠ΅Π» β ΡΠ°ΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π»ΠΈΡΡ Π² ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π»ΡΡ .