����i� 7

��ॢ�

����祭��. ��ॢ�� ����������� ��� ��� 横�i�, � 类�� ���i���� ��६� ���設�, �� ��������� ��७�� ��ॢ�.

�������� ⨯� ��ॢ� �㤥�� ������� ��� NIL (��஦�� ��ॢ�), ��� �������� (���祭�� . (�i��� ᨭ . �ࠢ�� ᨭ)), �� �i��� � �ࠢ�� ᨭ� � ������ࠬ� ⨯� ��ॢ�. ���ਪ���, ��ॢ� 瘟 ᪫�������� � 󤨭��� �������, �㤥 ��� �����: (Element . (NIL . NIL)).

�㭪�i� INSEL ��⠢��� ������� n � ��ॢ� tree �� ����㯭�� �ࠢ����: ��� ��ॢ� ��஦��, � �⢮�� ��ॢ� (n . (NIL . NIL)). I���� ��⠢�� ������� � �i�� �i���ॢ� �� n ���� �� ���祭�� ���筮� ���設� ��� � �ࠢ� �i���ॢ�, �� �i���. �㭪�i� INSL �⢮��� �� ᯨ᪮� ������ ��ॢ�, ���設��� 类�� ����� ��i ������� ᯨ᪠. ��ॢ� ����������� �����稬, ��i�쪨 �� ��室i ���� ��i�� ���ࠢ� �� ��ਬ�� �i���⮢���� ᯨ᮪ �������i� � �����箬� ���浪�.

 
(DEFUN insel (n tree)
((NULL tree) (CONS n (CONS NIL NIL)))
((> n (CAR tree)) (cons (car tree) (cons (cadr tree) (insel n (cddr tree)))))
(cons (car tree) (cons (insel n (cadr tree)) (cddr tree)))  )
 
(DEFUN INSL (lst tree)
((NULL lst) tree)
(SETQ tree (insel (car lst) tree))
(INSL (CDR lst) tree)  )

����㯭i ��i �㭪�i� ��������� ���i� ��ॢ�: PUD (Print Up-Down) - ���i� ���� ����, PLR (Print Left-Right) - ���i� ��i�� ���ࠢ�.

 
(DEFUN PUD (tree)                           (DEFUN PLR (tree)
((NULL tree))                                 ((NULL tree))
(PRIN1 (CAR tree)) (SPACES 3)                 (PLR (CADR tree))
(PUD (CADR tree))                             (PRIN1 (CAR tree)) (SPACES 3)
(PUD (CDDR tree))  )                         (PLR (CDDR tree))  )

�㭪�i� REVT (Reverse Tree) ������ ��ॢ�: ����� �ࠢ� �i���ॢ� ��� �i��� �i���ॢ�� i �������.

 
(DEFUN REVT (tree)
((NULL tree) NIL)
(CONS (CAR tree) (CONS (REVT (CDDR tree)) (REVT (CADR tree))))  )

