next_inactive up previous


��ӭ����Lisp������

���µ�Ŀ���Ǿ���������. �ڱ��½�����ʱ��,��������㹻��Common Lisp�� ֪ʶ,���Կ�ʼд������.

��ʽ(form)

�����ͨ��ʹ��Lisp��ѧϰ��,����ǧ����ȷ��,��ΪLisp�ǽ���ʽ����. �κ� Lispϵͳ������һ����������(toplevel)�Ľ���ʽǰ��. ���ڶ���������Lisp�� ��ʽ,ϵͳ��ӡ���ǵ�ֵ. Lispͨ����ӡһ����ʾ����ʾ�����ڵȴ��������. ����Common Lisp��ʵ����$>$ ��Ϊ������ʾ��. ���������Ҳ�ô˷���. ��򵥵�Lisp����ʽ֮һ��һ������. �����������ʾ����������1,
> 1
1
>
ϵͳ���ӡ����ֵ,������һ����ʾ��,��ʾ���ڵȴ����������. �����������,��ӡ������ֵ�����������һ��. ��1������������������ֵ��. ����������һ����Ҫ��Щ��ֵ�����ı���ʽʱ,��������Ȥ����. ����,����� ��������������,��������:
> (+ 2 3)
5
�ڱ���ʽ(+ 2 3)��,+����������,��2��3������Ԫ. ���ճ����������ǻ�Ѵ˱���ʽдΪ2 + 3,����Lisp�����ǰ�+д ����ǰ��,������ű�Ԫ,��������ʽ��һ������Χס:(+ 2 3). ��Ϊ���� ����ǰ,�����ǰ׺��ʾ��. һ��ʼ����д����ʽ�е��,����ʵ�����ֱ�ʾ���� Lisp��õĶ���֮һ. ����,�������������������,��ͨ���ı�ʾ������Ҫд+����:
2 + 3 + 4
����Lisp�����ǽ�������һ����Ԫ:
> (+ 2 3 4)
ͨ��������+,��������������Ԫ:һ�������,һ�����ұ�. ǰ׺��ʾ���� ������ζ��,��Lisp��,+���Խ���������Ŀ�ı�Ԫ,�������:
> (+)
0
> (+ 2)
2
> (+ 2 3)
5
> (+ 2 3 4)
9
> (+ 2 3 4 5)
14
��Ϊ���������Խ��ܲ�ͬ��Ŀ�ı�Ԫ,������Ҫ������ָʾ����ʽ�Ŀ�ʼ�ͽ���. ����ʽ����Ƕ��. ������ʽ�еı�Ԫ���������Ǹ����ӵı���ʽ:
> (/ (- 7 1) (- 4 2))
3
����Ȼ������˵,�߼�һ�Ľ�����ļ����Ľ����. ��һ��Lisp��ʾ����Ư��֮����:����������. ���е�Lisp����ʽҪô����1���� ԭ��(atom),Ҫô�Ƿ����������������������ʽ��ɵı�(list). ��Щ�Ǻ� ����Lisp����ʽ:
        2   (+ 2 3)   (+ 2 3 4)   (/ (- 7 1) (- 4 2))
�������ǽ�Ҫ������,���е�Lisp���붼��ȡ������ʽ. ��C�������������Ÿ��� �ӵ��﷨:��������ʽ����׺��ʾ��;������������ǰ׺��ʾ��,�Ա����ö��Ÿ� ��;����ʽ�÷ֺŸ���;��������û����ŷָ�. ��Lisp�������õ�һ�ļǺű��� ������Щ����.

��ֵ

����һ����,�����ڶ������������ʽ,Lisp��ʾ���ǵ�ֵ. �������������ϸ�� ��һ�±���ʽ�������ֵ��. ��Lisp��,+��һ������,����(+ 2 3)�ı���ʽ�Ǻ�������. ��Lisp�Ժ��������� ֵʱ,������������:
  1. ���ȱ�Ԫ�������ұ���ֵ. �ڴ�����,ÿ����Ԫ��ֵ������,���Ա�Ԫ��ֵ �ֱ���2��3.
  2. ��Ԫ��ֵ�����Բ����������ĺ���. �ڴ�����,��+����,������5.
����κα�Ԫ�����Ǻ�������,���ǰ�����������ֵ. ���Ƕ�(/ (- 7 1) (- 4 2))��ֵʱ���������:
  1. Lisp����(- 7 1): 7��ֵΪ7,1��ֵΪ1. ���DZ���������-,������6.
  2. Lisp����(- 4 2): 4��ֵΪ4,2��ֵΪ2. ���DZ���������-,������2.
  3. 6��2��ֵ��������/,������3.
���������е�Lisp���������Ǻ���,�����������. ���������ǰ����ַ�ʽ��ֵ ��. ��Ԫ�������ұ���ֵ,���ǵ�ֵ����������,����������������ʽ��ֵ. ��� ��Common Lisp����ֵ����. һ����������������IJ�������quote. quote��һ�����������,����ζ������ �Լ����ص���ֵ����. ���������:ʲôҲ����. quote����һ����Ԫ,����һ�� ����ط�����:
> (quote (+ 3 5))
(+ 3 5)
Ϊ�˷���,Common Lisp����'��Ϊquote�ļ�Ƿ�. ͨ�����κα���ʽǰ�����' ���ܻ�������quoteͬ����Ч��:
> '(+ 3 5)
(+ 3 5)
�ü�Ƿ�����quote�ձ�ö�. Lisp�ṩquote��Ϊһ�ֱ�������ʽ�Է�����ֵ���ֶ�. ��һ�ڻ�������ֱ��� �Ƕ�ô����.

