ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ИсслСдованиС Ρ„ΠΎΡ€ΠΌ структурированных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Lisp

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π° 50 Π»Π΅Ρ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ языка LISP Π² Π½Π΅ΠΌ появилось Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… спСцифичных Π·Π°Π΄Π°Ρ‡. БСгодня Common Lisp ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ваТная ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ° — Π² LISP Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΡ€ΠΈ этом любая пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ значСния… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ИсслСдованиС Ρ„ΠΎΡ€ΠΌ структурированных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Lisp (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ образования ΠΈ Π½Π°ΡƒΠΊΠΈ Российской Π€Π΅Π΄Π΅Ρ€Π°Ρ†ΠΈΠΈ Московский Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ институт

(Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ унивСрситСт) ΠšΠ°Ρ„Π΅Π΄Ρ€Π° № 304 «Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, систСмы ΠΈ ΡΠ΅Ρ‚ΠΈ»

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ°Ρ… высокого уровня»

Π½Π° Ρ‚Π΅ΠΌΡƒ «Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ структурированных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° LISP»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 3О-210Π‘ Арифуллин А.И.

ΠŸΡ€ΠΈΠ½ΡΠ» Π΄ΠΎΡ†Π΅Π½Ρ‚ ΠΊΠ°Ρ„.304, ΠΊ.Ρ‚.Π½.

Новиков П.Π’.

Москва, 2015

ВысокоуровнСвый язык программирования Lisp (ΠΎΡ‚ Π°Π½Π³Π». List Processing — «ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° списков») Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 60-Ρ… Π³ΠΎΠ΄Π°Ρ… XX Π²Π΅ΠΊΠ° амСриканским ΡƒΡ‡Π΅Π½Ρ‹ΠΌ Π”ΠΆΠΎΠ½ΠΎΠΌ ΠœΠ°ΠΊΠΊΠ°Ρ€Ρ‚ΠΈ[3].

Lisp — ваТнСйший язык, ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСмый Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ… искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°. МногиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, основаны Π½Π° ΠΎΡΠΎΠ±Ρ‹Ρ… свойствах этого языка. Lisp прСдставляСт собой основу для обучСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, ΠΈΡ… ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ичСского примСнСния, ΠΈΠ½Ρ‹ΠΌΠΈ словами, Lisp Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠΈΡ€ символьной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΈΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° [3].

ВаТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка Lisp — Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Lisp прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнных Π² Π²ΠΈΠ΄Π΅ символов ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… структур, — списков. ВСксты ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ списков. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ вычислСний ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΡ… Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π· Π·Π½Π°Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° [2].

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΡ‹ структурированных Π΄Π°Π½Π½Ρ‹Ρ… языка Lisp Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ конструкций Common Lisp.

Атомы ΠΈ ΡΠΏΠΈΡΠΊΠΈ

язык ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строка Π΄Π°Π½Π½Ρ‹Π΅

Атом (Π½Π΅Π΄Π΅Π»ΠΈΠΌΡ‹ΠΉ) — простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подраздСляСтся Π½Π° Π΄Π²Π° Ρ‚ΠΈΠΏΠ°: ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚ΠΎΠΌΡ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· Π±ΡƒΠΊΠ², Ρ†ΠΈΡ„Ρ€ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ² (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ символ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π΅Π΅ ΠΎΡ‚ Ρ‡ΠΈΡΠ»Π°). Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ символ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ дСйствиС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ALPHA, DEFUN, X, COMMON_LISP

ЧисловыС Π°Ρ‚ΠΎΠΌΡ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ†Π΅Π»Ρ‹Π΅ ΠΈ Π²Π΅Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ числа.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: 123, 132.04, 3123.3123

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π² ΡΠ·Ρ‹ΠΊΠ΅ Lisp ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΡƒΠΊΠ²Ρ‹ ΠΊΠ°ΠΊ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Lisp-систСмах всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π±ΡƒΠΊΠ²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра.

Атомы-константы — это всС числовыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ назначСния T ΠΈ Nil, T-ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ истину, Π° Nil — соотвСтствСнно Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ лоТь. Π’Π°ΠΊ ΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Nil ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ пустой список.

Бписок — это основной Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΠ·Ρ‹ΠΊΠ΅ Lisp. Бписок — упорядочСнная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΡ‹ Π»ΠΈΠ±ΠΎ подсписки. Бписки Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΡΠΊΠΎΠ±ΠΊΠΈ, элСмСнты списка ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: (ALPHA BETA); состоит ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов

(STUDENT (FIRST_NAME KHAN) (SECOND_NAME CHINGIZ)); состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов Бписок ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ своих элСмСнтов Π΄Ρ€ΡƒΠ³ΠΈΠ΅ списки, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это иСрархичСская структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ скобки находятся Π² ΡΡ‚Ρ€ΠΎΠ³ΠΎΠΌ соотвСтствии.

Бписок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ элСмСнтов, называСтся пустым обозначаСтся «()» ΠΈΠ»ΠΈ Nil.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

NIL; Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎ ()

(NIL); список, состоящий ΠΈΠ· NIL ΠΈΠ»ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎ (())

(NIL ()); список, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… пустых списков Бписки Π² Lisp — это рСкурсивная структура, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описана с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π²ΠΈΠ» Бэкуса-Наура[1]:

список :=(Π³ΠΎΠ»ΠΎΠ²Π°. хвост); точСчная ΠΏΠ°Ρ€Π°, Π³Π΄Π΅ Π³ΠΎΠ»ΠΎΠ²Π° — элСмСнт списка, хвост — список элСмСнт списка := элСмСнт списка Π˜Π›Π˜ список пустой список := NIL

ΠšΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡŽ списков, являСтся осознаниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ, ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΉ части, иллюзия, построСнная Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΈ простыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ cons-ячСйкой, ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CONS, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для ΠΈΡ… ΡΠΎΠ·Π΄Π°Π½ΠΈΡ.

CONS ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ cons-ячСйку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ 2 значСния. Π­Ρ‚ΠΈ значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылками Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ°. Если Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ NIL ΠΈ Π½Π΅ Π΄Ρ€ΡƒΠ³Π°Ρ cons-ячСйка, Ρ‚ΠΎ ΡΡ‡Π΅ΠΉΠΊΠ° пСчатаСтся ΠΊΠ°ΠΊ Π΄Π²Π° значСния Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ…, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (Ρ‚Π°ΠΊ называСмая точСчная ΠΏΠ°Ρ€Π°).

(cons 1 2)

(1. 2)

Запрос ΠΊ Π³ΠΎΠ»ΠΎΠ²Π΅ списка исполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CAR; ΠΊ Ρ…восту — CDR.

(setq list (cons 1 2))

(1. 2)

(car list)

(cdr list)

Π’Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ слитно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

(cadr '(2 3 4 5))

3;Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³ΠΎΠ»ΠΎΠ²Ρƒ хвоста

(caddr '(2 3 4 5))

4;Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³ΠΎΠ»ΠΎΠ²Ρƒ хвоста ΠΎΡ‚ Ρ…воста

(cdar '((2 3 4)(3 4 5)))

(3 4);Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ хвосты Π³ΠΎΠ»ΠΎΠ²Ρ‹ списка

(cdadr '((2 3 4)(3 4 5)))

(4 5);Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ хвост Π³ΠΎΠ»ΠΎΠ²Ρ‹ хвоста Рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² рСкурсивной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Ρ‚ΠΎΠΌΠΎΠ² ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½Ρ‹Ρ… списков:

1.Ѐункция, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список чисСл ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список ΠΈΠ· ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл:

(defun negative_number (list)

(cond ((null list) nil)

((> 0 (car list))(cons (car list)(negative_number (cdr list))))

(T (negative_number (cdr list)))))

NEGATIVE_NUMBER

(NEGATIVE_NUMBER '(-3 -4 -5 1 1 3 4 -10))

(-3 -4 -5 -10)

Бтрутурная схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

2.Ѐункция, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список, состоящий ΠΈΠ· Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ список количСств простых чисСл ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа. Для этого спСрва Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ divisor_of_number, Π²Ρ‹ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ количСство Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа n, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ divisor_list, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ divisor_of_number для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта списка:

(defun divisor_of_number (n x)

(cond ((= x 1) 1)

((= 0 (mod n x))(1+ (divisor_of_number n (1- x))))

(T (divisor_of_number n (1- x)))))

DIVISOR_OF_NUMBER ;ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ

(defun divisor_list (lst)

(mapcar (lambda (E) (divisor_of_number E E)) lst))

DIVISOR_LIST ;УспСшная компиляция

>(DIVISOR_LIST '(100 17 13 5 6 7 10))

(9 2 2 2 4 2 4) ;Π˜ΡΠΊΠΎΠΌΡ‹ΠΉ список Бтруктурная схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ divisor_of_number:

Бвойства Π°Ρ‚ΠΎΠΌΠΎΠ² Lisp

Π’ Lisp любой ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан со ΡΠΏΠΈΡΠΊΠΎΠΌ свойств Π°Ρ‚ΠΎΠΌΠ°. Бписок свойств ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пуст ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство свойств. Бвойство прСдставляСтся ΠΏΠ°Ρ€ΠΎΠΉ имя_свойства — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_свойства.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Бвойства символа ВОК: (систСма_измСрСния АмпСр) Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чтСния, измСнСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ свойств, опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ:

Π§Ρ‚Π΅Π½ΠΈΠ΅ свойства Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

GET (символ свойство), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

(GET ('current 'SoU))

AMPER

(GET ('current 'value))

NIL

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ свойства Π—Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ свойство ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (PUTPROP символ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойство):

(PUTPROP ('current 'Amper 'SoU))

AMPER

Однако Π² Common Lisp Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, для присваивания свойства Π°Ρ‚ΠΎΠΌΡƒ Π² ΡΡ‚ΠΎΠΉ вСрсии Lisp примСняСтся обобщСнная функция присваивания SETF ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GET:

(SETF (GET 'current 'value) '1)

По ΡΡƒΡ‚ΠΈ GET Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ячСйку памяти для Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства, Π° SETF присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойство ячСйкС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ SETF измСняСт Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру списка.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ свойства Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ свойства ΠΈ Π΅Π³ΠΎ значСния производятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

(REMPROP символ свойство), Π² Common Lisp Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ удалСния возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ T:

(REMPROP 'current 'SoU)

T

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли удаляСмого свойства Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NIL:

(REMPROP 'current 'weight)

NIL

НСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ Π°Ρ‚ΠΎΠΌΠ°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ… ΡΠ²ΠΎΠΉΡΡ‚Π² Π² Common Lisp:

(SETF (GET 'SPEED 'SYS-OF-UNITS) 'MPS)

MPS

(SETF (GET 'SPEED 'VALUE) 100)

(SETF (GET 'MASS 'SYS-OF-UNITS) 'KG)

KG

(SETF (GET 'MASS 'VALUE) 10)

(SETF (GET 'KINETIC-ENERGY 'SYS-OF-UNTITS) 'JOULE)

JOULE

(SETF (GET 'KINETIC-ENERGY 'VALUE) (/(*(*(GET 'SPEED 'VALUE)(GET 'SPEED 'VALUE))(GET 'MASS 'VALUE))2))

(REMPROP 'SPEED 'VALUE)

T

ΠœΠ°ΡΡΠΈΠ²Ρ‹

Массив — структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ячССк, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ имя, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° (индСксы), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ ΠΊ ΡΡ‚ΠΈΠΌ ячСйкам. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² LISP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для хранСния большого количСства Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠΎΠΉ (MAKE-ARRAY Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΡ‹), Ρ€Π΅ΠΆΠΈΠΌΡ‹ — Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ элСмСнтов, Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ массиву динамичСский Ρ€Π°Π·ΠΌΠ΅Ρ€. Для вычислСний, осущСствляСмых с ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, наряду с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ создания массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ элСмСнтов массива. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (AREF массив индСксы) осущСствляСт Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива.

(setq matrix (MAKE-ARRAY '(4 4);ОбъявлСния массива

:element-type 'integer

:initial-element 0))

((0 0 0 0)(0 0 0 0)(0 0 0 0)(0 0 0 0))

(setf (aref matrix 1 2) '3);ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ

matrix

((0 0 0 0)(0 0 3 0)(0 0 0 0)(0 0 0 0))

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ проводится ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ [2×4] ΠΈ [4×2].

Π’ ΠΊΡƒΡ€ΡΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† — ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ умноТСния Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† размСрностями ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ, которая называСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

(DEFUN MULT_MATRIX (MATR1 MATR2 R1 R2 C1 C2 &OPTIONAL TEMP RES_MATRIX)

(SETQ TEMP 0)

(IF (/= C1 R2) '" ΠžΠ¨Π˜Π‘ΠšΠ Π£ΠœΠΠžΠ–Π•ΠΠ˜Π―"

(PROGN

;ΠžΠ‘ΠΠ£Π›Π―Π•Πœ МАВРИЦУ РЕЗУЛЬВАВ

(SETQ RES_MATRIX (MAKE-ARRAY (LIST R1 C2) :ELEMENT-TYPE 'INTEGER :INITIAL-ELEMENT 0))

(DO

((I 0))

((>= I R1))

(DO

((J 0))

((>= J C2))

(SETQ TEMP 0)

(DO

((P 0))

((>= P C1))

(SETQ TEMP (+ TEMP (* (AREF MATR1 I P) (AREF MATR2 P J))))

(SETQ P (+ P 1)))

(SETF (AREF RES_MATRIX I J) TEMP)

(SETQ J (+ J 1))

)

(SETQ I (+ I 1))

)

RES_MATRIX)))

MULT_MATRIX

(setq matrix (MAKE-ARRAY '(1 2)))

#2A ((0 0))

(setf (aref matrix 0 0) 3)

(setf (aref matrix 0 1) 4)

(setq matrix1 (MAKE-ARRAY '(2 3)))

#2A ((0 0 0)(0 0 0))

(SETF (AREF MATRIX1 0 0) 1)

(SETF (AREF MATRIX1 1 2) 5)

(SETF (AREF MATRIX1 1 1) 6)

MATRIX

#2A ((1 4))

MATRIX1

#2A ((1 0 0)(0 6 5))

(MULT_MATRIX MATRIX MATRIX1 1 2 2 3)

#2A ((1 24 20))

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ TEMP ΠΈ RES_MATRIX ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ), ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹

Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ списков содСрТат ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ лисповских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π°Ρ‚ΠΎΠΌΡ‹, числа, списки ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Π’Π½Π΅ΡˆΠ½Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ прСдставлСния Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² являСтся:

#(x1 x2 … xN)

Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ нСльзя ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ списки, Π½ΠΎ Π΄Π»Ρ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ.

Для создания Π²Π΅ΠΊΡ‚ΠΎΡ€Π° примСняСтся функция vector, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рассмотрим объявлСниС Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π³ΠΎ элСмСнтам ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ elt, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ измСнСния элСмСнта Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° setf:

(setq vect (vector 1 2 3));объявлСниС Π²Π΅ΠΊΡ‚ΠΎΡ€Π°

#(1 2 3)

(elt vect 0);ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ 0

(setf (elt vect 0) 'A);

A

vect

#(A 2 3)

ΠŸΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° выдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

(SUBSEQ VECT 0 2);0 — ΠΠΠ§ΠΠ›Πž, 2 — ΠšΠžΠΠ•Π¦

#(A 2)

Π’ Ρ€Π°Π±ΠΎΡ‚Π°Ρ… со ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ для Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²:

(REVERSE VECT)

#(3 2 A)

(REMOVE 'A VECT)

#(2 3)

(LENGTH VECT)

Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ ΠΈ ΡΠΏΠΈΡΠΊΠΈ, ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°ΠΌΠΈ. Для Ρ€Π°Π½Π΅Π΅ рассмотрСнных Π½Π°ΠΌΠΈ МАР-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠ² прСдусмотрСно ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ MAPCAR — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MAP, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ[3].

(map 'vector #'+ #(1 1 1 1 1) #(1 2 3 4 5))

#(2 3 4 5 6)

(map 'list (lambda (x) (if (oddp x) 'A 'B)) #(1 2 3 4 5))

(A B A B A)

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° — это объСдинСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π΄Π°ΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ имя. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€ класс космичСских ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ. Нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Π΅Π³ΠΎ характСристики, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, количСство экипаТа ΠΈ Π²Ρ€Π΅ΠΌΡ экспСдиции Π½Π° ΡΡ‚ΠΎΠΌ ΠΊΠΎΡ€Π°Π±Π»Π΅. Π’Π°ΠΊΠΎΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс космичСских судов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макроса DEFSTURCT .

Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅:

(defstruct spaceship

x_ship

y_ship

x_speed

y_speed

x_exped

y_exped)

SPACESHIP

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ структуры автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

1. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… гСнСрируСтся MAKEфункция создания структуры Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° spaceship ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° space_ship1:

(setq spaceship1 (MAKE-spaceship))

#S (SPACESHIP :X_SHIP NIL: Y_SHIP NIL: X_SPEED NIL: Y_SPEED NIL: X_EXPED NIL: Y_EXPED NIL)

Полю, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся имя поля с Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ

(setq spaceship1 (MAKE-spaceship :x_ship 1.0

:y_ship 2.0

:x_speed 300.0

:y_speed 400.0

:x_exped 2

))

#S (SPACESHIP :X_SHIP 1.0 :Y_SHIP 2.0 :X_SPEED 300.0 :Y_SPEED 400.0 :X_EXPED 2: Y_EXPED NIL)

2. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ структуры с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ COPY-:

(copy-spaceship spaceship1)

#S (SPACESHIP :X_SHIP NIL: Y_SHIP NIL: X_SPEED NIL: Y_SPEED NIL: X_EXPED NIL: Y_EXPED NIL)

3. Ѐункция-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ элСмСнта x Π΄Π°Π½Π½ΠΎΠΉ структурС (ИМЯ_БВРУКВУРЫ-P Π­Π›Π•ΠœΠ•ΠΠ’):

(spaceship-p spaceship1)

T

4. Ѐункция-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚, прСдназначСнная для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ встроСнных Ρ‚ΠΈΠΏΠΎΠ² TYPEP:

(typep spaceship1 'integer)

NIL

5. Ѐункция доступа для ΠΏΠΎΠ»Π΅ΠΉ, создаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

(ИМЯ_БВРУКВУРЫ-ΠŸΠžΠ›Π• Π­Π›Π•ΠœΠ•ΠΠ’_ВИПА_БВРУКВУРА)

(spaceship-x_ship spaceship1)

1.0

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ — основной Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ символам, числам, спискам ΠΈ Ρ‚. Π΄. Π’ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ свои элСмСнтарныС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ строки являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°ΠΊΠΎΠ² (Π·Π½Π°ΠΊ Ρ‚ΠΎΠΆΠ΅ являСтся Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…). Π•Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ #x.

Π’ ΡΡ‚ΠΎΠΉ записи x ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½ΠΎΠΉ записью Π·Π½Π°ΠΊΠΎΠΌ ΠΈΠ»ΠΈ словом Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠ³ΠΎ изобраТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

#e; Π·Π½Π°ΠΊ e

#TAB; табуляция Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΠΊΠ° являСтся сам Π·Π½Π°ΠΊ:

#e

#e

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π½Π°ΠΊΠΎΠΌ? Для это Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚

(CHARACTERP ΠžΠ‘ΠͺΠ•ΠšΠ’):

(CHARACTERP #x)

T

Π’ ΡΡ‚Ρ€ΠΎΠΊΠ΅ Π·Π½Π°ΠΊΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΠ±Π΅ΠΈΡ… сторон Π·Π½Π°ΠΊΠΎΠΌ «(ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ). Если строку ввСсти Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Ρ‚ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΡΡ‚Ρ€ΠΎΠΊΡƒ, здСсь ΠΆΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° (STRINGP ΠžΠ‘ΠͺΠ•ΠšΠ’), Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ истина, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — строка

" Π―Π·Ρ‹ΠΊ LISP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄"

" Π―Π·Ρ‹ΠΊ LISP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄"

" Лямбда-исчислСниС"

" Лямбда-исчислСниС"

(STRINGP «Π›ΡΠΌΠ±Π΄Π°-исчислСниС»)

T

Π Π°Π±ΠΎΡ‚Π° со ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌΠΈ Для Ρ€Π°Π±ΠΎΡ‚ со ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ понадобятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чтСния строк, измСнСния элСмСнтов Π² ΡΡ‚Ρ€ΠΎΠΊΠ°Ρ… ΠΈ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ строки ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сославшись Π½Π° Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (индСкс) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CHAR:

(CHAR «CHAR» 2)

#A

(CHAR «STRING» 5)

#G

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SETF:

(setq k «DESTRUCTION»)

" DESTRUCTION"

(setf (char k 0) #L)

#L

k

" LESTRUCTION"

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CONCATENATE:

(setq k «DESTRUCTION»)

" DESTRUCTION"

(setq k1 (concatenate 'string «FATAL «k))

" FATAL DESTRUCTION"

Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° STRING= OBJ1 OBJ2, Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вмСсто ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° STRING= ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ EQUAL.

(STRING= «LISP» «LISP»)

T

(STRING= «C-LISP» «H-LISP»)

NIL

(EQUAL «!» «!»)

T

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ LISP встрСчаСт Π°Ρ‚ΠΎΠΌ, происходит Π΅Π³ΠΎ сравнСниС с Ρ€Π°Π½Π΅Π΅ извСстными Π°Ρ‚ΠΎΠΌΠ°ΠΌΠΈ. ΠŸΡ€ΠΈ этом Ссли Π°Ρ‚ΠΎΠΌ Π½ΠΎΠ²Ρ‹ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ структуру Π°Ρ‚ΠΎΠΌΠ°. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ строкового Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, поэтому ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, прСдставлСнными ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π½Π°ΠΊΠΎΠ² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния.

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Π΅ числа

На ΡΠ·Ρ‹ΠΊΠ΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ комплСксным числом называСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° a + ib, Π³Π΄Π΅ a ΠΈ b — Π»ΡŽΠ±Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа, i — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся ΠΌΠ½ΠΈΠΌΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ. Π― Common Lisp Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС комплСксных чисСл, ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€ΠΎΠΉ вСщСствСнных числС Π² Ρ„ΠΎΡ€ΠΌΠ΅: #C (REAL IMAGINARY).

Π’ ΡΠΎΠΎΡ‚вСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ комплСксного Π°Π½Π°Π»ΠΈΠ·Π°, Lisp выполняСт всС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΌΠΈ числами, вычисляСт ΠΊΠΎΡ€Π½ΠΈ, тригономСтричСскиС ΠΈ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„мичСскиС значСния, Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΈ Ρ‚. ΠΏ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ алгСбраичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ комплСксныС числа, это ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… особСнностСй языка LISP.

(* 2 (+ #c (10 5) 4))

#C (28 10)

(log -10)

#C (2.30 2585d0 3.14 1593d0)

(* 2 (+ (log -10) 5))

#C (14.60517d0 6.28 3185d0)

(sin (log (expt #c (10 5) 2)))

#C (-1.451 832 0.123 302)

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ классов состоит ΠΈΠ· Π΄Π²ΡƒΡ… основных сСмСйств классов: встроСнных ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ INTEGER, STRING ΠΈ LIST, ΡΠ²Π»ΡΡŽΡ‚ΡΡ встроСнными. Они находятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ связями Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов, ΠΈ Π΄Π»Ρ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅. НСльзя ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΡΡ‚ΠΈΡ… классов, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ спСциализированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π½ΠΈΡ…, эффСктивно Ρ€Π°ΡΡˆΠΈΡ€ΡΡ повСдСния этих классов. Lisp Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ слоТный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — классы ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для своих экзСмпляров.

Класс, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй: ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам ΠΈ ΠΈΠΌΠ΅Π½ слотов. Базовая Ρ„ΠΎΡ€ΠΌΠ° DEFCLASS выглядит достаточно просто:

(DEFCLASS (ΠšΠ›ΠΠ‘Π‘-ΠŸΠ Π•Π”ΠžΠš) (Π‘Π›ΠžΠ’Π«)…)

Π’ ΠΏΠΎΠ»Π΅ наслСдуСмого класса ΠΌΠΎΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ссли этого Π½Π΅ Ρ‚рСбуСтся. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ DEFCLASS состоит ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° спСцификаторов слотов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ спСцификатор опрСдСляСт слот, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ экзСмпляра класса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ слот Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€Π΅ являСтся мСстом, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SLOT-VALUE. SLOT-VALUE Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΈΠΌΡ слота ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ слота Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π­Ρ‚Π° функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСстС с SETF для установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ слота Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.

Класс Ρ‚Π°ΠΊΠΆΠ΅ наслСдуСт спСцификаторы слотов ΠΎΡ‚ ΡΠ²ΠΎΠΈΡ… супСрклассов, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ слотов, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π»ΡŽΠ±ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, являСтся объСдинСниСм всСх слотов, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ΅ DEFCLASS для класса, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… для всСх Π΅Π³ΠΎ супСрклассов.

Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MAKE-INSTANCE, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Ρ‘ ΡΠ²Π»ΡΠ΅Ρ‚ся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса, Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ со ΡΠ»ΠΎΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ‹ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для нСсвязанного значСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹Π΄Π°Ρ‡Π΅ ошибки, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ.

(defclass MAI ()

(Faculty

Specialty

Group))

#

(defclass student (MAI)

(progress))

#

(defparameter *Isaev (make-instance 'student))

*ISAEV

(setf (slot-value *ISAEV 'PROGRESS) «GOOD»)

" GOOD"

(SLOT-VALUE *ISAEV 'PROGRESS)

" GOOD"

(SETF (SLOT-VALUE *ISAEV 'FACULTY) '7)

(SLOT-VALUE *ISAEV 'FACULTY)

Common Lisp прСдоставляСт Ρ‚Ρ€ΠΈ способа управлСния Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями слотов. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ добавлСния ΠΎΠΏΡ†ΠΈΠΉ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ слотов Π² DEFCLASS: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ: initarg указываСтся имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ MAKE-INSTANCE ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сохранСно Π² ΡΠ»ΠΎΡ‚Π΅. Вторая опция — :initform, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Lisp, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для вычислСния значСния, Ссли ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ MAKE-INSTANCE Π½Π΅ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: initarg. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ INITIALIZE-INSTANCE, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ MAKE-INSTANCE.

(defclass boxer ()

((name

:initarg :name)

(weight

:initarg :weight

:initform 0)

(height

:initarg :height

:initform 0)))

#

(defparameter *Ali

(make-instance 'boxer :name «Mohammed Ali» :weight 91: height 191))

*ALI

(slot-value *Ali 'weight)

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΉ: initarg ΠΈ: initform Π±ΡƒΠ΄Π΅Ρ‚ достаточно для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Однако, хотя Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Lisp, ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ слот, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Для выполнСния Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ INITIALIZE-INSTANCE.

Основной ΠΌΠ΅Ρ‚ΠΎΠ΄ INITIALIZE-INSTANCE, спСциализированный для STANDARD-OBJECT Π±Π΅Ρ€Π΅Ρ‚ Π½Π° ΡΠ΅Π±Ρ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎΠ± ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ слотов, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… опциями: initarg ΠΈ: initform.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой входящиС Π² ΡΠΎΡΡ‚Π°Π² класс Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удовлСтворяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, функциями, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° Π»ΠΈΡˆΡŒ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° INITIALIZE-INSTANCE слот account-type устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: gold, :silver ΠΈΠ»ΠΈ: bronze Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ значСния Π² ΡΠ»ΠΎΡ‚Π΅ balance.

(defclass bank-account ()

((customer-name

:initarg :customer-name

:initform (error «Must supply a customer name.»))

(balance

:initarg :balance

:initform 0)

(account-number

:initform (incf *account-numbers*))

account-type))

#

(defvar *account-numbers* 0)

*ACCOUNT-NUMBERS*

(defmethod initialize-instance :after ((account bank-account) &key)

(let ((balance (slot-value account 'balance)))

(setf (slot-value account 'account-type)

(cond

((>= balance 100 000) :gold)

((>= balance 50 000) :silver)

(t :bronze)))))

#

(defparameter *acc* (make-instance 'bank-account :customer-name «FS14»

:balance 1000))

*ACC*

(slot-value *acc* 'account-type)

:BRONZE

DEFPARAMETER всСгда присваиваСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ[4].

DEFVAR присваиваСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° [4].

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±Ρ‹Π»ΠΈ рассмотрСны основныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ языка программирования LISP.

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ LISP прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΈΠ»ΠΈ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ ΡΡ‚ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Лисп Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ» своС врСмя Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ дСсятилСтия ΠΈ Π² Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ярко ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π° 50 Π»Π΅Ρ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ языка LISP Π² Π½Π΅ΠΌ появилось Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… спСцифичных Π·Π°Π΄Π°Ρ‡. БСгодня Common Lisp ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ваТная ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ° — Π² LISP Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΡ€ΠΈ этом любая пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

1. Π‘ΠΎΠ»ΡŒΡˆΠ°ΠΊΠΎΠ²Π° Π•. И., Π“Ρ€ΡƒΠ·Π΄Π΅Π²Π° Н. Π’. «ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π›Π˜Π‘ΠŸ» — М.: ΠœΠ“Π£, 2010

2. Π‘Π΅ΠΌΠ΅Π½ΠΎΠ² М. «Π―Π·Ρ‹ΠΊ Лисп для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π­Π’Πœ» — М.: ΠœΠ“Π£, 1989.

3. Π₯ювянСн Π­., БСппянСн Π™. «ΠœΠΈΡ€ Лиспа» — М.: Наука, Ρ‚. 1, 2, 1984.

4. Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-источник: http://www.lisper.ru/ (06.11.2015).

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