ΠΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡΠ½ΡΠ΄Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎΡ Π΅ΡΠ΅ Π΄Π²Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠ΄Π°.
[x]. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ sort, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΠ΅ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅ΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π’ΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΡΠΈΠΏΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ infix "<=", Π·Π°Π΄Π°ΡΡΠ°Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
[x]. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ°ΠΊΠΈΡ Π±Π°Π·ΠΈΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠ²Π°ΡΠΈ Π·Π°ΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ, Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΌ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΠ΅ΠΉ ΠΊΠ»ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΠ΅ ΠΠ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Ρ ΡΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅, Π½Π΅ ΠΠ-ΡΠ·ΡΠΊΠΈ.
Π ΡΠ·ΡΠΊΠ΅ Ada Π½Π΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², Π½ΠΎ Π·Π°ΡΠΎ Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ΄ΠΎΠ²ΡΠΌ, Ρ ΡΠΎΠ΄ΠΎΠ²ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΡΠΈΠΏΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΠ°ΠΊΠ΅Ρ VECTOR_PROCESSING ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° VECTOR ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ infix "+".
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ·ΡΠΊΠ΅ Ada ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΡΠΈΠΊΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, Π½ΠΎ ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
generic
type G is private;
with function "+" (a, b: G) return G is <>;
with function "*" (a, b: G) return G is <>;
zero: G; unity: G;
package VECTOR_HANDLING is
... ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ...
end VECTOR_HANDLING
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π½Π°ΡΡΠ΄Ρ Ρ ΡΠΈΠΏΠΎΠΌ G ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ ΡΠΎΠ΄ΠΎΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠ»ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ zero - Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°:
package BOOLEAN_VECTOR_HANDLING is
new VECTOR_HANDLING (BOOLEAN, "or", "and", false, true);
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ or ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, and - ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π΄Π°ΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ zero ΠΈ unity. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π»Π΅ΠΊΡΠΈΠΉ ΠΊΡΡΡΠ°.
Π―Π²Π»ΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ Ada, Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΡΠ½ΠΎΠ²Π° ΠΠ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° - ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π½Π°Π΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΠΏΡΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΠ, ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΡΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠ°Ρ "Π½Π° ΠΏΡΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅" ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, infix "+", Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΎΠ΄ΠΎΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, ΡΡΠΎΡΡΠΈΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ΄Ρ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ INTEGER ΠΈ BOOLEAN. Π’ΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ zero ΠΈ unity, ΠΎΠ±ΡΠ·Π°Π½Π½ΡΡ Π·Π½Π°ΡΡ ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ - Π±ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° - Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅ΡΠΏΠ΅ΠΊΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΠ-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
ΠΡΠΈ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ Π΄Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ².
ΠΠΎΡΡΠ΅Π±ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡΠΎΠΌ VECTOR (Π² Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ), Π±ΡΠ» ΡΠΈΠΏΠΎΠΌ, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: infix "+", zero Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΌΠΌΡ ΠΈ Ρ.Π΄. ΠΠ»Π°Π΄Π΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ½Π°Π±Π΄ΠΈΡΡ ΡΠΈΠΏ Π½ΡΠΆΠ½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, - Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°, ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
class C [G -> CONSTRAINING_TYPE] ... ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ...
Π³Π΄Π΅ CONSTRAINING_TYPE - ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΎΠ΄ΠΎΠ²ΡΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ (generic constraint). Π‘ΠΈΠΌΠ²ΠΎΠ» -> ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΡΠ΅Π»ΠΊΡ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ:
[x]. Π² ΡΠΎΠ»ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΠ΄ΠΎΠ²ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΡΠΏΠ°ΡΡ Π»ΠΈΡΡ ΡΠΈΠΏΡ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ Ρ CONSTRAINING_TYPE;
[x]. Π² ΠΊΠ»Π°ΡΡΠ΅ C Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΡ ΡΠΈΠΏΠ° G Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΡ CONSTRAINING_TYPE, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΠ°ΠΊΠΎΠ΅ ΡΠΎΠ΄ΠΎΠ²ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° VECTOR? ΠΠ±ΡΡΠΆΠ΄Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΡ Π²Π²Π΅Π»ΠΈ Π² ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ NUMERIC - ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΡ Π±Π°Π·ΠΈΡΠ½ΡΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π½ΡΠ»Π΅ΠΌ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ (Π»Π΅ΠΆΠ°ΡΠ°Ρ Π² Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ»ΡΡΠΎΠΌ). ΠΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠΌΠ΅ΡΡΠ½ΠΎΠΉ, Ρ ΠΎΡΡ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊ:
indexing
description: "ΠΠ΅ΠΊΡΠΎΡΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅"
class
VECTOR [G -> NUMERIC]
... ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅ - ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅ (Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ!) ...
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ°Π½Π΅Π΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π² ΡΠ΅Π»Π΅ ΡΠΈΠΊΠ»Π°
Result.put(item (i) + other.item (i), i)
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ item (i) ΠΈ other.item (i) ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ G, Π° Π·Π½Π°ΡΠΈΡ, ΠΊ Π½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ NUMERIC, Π²ΠΊΠ»ΡΡΠ°Ρ, ΠΈΠ½ΡΠΈΠΊΡΠ½ΡΠΉ "+".
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ NUMERIC:
VECTOR [NUMERIC]
VECTOR [REAL]
VECTOR [COMPLEX]
ΠΠ»Π°ΡΡ EMPLOYEE Π½Π΅ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ ΠΎΡ NUMERIC, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ VECTOR [EMPLOYEE] ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ NUMERIC Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ (ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ΅), ΡΠ°ΠΊ ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ (VECTOR [NUMERIC_COMPARABLE]), Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ ΠΎΡ NUMERIC.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ»Π°ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ ΠΊΠ»Π°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ:
class DICTIONARY [G, H -> HASHABLE] ...
class SORTABLE [G -> COMPARABLE] ...
ΠΠ³ΡΠ° Π² ΡΠ΅ΠΊΡΡΡΠΈΡ
ΠΠΎΡ Π½Π΅ΠΊΠΈΠΉ ΡΡΡΠΊ Ρ Π½Π°ΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ: ΡΠΏΡΠΎΡΠΈΠΌ ΡΠ΅Π±Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π»ΠΈ Π²Π΅ΠΊΡΠΎΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ²? ΠΠΎΠΏΡΡΡΠΈΠΌ Π»ΠΈ ΡΠΈΠΏ VECTOR [VECTOR [INTEGER]]?
ΠΡΠ²Π΅Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»: ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ NUMERIC. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ - ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ ΠΊΠ»Π°ΡΡ VECTOR ΠΎΡ ΠΊΠ»Π°ΡΡΠ° NUMERIC (ΡΠΌ. ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.2):
indexing
description: "ΠΠ΅ΠΊΡΠΎΡΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅"
class
VECTOR [G -> NUMERIC]
inherit
NUMERIC
... ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅ - ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅...
ΠΠ΅ΠΊΡΠΎΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΎΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π²ΠΏΡΡΠΌΡ ΡΡΠΈΡΠ°ΡΡ "ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ". ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ»ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ»Ρ Π½ΡΠ»Ρ (zero) ΠΈΠ³ΡΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ· G-Π½ΡΠ»Π΅ΠΉ, ΠΈ ΡΠΎΠ»Ρ Π΅Π΄ΠΈΠ½ΠΈΡΡ (unity) - Π²Π΅ΠΊΡΠΎΡ ΠΈΠ· G-Π΅Π΄ΠΈΠ½ΠΈΡ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ»ΡΡΠ΅ - ΡΡΠΎ, ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π²Π΅ΠΊΡΠΎΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ infix "+", ΡΠ΅ΡΡ ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π° Π²ΡΡΠ΅.
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡΠΈ Π΄Π°Π»ΡΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ VECTOR [VECTOR [VECTOR [INTEGER]]] ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅ - ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ.
Π ΡΠ½ΠΎΠ²Π° Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ
ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π½Π΅ Π²ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ. Π€ΠΎΡΠΌΠ° - STACK [G] ΠΈΠ»ΠΈ ARRAY [G] - ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ DICTIONARY [G, H -> HASHABLE] ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π°Π΅Ρ ΡΠ°Π½Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ. ΠΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π²ΡΠ²Π΅Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ class C [G] ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ class C [G -> ANY]. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ G - Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»Π°ΡΡΠ° STACK), Π° x - ΡΡΡΠ½ΠΎΡΡΡ, ΠΈΠΌΠ΅ΡΡΠ°Ρ ΡΠΈΠΏ G, ΡΠΎ ΠΌΡ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Ρ ΡΡΡΠ½ΠΎΡΡΡΡ x: ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ (=, /=), ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ clone, equal ΠΈ ΠΏΡΠΎΡΠ΅Π΅.
ΠΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
ΠΠ°ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ ΠΊ ΡΠ΅ΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· ΡΡΡΠ°Ρ Π° ΡΠΈΡΠ°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ, Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΡ.
ΠΠΎΠ³Π΄Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΈΠΏΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅ΡΠ½ΠΎΡΠ½ΡΠΌΠΈ
Π¦Π΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠΏΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π² Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΡΠΎΡΠ΅Π΄ΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π° Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.