�ਪ����

 
$ (SETQ a (INSL '(5 1 7 3 9 2 4 8 10) NIL))   $ (SETQ b (REVT a))
$ (PLR a)                                     $ (PLR b)
1 2 3 4 5 7 8 9 10 T                          10 9 8 7 5 4 3 2 1

�㭪�i� HEIGHT ������ ����� ��ॢ�. �����⨬���, � ���� ��஦�쮣� ��ॢ� ���i���� 0. ���� ����஦�쮣� ��ॢ� ���i���� ���ᨬ㬮�i �i� ���⠬� �i���� � �ࠢ��� �i���ॢ ���� �������. (HEIGHT a) = 4, �� a ���� � ����।�쮣� �ਪ����.

 
(DEFUN HEIGHT (tree)
((NULL tree) 0)
(MAX (ADD1 (HEIGHT (CADR tree))) (ADD1 (HEIGHT (CDDR tree))))  )

 

�㭪�i� �����i����

�㭪�i� �����i���� ��������� ��ॠ����i� ����i����i� � �������� ����� ���� �ணࠬ㢠��� �i�.

1. RPLACA . �i��㢠����� ���i�� CAR-������� ��'��1 ����i������ �� ��'��2, ����������� �����i������� ��'��. ��� ��'��1 - ᯨ᮪, � ���訩 ������� ᯨ᪠ ���i������� �� ��'��2. ��� ��'��1 - �i��୥ ��ॢ�, � ���� �i��� ᨭ ���i������� �� ��'��2. ��� ��'��1 - ᨬ��� (a�� �� NIL), � ᨬ��� �਩��� ���祭�� ��'��2.

 
$ (SETQ a '(a b c d))  $ (SETQ b '((1 . 2) . (3 . 4)))       $ (SETQ s 'd)
$ (RPLACA a '(11 12))  $ (RPLACA b 5)                 $ (RPLACA s 'g)
((11 12) b c d)        (5 . (3 . 4))                  Val(s)=d,Val(d) = g

2. RPLACD . �i��㢠����� ���i�� CDR-������� ��'��1 ����i������ �� ��'��2, ����������� �����i������� ��'��. RPLACA � RPLACD � �᭮����� �㭪�iﬨ, �i ��i����� �i���� �������� ᯨ�i�. �� ����� �।�⠢�� �१ 㧠���쭥�� �㭪�i� ��᢮�� SETF:

 
(RPLACA x y)   - � (SETF (CAR x) y)
(RPLACD x y)   - � (SETF (CDR x) y)

3. NSUBSTITUTE . �����i������� ���� �����鮣� �i��� ᯨ��. ���i ������� ���i������� �� ���i �� ��쮢��� �i��i ����������i, ��� 直� ��ॢiઠ �� ���� �� ���i���� NIL. ��� ��� �� �������, � �� �����祭�� ��� = EQL.

 
$ (NSUBSTITUTE 1 3 '(4 5 6 (3 3 4 5) 3 4 1))
(4 5 6 (3 3 4 5) 1 4 1)
 
$ (NSUBSTITUTE 10 5 '(4 5 6 3 4 1) >) $ (NSUBSTITUTE 10 5 '(4 5 6 3 4 1) 

4. NSUBST . �㭪�i� ����� � i NSUBSTITUTE, ��� �����i������� ���� ��i� �i��i� ᯨ��.

 
$ (NSUBST 1 3 '(4 5 6 (3 3 4 5) 3 4 1))
(4 5 6 (1 1 4 5) 1 4 1)

5. DELETE . ������ �i ᯨ�� ��i �������, ��� 直� ������ ��ॢiન �� ��⮬ �� ���i���� NIL.

 
$ (DELETE 3 '(1 2 3 4 3 2 1))
(1 2 4 2 1)

6. NREVERSE . ������ ������� ᯨ��, �祯����� � ��'�⮬.

 
$ (NREVERSE '(a b c d))        $ (NREVERSE '(1 2 3 (1 2 3) 4 5 6) '(1 2 3))
(d c b a)              (6 5 4 (1 2 3) 3 2 1 1 2 3)

7. NBUTLAST . ��� n - ��� ��� ����⭥ �i��, � �㭪�i� NBUTLAST ������� ᯨ᮪ ��� n ��⠭�i� �������i� (�i��㢠����� ���i�� n-�� ����, ���⮣� � �i��� ᯨ�� �� NIL). ��� ��㣨� ��㬥�� �� �������, � �� �����祭�� n=1.

 
$ (NBUTLAST '(a b c d e))      $ (NBUTLAST '(a b c d e) 3)
(a b c d)                      (a b)

8. NCONC ... . ����������� ᯨ᮪, 直� ᪫�������� � �������i� ᯨ�i� - ��㬥��i� � ��������� ���浪�. �i��㢠����� �����i���i� ��⠭�i� CDR-�������i� ᯨ�i�. ��� ������� ������� (NCONC list list), �� list - ���-直� ᯨ᮪, � १���⮬ �㤥 ����⭨� ᯨ᮪, ���� ���㤮�� 类�� �㤥 ���i�祭���.

 
$ (NCONC '(1 2) '(3 4) '(5 6 7)) 
(1 2 3 4 5 6 7)

9. SPLIT . �������� ᯨ᮪ �� ��� ᯨ᪨ ���।��i. ���祭�� ᯨ�� ��� ���� ���� ��������. �㭪�i� SPLIT ������� ���� �������� ᯨ��.

 
$ (SETQ a '(1 2 3 4 5 6))             $ a
$ (SPLIT a)                           (1 2 3)
(4 5 6)

10. SORT . ���������� ������� ᯨ�� �� �᭮�i ����.

 
$ (SORT '(2 5 3 4 1 6 8 9 7) >)
(9 8 7 6 5 4 3 2 1)

�������� 1. ����� �i��i��� ����i� � �������� ��ॢi.
2. ����� �।�� ��䬥�筥 �ᥫ, �i ���室����� � ���設�� ��ॢ�.
3. ������ �㭪�i� 袨����� ���㢠��� QSORT.

����� � 䠩����

�� �����祭�� �� �����i� ��⮪����� ����� (CIS - Current Input Stream) ������� ���᮫�.

1. ��� �⠭�� ����� � ��i����� ��⮪� ������⮢���� �㭪�i� READ. �i�� ��������� ������� (SETQ a (READ)) �� ������i ����� � ���᮫i ��ࠧ, 直� �㤥 ���⠭� � ��᢮� ��i��i� �. �� �쮬� �� �㤥 ������� ���i�쪠 ��'��i�, � ��i��i� � �㤥 ��᢮� ���訩 ��'��. ���ਪ���, �� �� ������: as bf gh, � ��i��� a �਩�� ���祭�� as. ��� �� ��� ����� ᯨ᮪ (᪫����� ��'��), � ���� �����i��� ������ � ��㣫�� �㦪��: (as df gh).

2. �㭪�i� (CLEAR-INPUT) ����� ���� �����. � ���-类�� ������� ����������� NIL.

3. �㭪�i� (READ-LINE) ��� ������� � CIS ���� �� �㤥 ���⠭� ᨬ��� ���室� �� ����� �冷� (). ����������� ᨬ���, �-i�'� 类�� ᪫�������� � ��i� ���⠭�� ᨬ���i� � �i �㫨 ஧�订��i � ��i����� �浪�, ���i� .

4. �㭪�i� (READ-CHAR) ��� ����㯭�� ������� � CIS � ������� ����.

5. �㭪�i� (UNREAD-CHAR) ������� � CIS ��⠭�i� ���⠭�� ᨬ���.

6. �㭪�i� (LISTEN) ������� T �� CIS �� ��஦�i�, � NIL �� �� �i�諨 �� �i��� 䠩��.

7. �㭪�i� (OPEN-INPUT-FILE "") � (CLOSE-INPUT-FILE "") ������⮢������ ��� �i������ � ������� 䠩�� ��� �����.

8. �㭪�i� (OPEN-OUTPUT-FILE "") � (CLOSE-OUTPUT-FILE "") �i����i��� �i��ਢ���� � ���ਢ���� 䠩� ��� ������ i��ଠ�i�.

�ਪ����

1. �����㢠� �i��i��� �i�� sym � 䠩�i name.

 
(DEFUN f (name sym)                       (SETQ a (READ))
(SETQ c 0)                                   (IF (EQL a sym) (INCQ c))  )
(OPEN-INPUT-FILE name)                     (CLOSE-INPUT-FILE name)
(LOOP                                     c)
    ((NOT (LISTEN)))

2. �����㢠� 䠩� � ���୥���� ���浪�, �� ���� ������� � �⮬���.

 
(DEFUN rew (in out)                   (PUSH (READ) temp)   )
(OPEN-INPUT-FILE in)                  (LOOP
(OPEN-OUTPUT-FILE out)                ((EQL temp NIL))
(SETQ temp NIL)                            (WRITE (POP temp))
(LOOP                                      (SPACES 1)   )
   ((NOT (LISTEN)))                   (CLOSE-INPUT-FILE in)
                                           (CLOSE-OUTPUT-FILE out)   )

��������

1. ������ �㭪�i� (SRT ), 猪 ����� ⥪�⮢�� 䠩� � �������� ���i � 䠩� .
2. ������ �㭪�i� (PRNUM2 num) � (PRNUM16 num), �i �i����i��� ������� ������i ����⪮�i �᫠ � ��i������� � �i�⭠���⪮���� �।�⠢����i.
3. ������㢠� �� ������ �᫮� n � ᨬ����� y ᯨ᮪ (y yy yyy yyyy .... yyyyyyyy. �i��i��� �i�� s � ��⠭�쮬� �������i ᯨ�� ���i���� n.

�p������.

�p����� 1. ��᫮ ��������� ᢮�� ��i������ �।�⠢����� (������� �᫠ �� ��ॢ���� 10000 ��i������ ஧��i�). �����i��� �������, � �i������ ���� �� 15.

����i���: ������� �i���� �� 9 � ����⪮�i� ��⥬i �᫥��� � ���i��i��� �� 9 �㬨 ��� �᫠ (�i�᭮, ��堩 � �᫮

 
     S = a[n]*10^n + a[n-1]*10^(n-1) + ... + a[1]*10 + a[0].
 
 S mod 9 = (a[n]*(10^n-1)+a[n] + a[n-1]*(10^(n-1)-1)+a[n-1] +
            + ... + a[1]*(10-1)+a[1] + a[0]) mod 9
     � ��i�쪨 10^k - 1 �i������ �� 9, � i
          S mod 9 = (a[n] + ... +a[1] +a[0]) mod 9,
� �ip��).

������i筮 ������� �i����� �� 15 � ��⥬i �᫥��� � ����ᮬ 16 �㤥 ���i��i��� �� 15 �㬨 ��i� �i�⭠���⪮��� ��� �᫠. �� ஧����� ��i����� �᫮ �ࠢ� ���i�� �� ��ࠤ�, �i �������筮 ����� ���⢮p�� � �i�⭠���⪮�i ���, ���室��� �� ��� � �i���� �� �� 15. ��� ����讪 0, � ������� �᫮ �i����� �� 15, i���� - �i.

�p����� 2. ���� �᫮ � K-i�i� ��⥬i �᫥���

 
            a a   ...a   (K<=36).
             n n-1    0

����� ����讪 �i� �i����� ���� �� m.
��᫠ K, n, m, � ����讪 �i� �i����� �� m �।�⠢������� � ����⪮�i� ��⥬i �᫥���.

����i���: � ��⥬i �᫥��� � �᭮��� K �᫮ �।�⠢������� � �����i

 
              a[n]*K^n + a[n-1]*K^(n-1) + ... +a[0]*K^0.

�������� ����讪 �i� �i����� ���� �� m (����讪 �i� �i����� a �� b �����稬� �p�� a mod b):

 
   (a[n]*K^n +  a[n-1]*K^(n-1)  +  ...  +a[0]*K^0) mod m =
 
     n                     n                   
  =� SUM a[i]*K^i� mod m = � SUM a[i]* (K^i mod m)� mod m =
   � i=0                  � i=0                  
 
  ��⠭�� pi��i��� �������� � ����㯭���:
  H�堩 K^i mod m=t, ⮤i K^i =p*m+t, �
 
      (a[i]*K^i) mod m = (a[i] * (p*m+t)) mod m =
       = (a[i]* p*m) mod m + (a[i]*t) mod m =
       = (a[i] * (K^i mod m)) mod m,
  �� �쮬� ��� ���i�쭨� �ᥫ b[i] �����������
    n                   n
 ( SUM b[i] ) mod m =( SUM b[i]  mod m ) mod m.
   i=0                 i=0
 
  �i��i⨬� ⠪�� �祢���� �i�i���
     K^i mod m =[(K^(i-1) mod m) * K] mod m,
 
  ��i�쪨 �� K^(i-1) = p*m+t, 
              K^(i-1) mod m = t,
                K^i = p*m*K+t*K � K^i mod m = t*K mod m =
                = [(K^(i-1) mod m)*K] mod m.
 
  ����� �쮣� ������� (��� a[i] - K-i�i ��� �᫠):
      s:=0;  t:=1;
      for i:=0 to n do
        begin
          s:=(s+a[i]*t) mod m;
          t:=t*K mod m;
        end;

� ��i��i� S �i�� ���i�祭�� ஡�� ������� �㤥 ���pi����� �㪠�� ����.

�p����� 3.�i�p��㢠� �i��i��� ������� � ��i������� ������ �᫠ i. �i��i��� ���p��i� ��� p���'離� �����i ������� ��� �i�i�i������.

 
����i���:
  cnt:=0;               cnt -- �i稫쭨� ������� � ��i i.
  while (i<>0) do       横� ����������� �i��i��� ࠧi�, �i���
    begin               �i�쪮��i ������� � i. "������" �ࠩ��
      i:=(i-1) and i;   �ࠢ� ������� � ��i������� ������ �᫠.
      cnt:=cnt+1;       
    end;                �ਪ���:  110  = i
                                  101  = i-1
                                  ------------------
                                  100  = i and (i-1)

�p����� 4. ���i����i��� 011212201220200112... �������� ⠪: ᯮ��� ������� 0, ���i� ����������� ����㯭� �i�: ��� ����ᠭ� ��⨭� �ਯ������ �ࠢ� i� ���i��� 0 �� 1, 1 �� 2, 2 �� 0, ⮡�

 
                0 -> 01 -> 0112 -> 01121220 ->...

������ ������, 直� �� �������� N, (0<=N<=3000000000) �������, 瘟 �᫮ ����� �� N-��� �i��i � ���i�������i.

����i���: H�堩 a(k) - k-�� 童� ���i�������i. �����ﭥ�� ���i����i���, ��p������ �� ����㯭�� �p������:

 
                             a(0)=0;
��
                         a(0)...a(2**k-1)

��p���� �ਯ��㢠��� �� �i�� ���i�������i �ࠢ� �i�� � ���i�������i, ��� �� �쮬� ������� 童� �ਯ����� ��⨭� ��i����� �� �������. ��p����

 
                    0->01->0112->01121223->...

��������, � a(k) � �㬠 ������� � ��i������� �।�⠢����i �᫠ k.
��������� �஢����� �� i����i��. ��� a(0)=0 � �ࠢ������. H�堩 �p���饭�� �ࠢ������ ��� ��� a(i), 0<=i<=2^(k-1)-1 (⮡� ��� ��i� �ᥫ i, �i ᪫��������� �� �i��� �i� � k-1-�� ��i������ ஧��i�). ���i � ��i������� p������i l, 2^(k-1)<=l