���鷳�н��ѳ��� �����������һЩLisp��������Ķ���,�����ӡһ��������Ϣ���������һ�� ���ж�ѭ��(break loop)�Ķ�����ȥ. �ж�ѭ�������о���ij���ԱŪ�����ԭ ��Ļ���, ����һ��ʼ��Ψһ��Ҫ֪����������δ��ж�ѭ���г���. ��η��� ����ȡ�������õ�Lisp����. ���������Ļ�����,��:abort����:
> (/ 1 0)
Error: Division by zero.
       Options: :abort, :backtrace
>> :abort
>
��¼Aչʾ����ε���Lisp����,�Լ�һЩ������������.

����

Lisp�ṩ�����������������������ҵõ�����������,��һЩ�����Ҳ�����. һ ����������ʹ�õ���������������,��дΪһ������:256. ��һ�ֺ���������һ ���е����ַ���,����ʾΪһ����˫�������������ַ�:"ora et labora". ���� ���ַ�������ֵ������. ���������Dz��������������з��ֵ�����������. �����ǵ���. ͨ �����DZ�ת���ɴ�д,�������������:
> 'Artichoke
ARTICHOKE
����(ͨ��)����ֵΪ����,��������������һ������,��������������'������. ����ʾΪ�����Ű�Χ���������Ԫ��. Ԫ�ؿ������κ�����,������. ����� ���ñ�,����Lisp����Ϊ���Ǻ�������:
> '(my 3 "Sons")
(MY 3 "Sons")
> '(the list (a b c) has 3 elements)
(THE LIST (A B C) HAS 3 ELEMENTS)
��ע��һ�����ű�����������ʽ,��������ı���ʽ. ����Ե���list�������. ��Ϊlist��һ������,���ı�Ԫ����ֵ. ����+������ list�����������:
> (list 'my (+ 2 1) "Sons")
(MY 3 "Sons")
�������Ǵ�������Lisp���ͬѰ������֮һ��λ����. Lisp�������Ϊ��. ��� ��Ԫ�Ļ����Ժ�������û��˵����Lisp�Ǻ���һ���м�ֵ�Ĺ���,���Ӧ����ʹ ���ŷ�. ����ζ��Lisp�����������Lisp����. Lisp����Ա��(���Ҿ���)Ϊ�Լ� ��д��д����ij���. ���ǵ���10�²ſ������ֳ���,����ʹ���ֽ׶��������ʽ�ͱ��Ĺ�ϵҲ�Ǻ��� Ҫ��,�����DZ�����Ū��Ϳ. �����Ϊ������ʹ��quote. ���һ������������, ��ֵ����������; ���û�б�����,������Ϊ�Ǵ���,��ֵ��������ֵ:
> (list '(+ 2 1) (+ 2 1))
((+ 2 1) 3)
�˴���һ����Ԫ��������,����������һ����. �ڶ�����Ԫû�б�����,��֮Ϊ�� ������,�ó�һ������. ��Common Lisp�������ַ�����ʾ�ձ�. �����һ�Բ������κζ������������� ʾ�ձ�,���÷���nil����ʾ��. �������ַ�����ʾ�ձ���û�й�ϵ,�������ᱻ ��ʾ��nil:
> ()
NIL
> nil
NIL
�㲻������nil(��Ȼ��Ҳûʲô����)��Ϊnil��ֵ������.

���IJ���

����cons�����. ������ĵڶ�����Ԫ�DZ�,������һ���±�,�±��ĵ�һ��Ԫ�� ���ǵ�һ����Ԫ:
> (cons 'a '(b c d))
(A B C D)
���ǿ���ͨ������Ԫ��cons���ձ��������±�. ��������һ�ڼ�����list����ֻ ������һ���Ѽ�������cons��nil��ȥ�ķ���취:
> (cons 'a (cons 'b nil))
(A B)
> (list 'a 'b)
(A B)
��������ȡ����Ԫ�صĺ�����car��cdr.1 ����car�������ĵ�һ��Ԫ��,�� cdr�ǵ�һ��Ԫ�غ�������ж���:
> (car '(a b c))
A
> (cdr '(a b c))
(B C)
������car��cdr�������ȡ�ñ����κ�Ԫ��. �������ȡ������Ԫ��,��������:
> (car (cdr (cdr '(a b c d))))
C
����,�������third�����׵���ͬ������:
> (third '(a b c d))
C

��ֵ

����t��Common Lisp�б�ʾ���ȱʡֵ. ����nil,t��ֵ������. ����listp���� ��������ı�Ԫ��һ����:
> (listp '(a b c))
T
һ��������������������ķ���ֵ�����ͳ�����. Common Lisp�Ķ��Ե��� ��ͨ����p��β. ����Common Lisp����nil(�ձ�)����ʾ. ������Ǵ���listp�ı�Ԫ���DZ�,���� ��nil:
> (listp 27)
NIL
��Ϊnil����������ɫ,����null������������ı�Ԫ�ǿձ�:
> (null nil)
T
������not������������ı�Ԫ�Ǽ�:
> (not nil)
T
������ȫ������ͬ��������. Ҫif��Common Lisp����򵥵��������. ��һ�����������Ԫ:һ�����Ա���ʽ, һ��then����ʽ��һ��else����ʽ. ���Ա���ʽ����ֵ. �����������,��then ����ʽ����ֵ�����ؽ��. ��������ؼ�,��else����ʽ����ֵ���������Ľ��:
> (if (listp '(a b c))
      (+ 1 2)
      (+ 5 6))
3
> (if (listp 27)
      (+ 1 2)
      (+ 5 6))
11
����quote,if�����������. �������ú�����ʵ��,��Ϊ�������õı�Ԫ����Ҫ ��ֵ��,��if���ص���ֻ�����������Ԫ�е�һ������ֵ. if�����һ����Ԫ�ǿ�ѡ��. �����ʡ����,��ȱʡΪnil:
> (if (listp 27) 
      (+ 2 3))
NIL
��Ȼt�����ȱʡ��ʾ,�κβ���nil�Ķ������߼��������б���Ϊ����:
> (if 27 1 2)
1
�߼�������and��or�����������. ���߶�����������Ŀ�ı�Ԫ,��ֻ��ֵ�ܹ�ȷ ������ֵ����Ŀ�ı�Ԫ. ������еı�Ԫ������(����nil),��ôand�������� Ԫ��ֵ:
> (and t (+ 1 2))
3
���������һ����Ԫ�Ǽ�,����������ı�Ԫ������ֵ��. orҲ����,ֻҪ������ һ������ı�Ԫ�ͼ�����ֵ��. �������������Ǻ�. �������������,����Թ��ͨ������ֵ����. ��10�½��� ��α�д���Լ��ĺ�.

����

�������defun�������µĺ���. ��ͨ�������������ϱ�Ԫ:һ������,һ�в���, ����ɺ������һ����������ʽ. �������Ƕ���third��һ�ֿ���:
> (defun our-third (x)
    (car (cdr (cdr x))))
OUR-THIRD
��һ����Ԫ��ʾ����������our-third. �ڶ�����Ԫ,��(x),˵������������һ�� ��Ԫ:x. ����������ռλ���ķ��Ž�������. �������������������ı�Ԫ, ����x������,���ֽ�������. ��������ಿ��,(car (cdr (cdr x))),��ͨ����˵�ĺ�����. ������Lisp,Ϊ�� ���㺯���ķ���ֵ,������Щʲô. ����,�����Ǹ�������Ϊ��Ԫ���κ�x,���� our-third�᷵��(car (cdr (cdr x))):
> (our-third '(a b c d))
C
��Ȼ���ǿ����˱���,�͸���������ʲô�Ƿ�����. �����DZ�����,��һ�����Լ� ���ƵĶ���. �����Ϊʲô����Ҫ���һ�����뱻����. �����뱻��������Ϊ�� ��˵Ļ�,���ͻᱻ��������;���ű��뱻��������Ϊ����˵Ļ�,���ͻᱻ���� ����. ����԰Ѻ������������ij��Lisp����ʽ��һ����ʽ. ����ı���ʽ����1��4֮ ���Ƿ����3:
> (> (+ 1 4) 3)
T
ͨ������Щ�������ֻ��ɱ���,���ǿ���дһ�����������κ�������֮���Ƿ�� �ڵ�����:
> (defun sum-greater (x y z)
    (> (+ x y) z))
SUM-GREATER
> (sum-greater 1 4 3)
T
Lisp�Գ���,���̻�����������. �����������е�����(��ʵ�Ϲ��������Ա��� �Ĵ󲿷�). �������Ϊ��ĺ����е�һ����������,��ͨ�������ڶ���������� ��һ������. ����ζ��,����д�����ʱ��,����һС��һС�εز�������.

�ݹ�

��������һ���ж���ĺ�������������������Ϊ�Լ�����. ����sum-greater�� ����+��>. �������Ե����κκ���,����������. �Լ������Լ��ĺ����ǵݹ��. Common Lisp����member����ij�������Ƿ���һ ������Ԫ��. ���Ƕ���ɵݹ麯���ļ򻯰汾:
(defun our-member (obj lst)
  (if (null lst)
      nil
      (if (eql (car lst) obj)
          lst
          (our-member obj (cdr lst)))))
����eql��������������Ԫ�Ƿ���ͬ;����֮��,���������ж���������ǰ������. ���������������:
> (our-member 'b '(a b c))
(B C)
> (our-member 'z '(a b c))
NIL
our-member�Ķ�������������Ȼ��������. Ϊ�˲���һ������obj�Ƿ��DZ�lst �ij�Ա,����
  1. ���ȼ��lst�Ƿ�Ϊ��. ����ǿյ�,��Ȼobj�������ij�Ա,����������.
  2. �������obj��lst�ĵ�һ��Ԫ��,�����dz�Ա
  3. ����ֻ�е�obj��lst���ಿ�ֵij�Աʱ,������lst�ij�Ա.
�����跨����һ���ݹ麯������ι�����ʱ��,����������������������а��� ��. ������һ��ʼ���õݹ麯���ܲ�������. �ܶ��������ԶԺ�����һ������ı���. ��һ�����ưѺ��������ij����ʽ�Ļ���. ԭ�Ͼ������һ������;һЩ������ ת������������;�����ɵIJ�Ʒ����װ���˳�ȥ,���󷵻�һ��ֵ. ��������� ���ֱ���,�ݹ������ì����. ������ô�ܰѻ��ת�����Լ�? ���Ѿ�æ�Ÿɻ���. һ�����õı����ǰѺ�������ɾ����Ĺ���. �ڹ����еݹ��Ǻ���Ȼ������. �� �Ǿ������ճ������п����ݹ����. ����,����һ����ʷѧ�Ҷ�ŷ����ʷ�ϵ��˿ڱ� ������Ȥ. ������׵Ĺ��̿�����������:
  1. ȡ��һ������
  2. �����й��˿ڱ仯����Ϣ
  3. ����������ᵽ�����������õ�����,�������
������Ӽ򵥵���������,�����ǵݹ��,��Ϊ���������԰���һ������ͬ���� ����. ��˲�Ҫ��our-member����Ϊ����ij�������Ƿ��ڱ��еĻ���,���ǰ�������Ϊ ����ij�������Ƿ��ڱ��еĹ���. ������������ּ��⿴������,�ݹ����۾� ��������.2

��Lisp

��һ�����Ƕ����our-member��������Ž�β. ���Ӹ��ӵĺ�������������߰� �����Ž�β. ��ѧLisp���˿�����ô�����Ż�е�����. ��������ȥ�������� ����? ������˵д��. ����ô�ֱ�����֮���ƥ��? �ش���,�㲻��Ҫ����Щ. Lisp����Աͨ������,��������������д����. ������ д�����ʱ��,�������ı��༭����ʾ�ĸ�����ƥ���ĸ�. �κ�һ������ı༭ ��,�ر���Lispϵͳ������,Ӧ������������ƥ��. �������ı༭����,�������� ��һ������,����ָʾ����ƥ����Ǹ�����. �����ı༭����������ƥ��,���� ��ͣ����,�о�һ�����ʹ���������,��Ϊû���������,��ʵ�ϲ�����дLisp �����. ��vi��,�������:set sm��������ƥ��. ��emacs��,M-x lisp-mode�ǻ�ø� ���ܵĺð취. ���˺õı༭��,����д�����ʱ��,����ƥ�䲻���Ǹ�����. ������ΪLisp���� ��ͨ�õĹ���,���Ķ�Lisp����Ҳ���Ǹ�������. ��Ϊ���˶�����ͬ��ϰ��,��� ��ͨ�������Ķ�����,��������. ���ܶ�ô�о����Lisp�ڿ�,�ᷢ��our-member�Ķ�����Ѷ���,�����д����� ����:
(defun our-member (obj lst) (if (null lst) nil (if 
(eql (car lst) obj) lst (our-member obj (cdr lst)))))
��������ʵ�������,����û��������. ����Ժ��Դ󲿷ֵ����Ŷ�������:
defun our-member (obj lst)
  if null lst
     nil
     if eql (car lst) obj
        lst
        our-member obj (cdr lst)
��ʵ��,������ֽ��дLisp�����ʱ��,�����һ�����еİ취. �Ժ��������ʱ ��,���Գ�����ñ༭����ƥ�����ŵĹ���.

��������

��ĿǰΪֹ,����һֱ�����ö��㰵��ʹ��i/o. ��ʵ�ʵĽ���ʽ�ij���,����� ������. ����һ����,���ǿ�һЩ�����������. Common Lisp����һ������������format. �������������ϱ�Ԫ:��һ����ʾ�� �����Ķ�,�ڶ������ַ���ģ��,ʣ�µı�Ԫͨ���Ƕ���,���ǵĴ�ӡ��ʾ (printed representation)�������뵽ģ����ȥ. ���Ǹ����͵�����:
> (format t "~A plus ~A equals ~A.~%" 2 3 (+ 2 3))
2 plus 3 equals 5.
NIL
ע������������ӡ�����. ��һ����format��ӡ��. �ڶ�����format���õķ��� ֵ,����ͨ��һ���ɶ����ӡ. ͨ����format�����ĺ�������ֱ���ڶ���,�� ���ڳ����ڲ�������,��˷���ֵ�Ͳ��ᱻ����. format�ĵ�һ����Ԫt��ʾ��������͵�ȱʡ�ĵط�ȥ. ͨ������Ƕ���. �ڶ� ����Ԫ�dz䵱���ģ����ַ���. ��������,ÿ��  A*��ʾһ����������λ��, �� %��ʾ���з�. ��Щλ�����α�����ı�Ԫ��ֵ���. ��׼�����뺯����read. ��û�б�Ԫʱ,����ȱʡ�ĵط�--ͨ���Ƕ���--����. �������������ʾ�û�����,Ȼ�󷵻��κ�����Ķ���:
(defun askem (string)
  (format t "~A" string)
  (read))
����������:
> (askem "How old are you? ")
How old are you? 29
29
���סread����Զ�����Ƕ�ֱ��������ʲô������(ͨ��Ҫ)����س�. ��˵��� read������ӡ��ȷ����ʾ��Ϣ�Dz����ǵ�,������ij����������Ѿ�������ӡ ��,��ʵ�������ڵȴ�����. �ڶ���Ҫ�˽�read�������dz�ǿ��:����һ��������Lisp�﷨������. �������� �����ַ��ٰ����ǵ����ַ�������. �������������Ķ���,��������������Lisp ����. ��������, ������һ����. askem��Ȼ�ܶ�,����չʾ��һЩ������ǰ�ں���������û�п���������. ���ĺ� ��������������ʽ. ��������԰�������������ʽ,������������ʱ,������ �α���ֵ,�����᷵�����һ������ʽ��ֵ. ����ǰ���½���,���Ǽ����ν��``����''��Lisp--��û�и����õ�Lisp. ���� ����ָ��Ϊ����ʽ��ֵ�ĺ���ı����ⲿ�����״̬. �����Ƕ�һ�������Lisp ����ʽ,����(+ 1 2)��ֵ,û�г��ָ�����;��������һ��ֵ. �������ǵ��� format,����������ֵ,����ӡ��һЩ����. ����һ�ָ�����. �������Ҫдû�и����õĴ���,��ô�����ж������ʽ�ĺ������û��ʲô�� ��. ���һ������ʽ��ֵ��Ϊ�����ķ���ֵ��������,��ǰ��ı���ʽ��ֵ���� �ӵ���. �����Щ����ʽû�и�����,��Ͳ�֪��ΪʲôLispҪ�Ѿ�ȥ��������.

����

let��Common Lisp����õIJ�����֮һ,�����������µľֲ�����:
> (let ((x 1) (y 2))
    (+ x y))
3
һ��let����ʽ��������. ��һ������һ�д����±�����ָ��,ÿ������(���� �� ��ʽ). ÿ�������ᱻ������Ӧ�ı���ʽ��ֵ. ��������,���Ǵ�������������x ��y,���Ƿֱ𱻸����ֵ1��2. ��Щ����ֻ��let��������Ч. ������ֵ���б��ĺ�����һ�����ʽ,���ǽ���������ֵ. �ڴ�����,ֻ��һ���� ��ʽ:��+�ĵ���. ���һ������ʽ��ֵ��Ϊlet��ֵ������. ������һ��ʹ��let �ĸ���ѡ���Ե�askem�İ汾:
(defun ask-number ()
  (format t "Please enter a number. ")
  (let ((val (read)))
    (if (numberp val)
        val
        (ask-number))))
�˺������˱���val�����read���صĶ���. ��Ϊ���д˶��������,������ �������Ƿ�Ҫ���ض���֮ǰ�쿴һ���������ֵ. ������Ѿ��µ�,numberp�Dz� �������Ա����Ƿ������ֵĶ���. ����û�����IJ�������,ask-number�������Լ�. ���������һ�����Ҫ�õ� һ�����ĺ���:
> (ask-number)
Please enter a number. a
Please enter a number. (ho hum)
Please enter a number. 52
52
��Ŀǰ���ǿ����ı����������ֲ�����. ����ֻ���ض��Ļ���������Ч��. ���� ��һ�����ȫ�ֱ����ı���,�������κεط����ǿɼ���.3 ͨ������defparameterһ�����ź�һ��ֵ,����Թ���ȫ�ֱ���:
> (defparameter *glob* 99)
*GLOB*
�����ı����������κεط���ȡ,������һ������ʽ��,������һ����ͬ���ֵľ� ������. Ϊ�˱�����������ij���,ϰ����ȫ�ֱ������������Ǻſ�ʼ�ͽ���. ���ǸղŶ���ı����ɶ���``��-glob-��''. �㻹������defconstant����ȫ�ֳ���:
(defconstant limit (+ *glob* 1))
�㲻��Ҫ��������һ�����ڲ�ͬ������,��Ϊ���ʹ����ͬ��������Ϊ����,�ͻ� ����. �������֪��ij�������Ƿ���ȫ�ֱ�������������,����boundp:
> (boundp '*glob*)
T

��ֵ

Common Lisp������ͨ�ĸ�ֵ��������setf. ���ǿ���������ȫ�ֻ�ֲ������� �и�ֵ:
> (setf *glob* 98)
98
> (let ((n 10))
    (setf n 2)
    n)
2
�����һ���Ա������Ǿֲ�����������,������Ϊ��ȫ�ֱ���:
> (setf x (list 'a 'b 'c))
(A B C)
�������ͨ����ֵ�������½�ȫ�ֱ���.������Դ�ļ�����ȷ��ʹ�� defparameter
�ǽϺõķ��. ��������Զ��ֹ��������ֵ. setf�ĵ�һ���Ա������������DZ�����,�������� ����ʽ. �����������,�ڶ����Ա�����ֵ�����뵽��һ�����漰����λ��:
> (setf (car x) 'n) 
N
> x
(N B C)
setf�ĵ�һ���Ա��������������κ��漰�ض�λ�õı���ʽ. ���������IJ������� ��¼D�ж������Ϊ``settable''. ����Ը�setfż�����Ա���. ����
(setf a b 
      c d 
      e f)
�ı���ʽ�൱����������������setf����:
(setf a b)
(setf c d)
(setf e f)

��������̷�

��������̷�����˼�DZ�дͨ������ֵ�������ij���,�������޸�ʲô����. ���� Lisp��ռ֧���λ�ķ���. �����Lisp���ú�����������Ϊ�˵õ����ǵķ���ֵ, ���������ǵĸ�����. ���纯��remove,������һ�������һ����,����һ���ų����Ǹ�������±�:
> (setf lst '(c a r a t))
(C A R A T)
> (remove 'a lst)
(C R T)
Ϊʲô��˵remove�ӱ���ɾ��һ������? ��Ϊ�ⲻ��������������. ԭ���ı�û �б��ı�:
> lst
(C A R A T)
��ô���������ӱ���ɾ��һЩԪ����ô��? ��Lisp��,��ͨ�����������Ƶ��� ��:�ѱ�����ij������,Ȼ����setf����������ֵ. Ϊ�˰����е�a�ӱ�x��ɾ��, ����������:
(setf x (remove 'a x))
��������̷���������ζ�ű���ʹ������setf�ĺ���. էһ�����������ֿ����Զ� ������,��˵����ȥ����. ��ô�ܽ�ƾ����ֵ���ܹ������? ��ȫ�����ø������������ѵ�. ������ѧϰ������,��ᾪ�ȵط���������Ҫ�� ���õĵط�����. ��ʹ�ø�����Խ��,��Ҳ��Խ����. �������������Ҫ���ŵ�֮һ������������ʽ����. �ڴ���ĺ�����������,�� ��д������ʱ��Ϳ��Բ�������. ���������������ֵ,����Կ϶�������ȷ��. ��Щ���������,�ۼ���һ�������޴��Ӱ��. �����ڳ������޸����κεط�, ���õ���ʱ��ת��. �����ּ�ʱ��ת������һ��ȫ�µı�̷��. ����绰 ���ż����,���������µ�ͨѶ��ʽ.

����

����������һЩ�ظ�������ʱ,�õ������õݹ����ȻЩ. ���͵��������õ��� ����ij�ֱ���. ����
(defun show-squares (start end)
  (do ((i start (+ i 1)))
      ((> i end) 'done)
    (format t "~A ~A~%" i (* i i))))
��ӡ��start��end֮���������ƽ��:
> (show-squares 2 5)
2 4
3 9 
4 16
5 25
DONE
do����Common Lisp��������ĵ���������. ����let,doҲ���������,���ĵ�һ ���Ա����ǹ��ڱ������ı�. ���е�ÿ��Ԫ�ؾ���������ʽ:
        (variable initial update)
����variable�Ƿ���,��initial��update�DZ���ʽ. һ��ʼÿ�������ᱻ������ Ӧ��initial��ֵ;�ڵ�����ʱ�����ᱻ������Ӧ��update��ֵ. show-squares�� ��do��������һ������i. ��һ�ε�����ʱ��,i������start��ֵ,���Ժ�ĵ��� ������ֵ��ÿ������1. do�ĵڶ����Ա����ǰ���һ����������ʽ�ı�. ��һ������ʽ�������Ե����� ��Ӧ��ֹͣ. ��������,������(> i end). ����ı���ʽ���ڵ���ֹͣ�����μ� ��,�������һ����ֵ��Ϊdo�ķ���ֵ. ���show-squares���ǻ᷵��done. ���µ��Ա��������ѭ����. ������ÿ�ε�����ʱ�����α���ֵ. ��ÿ�ε����� ʱ������ȱ�����,Ȼ����ֹ���Ա�����,����(�������ʧ��)ѭ���屻����. ��Ϊ�Ա�,���ǵݹ�汾��show-squares:
(defun show-squares (i end)
  (if (> i end)
      'done
      (progn
        (format t "~A ~A~%" i (* i i))
        (show-squares (+ i 1) end))))
�˺����е�Ψһ�������progn. ���������������ı���ʽ,������������ֵ,Ȼ �󷵻����һ����ֵ. ��һЩ�������Common Lisp�и��򵥵ĵ���������. ����,Ϊ�˱�����������Ԫ ��,���������dolist. ����������ر��ij���:
(defun our-length (lst)
  (let ((len 0))
    (dolist (obj lst)
      (setf len (+ len 1)))
    len))
�˴�dolist��������(variable expression)���Ա���,Ȼ���DZ���ʽ��. variable�����expression���صı���Ԫ�ذ�,����ʽ�鱻����. �������� ѭ������˼��,��lst�е�ÿ��obj,len����1. �˺�����һ����Ȼ�ĵݹ�汾��:
(defun our-length (lst)
  (if (null lst)
      0
      (+ (our-length (cdr lst)) 1)))
��,�����Ϊ��,���ij��Ⱦ���0;�������ij���������cdr�ij��ȼ���1. �˰汾�� ��һЩ,����Ϊ������β�ݹ��(��13.2��),����Ч�ʲ���ô��.

����������

������Lisp�о������,�ַ����ͱ�һ��,�dz���Ķ���. ������Ǹ�functionһ ������������,���᷵����صĶ���. ����quote,function�����������,����� �Dz��������Ա���:
> (function +)
#<Compiled-Function + 17BA4E>
���ģ������ֵķ���ֵ�Ǻ����ڵ���Common Lispʵ���п��ܵ���ʾ��ʽ. ��ĿǰΪֹ�����漰���Ķ�������������ص�:Lisp��ʾ���������������ģ�� ��һ�µ�. �˹������ʺϺ���. һ����+���������ú������ڲ�������һ�λ��� ��. Common Lisp��ʵ�ֿ���ѡ���κ���ϲ�����ⲿ��ʾ��ʽ. ����������'��Ϊquote�ļ�Ƿ�,���ǿ�����#'��Ϊfunction�ļ�д:
> #'+
#<Compiled-Function + 17BA4E>
�˼�Ƿ�����sharp-quote. ���������Ķ���,����������Ϊ�Ա�������. һ�����ܺ�����Ϊ�Ա������� apply. ������һ��������һ���Ա���,�������Ǹ�����Ӧ����Щ�Ա�����Ľ� ��:
> (apply #'+ '(1 2 3))
6
> (+ 1 2 3)
6
���ܽ���������Ŀ���Ա���,ֻҪ���һ���DZ�:
> (apply #'+ 1 2 '(3 4 5))
15
����funcall����ͬ��������,����������Ҫ���Ա������ڱ���:
> (funcall #'+ 1 2 3)
6
��defun����һ������������һ������. �����������DZ�����Ҫ����,�������Ҳ ����Ҫ��defun����������. ��������Lisp����һ��,���ǿ���ֱ�����ú���. Ϊ��ֱ������һ������,������һ������;Ϊ��ֱ�����ú���,��������ν�� lambda����ʽ. һ��lambda����ʽ�ǰ�������Ԫ�صı�:����lambda,һ�в���, Ȼ���������������ʽ��ɵĺ�����. ���lambda����ʽ������������������������֮�͵ĺ���:
(lambda (x y) 
  (+ x y))
(x y)�Dz�����,������������Ǻ�����. ������Ϊlambda����ʽ�Ǻ���������. ������ͨ�ĺ�����,lambda����ʽ������ �������õĵ�һ��Ԫ��:
> ((lambda (x) (+ x 100)) 1)
101
��ͨ����lamda����ʽ֮ǰ����#',���ǵõ�����Ӧ�ĺ���:
> (funcall #'(lambda (x) (+ x 100))
           1)
101
���ֱ��﷨������ʹ����������.

lambda��ʲô? lambda����ʽ�е�lambda���Dz�����. �����Ǹ�����.4 �������ڵ�Lisp��������һ������:�� �����ڲ���̬�DZ�,�������������ͨ����Ψһ�취�Dz鿴��һ��Ԫ���Ƿ��� ����lambda. ��Common Lisp�����ܰѺ�����ʾΪ��,���������ڲ�����ʾ�ɶ��صĺ�������. ���lambda�����DZ����. ���Ҫ��Ѻ���
(lambda (x) (+ x 100))
��ʾ��
((x) (+ x 100))
Ҳû��ʲôì��,��Lisp����Ա�Ѿ�ϰ���˺����Է���lambda��ʼ,���Common Lisp�����˴˴�ͳ.

����

Lisp�÷�ͬѰ��������ֶ�����������. ������������,�����������͵�,���ָ �����������Ͳ���ʹ����. ��Common Lisp��,ֵ��������,�����DZ���. ����� ����ÿ����������ָ���������͵ı�ǩ. ���ַ���������ʾ����. �㲻��Ҫȥ ��������������,��Ϊ��������װ�κ����͵Ķ���. ��Ȼ�����������DZ����,Ϊ��Ч�ʵ�Ե������ܻ��õ�����. ����������13.3 ��������. Common Lisp���������͹�����һ�����͵IJ�νṹ. һ������ͨ�����ж����� ��. ����,��27������fixnum,integer,rational,real,number,atom,��t,��һ�� �Ե�����Ϊ��. (Numeric�����ڵ�9��������)����t���������͵ij���,����κ� ����������t. ����typep����һ�������һ������˵����,����������������;ͷ�����:
> (typep 27 'integer)
T
����������������������ʱ,���ǻ��������.

չ��

���½����ѵ�ˮ��ؽ�����һ��Lisp. Ȼ��һ�ַ�ͬѰ�������Ե������Ѿ����� ������. ����,�������е�һ���﷨���������еij���ṹ. ���﷨����һ��Lisp �Ķ���--��. ����,��Ϊ���ص�Lisp����,���Ա�ʾΪ��. ����Lisp�������� Lisp����,����ȫ���������Լ�����ĺ���û���κ�����ĺ�����ɵ�. ����㻹����ȫ���������Щ����֮��Ĺ�ϵ,�벻�ص���. Lisp��������ô�� ��ӱ�ĸ���,��û�ʱ��ȥ��Ϥ����. �������ٵ�˵��һ����: ���˳Ծ������� ˼���̲�����. Richard Gabriel���뿪��Ц��˵C���ʺ�дUnix������.5 ����Ҳ����˵Lisp�DZ�дLisp������. ���������ֲ�ͬ�ij���. һ�ֿ������Լ�����д�������Ǻ�һ���ó���дijЩ�ض����͵�Ӧ�õ�������ȫ ��ͬ��. ���������µı�̷���:�㲻���������б��,�㻹���ԸĽ��������ʺ� ��������Ҫ. �����������Lisp��̵ı���,���˼���Ǹ��ܺõ����.

�ܽ�
  1. Lisp�ǽ���ʽ����. ������ڶ����������ʽ,Lisp���ӡ����ֵ.
  2. Lisp�����ɱ���ʽ���. ����ʽ������һ��ԭ��,����һ����, ���ĵ�һ ��Ԫ���Dz�����,���������������Ա���. ǰ׺����ʽ��ζ�Ų������ɽ��� �������Ա���.
  3. Common Lisp�������õ���ֵ����:�������Ҷ��Ա�����ֵ,Ȼ�����Щֵ �����ɲ�������ʾ�ĺ���. quote�����Լ�����ֵ����:��ԭ�ⲻ���ط����Ա���.
  4. ����ͨ������������,Lisp���з��źͱ�. ����Lisp�����ɱ����,������ ��д��д����ij���.
  5. ���������ı�����������cons:������һ����;car:�����ر���ͷһ��Ԫ��; cdr:�����ص�һ��Ԫ��֮������ж���.
  6. ��Common Lisp��, t��ʾ��,nil��ʾα. ���߼���������,����nil֮��� �κζ�����������. ���������������if. and��or�����������������.
  7. Lisp��Ҫ���ɺ������ɵ�. �����defun�������µĺ���.
  8. �����Լ��ĺ����ǵݹ��. �ݹ麯��Ӧ�ñ���Ϊ��һ�����̶����ǻ���.
  9. ���Ų��Ǹ�����,��Ϊ����Ա������������дLisp.
  10. ������i/o������read:��������������Lisp�﷨������,��format:������ ģ��������.
  11. �������let�����µľֲ�����,��defparameter�����µ�ȫ�ֱ���.
  12. ��ֵ��������setf. ���ĵ�һ���Ա��������DZ���ʽ.
  13. ��������̷�--����ζ�ű��⸱����--��Lisp��ռ֧���λ�ķ���.
  14. ������ѭ����������do.
  15. �����dz����Lisp����. ���ǿ�����Ϊ�Ա���������,���Ա�ʾ��lambda ����ʽ.
  16. ֵ������,������û������

��ϰ
  1. �������±���ʽ��ֵ��Ľ��:
  2. ����3�ֲ�ͬ���ܷ���(a b c)��cons����ʽ
  3. ��car��cdr����һ������,�����ر��ĵ��ĸ�Ԫ��.
  4. ����һ������,�����������Ա���,���������нϴ��һ��.
  5. ��Щ��������ʲô?
        a. (defun enigma (x)
             (and (not (null x))
                  (or (null (car x))
                      (enigma (cdr x)))))
    
        b. (defun mystery (x y)
             (if (null y)
                 nil
                 (if (eql (car y) x)
                     0
                     (let ((z (mystery x (cdr y))))
                       (and z (+ z 1))))))
    
  6. ������ı���ʽ��,x��Ӧ����ʲô�ɵó����?
        a. > (car (x (cdr '(a (b c) d))))
           B
    
        b. > (x 13 (/ 1 0))
           13
    
        c. > (x #'list 1 nil)
           (1)
    
  7. ֻ�ñ��½��ܵIJ�����,����һ������,������һ������Ϊ�Ա���,������t �������Ԫ����������һ�������DZ�.
  8. ���������ĵ����͵ݹ�汾:��
        a. ����һ��������,����ӡ��ô����Ŀ�ĵ�.
    
        b. ����һ����,���ط���a�ڱ��г��ֵĴ���.
    
  9. һλ������дһ������,�����ر������з�nilԪ��֮��. ��д�˴˺����� �����汾, ��û��һ������ȷ����. ��ָ������������,��������ȷ�İ汾:
        a. (defun summit (lst)
             (remove nil lst)
             (apply #'+ lst))
        
        b. (defun summit (lst)
             (let ((x (car lst)))
               (if (null x)
                   (summit (cdr lst))
                   (+ x (summit (cdr lst))))))
    

About this document ...

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split=0 acl2.tex

The translation was initiated by Dai Yuwen on 2003-07-29


Footnotes

... ��������ȡ����Ԫ�صĺ�����car��cdr.1
car��cdr��������Դ�ڱ��� ��һ��Lispʵ���е��ڲ���ʾ. car��ʾ``contents of the address part of the registe''��cdr��ʾ``contents of the decrement part of the register.''
... ��������.2
����ݹ������ѵĶ��߿��Բο����������е��κ�һ��: Touretzky, David S. Common Lisp: A Gentle Introduction to Symbolic Computation. Benjamin/Cummings, Redwood City (CA), 1990, Chapter 8. Friedman, Daniel P., and Matthias Felleisen. The Little Lisper. MIT Press, Cambridge, 1987.
... ��һ�����ȫ�ֱ����ı���,�������κεط����ǿɼ���.3
���������� ���ڴʷ���������������IJ�ͬ,�������ǵõ������²Żῼ����.
... �����Ǹ�����.4
��Ansi Common Lisp�л���һ��lambda��,���������#'(lambda (x) x)д��(lambda (x) x). ����ʹ�������ģ����lambda����ʽ�ͷ��Ż��ĺ�����(�����������#') �ĶԳ���,����಻���������۵����.
... Gabriel���뿪��Ц��˵C���ʺ�дUnix������.5
Gabriel, Richard P. Lisp: Good News, Bad News, How to Win Big. AI Expert, June 1991, p. 34.

next_inactive up previous
Dai Yuwen 2003-07-29