
Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
STRING-UPCASE [atom] Function
(STRING-UPCASE ⮬) ў®§ўа й Ґв бЁ¬ў®«, г Є®в®а®Ј® а-Ё¬п
в Є®Ґ ¦Ґ,Є Є Ё а-Ё¬п < ⮬ >, § ЁбЄ«о票Ґ¬ в®Ј®, зв® ўбҐ
Їа®ЇЁблҐ бЁ¬ў®«л ЇаҐ®Ўа §говбп ў § Ј« ўлҐ. …б«Ё < ⮬> Ґ
пў«пҐвбп ⮬®¬, STRING-UPCASE ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN STRING-UPCASE (ATM)
((ATOM ATM)
(PACK (MAPCAR '(LAMBDA (CHAR)
((< 96 )ASCII CHAR) 123)
(ASCII (- (ASCII CHAR) #@)) )
CHAR )
(UNPACK ATM))) ) )
(STRING-UPCASE "Lisp is recursive") --> |LISP IS RECURSIVE|
STRING-DOWNCASE [atom] Function
(STRING-DOWNCASE ⮬) ў®§ўа й Ґв бЁ¬ў®«, а-Ё¬п Є®в®а®Ј®
в Є®Ґ ¦Ґ, Є Є Ё а-Ё¬п < ⮬ >, § ЁбЄ«о票Ґ¬ в®Ј®, зв® ўбҐ
§ Ј« ўлҐ ЎгЄўл ЇаҐ®Ўа §говбп ў Їа®ЇЁблҐ. …б«Ё < ⮬> Ґ
пў«пҐвбп ⮬®¬, STRING-UPCASE ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN STRING-DOWNCASE (ATM)
((ATOM ATM)
(PACK (MAPCAR '(LAMBDA (CHAR)
((<64 (ASCII CHAR) 91)
(ASCII (+(ASCII CHAR) 32)) )
CHAR )
(UNPACK ATM))) ) )
(STRING-DOWNCASE "Lisp is recursive) --> |lisp is recursive|
FINDSTRING [atom1,atom2,n] Function
(FINDSTRING ⮬1 ⮬2 n) ў®§ўа й Ґв ®¬Ґа Ї®§ЁжЁЁ ЇҐаў®Ј®
ўе®¦¤ҐЁп а-Ё¬ҐЁ < ⮬ 1> ў а-Ё¬п < ⮬ 2>, ЇаЁзҐ¬ ®вбзҐв
ўҐ¤Ґвбп б 0. …б«Ё <n> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, Ї®ЁбЄ
зЁ Ґвбп б n-Ј® бЁ¬ў®« < ⮬ 2>. …б«Ё а-Ё¬п < ⮬ 1> Ґ
©¤Ґ®, дгЄжЁп ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN FINDSTRING (ATM1 ATM2 N)
((OR (NOT (ATOM ATM1)) (NOT (ATOM ATM2))) NIL)
((PLUSP N)
((NULL (FINDSTRING ATM1 (SUBLIST ATM2))) NIL)
(+ N (FINDSTRING ATM1 (SUBLIST ATM2 N))) )
((if ATM1 occurs as a substring in ATM2)
(the position of ATM1's first occurence in ATM2) ) )
(FINDSTRING 'XYZ 'ABCXYZDEFXYZGHI) --> 3
(FINDSTRING 'XYZ 'ABCXYZDEFXYZGHI 4) --> 9
(FINDSTRING 'XYZ 'ABCDEFGHI) --> NIL
PRINT-LENGTH [atom] Function
…б«Ё < ⮬> Ґбвм ⮬, (PRINT-LENGTH ⮬) ў®§ўа й Ґв зЁб«®
бЁ¬ў®«®ў, вॡ㥬ле ¤«п ЇҐз вЁ < ⮬ >, ®б®ў ЁЁ ⥪г饣®
§ зҐЁп Є®ва®«мле ЇҐаҐ¬Ґле *PRINT-ESCAPE* Ё *PRINT-BASE*
(б¬. а §¤Ґ« 5.14). ‚ Їа®вЁў®¬ б«гз Ґ PRINT-LENGTH ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN PRINT-LENGTH (ATM)
((ATOM ATM)
(LRNGTH (UNPACK ATM)) )
(PRINT-LENGTH 'MULISP) --> 6
(PRINT-LENGTH -13) --> 3
(PRINT-LENGTH NIL) --> 3
5.12. —Ёб«®ўлҐ дгЄжЁЁ
—Ёб«®ўлҐ дгЄжЁЁ ўлЇ®«пов ®б®ўлҐ ¬ ⥬ вЁзҐбЄЁҐ ®ЇҐа жЁЁ
¤ 楫묨 Ё ¤а®Ўл¬Ё зЁб« ¬Ё. Џ®«м§®ў вҐ«м ¬®¦Ґв ўлЎа вм ¤«п
а Ў®вл Ё«Ё в®зго, Ё«Ё ЇаЁЎ«Ё¦Ґго а жЁ® «мго аЁд¬ҐвЁЄг. „«п
в®з®© а жЁ® «м®© аЁд¬ҐвЁЄЁ а §¬Ґа 楫ле зЁбҐ«, зЁб«ЁвҐ«Ґ© Ё
§ ¬Ґ ⥫Ґ© ®Ја ЁзҐ ЇаЁЎ«Ё§ЁвҐ«м® ¤® 25000 ¤ҐбпвЁзле § Є®ў.
„«п ЇаЁЎ«Ё¦Ґ®© а жЁ® «м®© аЁд¬ҐвЁЄЁ (®Ўлз® ҐҐ §лў ов - б
Ї« ў о饩 в®зЄ®©) ЁбЇ®«м§гҐ¬ п в®з®бвм в Є¦Ґ гбв ў«Ёў Ґвбп
ў ЇаҐ¤Ґ« е нвЁе ®Ја ЁзҐЁ©.
…б«Ё Їа®бв п дгЄжЁп, вॡгой п 楫ле аЈг¬Ґв®ў, ўл§лў Ґвбп
б ҐжҐ«л¬Ё аЈг¬Ґв ¬Ё, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐжҐ«л©
аЈг¬Ґв". …б«Ё дгЄжЁп, вॡгой п зЁб«®ўле аЈг¬Ґв®ў (в.Ґ.
楫ле Ё«Ё ¤а®Ўле зЁбҐ«), ўл§лў Ґвбп б ҐзЁб«®ўл¬Ё аЈг¬Ґв ¬Ё,
ў§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐзЁб«®ў®© аЈг¬Ґв". …б«Ё
зЁб«®ў п дгЄжЁп ўл§лў Ґвбп б Ґ¤®бв в®зл¬ Є®«ЁзҐбвў®¬
аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ
Є®«ЁзҐбвў® аЈг¬Ґв®ў". …б«Ё ᤥ« Ї®ЇлвЄ ¤Ґ«ҐЁп ®«м,
ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "„Ґ«ҐЁҐ ®«м".
Љ Є в®«мЄ® ЇаҐалў ЁҐ ў®§ЁЄ«®, Є®б®«Ё ўлᢥ稢 Ґвбп
¤Ё Ј®бвЁзҐбЄ®Ґ б®®ЎйҐЁҐ, ўл§®ў дгЄжЁЁ Ё Ї®¤бЄ §Є ў ўЁ¤Ґ ®ЇжЁ©
ЇаҐалў Ёп. ЏаҐалў ЁҐ Ї®§ў®«пҐв Ї®«м§®ў вҐ«о ®ЇаҐ¤Ґ«Ёвм ЇаЁзЁг
®иЁЎЄЁ Ё вЁЇ ¤Ґ©бвўЁ© (б¬. а §¤Ґ« 5.19).
Љ®ва®«млҐ ЇҐаҐ¬ҐлҐ *READ-BASE*, *PRINT-BASE* Ё
*PRINT-POINT* § ¤ ов, Є ЄЁ¬ ®Ўа §®¬ зЁб« ®ЇаҐ¤Ґ«повбп ¤«п ўе®¤
Ё ўл室 (б¬. а §¤Ґ«л 5.13 Ё 5.14).
•®вп ¤а®ЎлҐ зЁб« ¬®Јгв § ЇЁблў вмбп «ЁЎ® ў ¤ҐбпвЁз®¬
ЇаҐ¤бв ў«ҐЁЁ, «ЁЎ® б®Ўб⢥® ў ўЁ¤Ґ ¤а®ЎЁ (б Ї®¬®ймо Є«®®©
зҐавл), ў® ўгв॥¬ ЇаҐ¤бв ў«ҐЁЁ ®Ё еа пвбп Є Є б®Єа йҐлҐ
¤а®ЎлҐ зЁб« , б®бв®пйЁҐ Ё§ 2-е 楫ле. ‘«Ґ¤®ў ⥫м®, ўл§®ў
(= 0.75 3/4 6/8)
ўҐаҐ. Ћв¬ҐвЁ¬, зв® Є®Ј¤ ўў®¤пвбп ¤а®ЎлҐ зЁб« , ў®ЄагЈ в®зЄЁ Ё«Ё
Є«®®© зҐавл Їа®ЎҐ«л Ґ бв ўпвбп, ЇҐаҐ¤ в®зЄ®© ¤®«¦® бв®пвм
е®вп Ўл ®¤® ¤ҐбпвЁз®Ґ зЁб«®.
Ћб®ўлҐ зЁб«®ўлҐ дгЄжЁЁ ў ¤ ®© Ј« ўҐ ®ЇаҐ¤Ґ«Ґл
¬ иЁ®¬ п§лЄҐ. ‚ д ©«Ґ COMMON.LSP ®ЇаҐ¤Ґ«Ґл б«Ґ¤гойЁҐ
ва б楤ҐвлҐ Ё ¤агЈЁҐ дгЄжЁЁ: EXP, EXPT, LOG, SQRT, ISQRT,
SIN, COS, TAN, ASIN, ACOS, ATAN, PI Ё RANDOM.
PRECISION [n] Function
…б«Ё <n> - Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (PRECISION n) ЇаЁЁ¬ Ґв <n>
§ § 票Ґ в®з®бвЁ Ё ў®§ўа й Ґв ЇаҐ¤л¤г饥 § 票Ґ в®з®бвЁ.
…б«Ё <n> а ўҐ г«о, (PRECISION n) ЇаЁЁ¬ Ґв § 票Ґ в®з®бвЁ §
ЎҐбЄ®Ґз®бвм Ё ў®§ўа й Ґв ЇаҐ¤л¤г饥 § 票Ґ. …б«Ё <n>
®вбгвбвўгҐв Ё«Ё Ґ пў«пҐвбп Ё г«Ґ¬, Ё Ї®«®¦ЁвҐ«мл¬ жҐ«л¬,
(PRECISION n) ў®§ўа й Ґв ⥪г饥 § 票Ґ в®з®бвЁ ЎҐ§ ҐЈ®
Ё§¬ҐҐЁп.
…б«Ё § 票Ґ в®з®бвЁ ЇаЁпв® а ўл¬ Ї®«®¦ЁвҐ«м®¬г 楫®¬г
<n>, в® ®ў®Ґ ¤а®Ў®Ґ зЁб«®, бЈҐҐаЁа®ў ®Ґ зЁб«®ўл¬Ё дгЄжЁп¬Ё,
ўв®¬ вЁзҐбЄЁ ®ЄагЈ«пҐвбп, Ґб«Ё ¤«п а §¬ҐйҐЁп ¬Ґм襩 Ё§ ўҐ«ЁзЁ
ҐЈ® зЁб«ЁвҐ«п Ё § ¬Ґ ⥫п вॡгҐвбп Ў®«миҐ, 祬 <n> б«®ў Ї ¬пвЁ
(б«®ў® Ї ¬пвЁ б®бв®Ёв Ё§ 16 ЎЁв). ’ Є®Ґ ¤а®Ў®Ґ зЁб«® § ¬ҐпҐвбп
Їа®ЄбЁ¬ жЁҐ©, ЇаЁзҐ¬ в Є®©, Є®в®а п вॡгҐв ¤«п а §¬ҐйҐЁп
Ё¬Ґм襩 Ё§ ўҐ«ЁзЁ зЁб«ЁвҐ«п Ё § ¬Ґ вҐ«п Ґ Ў®«ҐҐ <n> б«®ў.
’®з®бвм Ї« ў о饣® б«Ґи , а ў п 1, ᮮ⢥вбвўгҐв Ґ¤ЁЁз®©
в®з®бвЁ Ї« ў о饩 в®зЄЁ; в®з®бвм Ї« ў о饣® б«Ґи , а ў п 2,
ᮮ⢥вбвўгҐв ¤ў®©®© в®з®бвЁ Ї« ў о饩 в®зЄЁ, Ё в.¤. ’®з®бвм
Ї« ў о饣® б«Ґи , а ў п <n>, в Є¦Ґ ®ЎҐбЇҐзЁў Ґв Ї®звЁ 10*n
¤ҐбпвЁзле § Є®ў в®з®бвЁ. ЏҐаў® з «м®Ґ § 票Ґ в®з®бвЁ
ЇаҐ¤Ї®« Ј Ґвбп а ўл¬ 1.
ЏаЁ¬Ґа:
(DEFUN PRECISION (N)
((ZEROP N)
(set precision to infinity)
(return previous precision) )
((AND (INTEGERP N) (PLUSP N))
(set precision to N)
(return previous precision) )
(return current precision) )
(PRECISION 0) --> 1
(PRECISION 5) --> 0
(PRECISION) --> 5
(PRECISION 1) --> 5
’ Є, дгЄжЁп PI, ®ЇаҐ¤Ґ«Ґ п ў д ©«Ґ COMMON.LSP, ў muLISP
¬®¦Ґв Їа®ЄбЁ¬Ёа®ў вмбп ¤® «оЎ®© ¦Ґ« Ґ¬®© б⥯ҐЁ в®з®бвЁ. ЌЁ¦Ґ
ЇаЁўҐ¤Ґ ЇаЁ¬Ґа ўлзЁб«ҐЁп PI ¤® 100 § Є®ў:
(PROGN (PRECISION 10) (SETQ *PRINT-POINT* 100) (PI)) -->
3.14159265358979323846264338327950288419716939937510582097444
5923078164062862089986280348253421173270
UNDERFLOW [n] Function
— бв® ў Їа®жҐбᥠўлзЁб«ҐЁ© б Їа®ЄбЁ¬ жЁҐ© вॡговбп в ЄЁҐ
зЁб« , Є®в®алҐ Ї® Ўб®«ов®© ўҐ«ЁзЁҐ ¬ҐмиҐ, 祬 ҐЄ®в®а®Ґ зЁб«®
б Ї« ў о饩 в®зЄ®©, бв६п饥бп Є г«о (бЁвг жЁп "underflow").
…б«Ё <n> - Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (UNDERFLOW n) Ї®« Ј Ґв
§ 票Ґ, Є®в®а®¬ ў®§ЁЄ Ґв бЁвг жЁп "underflow", а ўл¬
65536^-n Ё ў®§ўа й Ґв ЇаҐ¤л¤г饥 § 票Ґ "underflow". …б«Ё <n> -
®«м, (UNDERFLOW n) ЇаҐ¤®вўа й Ґв ў®§ЁЄ®лҐЁҐ "underflow" Ё
ў®§ўа й Ґв ЇаҐ¤л¤г饥 § 票Ґ. …б«Ё <n> ®вбгвбвўгҐв Ё«Ё Ґ
пў«пҐвбп Ё 0, Ё Ї®«®¦ЁвҐ«мл¬ жҐ«л¬, (UNDERFLOW n) ў®§ўа й Ґв
⥪г饥 § 票Ґ "underflow" ЎҐ§ ҐЈ® Ё§¬ҐҐЁп.
ЏҐаў® з «м® "underflow" ЇаЁЁ¬ Ґвбп а ўл¬ 7. ЌЁ¦Ґ
ЇаЁўҐ¤Ґ в Ў«Ёж зЁб«®ўле § 票© "underflow" ¤«п а §«Ёзле
§ 票© <n>:
n | 65536^-n
---------------------
1 | 1.53 10^-n
2 | 2.33 10^-10
3 | 3.55 10^-15
4 | 5.42 10^-20
5 | 8.27 10^-25
6 | 1.26 10^-29 (default underflow)
7 | 1.93 10^-34
8 | 2.94 10^-39
9 | 4.48 10^-44
10 | 6.84 10^-49
ЏаЁ¬Ґа:
(DEFUN UNDERFLOW (N)
((ZEROP N)
(disable underflow feature)
(return previous underflow setting) )
((AND (INTEGERP N) (PLUSP N))
(set underflow point to 65536^-N)
(return previous underflow setting) )
(return current underflow setting) )
(UNDERFLOW 0) --> 7
(UNDERFLOW 5) --> 0
(UNDERFLOW) --> 5
(UNDERFLOW 7) --> 5
MAX [n1,n2,...,n M] Function
MAX ў®§ўа й ⥠᢮© ЁЎ®«миЁ© аЈг¬Ґв. …б«Ё MAX ўл§лў Ґвбп
ЎҐ§ аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ
Є®«ЁзҐбвў® аЈг¬Ґв®ў".
ЏаЁ¬Ґа:
(DEFUN MAX LST
((NULL LST)
((BREAK (LIST 'MAX) '"Insufficient Arguments") )
((NULL (CDR LST))
(CAR LST) )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
((< (CAR LST) (CADR LST))
(APPLY 'MAX (CONS (CADR LST) (CDDR LST))) )
(APPLY 'MAX (CONS (CAR LST) (CDDR LST))) )
(APPLY 'MAX (CONS (BREAK (LIST 'MAX (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST))) )
(MAX 5 -7 4) --> 5
(MAX 2/3 0.6) --> 0.6666666
(MAX -4) --> -4
MIN [n1,n2,...,n M] Function
MIN ў®§ўа й Ґв бў®© Ё¬ҐмиЁ© аЈг¬Ґв. …б«Ё MIN ўл§лў Ґвбп
ЎҐ§ аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ
Є®«ЁзҐбвў® аЈг¬Ґв®ў".
ЏаЁ¬Ґа:
(DEFUN MIN LST
((NULL LST)
(BREAK (LIST 'MIN) '"Insufficient Arguments") )
((NULL (CDR LST))
(CAR LST) )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
((< CAR LST) (CADR LST))
(APPLY 'MIN (CONS (CAR LST) (CDDR LST))) )
(APPLY 'MIN (CONS (BREAK (LIST 'MIN (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST))) )
(MIN 5 -7 4) --> -7
(MIN 2/3 0.6) --> 0.6
(MIN -4) --> -4
+ [n1,n2,...,nM] Function
(+n1 n2 ... nM) ў®§ўа й Ґв б㬬г зЁбҐ« б <n1> Ї® <nM>. …б«Ё
дгЄжЁп ўл§лў Ґвбп ЎҐ§ аЈг¬Ґв®ў, ®п ў®§ўа й Ґв 0, Є®в®ал©
пў«пҐвбзп Ё¤ҐвЁдЁЄ в®а®¬ ¤ ®© ®ЇҐа жЁЁ.
ЏаЁ¬Ґа:
(DEFUN + LST
((NULL LST) 0)
((NULL (CDR LST))
(CAR LST) )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
(APPLY '+ (CONS (sum of (CAR LST) and (CADR LST))
(CDDR LST) ) ) )
(APPLY '+ (CONS (BREAK (LIST '+ (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(+ 2 3 4) --> 9
(+ -5 3) --> -2
(+ 1/6 0.7) --> 0.8666666
(+ 0.25) --> 0.25
-[n1,n2,...,nM] Function
(-n1 n2 ... nM) ў®§ўа й Ґв а §Ёжг ¬Ґ¦¤г <n1> Ё б㬬®© зЁбҐ«
б <n2> Ї® <nM>. (-n) ў®§ўа й Ґв ¬Ёгб <n>. …б«Ё дгЄжЁп
ўл§лў Ґвбп ЎҐ§ аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ
"ЌҐ¤®бв в®з®Ґ Є®«ЁзҐбвў® аЈг¬Ґв®ў".
ЏаЁ¬Ґа:
(DEFUN - LST
((NULL LST)
(BREAK (LIST '-) '"Insufficient Arguments") )
((NULL (CDR LST))
((NUMBERP (CAR LST))
(negative of (CAR LST)) )
(BREAK (LIST '- (CAR LST)) '"Nonnumeric Argument") )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
((NULL (CDDR LST))
(difference (CAR LST) and (CADR LST)) )
(APPLY '- (CONS (differenxe of (CAR LST) and (CADR LST))
(CDDR LST) ) ) )
(APPLY '- (CONS (BREAK (LIST '- (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(-12 5) --> 7
(-12 5 -3) --> 10
(-17/9 1.5) --> 0.3888888
(-8) --> -8
* [n1,n2,...,nM] Function
(*n1 n2 ... nM) ў®§ўа й Ґв Їа®Ё§ўҐ¤ҐЁҐ зЁбҐ« б <n1> Ї® <nM>.
…б«Ё дгЄжЁп ўл§лў Ґвбп ЎЄ§ аЈг¬Ґв®ў, ® ў®§ўа й Ґв 1 -
Ё¤ҐвЁдЁЄ в®а ¤ ®© ®ЇҐа жЁЁ.
ЏаЁ¬Ґа:
(DEFUN * LST
((NULL LST) 1)
((NULL (CDR LST))
(CAR LST) )
((AND ((NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
(APPLY '* (CONS (product of (CAR LST) and (CADR LST))
(CDDR LST) ) ) )
(APPLY '* (CONS (BREAK (LIST '* (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(* 3 4 5) --> 60
(* 5/6 -0.7) --> -0.5833333
(*) --> 1
(* 2/5) --> 0.4
/ [n1,n2,...,nM] Function
(/n1 n2 ... nM) ў®§ўа й Ґв १г«мв в ¤Ґ«ҐЁп <n1>
Їа®Ё§ўҐ¤ҐЁҐ зЁбҐ« б <n2> Ї® <nM>. …б«Ё дгЄжЁп ўл§лў Ґвбп б
Ґ¤ЁбвўҐл¬ аЈг¬Ґв®¬, ® ў®§ўа й Ґв зЁб«®, ®Ўа ⮥
аЈг¬Ґвг. …б«Ё дгЄжЁп ўл§лў Ґвбп ЎҐ§ аЈг¬Ґв®ў, ў®§ЁЄ Ґв
ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ Є®«ЁзҐбвў® аЈг¬Ґв®ў". …б«Ё
Є Є®©-«ЁЎ® аЈг¬Ґв, Єа®¬Ґ ЇҐаў®Ј®, а ўҐ г«о, ў®§ЁЄ Ґв
ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "„Ґ«ҐЁҐ ®«м".
ЏаЁ¬Ґа:
(DEFUN / LST
((NULL LST)
(BREAK (LIST '/) '"Insufficient Arguments") )
((NULL (CDR LST))
((NUMBERP (CAR LST))
(reciprocal of (CAR LST)) )
(BREAK (LIST '/ (CAR LST)) '"Nonnumeric Argument") )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
((NULL (CDDR LST))
(quotient (CAR LST) and (CADR LST)) )
(APPLY '/ (CONS (quotient of (CAR LST) and (CADR LST))
(CDDR LST) ) ) )
(APPLY '- (CONS (BREAK (LIST '/ (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(/ 12 8) --> 1.5
(/ 12 5 -3) --> -0.8
(/ -4.7 1.3) --> -3.6153846
(/ 5) --> 0.2
ADD1 [n] Function
(ADD1 n) ў®§ўа й Ґв (+n1). Ґб«Ё ADD1 ўл§лў Ґвбп ЎҐ§
аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ
Є®«ЁзҐбвў® аЈг¬Ґв®ў".
ЏаЁ¬Ґа:
(DEFUN ADD1 (N)
((NUMBERP N)
(+ N 1))
(BREAK (LIST 'ADD1 N) '"Nonnumeric Argument") )
(ADD1 3) --> 4
(ADD 2/3) --> 1.6666666
(ADD1 -3) --> -2
SUB1 [n] Function
(SUB1 n) ў®§ўа й Ґв (-n1). …б«Ё SUB1 ўл§лў Ґвбп ЎҐ§
аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ
Є®«ЁзҐбвў® аЈг¬Ґв®ў".
ЏаЁ¬Ґа:
(DEFUN SUB1 (N)
((NUMBERP N)
(- N 1))
(BREAK (LIST 'SUB1 N) '"Nonnumeric Argument") )
(SUB1 3) --> 2
(SUB1 0.25) --> -0.75
(SUB1 -3) --> -4
INCQ [symbol,n] Special form
(INCQ бЁ¬ў®«) 㢥«ЁзЁў Ґв § 票Ґ <бЁ¬ў®« > Ё ў®§ўа й Ґв
®ў®Ґ § 票Ґ. …б«Ё <n> - зЁб«®, (INCQ бЁ¬ў®« n) ЇаЁЎ ў«пҐв <n>
Є § 票о <бЁ¬ў®« > Ё ў®§ўа й Ґв ®ў®Ґ § 票Ґ. …б«Ё <бЁ¬ў®«>
Ґ пў«пҐвбп бЁ¬ў®«®¬ muLISP, дгЄжЁп ЈҐҐаЁагҐв ЇаҐалў ЁҐ Ї®
®иЁЎЄҐ "ЌҐбЁ¬ў®«мл© аЈг¬Ґв".
ЏаЁ¬Ґа:
(DEFMACRO INCQ (SYM N)
((NUMBERP N)
(LIST 'SETQ SYM (LIST '+SYM N)) )
(LIST 'SETQ SYM (LIST 'ADD1 SYM)) )
(SETQ CTR 5) --> 5
(INCQ CTR) --> 6
CTR --> 6
(INCQ CTR 2) --> 8
CTR --> 8
DECQ [symbol,n] Special form
(DECQ бЁ¬ў®«) 㬥ми Ґв § 票Ґ <бЁ¬ў®« > Ё ў®§ўа й Ґв
®ў®Ґ § 票Ґ. …б«Ё <n> - зЁб«®, (DECQ бЁ¬ў®« n) ўлзЁв Ґв <n> Ё§
§ 票п <бЁ¬ў®« > Ё ў®§ўа й Ґвм ®ў®Ґ § 票Ґ. …б«Ё <бЁ¬ў®«> Ґ
пў«пҐвбп бЁ¬ў®«®¬ muLISP, DECQ ЈҐҐаЁагҐв ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ
"ЌҐбЁ¬ў®«мл© аЈг¬Ґв".
ЏаЁ¬Ґа:
(DEFMACRO DECQ (SYM N)
((NUMBERP N)
(LIST 'SETQ SYM (LIST '-SYM N)) )
(LIST 'SETQ SYM (LIST 'SUB1 SYM)) )
(SETQ CTR 5) --> 5
(DECQ CTR) --> 4
CTR --> 4
(DECQ CTR 2) --> 2
CTR --> 2
GCD [n1,n2,...],nM] Function
(GCD n1 n2 ... nM) ў®§ўа й Ґв ЁЎ®«миЁ© ®ЎйЁ© ¤Ґ«ЁвҐ«м
зЁбҐ« б <n1> Ї® <nM>. (GCD n) ў®§ўа й Ґв Ўб®«овго ўҐ«ЁзЁг <n>.
…б«Ё дгЄжЁп ўл§лў Ґвбп ЎҐ§ аЈг¬Ґв®ў, GCD ў®§ўа й Ґв 0 -
Ё¤ҐвЁдЁЄ в®а ¤ ®© ®ЇҐа жЁЁ.
GCD ®в ¤ўге зЁбҐ« Ґбвм ЁЎ®«м襥 Ґ®ваЁж ⥫쮥 楫®Ґ
зЁб«®, Є®в®а®Ґ ®¤Ё Є®ў® ¤Ґ«Ёвбп ®Ў ¤ ле зЁб« . GCD ®в ¤ўге
¤а®Ўле зЁбҐ« Ґбвм GCD ®в зЁб«ЁвҐ«Ґ©, ¤Ґ«Ґл© LCM ®в
§ ¬Ґ ⥫Ґ©.
ЏаЁ¬Ґа:
(DEFUN GCD LST
((NULL LST) 0)
((NULL (CDR LST))
((NUMBER (CAR LST))
(ABS (CAR LST)) )
(BREAK (LIST 'GCD (CAR LST)) '"Nonnumeric Argument) )
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
(APPLY 'GCD
CONS (/ (Integer-GCD (NUMERATOR (CAR LST))
(NUMERATOR (CADR LST)))
(Integer-LCM (DENOMINATOR (CAR LST))
(DENOMINATOR (CADR LST))))
(CDDR LST) ) ) )
(APPLY 'GCD (CONS (BREAK (LIST 'GCD (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(GCD 12 -16 20) --> 4
(GCD 14/15 8/9) --> 0.0444444
(GCD 0 5) --> 5
(GCD 0 0) --> 0
(GCD) --> 0
(GCD -7) --> 7
LCM [n1,n2,...,nM] Function
(LCM n1 n2 ... nM] ў®§ўа й Ґв Ё¬Ґм襥 ®ЎйҐҐ Єа ⮥ ¤«п
зЁбҐ« б <n1> Ї® <nM>. (LCM n) ў®§ўа й Ґв Ўб®«о⮥ § 票Ґ <n>.
…б«Ё LCM ўл§лў Ґвбп ЎҐ§ аЈг¬Ґв®ў, ў®§ЁЄ Ґв ЇаҐалў ЁҐ Ї®
®иЁЎЄҐ "ЌҐ¤®бв в®з®Ґ Є®«ЁзҐбвў® аЈг¬Ґв®ў". LCM ®в «ўге 楫ле
зЁбҐ« Ґбвм Ё¬Ґм襥 楫®Ґ, Є®в®а®Ґ Єа в® ®Ў®Ё¬ ¤ л¬ зЁб« ¬.
‚ ®ЎйҐ¬ б«гз Ґ, LCM ®в ¤ўге зЁбҐ« <n> Ё <m>, 楫ле Ё«Ё
¤а®Ўле, ¬®¦Ґв ®ЇаҐ¤Ґ«пвмбп Ї®б।бвў®¬ GCD Є Є (/ABS(*n m)) (GCD
n m)).
ЏаЁ¬Ґа:
(DEFUN LCM LST
((NULL LST)
(BREAK (LIST 'LCM) '"Insufficient Arguments") )
((NULL (CDR LST))
((NUMBER (CAR LST))
(ABS (CAR LST)) )
(BREAK (LIST 'LCM (CAR LST)) '"Nonnumeric Argument) )
((OR (ZEROP (CAR LST)) (ZEROP (CADR LST))) 0)
((AND (NUMBERP (CAR LST)) (NUMBERP (CADR LST)))
(APPLY 'LCM
CONS (/ (ABS (* (CAR LST) (CADR LST)))
(GCD (CAR LST) (CADR LST)))
(CDDR LST) ) ) )
(APPLY 'LCM (CONS (BREAK (LIST 'LCM (CAR LST) (CADR LST))
'"Nonnumeric Argument" )
(CDDR LST) ) ) )
(LCM 12 -16 20) --> 240
(LCM 14/15 8/9) --> 18.6666666 ; the result is 56/3
(LCM 0 5) --> 0
(LCM 0 0) --> 0
(LCM -7) --> 7
ABS [n] Function
…б«Ё <n> - зЁб«®, (ABS n) ў®§ўа й Ґв Ўб®«о⮥ § 票Ґ <n>.
ЏаЁ¬Ґа:
(DEFUN ABS (N)
((NUMBERP N)
((MINUSP N)
(- N) )
N )
(BREAK (LIST 'ABS N) '"Nonnumeric Argument") )
(ABS 4/6) --> 0.6666666
(ABS -3) --> 3
(ABS 0) --> 0
SIGNUM [n] Function
…б«Ё <n> - зЁб«®, (SIGNUM n) ў®§ўа й Ґв 1, -1 Ё«Ё 0 ў
§ ўЁбЁ¬®бвЁ ®в в®Ј®, пў«пҐвбп «Ё <n> Ї®«®¦ЁвҐ«мл¬, ®ваЁж ⥫мл¬
Ё«Ё г«Ґ¬.
ЏаЁ¬Ґа:
(DEFUN SIGNUM (N)
((NUMBERP N)
((ZEROP N) 0)
((PLUSP N) 1)
-1 )
(BREAK (LIST 'SIGNUM N) '"Nonnumeric Argument") )
(SIGNUM 7/2) --> 1
(SIGNUM 0) --> 0
(SIGNUM -0.2) --> -1
NUMERATOR [n] Function
…б«Ё <n> - ¤а®Ў®Ґ, (NUMERATOR n) ў®§ўа й Ґв зЁб«ЁвҐ«м <n>.
…б«Ё <n> - 楫®Ґ, в® (NUMERATOR n) ў®§ўа й Ґв <n>. —Ёб«ЁвҐ«м -
нв® ўбҐЈ¤ 楫®Ґ зЁб«®.
ЏаЁ¬Ґа:
(DEFUN NUMERATOR (N)
((NUMBERP N)
((INTEGERP N) N)
(the numerator of N) )
(BREAK (LIST 'NUMERATOR N) '"Nonnumeric Argument") )
(NUMERATOR 10/8) --> 5
(NUMERATOR 0.75) --> 3
(NUMERATOR -8) --> -8
DENOMINATOR [n] Function
…б«Ё <n> - ¤а®Ў®Ґ зЁб«®, (DENOMINATOR n) ў®§ўа й Ґв
§ ¬Ґ ⥫м <n>. …б«Ё <n> - 楫®Ґ, (DENOMINATOR n) ў®§ўа й Ґв 1.
‡ ¬Ґ ⥫м - нв® ўбҐЈ¤ Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ зЁб«®.
ЏаЁ¬Ґа:
(DEFUN DENOMINATOR (N)
((NUMBERP N)
((INTEGERP N) 1)
(the denominator of N) )
(BREAK (LIST 'DENOMINATOR N) '"Nonnumeric Argument") )
(DENOMINATOR 10/8) --> 4
(DENOMINATOR 0.75) --> 4
(DENOMINATOR -8) --> 1
FLOOR [n,m] Function
…б«Ё <n> - 楫®Ґ зЁб«®, (FLOOR n) ў®§ўа й Ґв <n>. …б«Ё <n> -
¤а®Ў®Ґ, FLOOR ў®§ўа й Ґв ЁЎ®«м襥 楫®Ґ зЁб«®, ® ¬ҐмиҐ, 祬
<n>. „агЈЁ¬Ё б«®ў ¬Ё, (FLOOR n m) гᥪ Ґв <n> Ї® Ё¦Ґ© Ја ЁжҐ.
…б«Ё <n> Ё <m> - зЁб« , (FLOOR n m) гᥪ Ґв Ї® Ё¦Ґ©
Ја ЁжҐ з б⮥ ®в ¤Ґ«ҐЁп <n> <m>. (FLOOR n m) нЄўЁў «Ґв®
(FLOOR (/n m)). …б«Ё <n> (в.Ґ. ¤Ґ«ЁвҐ«м) - ®«м, ў®§ЁЄ Ґв
ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "„Ґ«ҐЁҐ ®«м".
ЏаЁ¬Ґа:
(DEFUN FLOOR (N M)
((NUMBERP M)
((ZEROP M)
(BREAK (LIST 'FLOOR N M) '"Zero divide") )
(FLOOR (/ N M)) )
((NUMBERP N)
(INTEGERP N) N)
(the largest integer less than N) )
(BREAK (LIST 'FLOOR N M) '"Nonnumeric Argument") )
(FLOOR 7.3) --> 7
(FLOOR -3.5) -->-4
(FLOOR 8 3) --> 2
(FLOOR -15/4 2) -->-2
CEILING [n,m] Function
…б«Ё <n> - 楫®Ґ, (CEILING n) ў®§ўа й Ґв <n>. …б«Ё <n> -
¤а®Ў®Ґ, CEILING ў®§ўа й Ґв Ё¬Ґм襥 楫®Ґ зЁб«®, ® Ў®«миҐ,
祬 <n>. „агЈЁ¬Ё б«®ў ¬Ё, CEILING гᥪ Ґв <n> Ї® ўҐа奩 Ја ЁжҐ.
…б«Ё <n> Ё <m> - зЁб« , (CEILING n m) гᥪ Ґв Ї® ўҐа奩
Ја ЁжҐ з б⮥ ®в ¤Ґ«ҐЁп <n> <m>. (CEILING n m) нЄўЁў «Ґв®
(CEILING (/n m)). …б«Ё <m> (в.Ґ. ¤Ґ«ЁвҐ«м) - ®«м, ў®§ЁЄ Ґв
ЇаҐалў ЁҐ Ї® ®иЁЎЄҐ "„Ґ«ҐЁҐ ®«м".
ЏаЁ¬Ґа:
(DEFUN CEILING (N M)
((NUMBERP M)
((ZEROP M)
(BREAK (LIST 'CEILING N M) '"Zero divide") )
(CEILING (/ N M)) )
((NUMBERP N)
(INTEGERP N) N)
(the smallest integer greater than N) )
(BREAK (LIST 'CEILING N M) '"Nonnumeric Argument") )
(CEILING 7.3) --> 8
(CEILING -3.5) --> -3
(CEILING 8 3) --> 3
(CEILING -15/4 2) --> -1
Соседние файлы в папке Filp