
рд▓рд┐рд╕реНрдк рдХреЛ рдЕрдХреНрд╕рд░ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреВрд╕рд░реЛрдВ рдкрд░ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрдиреЛрдЦреА, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдФрд░ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдирдХ рдХреЙрдорди рд▓рд┐рд╕реНрдк рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред
рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рд╣реИ, рд▓рд┐рд╕реНрдк рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИред
рдкрд╛рда рд╕реАрдПрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдФрд░ рд░реЙрдмрд░реНрдЯ рд╕реНрдЯреНрд░реИрдВрдбреНрд╣ рдХреА рд╕реАрдПрд▓ рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд╕рдореГрджреНрдз рдФрд░ рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рдд
рд▓рд┐рд╕реНрдк рдирдВрдмрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕рдореГрджреНрдз рдкрджрд╛рдиреБрдХреНрд░рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдХреА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВред
рд▓рдВрдмреА рд╕рдВрдЦреНрдпрд╛ (bignums) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ рдФрд░ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдореВрд▓реНрдп 10, 4 рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (expt (expt (expt (expt 10 10) 10) 10) 10) 100000000000000000000000000000000000[...]
рдкрд░рд┐рдореЗрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рднрд┐рдиреНрдиреЛрдВ рдХреЗ рд░реВрдк
рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдЧреЛрд▓ рддреНрд░реБрдЯрд┐ рди рд╣реЛред рд╕рдЯреАрдХ рддрд░реНрдХрд╕рдВрдЧрдд рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
> (+ 5/9 3/4) 47/36
рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдирдВрдмрд░ рднреА рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: #c (10 5) рдХрд╛ рдЕрд░реНрде рд╣реИ 10 + 5iред рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди рднреА рдЬрдЯрд┐рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (* 2 (+ #c(10 5) 4)) #C(28 10)
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд▓рд┐рдВрдХ
рдЖрдХреГрддрд┐рдпреЛрдВ рдпрд╛ рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рдереЗред SETF рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкрдж рдХреЗ рд╕рд╛рде рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк SETF рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (defvar *colours* (list 'red 'green 'blue)) *COLOURS* > (setf (first *colours*) 'yellow) YELLOW > *colours* (YELLOW BLUE GREEN)
рдФрд░ PUSH рдЗрд╕ рддрд░рд╣ рд╣реИ:
> (push 'red (rest *colours*)) (RED BLUE GREEN) > *colours* (YELLOW RED BLUE GREEN)
рд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдВрдХ рди рдХреЗрд╡рд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ SETF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдПрдХрд╛рдзрд┐рдХ рдореВрд▓реНрдп
рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕реВрдЪреА рдЬреИрд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, (рдорд╛рди 'рдлреВ' рдмрд╛рд░) рджреЛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ - 'рдлреВ рдФрд░ рдмрд╛рд░'ред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рд╛рде рдХрдИ рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, FLOOR рдПрдХ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджреЛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
> (floor pi) 3 0.14159265358979312d0
рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛, рдХрдИ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдкрд╣рд▓рд╛ред
> (+ (floor pi) 2) 5
рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ, рдЖрдк рдмрд╛рдХреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЧреЛрд▓ рдХрд░рддреЗ рд╕рдордп PI рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ:
> (multiple-value-bind (integral fractional) (floor pi) (+ integral fractional)) 3.141592653589793d0
рдореИрдХреНрд░реЛ
рд▓рд┐рд╕реНрдк рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд▓рд┐рд╕реНрдк рдХреЗ рд░реВрдк рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЬрд┐рд╕реЗ рдореИрдХреНрд░реЛ рдбреЗрдХреНрд╕рдкреЗрдВрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдХреНрд░реЛрдЬрд╝ рднрд╛рд╖рд╛ рдХреА рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╣реА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ
рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЗрд╕рд╕реЗ рд▓рд┐рд╕реНрдк рдореЗрдВ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ (рдбреАрдПрд╕рдПрд▓) рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рднрд╛рд╖рд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рд░рд▓ рдФрд░ рдХрдо рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдЖрдк рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рдЙрдкрдХрд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдпрд╛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдХреНрд░реЛ LOOP
рд▓реВрдк рдореИрдХреНрд░реЛ рд▓реВрдк рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рдЫреЛрдЯреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднрд╛рд╖рд╛ рд╣реИред LOOP рд▓реВрдк рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╕рд░рд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рд▓реЗрдХрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдЬрдЯрд┐рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рддрдХред
> (defvar *list* (loop :for x := (random 1000) :repeat 5 :collect x)) *LIST* > *list* (324 794 102 579 55)
> (loop :for elt :in *list* :when (oddp elt) :maximizing elt) 579
> (loop :for elt :in *list* :collect (log elt) :into logs :finally (return (loop :for l :in logs :if (> l 5.0) :collect l :into ms :else :collect l :into ns :finally (return (values ms ns))))) (5.7807436 6.6770835 6.3613024) (4.624973 4.0073333)
FORMAT рдлрд╝рдВрдХреНрд╢рди
FORMAT рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рднрд╛рд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд░рд▓ рдкрд╛рда рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, FORMAT рдирд┐рд░реНрджреЗрд╢ рдкрд╛рда рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдо рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдерд┐рддрд┐, рд▓реВрдк, рдФрд░ рд╕реАрдорд╛ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред
рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(defun format-names (list) (format nil "~{~:(~a~)~#[.~; and ~:;, ~]~}" list))
> (format-names '(doc grumpy happy sleepy bashful sneezy dopey)) "Doc, Grumpy, Happy, Sleepy, Bashful, Sneezy and Dopey." > (format-names '(fry laurie)) "Fry and Laurie." > (format-names '(bluebeard)) "Bluebeard."
FORMAT рдЕрдкрдирд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рд╕реНрдХреНрд░реАрди, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛред
рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдХрд╛рд░реНрдп
рд▓рд┐рд╕реНрдк рдореЗрдВ рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░,
рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЬрд┐рдирдХреЗ рддрд░реНрдХ рдФрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдЖрдк SORT рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рддрд░реНрдХ рдПрдХ рд╕реВрдЪреА рдФрд░ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, # '<):
> (sort (list 4 2 3 1) #'<) (1 2 3 4)
рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ , рдЬрд┐рдиреНрд╣реЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдмрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдХреНрд▓реЛрдЬрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕реЗ MAPCAR рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ:
> (mapcar (lambda (x) (+ x 10)) '(1 2 3 4 5)) (11 12 13 14 15)
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рд╡реЗ рд╕рдВрджрд░реНрдн рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдкреВрд░реНрдг рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
(let ((counter 10)) (defun add-counter (x) (prog1 (+ counter x) (incf counter))))
> (mapcar #'add-counter '(1 1 1 1)) (11 12 13 14) > (add-counter 50) 64
рд╕реВрдЪреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдЪреВрдВрдХрд┐ рд▓рд┐рд╕реНрдк рдореЗрдВ рдореВрд▓рднреВрдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (defvar *nums* (list 0 1 2 3 4 5 6 7 8 9 10 11 12)) *NUMS* > (list (fourth *nums*) (nth 8 *nums*)) (3 8) > (list (last *nums*) (butlast *nums*)) ((12) (0 1 2 3 4 5 6 7 8 9 10 11)) > (remove-if-not #'evenp *nums*) (0 2 4 6 8 10 12)
рдФрд░ рдЗрд╕рд▓рд┐рдП - рд╕рд╛рд╣рдЪрд░реНрдп рд╕реВрдЪреА рдХреЗ рд╕рд╛рде
> (defvar *capital-cities* '((NZ . Wellington) (AU . Canberra) (CA . Ottawa))) *CAPITAL-CITIES* > (cdr (assoc 'CA *capital-cities*)) OTTAWA > (mapcar #'car *capital-cities*) (NZ AU CA)
рд▓рдВрдмреЛрджрд░ рд╕реВрдЪреА
рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд╕реВрдЪреА рдлрд╝рдВрдХреНрд╢рди, рдореИрдХреНрд░реЛрдЬрд╝, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлреЙрд░реНрдо рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рд▓реИрдВрдмрдбрд╛ рд╕реВрдЪрд┐рдпрд╛рдВ рдЕрдирд┐рд╡рд╛рд░реНрдп, рд╡реИрдХрд▓реНрдкрд┐рдХ, рдирд╛рдорд┐рдд, рдкреВрдВрдЫ (рдмрд╛рдХреА) рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░, рд╕рд╛рде рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдФрд░ рдкрд╕рдВрдж рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдмрд╣реБрдд рд▓рдЪреАрд▓реЗ рдФрд░ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рддрдерд╛рдХрдерд┐рдд рдХреЛрдб рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВред
рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд╛рдВрдХрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдПрдХ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рд╡рд░реНрдг рд╣реИ:
(defun explode (string &optional (delimiter #\Space)) (let ((pos (position delimiter string))) (if (null pos) (list string) (cons (subseq string 0 pos) (explode (subseq string (1+ pos)) delimiter)))))
EXPLODE рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдпрд╛ рддреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
> (explode "foo, bar, baz" #\,) ("foo " " bar " " baz")
> (explode "foo, bar, baz") ("foo," "bar," "baz")
рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдорд╛рди
рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдирд╛рдореЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдк рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрди рджреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
// In C: xf86InitValuatorAxisStruct(device, 0, 0, -1, 1, 0, 1)
рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд┐рдХрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдХ
рдкреНрд░рддреАрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИрдВред рдХрд╣реЛ, 'рдлреВ рдПрдХ рдкрд╛рддреНрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо "FOO" рд╣реИред рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдпрд╛ рдХреБрдЫ рдЕрдореВрд░реНрдд рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд╣реЛрддреА рд╣реИред
рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЬреИрд╕реЗ рдкреНрд░рддреАрдХ, рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд┐рдХрд╛рдп рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджреНрдзрд░рдг, рдЕрд╡рдореВрд▓реНрдпрди), рд╕рдВрдЧреНрд░рд╣реАрдд, рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреБрд▓рдирд╛ рдХреА рдЧрдИ, рддрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ '* foo *' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ:
> (defvar *foo* 5) *FOO* > (symbol-value '*foo*) 5
рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬ
рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рднреА рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдпрд╛ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХреБрдЫ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
> (intern "ARBITRARY" (make-package :foo :use '(:cl))) FOO::ARBITRARY NIL
рд▓рд┐рд╕реНрдк рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░ * рдкреИрдХреЗрдЬ * рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреИрдХреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдкреИрдХреЗрдЬ FOO рд╣реИ, рддреЛ рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
> (in-package :foo) #<PACKAGE "FOO"> > (package-name *package*) "FOO"
рд╡рд┐рд╢реЗрд╖ рдЪрд░
рд▓рд┐рд╕реНрдк рд╢рд╛рдмреНрджрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЪрд░ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрджрд░реНрдн рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдЪрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдЕрдзрд┐рдХрддрдо рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рдХреЛрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓, рд╡рд┐рд╢реЗрд╖ рдЪрд░ * рдорд╛рдирдХ-рдЖрдЙрдЯрдкреБрдЯ * рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ:
(with-open-file (file-stream #p"somefile" :direction :output) (let ((*standard-output* file-stream)) (print "This prints to the file, not stdout.")) (print "And this prints to stdout, not the file."))
* рдорд╛рдирдХ-рдЖрдЙрдЯрдкреБрдЯ * рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд┐рд╕реНрдк рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖ рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ * рдорд╛рдирдХ-рдЗрдирдкреБрдЯ *, * рдкреИрдХреЗрдЬ *, * рдкрдардиреАрдп *, * рдкреНрд░рд┐рдВрдЯ-рдкрдардиреАрдп *, * рдкреНрд░рд┐рдВрдЯ-рд╕рд░реНрдХрд▓ *ред рдЖрджрд┐
рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рд▓рд┐рд╕реНрдк рдореЗрдВ рдХреЙрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рд╕реНрдерд┐рдд рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдпрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреНрд░рдорд╢рдГ рд╕реНрдерд╛рдиреАрдп рдФрд░ рдЧреИрд░-рдлреЛрдХрд▓ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд╛рдорд┐рдд рдмреНрд▓реЙрдХ BLOCK рдФрд░ RETURN-FROM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдирд╛рдорд╛рдВрдХрд┐рдд рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдлрд╝реЙрд░реНрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдмрд╛рд╣рд░реА рдмреНрд▓реЙрдХ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХ рд╕реЗ рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ:
> (block early (loop :repeat 5 :do (loop :for x :from 1 :to 10 :collect x :into xs :finally (return-from early xs)))) (1 2 3 4 5 6 7 8 9 10)
рдХреИрдЪ / рдереНрд░реЛ рдПрдХ рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рдЧреЛрдЯреЛ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред THROW рдЕрдВрддрд┐рдо CATCH рд╕реЗ рдХреВрджрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, THROW-RANGE рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрддрд┐рд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ THROW рдФрд░ CATCH рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(defun throw-range (ab) (loop :for x :from a :to b :collect x :into xs :finally (throw :early xs)))
> (catch :early (loop :repeat 5 :do (throw-range 1 10))) (1 2 3 4 5 6 7 8 9 10)
рдЬрдм рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкрдХрдбрд╝рдиреЗ / рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрдм рдЧрддрд┐рд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ
рд▓рд┐рд╕реНрдк рдореЗрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИред
рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдЖрдк рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд▓рд┐рд╕реНрдк рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рджреМрд░рд╛рди рд╕реНрдЯреИрдХ рдХрд╛
рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рд╕реНрдЯреИрдХ рдкрд░ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрд░рдЪрд┐рдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг (рдФрд░ рд╕рд┐рд░реНрдл рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ)ред
рдПрдХ рд╢рд░реНрдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдЦ
рдХреЙрдорди рд▓рд┐рд╕реНрдк: рдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдСрди рдХрдВрдбреАрд╢рди рдПрдВрдб рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯреНрд╕ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдп
рд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рд╕реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо (рдХреЙрдорди рд▓рд┐рд╕реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо, рд╕реАрдПрд▓рдУрдПрд╕) рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдРрд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╡рд┐рдзрд┐ рдЬреЛ рддрд░реНрдХреЛрдВ рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
(defgeneric key-input (key-name))
рдлрд┐рд░ рд╣рдо рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди KEY-NAME рдорд╛рдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
(defmethod key-input (key-name)
рдЖрдЗрдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рджреЗрдЦреЗрдВ:
> (key-input :space) "Space key pressed" > (key-input :return) "No keybinding for RETURN" > (defmethod key-input ((key-name (eql :return))) (format nil "Return key pressed")) > (key-input :return) "Return key pressed"
рд╣рдордиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛ рд╕реНрд╡рд┐рдЪ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдирдП рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдиреАрдЪреЗ-рдКрдкрд░ рд▓рд┐рд╕реНрдк рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХрд╣рддреЗ рд╣реИрдВ, рддрд░реАрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рддрд░реАрдХреЛрдВ, рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд╡рд┐рдХрд▓реНрдк, рдФрд░ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдк рдХрдИ рдЙрдкрдпреЛрдЧреА рдорд╛рдирдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ; рдПрдХ рдЙрджрд╛рд╣рд░рдг PRINT-OBJECT рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рдкрд╛рдареНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рд╕рдВрдпреЛрдЬрди
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рддрд░реАрдХреЛрдВ
рдХреА рдПрдХ рдкреВрд░реА
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ, рдпрд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреНрд░рдо рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВред рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ: рдкрд╣рд▓реЗ ,: рдмрд╛рдж, рдпрд╛: рдЪрд╛рд░реЛрдВ рдУрд░ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рд░рдЦреЗ рдЧрдП рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, KEY-INPUT рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдХреБрдВрдЬреА рджрдмрд╛рдпрд╛" рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рд╣рдо рдХреЛрдб рдХреЛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: рдЖрд╕рдкрд╛рд╕
(defmethod key-input :around (key-name) (format nil "~:(~a~) key pressed" (call-next-method key-name)))
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХреБрдВрдЬреА-рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ:
(defmethod key-input ((key-name (eql :escape))) "escape")
рдЬрдм KEY-INPUT рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ:
- рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЪрд╛рд░реЛрдВ рдУрд░
- рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ KEY-INPUT рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ,
- рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддреА рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ THROW / CATCH рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ):
(defmethod key-input (key-name) (throw :default (format nil "No keybinding for ~a" key-name))) (defmethod key-input :around (key-name) (catch :default (format nil "~:(~a~) key pressed" (call-next-method key-name))))
рдирддреАрдЬрддрди, рдПрдХреАрдХреГрдд рд╡рд┐рдзрд┐ рд╕рдВрдпреЛрдЬрди рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓, рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рддрдВрддреНрд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдпреЛрдЬрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рд╕рдВрдпреЛрдЬрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдпреЛрдЧ рдпрд╛ рд╕реЙрд░реНрдЯ рдХрд░реЗрдЧрд╛ред
рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдХрдИ рдкреВрд░реНрд╡рдЬ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЕрдореАрд░ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рдзрд┐рдпреЛрдВ, рдПрдХ рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдЕрдиреНрдп рд╕реАрдПрд▓рдУрдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╕рдорд╕реНрдпрд╛рдУрдВ (рдЬреИрд╕реЗ рдХрд╛рдВрдЯрд╛-рдЬреБрдбрд╝рд╛рд╡) рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрдЯрд╛рдмреЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (MOP) рдПрдХ CLOS рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ CLOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред MOP рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ CLOS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реА рдЖрдВрддрд░рд┐рдХ CLOS рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЕрдиреБрд╕рдВрдзрд╛рди, рдЙрдкрдпреЛрдЧ рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд┐рдХрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ
рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ рднреА рд╡рд╕реНрддреБ рд╣реИрдВред рдПрдордУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
FOO рд╡рд░реНрдЧ рдХреЛ BAR рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рджреЗрдВ, рдлрд┐рд░ рд╣рдо BAO рд╡рд░реНрдЧ рдХреЛ FOO рдкреВрд░реНрд╡рдЬреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ENSURE-CLASS рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(defclass bar () ()) (defclass foo (bar) ()) (defclass baz () ())
> (class-direct-superclasses (find-class 'foo)) (#<STANDARD-CLASS BAR>) > (ensure-class 'foo :direct-superclasses '(bar baz)) #<STANDARD-CLASS FOO> > (class-direct-superclasses (find-class 'foo)) (#<STANDARD-CLASS BAR> #<STANDARD-CLASS BAZ>)
рд╣рдордиреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CLASS-DIRECT-SUPERCLASSES рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛; рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ FIND-CLASS рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд▓реЗрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЙрд╕ рддрдВрддреНрд░ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЧрддрд┐рд╢реАрд▓ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ
рд▓рд┐рд╕реНрдк рдПрдХ рдмрд╣реБрдд рд╣реА рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред рдХрд╛рд░реНрдп, рдореИрдХреНрд░реЛрдЬрд╝, рдХрдХреНрд╖рд╛рдПрдВ, рдкреИрдХреЗрдЬ, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдордп рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рдПрдХ рддреНрд░рд┐рдЬреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧ TENNIS-BALL рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (defclass ball () ((%radius :initform 10 :accessor radius))) #<STANDARD-CLASS BALL> > (defclass tennis-ball (ball) ()) #<STANDARD-CLASS TENNIS-BALL>
рдпрд╣рд╛рдБ TENNIS-BALL рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдЗрд╕рдореЗрдВ рддреНрд░рд┐рдЬреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд▓реЙрдЯ рд╣реИ:
> (defvar *my-ball* (make-instance 'tennis-ball)) *MY-BALL* > (radius *my-ball*) 10
рдФрд░ рдЕрдм рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рдФрд░ рд╡реЙрд▓реНрдпреВрдо рд╕реНрд▓реЙрдЯ рдЬреЛрдбрд╝рдХрд░ BALL рдХреНрд▓рд╛рд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> (defclass ball () ((%radius :initform 10 :accessor radius) (%volume :initform (* 4/3 pi 1e3) :accessor volume))) #<STANDARD-CLASS BALL>
рдФрд░ * MY-BALL * рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рд╕реНрд▓реЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
> (volume *my-ball*) 4188.790204786391d0
рд░рди рдЯрд╛рдЗрдо рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рддрдХ рдкрд╣реБрдВрдЪ
рдХрдореНрдкрд╛рдЗрд▓ рдФрд░ рдХрдореНрдкрд╛рдЗрд▓-рдлрд╝рд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рд┐рд╕реНрдк рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпрд╛ рдмрджрд▓реЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡, рдЧрддрд┐рд╢реАрд▓ рдФрд░ рддреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХрд▓рди рдореИрдХреНрд░реЛрдВ
рд╕рдВрдХрд▓рди рдореИрдХреНрд░реЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдореИрдХреНрд░реЛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрдХрд▓рди рдореИрдХреНрд░реЛ рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рд┐рд╕реНрдк рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИ - рдЬреЛ рддреЗрдЬреА рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢, рд╕рдВрдХрд▓рдХ рдХреЛ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рднрд╛рд╖рд╛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдереАредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ EXPLODE рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: (defun explode (string &optional (delimiter #\Space)) (declare (type character delimiter) (type string string)) ...)
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд╛рд░реНрд╕рд░
рд▓рд┐рд╕реНрдк рдкрд╛рд░реНрд╕рд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд┐рд╕реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдПрд╕-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИредParser рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ READ, READ-CHAR, READ-LINE, READ-FROM-STRING, рдЖрджрд┐ред рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдПрдХ рдлрд╝рд╛рдЗрд▓, рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгреЛрдВ рдХреЗ рддрд╛рд░ рдпрд╛ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВредрдпрд╣рд╛рдВ READ-FROM-STRING рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (400 500 600) рдмрдирд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдПрдХ рд╕реВрдЪреА "(400 500 600)"ред > (read-from-string "(400 500 600)") (400 500 600) 13 > (type-of (read-from-string "t")) BOOLEAN
рд░реАрдбрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рд╕реНрдк рдкрд╛рд░реНрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рд╣реИред рдореИрдХреНрд░реЛрдЬрд╝ рдкрдврд╝рдирд╛ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ (рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)редрдХреБрдЫ рдорд╛рдирдХ рдкрдврд╝рдиреЗ рдореИрдХреНрд░реЛ:- # # рдлреВ - рдлрд╝рдВрдХреНрд╢рдВрд╕,
- # \ _- рдЕрдХреНрд╖рд░ (рдЕрдХреНрд╖рд░),
- # рд╕реА (4 3) - рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛,
- # рдкреА "/ рдкрде /" - рдлрд╝рд╛рдЗрд▓ рдкрдеред
рдкрд╛рд░реНрд╕рд░ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпреЗ рдирд┐рдпрдо рд░реАрдб рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рд╢реНрди рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░реНрд╕ (рд░реАрдб-рдЗрд╡рд▓-рдкреНрд░рд┐рдВрдЯ рд▓реВрдк, рдЖрд░рдИрдкреАрдПрд▓) рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣ рд╣рдо рдорд╛рдирдХ рд░реАрдб рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: > (read-from-string "#xBB") 187
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореБрджреНрд░рдг
рд▓рд┐рд╕реНрдк рдореЗрдВ рдкрд╛рда рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдЕрд▓рдЧ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ, рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредPRINT-OBJECT рдПрдХ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рджрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдкрд╛рдареАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ FORMAT, PRINT рдФрд░ REPL рд╢рд╛рдорд┐рд▓ рд╣реИрдВредрдЬреМрдиреА рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: (defclass journey () ((%from :initarg :from :accessor from) (%to :initarg :to :accessor to) (%period :initarg :period :accessor period) (%mode :initarg :mode :accessor mode)))
рдЕрдЧрд░ рд╣рдо JOURNEY рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рджреЗрдЦреЗрдВрдЧреЗ: > (defvar *journey* (make-instance 'journey :from "Christchurch" :to "Dunedin" :period 20 :mode "bicycle")) *JOURNEY* > (format nil "~a" *journey*) "#<JOURNEY {10044DCCA1}>"
рдЖрдк JOURNEY рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП PRINT-OBJECT рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╛рдареНрдп рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: (defmethod print-object ((j journey) (s stream)) (format s "~A to ~A (~A hours) by ~A." (from j) (to j) (period j) (mode j)))
рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдЕрдм рдирдП рдкрд╛рда рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреА: > (format nil "~a" *journey*) "Christchurch to Dunedin (20 hours) by bicycle."