ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² SECD-ΠΌΠ°ΡΠΈΠ½Ρ
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅ΡΡΡΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΡΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π»Π° Π±Π»ΠΎΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² SECD-ΠΌΠ°ΡΠΈΠ½Ρ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ SECD-ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ SECD-ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΡΠ»ΡΠΆΠ°Ρ Π½Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ Ρ Π½Π°Ρ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΉ Π³Π»Π°Π²Ρ, Π½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π ΡΠ΅Π»ΠΎΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠΉ ΠΆΠ΅, Π½ΠΎ ΠΈΠ· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΠΈΡ ΠΈΠΌΠ΅Π½Π° Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ — ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΈΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ SECD-ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ, Π³Π°ΠΊ ΡΡΠΎ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΄Π²Π° ΡΡΠ°ΠΏΠ°: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π°Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ·ΡΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡ.
Π ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π² letΠΈ letrec-Π±Π»ΠΎΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
= 2,.
letrec x.
f = Xy.* x Ρ.
in f 3.
Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π» Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΡΡ , ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ (ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 3) ΠΈ Π΄Π²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈ f, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² Π±Π»ΠΎΠΊΠ΅ letrec. ΠΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ «ΡΡΠΎΠ²Π½Π΅ΠΉ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ — ΡΡΠΎΠ²Π½Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π±Π»ΠΎΠΊΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ. Π£ΡΠΎΠ²Π½ΠΈ ΠΏΡΠΈΠ½ΡΡΠΎ Π½ΡΠΌΠ΅ΡΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ Π½ΡΠ»Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌΡΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ Π½ΠΎΠ»Ρ, Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ — Π½ΠΎΠΌΠ΅Ρ, Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π±ΠΎΠ»ΡΡΠΈΠΉ Π½Π΅Π³ΠΎ. ΠΠ½ΡΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΌΠ΅ΡΡΡΡΡΡ ΡΠΈΡΠ»Π°ΠΌΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½ΡΠ»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΡΠ»Π°ΠΌΠΈ — Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΡΠΎΠ²Π½Ρ ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΡΠΈ Π΄Π²Π° ΡΠΈΡΠ»Π° ΠΈ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π² ΡΠΎΡΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ ΠΈΠΌΠ΅Π΅Ρ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ (0,0), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π½ΡΠ»Π΅Π²ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ (1,0), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ 1, Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ f Π±ΡΠ΄Π΅Ρ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ (1,1). ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π°Π΄ΡΠ΅ΡΠ½Π°Ρ ΠΏΠ°ΡΠ° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π½ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’Π°ΠΊ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ f Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ Π±ΡΠ΄Π΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ (0,0), Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ.
ΠΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΡΡΠ°Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°Ρ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Π-ΡΠ΅Π³ΠΈΡΡΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
[[3], [2, f ' ] ].
Π³Π΄Π΅ ΡΠ΅ΡΠ΅Π· f1 ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (Π₯Ρ.* Ρ Ρ).
ΠΠ΅ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅ (i, j) Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°: getValue (level, number) context = context !! level ! ! number.
ΠΡΠ»ΠΈ SECD-ΠΌΠ°ΡΠΈΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈ Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ (*) Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°Ρ, ΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Load (0, 0);
Load (1, 0) ;
LoadFunc Apply;
Apply;
Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ; Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ; Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ;
— ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ; ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ (ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΡΠΆΠ½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡ Π±ΡΠ΄ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡ. ΠΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°Ρ, ΡΠΎΠ³Π΄Π° Π°Π΄ΡΠ΅ΡΠ½Π°Ρ ΠΏΠ°ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (* Ρ Ρ) Π² Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π» ΡΡΡΡΠΊΡΡΡΡ [[" Ρ" ], [" X", «f» ]].
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ addr, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΡ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ — ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΡΠΏΠΈΡΠΊΠ°Ρ , ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅ΡΡΡ:
addr: Eq, Π° => Π° -> [[Π°]] -> (Int, Int).
addr var (varsrrest) = case findlndex (== var) vars of Nothing -> (lev + 1, num).
Just idx -> (0, idx).
where (lev, num) = addr var rest Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠ΅Π΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π°ΡΠ΅ΠΉ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π°.
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΠΌΠ°ΡΠΈΠ½Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π° Π΄Π²ΡΡ ΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΏΠ°Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ SECD-ΠΌΠ°ΡΠΈΠ½Ρ:
type Context = [ [WHNF] ].
type Stack = [WHNF] type Environment = Context type Control = [Command].
type Dump = [(Stack, Environment, Control)] type SECD = (Stack, Environment, Control, Dump).
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΡ ΠΌΠ°ΡΠΈΠ½Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠΎΡΡΠΎΠΈΡ Π² Π½Π°Π±ΠΎΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°Ρ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π½ΡΡΠ΅, Π° ΠΏΡΠΎΡΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². ΠΡ Π²ΡΠ΅ ΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ, ΡΡΠΎΠ±Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΈ Π²Π½ΡΡΡΠΈ ΡΠ΅Π±Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π½Π°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π΅ΡΠ΅Π²Π°, Π½ΠΎ ΠΌΡ Π½Π΅ ΡΡΠ°Π½Π΅ΠΌ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ Π½Π°ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΈ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄.
ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ±ΠΎΡΠ° ΠΈΠ· Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² Select ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ LoadFunc.
Π ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ°ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ² CONS ΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ TUPLE-k ΠΈ Π΄Ρ. ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ intrinsic, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². ΠΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΡΠ΅ΠΊ Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ (LoadConst), ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΎΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅ (Load), ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ (LoadFunc), ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΠΊΠ° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (LoadSect). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Apply ΠΈ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠΌΡΡΠ» ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ (ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ) Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ°Π»Π΅Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° — ΡΡΠΎ ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π²ΡΠ΄Π°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΆΠ΅ ΠΎΠΏΠΈΡΠ°ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ SECDΠΌΠ°ΡΠΈΠ½Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, ΡΠ°ΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π² ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ , ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅). ΠΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π΄Π»Ρ ΡΠ½Π΅ΡΠ³ΠΈΡΠ½ΠΎΠΉ SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π° Π΄Π»Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»ΠΎ Π·Π°Π΄Π΅ΡΠΆΠ°Π½ΠΎ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½ΠΈΠΌ.
ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Haskell Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ (Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ Π‘ΠΠΠ€) ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ comp. Π£ΡΠ°Π²Π½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Haskell Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΄Π° Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΎΠΏΠΈΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π² Π΄ΡΡΠ³ΠΎΠ΅, ΠΈΠΌΠ΅ΡΡΠΈΡ Π²ΠΈΠ΄ (s, Π΅, Ρ, d) -" (s', Π΅', Ρ', d').
Π³Π΄Π΅ (sf Π΅, Ρ, d) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, a (s', Π΅', cf, d?) — ΠΏΠΎΡΠ»Π΅ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄, Π»Π΅ΠΆΠ°ΡΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ evaluate.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° ΠΡ ΡΠ³, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Ρ Π½Π°Ρ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Nil ΠΈ ΡΠ½ΠΎΠ²Π° Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈ ΡΠΈΡΡΠΎ ΡΠ½Π΅ΡΠ³ΠΈΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ . Π£ ΠΏΠ°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅:
data ΠΡ ΡΠ³ =.
Integral Integer I — ΡΠ΅Π»Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
Logical Bool I — Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
Nil I — ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° — ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ.
Function String I — Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
Variable String I — ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ.
Lambda String ΠΡ ΡΠ³ | — Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Application Expr Expr | — ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
If Expr Expr Expr | — ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Let String Expr Expr | — Π½Π΅ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
Letrec [ (String, Expr)] Expr — ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠ»Π°Π±ΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ²:
data WHNF =.
Numeric Integer I — ΡΠ΅Π»Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
Boolean Bool I — Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
List [WHNF] | — ΡΠΏΠΈΡΠΎΠΊ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ — ΠΏΡΡΡΠΎΠΉ).
Closure [Command] Context | — Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
Section String Int [WHNF] — Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ.
— Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π ΡΡΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ, Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ·ΡΠΊΠ° Haskell, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΠΈΠΌΠ΅Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΠ³ΠΎ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠΎΠ².
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΠΈΡΠ΅ΠΌ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ SECD-ΠΌΠ°ΡΠΈΠ½Ρ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΌΡΡΠ» ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΈΠ»ΠΈ ΡΡΠ΅Π½ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π°Π±Π·Π°ΡΠ΅Π².
Π‘ΠΌΡΡΠ» Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ SECDΠΌΠ°ΡΠΈΠ½Ρ:
Command =.
Load (Int, Int).
LoadConst WHNF.
LoadFunc [Command].
LoadSect String.
Select [Command].
Apply.
Return.
LetApply.
Dummy.
RecApply.
Stop.
data
| — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅.
| — Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ.
| — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
I — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ [Command] | — Π²ΡΠ±ΠΎΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
I — ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ | — Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ.
| — Π²Ρ ΠΎΠ΄ Π² Π½Π΅ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
| — ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
| — Π²Ρ ΠΎΠ΄ Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
— ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π Π°Π±ΠΎΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ compile, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° — Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΡ ΡΠ³, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ — ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ compile ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ compile ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ (**), ΡΠ°ΠΊ ΡΡΠΎ Π½Π°ΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ Π΅Ρ ΡΠ³ ** context = [ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄].
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (Integral ΠΏ) ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅Π»ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
(Integral n) ** context = [LoadConst (Numeric n)].
Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΈΠΏΠΎΠ² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ:
- (Logical b) ** context = [LoadConst (Boolean b) ]
- (Nil) ** context = [LoadConst (List [])]
- (Function f) ** context = [LoadSect f]
- (Variable x) ** context = [Load $ addr x context]
Π§ΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠ±Π΅ΠΈΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°ΡΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ½Π°ΡΠ°Π»Π° Π±ΡΠ»ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, Π° ΠΏΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Select, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΆΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ Π²ΡΠ±ΠΎΡ, ΠΊΠ°ΠΊΡΡ ΠΈΠ· Π΄Π²ΡΡ ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π°Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ.
(If cond eThen eElse) ** context = (cond ** context) ++.
[Select (eThen ** context) (eElse ** context)] Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ΅Π»ΠΎ Π»ΡΠΌΠ±Π΄Π°Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π΅ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π° Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ — ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠΎΠ²Π½Π΅ΠΉ, ΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ , ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ [Ρ ]: context. Π’ΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
(Lambda Ρ body) ** context.
[LoadFunc ((body ** ([x]: context)) ++ [Return])).
Ρ.Π΅. ΡΠ΅Π»ΠΎ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ Return, ΠΈ Π²ΡΡ ΡΡΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ LoadFunc.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠΈ ΡΠ½Π΅ΡΠ³ΠΈΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΡ (Π² ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ), ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Apply, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ:
- (Application func arg) ** context =
- (arg ** context) ++ (func ** context) ++ [Apply] ΠΡΡΠ°Π»ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π²Π° ΡΠ°ΠΌΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ² Let ΠΈ Letrec. ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±Π»ΠΎΠΊΠ° Let Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Π»ΠΎ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ΅Π»ΠΎΠΌ Π±Π»ΠΎΠΊΠ°, Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π±Π»ΠΎΠΊΠ°.
Π’Π΅Π»ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ΅Π»ΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ; ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠ° Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ ΠΎΠ΄ΡΡΠ΅Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ Π²Ρ ΠΎΠ΄ Π² ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
(Let Ρ Π΅ body) ** context (Π΅ ** context) ++.
[LoadFunc ((body ** ([x]: context)) ++ [Return]), Apply].
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ½Π°ΡΠ°Π»Π° Π² ΡΡΠ΅ΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅, Π·Π°ΡΠ΅ΠΌ Π² ΡΡΠ΅ΠΊ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π»ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ ΡΠ΅Π»ΠΎΠΌ Π±Π»ΠΎΠΊΠ°, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Apply.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅ΡΡΡΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΡΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π»Π° Π±Π»ΠΎΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Dummy. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎΠ± ΡΠ½Π΅ΡΠ³ΠΈΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ , Π³Π°ΠΊ ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΠΏΡΡΠΌΠΎΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π±Π»ΠΎΠΊΠ° ΠΈΠ· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠ° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΠ΅Π» Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡ ΠΎΠ΄ Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Dummy, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠΏΠΈΡΠΊΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ — RecApply.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π±Π»ΠΎΠΊΠ°, Π΄ΠΎΠ»ΠΆΠ½Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΠ°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΡΡΠ΅ΠΊ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ LoadConst. ΠΠ»Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ ΡΠΏΠΈΡΠΊΡ Π½ΠΎΠ²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CONS, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ Π²ΠΊΠ»ΡΡΠΈΠΌ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
- (Letrec [(xl, el),…, (xn, en)] body) ** context [Dummy, LoadConst (List [])] ++
- (en ** ([xlxn]: context)) ++
[LoadSect «CONS», Apply, Apply] ++.
(el ** ([xlxn]: context)) ++.
[LoadSect «CONS», Apply, Apply] ++.
[LoadFunc ((body ** ([xlxn]: context) + + [Return])] ++.
[RecApply].
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ΠΎ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ: Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π±ΡΠ»ΠΈ Π΄Π°Π½Ρ Π² Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π² ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 12.1 ΡΠ΅Π»ΠΈΠΊΠΎΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 12.1. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ import Data. List (findlndex).
— ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ — ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ «ΠΊΠΎΠΌΠ°Π½Π΄» SECD-ΠΌΠ°ΡΠΈΠ½Ρ data ΠΡ ΡΠ³ =.
Integral Integer I — ΡΠ΅Π»Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
Logical Bool I — Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°.
Nil | — ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° — ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ.
Function String I — Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
Variable String I — ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ.
Lambda String Expr | — Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Application Expr Expr | — ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
If Expr Expr Expr | — ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Let String Expr Expr | — Π½Π΅ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
Letrec [(String, Expr)] Expr — ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ deriving (Show, Eq).
data Command =.
Load (Int, Int) | — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅.
LoadConst WHNF | — Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
LoadFunc [Command] I — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ.
LoadSect String | — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Select [Command] [Command] | — Π²ΡΠ±ΠΎΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
Apply I — ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Return I — Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ.
LetApply I — Π²Ρ ΠΎΠ΄ Π² Π½Π΅ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
Dummy | — ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
RecApply | — Π²Ρ ΠΎΠ΄ Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ.
Stop — ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°Π±ΠΎΡΡ.
deriving (Show, Eq).
— «ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ» data WHNF =.
Numeric Integer I.
Boolean Bool I.
List [WHNF] |.
Closure [Command] Context |.
Section String Int [WHNF].
deriving (Show, Eq).
- — ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ type Context = [ [String]]
- —— ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ:
compile:: Expr -> [Command].
(***): Expr -> Context -> [Command].
comp:: [ [String] ] -> Expr -> [Command] -> [Command].
compile = (*** []).
e *** context = comp context e [Stop].
— ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠΌΠ΅Π½ addr: Eq, Π° => Π° -> [[Π°]] -> (Int, Int).
addr var (vars:rest) = case findlndex (== var) vars of Nothing -> (lev+1, num).
Just idx -> (0, idx).
where (lev, num) = addr var rest.
comp env (Integral n) lc = (LoadConst (Numeric n)) :1c.
comp env (Logical b) lc = (LoadConst (Boolean b)) :1c.
comp env Nil lc = (LoadConst (List [])): lc.
comp env (Function f) lc = (LoadSect f): lc.
comp env (Variable x) lc = (Load (addr x env)): lc.
comp env (Lambda var e) lc =.
- (LoadFunc (comp ([var]: env) e [Return])): lc comp env (Application func arg) lc =
- ((comp env arg). (comp env func)) (Apply:lc) comp env (If cond th el) lc = comp env cond
- ((Select (comp env th []) (comp env el [])):lc) comp env (Let x e body) lc = comp env e
- ((LoadFunc (comp ([x]: env) body [Return])): Apply: lc) comp env (Letrec pairs body) lc =
Dummy: (LoadConst (List [])) :
- (foldr (comp' env)
- ((LoadFunc (comp (names:env) body [Return])): RecApplyilc) (reverse values))
where (names, values) = unzip pairs comp' e ex lc =.
comp e ex ((LoadSect «cons»):Apply:Apply:lc).
Π ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ comp, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ — ΡΠΆΠ΅ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (++), ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎΠ½ΠΈΠ±ΡΠ΄Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
let twice = Xf.Xx.f (f x) in twice (+ 1) 3.
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΡ ΡΠ³ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ: test: ΠΡ ΡΠ³ test = Let «twice» .
- (Lambda «f» (Lambda «x»
- (Application (Variable «f»)
- (Application (Variable «f»)(Variable «x»)))))
- (Application
- (Application (Variable «twice»)
- (Application (Function «+»)(Integral 1))) (Integral 3))
ΠΠ°ΠΏΡΡΡΠΈΠΌ Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π·Π°Π΄Π°Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ GIIC Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ compile test. ΠΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ (Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΡΠΎ ΡΡΡΠΎΠΊΠΈ Π½Π° ΡΡΡΠΎΠΊΡ):
" compile test [LoadFunc.
[LoadFunc.
[Load (0,0), Load (1,0), Apply, Load (1,0), Apply, Return],.
Return],.
LoadFunc.
[LoadConst (Numeric 3), LoadConst (Numeric 1),.
LoadSect «+», Apply, Load (0,0), Apply, Apply, Return],.
Apply, Stop].
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π‘ΠΠΠ€.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΠΈΠ½Ρ — Stop.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡ ΡΠ°Π±ΠΎΡΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° RecApply, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ — ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΠ΄Π΅ΡΡ ΡΠ½ΠΎΠ²Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΌΠ΅Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΆΠ΅ ΠΌΠΎΠ³ Π±ΡΡΡ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½ Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΡ Π΄Π»Ρ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΡ ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π±Π»ΠΎΠΊΠ°. ΠΠ°ΠΌΠ΅Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ RecApply ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅Π±Ρ.
Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠΏΠΈΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°Π³ΡΡΠΆΠ°ΡΡΠΈΠ΅ Π² ΡΡΠ΅ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
- (s, ctx, (LoadConst val):c, d) -" (val:s, ctx, c, d)
- (s, ctx, (Load addr):c, d) -" ((getValue addr ctx):s, ctx, c, d)
- (s, ctx, (LoadFunc corns) :c, d) —> ((Closure corns ctx): s, ctx, c, d)
- (s, ctx, (LoadSect f) :c, d) —" ((Section f (arity f)
[]): s, ctx, c, d).
ΠΡΠ΅ ΡΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½Ρ — Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π½Π° ΡΡΠ΅ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ. Π’Π°ΠΊ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ LoadFunc Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ΅ΠΊ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ LoadSect ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ arity Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠ³Π»Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ getValue Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π²ΡΡ ΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ΅.
ΠΠΎΠΌΠ°Π½Π΄Π° Select ΡΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΡ ΠΎΠΏΠΈΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π²ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π΄Π²ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
((Boolean True) :s, ctx, (Select th el):c, d) -> (s, ctx, th ++ c, d) ((Boolean False) :s, ctx, (Select th el):c, d) —> (s, ctx, el ++ c, d).
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠΏΠΈΡΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Select. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΏΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄Π° Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π½Π΅Π΅ — ΠΊΠΎΠΌΠ°Π½Π΄ Apply ΠΈ Return. Π ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Ρ ΠΎΠ΄, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° Apply ΠΏΡΠΎΡΡΠΎ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΡΠΈΠ½Ρ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°:
- ((Closure corns env):arg:s, ctx, Apply: c, d) ->
- ([], [arg] :env, corns, (s, ctx, c) :d)
Π Π°Π±ΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Apply Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ intrinsic, ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π±ΠΎΡΠ° ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° (Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏ Π±ΠΎΠ»ΡΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ):
- ((Section f 1 list):arg:s, ctx, Apply: c, d) -«
- ((intrinsic f (list ++ [arg])):s, ctx, c, d) ((Section f n list):arg:s, ctx, Apply: c, d) —>
- ((Section f (n-1) (list ++ [arg])):s, ctx, c, d) ΠΠΎΠΌΠ°Π½Π΄Π° Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ SECD-ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
- (val:s', ctx', Return: c', (s, ctx, c) :d) —> (val:s, ctx, c, d) Π‘Π°ΠΌΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠΊ. ΠΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Dummy ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π° Π² SECD-ΠΌΠ°ΡΠΈΠ½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ «ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠΉ» ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ SECD-ΠΌΠ°ΡΠΈΠ½Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ «ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ» Π·Π½Π°ΡΠ΅Π½ΠΈΡ link#context. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ RecApply ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΌ, Π½ΠΎ ΠΎΠ½ ΠΆΠ΅ ΠΌΠΎΠ³ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π²ΠΎ Π²ΡΠ΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΡ , ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠ°. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° RecApply, ΡΠ°Π±ΠΎΡΠ°Ρ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ°Π·Ρ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΡΠΏΠΈΡΠΎΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ replace, ΡΠ°ΠΊ ΡΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° (replace args link# ([] :ctx)) Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ link# (args: ctx), Π½ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ Π²ΡΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΡΡ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΠΌΠ΅ΡΠΊΡ:
- (s, ctx, Dummy: c, d) —> (s, link# ([]: ctx), c, d)
- ((Closure commands link#([]: ctx)):(List args):s,
link#([]: ctx), RecApply: c, d) —> ([], (replace args link#([]: ctx)), commands, (s, ctx, c) :d).
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΠΎΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Stop. Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
(s, ctx, Stop: c, d) —> (s, ctx, c, d).
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ SECD-ΠΌΠ°ΡΠΈΠ½Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΈ ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ° Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ·ΡΠΊΠ΅, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΠΎΠΌ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄), ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ SECD-ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠ°Π·ΠΈΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΠΉ Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.