Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lisp / Filp / LISP8

.TXT
Скачиваний:
20
Добавлен:
15.06.2014
Размер:
30.22 Кб
Скачать

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