����i� 6

��p���� �����i�

� �i��i � ������� ������, ��� ���� ������� ������. ������ ����� ��������� �� ��������� �����i�. ��� ����� �����i��� �������� �����i� ������������� �����i�, ������� �� �������� ������, �� ��i�� �������� �������� ������. ���������� �� ����i�� �� �������i.

������. � ������� a:array [0..k] of integer �� b:array [0..l] of integer ����i������� ����i�i���� ���� ���������i� �������� k �� l. ��������� ����� c:array[0..m] of integer ����i�i������ �� �������. ����� k,l,m - ���������i, m = k+l. ������� ������ � i������� i �i����� ����i�i��� ��� x � ������i i.

����'����. ����'���� �i�� �����i �� ������i �� ��������� ������:
for i := 0 to m do c[i] := 0;
for i := 0 to k do
     for j := 0 to l do
         c[i+j] := c[i+j] + a[i] * b[j];
������ ����i�i���i� ���������� ���������������� ������� �i����i��� �������. ����� lst1 �� lst2 - ������ ����i�i���i� ������� � ����i ���������i�. ����� �����i� (MULTPOL lst1 lst2) ������� ������ ����i�i���i� ������� ���i���� ���������i�. ���������, ���i��i ���������� (x3+2x2+1) �� (x2-4x-1) ���������� �������� lst1 = (1 2 0 1), lst2 = (1 -4 -1). ����������� �� �������� ���� ��������� x^5 - 2*x^4 - 9*x^3 - x^2 - 4*x -1, ���� ������������� ������� lst3 = (1 -2 -9 -1 -4 -1). �������� ��� �����i��� ������ �������� k �� l (���� �� �� �������� �� �� ���������). ��� ����� �����i��� ������ ������ ������� �����i� lst1 �� lst2. �� ������� �����i� (LENGTH lst):
(DEFUN LENGTH (lst)		(DEFUN GEN0 (n)
((NULL lst) 0)				((ZEROP n) NIL)
(+ 1 (LENGTH (CDR lst)))  )		(CONS 0 (GEN0 (- n 1)))  )
������ ������� �����i� lst1 �� lst2 (k �� l �i����i���), �� ����� ������� ������������� ������ lst3 (m=k+l). �����i��� ����������� ������ lst3, ���� ���������� � m �������i�, ������ � ���� ���i���� 0. �� ������� �����i� (GEN0 n).

�����i� (mas lst n) ������� n-�� ������� ������ lst. �����i� (CHANGE lst n value) ������� ������ lst, � ����� n-�� ������� ����� �������� value.
(DEFUN MAS (lst n)		(DEFUN CHANGE (lst n value)
((ZEROP n) (CAR lst))		((ZEROP n) (POP lst) (PUSH value lst))
(MAS (CDR lst) (- n 1))  )	(CONS (CAR lst) (CHANGE (CDR lst) (- n 1) value))
���i �����i� MULTPOL, ��� �������� �� ������i, �� �i��i ������ ���������� �������:
(DEFUN MULTPOL (lst1 lst2)
(SETQ k (LENGTH lst1) l (LENGTH lst2) lst3 (GEN0 (+ k l)))
(SETQ i 0)
(POP lst3)
(LOOP
  ((= i k) lst3)
  (SETQ j 0)
  (LOOP
   ((= j l))
   (SETQ lst3 (CHANGE lst3 (+ i j) (+ (MAS lst3 (+ i j)) (* (MAS lst1 i) (MAS lst2 j)))) )
   (INCQ j)   )
(INCQ i)  )  )
���������� muLisp �� ����� ���������� �����i� MAKE-LIST, ��� ����� ��������������� ��� ��������� �����i� �������� ����i��. �����i� (MAKE-LIST n ��'��� ������) ������� ������ � n �������i�, ������ � ���� ������ �������� ��'����, �������i �� ������. ���� �� ������ ������ ��������, �� �� ���������� n = 0. ���� ������ �������� �� ������, �� ��������� ��'��� = NIL.
$ (MAKE-LIST 3 '(q w))	$ (MAKE-LIST 4)		$ (MAKE-LIST 3 5 '(2 3))
  ((q w)(q w)(q w))	(NIL NIL NIL NIL)	(5 5 5 2 3)
�������� �����i� ����� ��������� ��������� ����� (i�'� ��i���� �� MAKE-LST):
(DEFUN MAKE-LST (N OBJ LST)
((AND (INTEGERP N) (PLUSP N))
      (CONS OBJ (MAKE-LIST (SUB1 N) OBJ LST)) )
LST )
������ (OBLIST) �� �� �� ��������i�, ������� �� ������� ������ �������� �� �������� ������ ������i� � ������i. ������� ����������i � ���� �������, � ����� ���� ��������i ��� ����������i ���������� �����i���: ���i ������i ����������i ��i�� �i� ������.

������ 1. ���� ��������� ������ ����� x. ������ �i���i��� �i���� ����� ����� �������i� ����� ������. H������� �����i� (FIND_DIFF x)
����i���: ������ ����� �� 1 �i���� �� �i���i��� ��� ����� i �� 1..n-1, ��� ���� x[i] <> x[i+1].
(DEFUN find_diff (x)
	((NULL (CDR x)) 1)
	(IF (/= (CAR x) (CADR x)) (+ 1 (find_diff (CDR x))) (find_diff (CDR x)))
)
������ 2. ���� ����� �i��� ����� x. ������ �i���i��� �i���� ����� ����� �������i� ����� ������. �i����, �� ��i �������� ������ - ����� �i� 1 �� n. ������ ��i��� O(n). H������� �����i� (FIND_NUM_N n x).
����i���: ����p��� �����i���� ����� lst ����� �i� 1 �� n �� �p� ������i �������� i ��i������ �� ������� ������� ������ x[i].
(DEFUN find_num_n (n x)
(SETQ a (GEN0 n))
(LOOP
        ((NULL x))
        (SETQ a (CHANGE a (CAR x) (+ 1 (MAS a (CAR x)))))
        (SETQ x (CDR x))
) a )
������ 3. �i��� ���� p������� �� ���� ������� � ���� ������. ������� ���� �i��� �� �i���� �� �. ������ �i���i��� �i���� ����i�, �� ���� �i��� ���� ������ ���� �i� ������� �� �i���.
�������.
             �=3, �=2
          ������i �����:
	          1,1,1
	          1,2
	          2,1
�i����i��:3.
����i���: ��������� ����'���� �����i ��p������ ������� ����� N �� ��i���i ���� ����� �����, ��� ������ ������� � ���i ��� �� �i����� �� k. ��������, ��� ����� �������i� ���� ������, �������� ���� �p������ �� �����, �� ������� ������i� � p������i � i��������, ���� �� �i� �i����i�� �i��i� ����i�������i �p��i� �i���.
��������� ����� S(i) �i���i��� �i���� ����i�, �� ���� �i��� ���� ������ ���� �i� ������� �� �����i� � ������� i. �p��������, �� ��� ���i������ j �i� 1 �� i �i���i �������� ������� S(j). ������ ������ � ���������i ������� ���������� �������� S(i+1), ����p��������� �������� �i����� �������. ����� ���i����, �� � �����i� � ������� i+1 �i��� ���� ���p����� i� �����i� i, i-1,...,i-k+1. ���� S(i+1)=S(i)+S(i-1)+...+S(i-k+1).
����� �����, ���������� ����i����� �������� ������� S(1), S(2), ..., S(N) �� �������� ���� ��������, ��p����� �������� S(N), ��� i ������ �������� �i���i��� �i���� ����i�, �� ���� �i��� ���� ������ ���� �i� ������� �� �����i� � ������� N.
(DEFUN FISHKA (n k)
        (F n k '(1))
)

(DEFUN F (n k lst)
(print lst)
((= (+ n 1) (LENGTH lst)) (CAR lst))
(SETQ l lst i 0 summa 0)
(LOOP
        ((OR (NULL l) (= i k)))
        (INCQ summa (CAR l))
        (POP l)
        (INCQ i)
        )
(F n k (CONS summa lst))
)
������ 4. � ���� � ��i�����. � ����i (m,n) ����������� �i���. ���� ���� p������� ���� � ���� ���p�����: ��i�� (��������� ���p������ m �� 1) ��� ���� (��������� ���p������ n �� 1). H������� �����i� (GO m n), ��� ��������� �i���i��� pi���� ����i� � ��i����� (m,n) �� ��i����� (0,0).
����i���: �i���i��� ����i� � ����� (m,0) �� (0,n) �� ���� (0,0) ��pi���� 1, �� m<>0, n<>0. �i���i��� ����i� � ���� (m,n) ��pi���� ���i �i������i ����i� � ���� (m-1,n) �� ���� (m,n-1). ���� ��p�� f(m,n) ��������� ������ � �����i �i���i��� ����i�, ��
	f(m,n) = f(m-1,n) + f(m,n-1), n>0,m>0.
	f(m,0) = f(0,n) = 1, m>0, n>0.
	f(0,0) = 0.

�����i� ����i�

�����i� ����i� ���������i ��� ������ � ��������. ���� ������������ ��������� ������ �i������i ������i� ��� ���������� ������� - ���i������, ������ �� ������������ P - i��� ������i� �� �����. P - i�'� ����� ��i������� � �i����i�����i �� ������� ������� �������� (�������� ��i��� *PRINT-BASE*).

1. UNPACK atom. ������� ������ ������i�, P - i���� ������� � ���� ����������� � ���������� ������i� ����� atom. ���� atom �� � ������, �� ����������� NIL.
(DEFUN UNPACK (ATM)
((SYMBOLP ATM)   (������ ������i�, P - i���� ���� ����������� � ���������� 
                  ������i� ����� ATM) )
((NUMBERP ATM)   (������ ������i�, P - i���� ���� ����������� � ���� ����� ATM) ) )

$ (UNPACK 'abcde)	$ (UNPACK 216)	$ (SETQ *PRINT-BASE 16*)
(a b c d e)		(\2 \1 \6)	$ (UNPACK 216)
			 		(\0 \D \8)
2. PACK list. ������� ������, P - i�'� ����� �����i����� �i ��������� P - i��� ����i� � ������ list. ��� ���������� P - i��� ����� ��������������� ������� ������� ��������. �����i� PACK ������ ������� ������, ���i�� ���� P - i�'� ���������� �i���� � ����������� �����.
(DEFUN PACK (LST)
((ATOM LST) "")
((SYMBOLP (CAR LST)) (������, P - i�'� ����� ���������� � P - i���i (CAR LST),
                                  ��������� � (PACK (CDR LST))) )
((NUMBERP (CAR LST)) (������, P - i�'� ����� ���������� � ���� � ����������� 
                                  �����������i (CAR LST), ��������� � (PACK (CDR LST))) )
(PACK (CDR LST)) )

$ (PACK '(a b c d e)		$ (PACK '(\7 \3 \1)	$ (PACK '(Q \7 \A \1))
abcde				|731|			Q7A1

$ (PACK '(23 56)		$ (PACK '("" 3 ||))
|2356|				\3
3. PACK* atom1 ... atomN. ������� ������, P-i�'� ����� ���������� �i ��������� P-i��� ����i�. �� �����i� � ������� ����i�� PACK, ���i���� ���� ������ �� �i ������� ����i�, � � ����-���� �i���i��� ����i�.
(DEFUN PACK* LST
(PACK LST) )

$ (PACK* 'a 'b 'c)		$ (PACK 4 'QW 'T)
ABC				|4QWT|
4. CHAR atom n. ���� atom - ������ ��� �����, � n - ���i�'���� �i�� �����, �����i� CHAR ������� ������, P - i�'� ����� � n-�� ������ P - i���i atom, ������� �i��i� ������i� ���������� � 0. �����i� ������� NIL ���� n �� ���� i �� ������� �i�� �����, ��� ���� P - i�'� ����� atom �i����� ����� �i� n ������i�.
(DEFUN CHAR (atm n)		
((ATOM atm) (NTH n (UNPACK atm)) ) )

$ (CHAR 'ABCDE 3)	$ (CHAR 12345 0)	$ (CHAR 'qwe 8)
D			\1			NIL
5. SUBSTRING atom n m. ���� atom - ������ ��� �����, n �� m - ���i�'���i �i�i, n<=m, �� �����i� SUBSTRING ������� ������, P - i�'� ����� ���������� � ������i� P - i��� ����� ��������� � n-��� �� m-���, ������� �i��i� ������i� ���������� � 0. ���� n<=0, �� ��������� �� n=0. ���� m �� �������, ��� ������ �� 0 �� �i���� �� �i���i��� ������i� � P - i���i �����, m ��������� �i���� �i������i ������i� � P - i���i �����. ���� n>m ����������� NIL.
(DEFUN SUBSTRING (atm n m)
	((AND (ATOM atm) (INTEGERP n))
	((MINUSP n) (SUBSTRING atm 0 m))
	(PACK (SUBLIST (UNPACK atm) n m))

$ (SUBSTRING 'ABCDEFG 2 4)	$ (SUBSTRING 'ABCDEFG 3)
CDE				DEFG
$ (SUBSTRING 123456 3)		$ (SUBSTRING 'ABCDEFG 0 3)
|456|				ABCD
6. STRINGpr atom1 atom2 flag, �� pr - ����-���� �������� <, >, <=, >=, =, /=. �i��������� �����������i��� ���i������ P - i��� ����i� ��i��� � ���������� pr. ���� ���� ���i���� NIL, ���i������ �i��������� � ����������� ���i����. ���� ���� �� ������, �i� ��������� �i���� T. �����i� STRING= ������� ��� T ��� NIL. I��i �����i� ���������� ��� NIL, ��� ����� �����i� ������� �������, ��������� � ����� P - i���� �� ��i��������.
$ (STRING= 'ABC 'ABC)	$ (STRING 'ABC 'ABC NIL)
T			T
$ (STRING= 'Abc 'AbC)	$ (STRING= 'Abc 'AbC NIL)
T			NIL
$ (STRING= |100| 100)	$ (STRING< 'ABC 'AZC) 
T			1    
$ (STRING< 'AZC 'ABC)	$ (STRING>= '123 '123)
NIL			3
7. STRING-UPCASE atom. ������� ������, P - i�'� ����� ��i����� � P - i����� �����, ��� ��i ���� �i���� �������������� � �����i. ���� atom �� � ������, ����������� NIL.
$ (STRING-UPCASE "Lisp Is A Language")	$ (STRING-UPCASE '(a s d))
  |LISP IS A LANGUAGE|			NIL
8. STRING-DOWNCASE atom. ������� ������, P - i�'� ����� ��i����� � P - i����� �����, ��� ��i ���� �i���� �������������� � �������i. ���� atom �� � ������, ����������� NIL.
$ (string-upcase |This is A TEXT|)	$ (string-downcase |This is A TEXT|)
|THIS IS A TEXT|			|this is a text|

$ (STRING-UPCASE 'i)			$ (STRING-DOWNCASE 'I)
I					\i
9. FINDSTRING atom1 atom2 n. ������� ����� �����i� ������� ��������� P - i���i �����1 � P - i�'� �����2. ���� n - ���� ��� ������� �i��, ����� ���������� � n-��� ������� �����2. ���� P - i�'� �����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))) )
((���� ATM1 � �i������� ATM2)
    (�����i� ATM1, �� ��i� ���� ������ �����i������ � ATM2) ) )

$ (FINDSTRING 'BC 'ABCDEFG)	(FINDSTRING 'abc 'abdeabcde)
1				4
10. PRINT-LENGTH atom. ������� �i���i��� ������i� � P - i���i ����� � ����������� ������� ����������� ��i���� *PRINT-BASE* �� *PRINT-ESCAPE*.
$ (DEFUN PRINT-LENGTH (atm)		
((ATOM atm) (LENGTH (UNPACK atm)))	

$ (PRINT-LENGTH 'Mulisp)
6

$ (PRINT-LENGTH -156)		$ (PRINT-LENGTH NIL)
4				3
���������� �����i�, ��� ��� �������� ����� ��������� ����������� �i���i��� �i���, ��� � ����� ��� �i����. ��������� ����, ���� ���������� � �i���� �� �����. ���������, ��� ����� a22eeerty ��������� (e . 3).
(DEFUN symmax (atm)					$ (symmax 'a22eeerty)
((NOT (ATOM atm)) NIL)					(e . 3)
(SETQ lst (UNPACK atm) endel (ASCII 0) endct 0)		$ (symmax 'nil)
(LOOP							(n . 1)
  ((NULL lst))						$ (symmax 1222334)
  (SETQ el (CAR lst) ct 0)				(\2 . 3 )
  (LOOP
  ((NOT (EQL (CAR lst) el)))
  (POP lst)
  (INCQ ct) )
  (IF (> ct endct) (SETQ endct ct endel el)) )
(CONS endel endct) )

��������

1. �������� �����i�:
�) (GORNER n lst x) - ���������� �������� ���������� ������� n � ����i x, ����i�i���� ����� �����i � ������ lst.
�) (APPL lst1 lst2) - ������ ���� �i����������� �����i� � �i����������� ������.
�) (SCALAR lst1 lst2) - ��������� ������� ���� ������i�, ���������� ���� �����i ��������.

2. ���� ������ � n ����� �� ���������� ����� m < n. ��� ����� ����� � m �������i�, �� ����������� �����, ��������� �� ����. ������ ������ � ��i� �������� ���. �������� �i���i��� �i� ������� ���� O(n).
�������: (7 1 4 2 3), m=3. S= (12 7 9).

3. ������ LST ����i�� ������������ ����� 1,2,..,n. ��������� �i���i��� ������������.

4. ������ LST ����i�� ������������ ����� 1,2,..,n. ��������� �i���i��� ����i� � �����������i. ���������, 152463 = (1)(5632)(4) - ��� �����.

5. ����������� �������� ��i� ����������� ����� �i� 0 �� n. ����'����� ����� �� ������ �������������� �i���� ��������� �� �i��i�����, ��� ����� �i���i��� �i� ������� ���� O(n).

6. ��������� �����i�:
�) (MATR_GET m i j) - ��������� �������� m[i][j], �� m - ������� n * n, i<=n, j<=n.
�) (MATR_CHANGE m i j value) - ��������� �������, � ��i� m[i][j]=value.
�) (GENMATR0 i j) - ����������� ������� ������� i * j.
�) (PMATR m i j) - ����������� ������� m �� ������� i * j (���i� �����������).

������ 1. (1 ���). H������� �����i� �������� ��p������� (QUICK_SORT lst). ������ ��i��� - O(n*logn).

����i���: ����p������� ���������� �����i� (SPLIT <������>), ��� p������ ������ �� ��� ������ ���������i. ��������� ������ ��� ���� ����� ��������. �����i� SPLIT ������� ����� �������� ������.
$ (SETQ a '(1 2 3 4 5 6))	$ a
$ (SPLIT a)			(1 2 3)
(4 5 6)
������ 2. (1 ���). H������ ������, ��� p���, ����� N �����, ���� � ���� ������� �������, � i��i �����������i �� ������������ ���i���� ������� �i� 2 �� N. �i���� ������ p��� �� �, ��������� � �����. ���, �� ���� ���������� �i���, �������� � ����. �i��� ������������ � �������� ������ (��� ����� �����i � ���� �� p�������� i ��� �� ��� �i�, ���� �� ���������� ���� ������. ��������� ���������� ����� �i�� ������. H������� �i����i��� �����i� (COUNT_MAN m n).
����i���: ���p������ ������ (1 2 3 ... n) �� ������� �i������� i=1,2,... . ���� i mod m = 0 �� ������� ������ ������, i����� �p������ ������ �� �i��� ������.

������ 3. (1 ���). H� ��i���� ���i� ���i������� ����� N! = 1*2*...*N. H������� �����i� (FACT0 N). ���������� p����� �����i� ���� �p������� �� ������ ��p���� N = 10^6. �������� �����pi��� ����� N p������� �� �p���. ��������� �������p����� �����i�, ��� p��� �i���i��� ���i�. ����i���: �i���i��� �����, ����� ���i������� ����� N! ��pi���� �i������i ����� 5 � p������i ����� N! �� �p���i ��������.(���p� 0 �� �i��i ���� �'�������� ���� ��p����������� 2 �� 5, � ���i���� �������i� 2 �i���� �� 5, �� ��� p���'���� �����i ��������� �i�p������� �i���i��� 5).
H��p�����: 30! = 30* ...* 25 *...* 20 * ... * 15 * ... * 10 * ... * 5. ������ 7 �'��ip�� (25 �� ��i �'��ip��, ��i i��i �������i ����� - �� ���i�). ���� 30! ���i������� 7 ������.

������ 4. (�������� ������, 1 ���). ���� ����i����i��� �i��� ����� x[1],..., x[n]. ������ ����������� ������� �� �p������� �i�����i�������i. H������� �����i� (MAX_SEQUENCE lst). ������ ��i��� O(n*log(n)).

������ 5. (�������� ������, 2 ����). � ��� �������� ���p� 1. H� ��p���� �p��i p����� ��� ��p����p�� �� �� ��p� ���p 0 1. H� ������� ���������� �p��i ���� ���i��� ������� 0 ������ ��p� 1 0, � ���i��� 1 - ��p� 0 1. ����� ����� �� �p����� �p��i �i����� 1 0 0 1, �� �p������ - 0 1 1 0 1 0 0 1 i ��� ���i. ��i���� ����i��������� � ���i� (����i����i��� � ���i� ������������ ��� i �i���� ����, ��i ������ ��p��) ���� �������� �� n-��� �p��i? H������� �����i� (EOM n). ������ ��i��� ����p���� - O(log N).
����i���: �� ��p�������� ������ � 0 �� 1 (���i���� ����� N ���� ���� ���� �������), � ������ �����i� ��� ����� �������� �p���� �� ���p��p������� ��. ��� ��������� ������� N ����� ��p����� ������ ��� ��p��ip�� �p���������i p����� �������� �����i�. ����'����: �p� ���i �i���� �� ������ ������ ��p��, ���i���� ���i ��� � ��� ������i ����p����� � ���i�� ����p����� ���p�, �� ����p����� �p������ ��p����p����. ���� �� n-��� �p��i ������ �i�p��������� �i���i��� �����, �� ������ ��p��. �p� ��p����p���i ����� ��i 0 ��i 1 �� ����� ��p� 00. ���� ����i���i� 00 ��p���� ���� ����i���i� 01 (����� � i���� ����i���i� 00, 10, 11 �� �i�������). ����, �i���i��� ��p ����� (EOM n) �� n-��� �p��i ��pi���� �i������i ��p 01 �� n-1 �p��i. n-�� �p�� �i����� 2^n ���p, ��p�� ���� 2^(n-1) ����� (���� �� �� �p������� ��p����p���� �i���i��� ����� �� ������� � ����i�������i ���������� ���������). �i��� ������� ���� �� n-��� �p��i ����� 0 � (EOM n) ��������, � ������� ����� � 2^(n-1) - (EOM n) ��������. ����� �� n-��� �p��i 2^(n-1) - (EOM n) ����i���i� 01. �� i �i���� �� ������� ����i���i� 01 ����� �� (n+1) - ��� �p��i ���� � �i���i��� 00. ����� EOM (+ n 1)) = 2^(n-1) - (EOM n). �p� ����� (EOM 1) = 0. ����'������ �� pi������, ����: (EOM n) = (2^(n-1)+(-1)^n)/3. ���i���� ���p��i� �i�������� �� ������� a^N ����� �������� �� ��� O(logN), �� i ������ ��i��� ���������� ����p���� ��pi���� O(logN).