LISPµÄÀúÊ·£¨×ª£©

LISP£¨È«ÃûLIST Processor£¬¼´Á´±í´¦ÀíÓïÑÔ£©£¬ÓÉÔ¼º²¡¤Âó¿¨ÎýÔÚ1960Äê×óÓÒ´´ÔìµÄÒ»ÖÖ»ùÓÚ¦ËÑÝËãµÄ º¯Êýʽ±à³ÌÓïÑÔ ¡£

Lisp ´ú±í LISt Processing£¬¼´±í´¦Àí£¬ÕâÖÖ±à³ÌÓïÑÔÓÃÀ´´¦ÀíÓÉÀ¨ºÅ£¨¼´¡°(¡±ºÍ¡°)¡±£©¹¹³ÉµÄÁÐ±í¡£Ô¼º²Âó¿¨ÎýÓÚ1960Äê·¢±íÁËһƪ·Ç·²µÄÂÛÎÄ£¬ËûÔÚÕâƪÂÛÎÄÖжԱà³ÌµÄ¹±Ï×ÓÐÈçÅ·¼¸ÀïµÂ¶Ô¼¸ºÎµÄ¹±Ï×.[1] ËûÏòÎÒÃÇչʾÁË£¬ÔÚÖ»¸ø¶¨¼¸¸ö¼òµ¥µÄ²Ù×÷·ûºÍÒ»¸ö±íʾº¯ÊýµÄ¼ÇºÅµÄ»ù´¡ÉÏ£¬ ÈçºÎ¹¹Ôì³öÒ»¸öÍêÕûµÄ±à³ÌÓïÑÔ. Âó¿¨Îý³ÆÕâÖÖÓïÑÔΪLisp£¬ ÒâΪList Processing£¬ ÒòΪËûµÄÖ÷Ҫ˼ÏëÖ®Ò»ÊÇÓÃÒ»ÖÖ¼òµ¥µÄÊý¾Ý½á¹¹±í(list)À´´ú±í´úÂëºÍÊý¾Ý. ÖµµÃ×¢ÒâµÄÊÇ£¬Âó¿¨ÎýËù×÷µÄ·¢ÏÖ£¬²»½öÊǼÆËã»úÊ·ÉÏ»®Ê±´úµÄ´óÊ£¬ ¶øÇÒÊÇÒ»ÖÖÔÚÎÒÃÇÕâ¸öʱ´ú±à³ÌÔ½À´Ô½Ç÷ÏòµÄģʽ¡£¿ÉÒÔ˵µ½Ä¿Ç°ÎªÖ¹Ö»ÓÐÁ½ÖÖÕæÕý¸É¾»ÀûÂ䣬 ʼÖÕÈçÒ»µÄ±à³Ìģʽ:CÓïÑÔģʽºÍLispÓïÑÔģʽ¡£´Ë¶þÕß¾ÍÏóÁ½×ù¸ßµØ£¬ ÔÚËüÃÇÖмäÊÇÓÈÈçÕÓÔóµÄµÍµØ.Ëæ׿ÆËã»ú±äµÃÔ½À´Ô½Ç¿´ó£¬Ð¿ª·¢µÄÓïÑÔÒ»Ö±ÔڼᶨµØÇ÷ÏòÓÚLispģʽ¡£¶þÊ®ÄêÀ´£¬¿ª·¢Ð±à³ÌÓïÑÔµÄÒ»¸öÁ÷ÐеÄÃؾ÷ÊÇ£¬È¡ CÓïÑԵļÆËãģʽ£¬Öð½¥µØÍùÉϼÓLispģʽµÄÌØÐÔ£¬ÀýÈçÔËÐÐʱÀàÐͺÍÎÞÓõ¥ÔªÊÕ¼¯¡£

LISPÓкܶàÖÖ·½ÑÔ£¬¸÷¸öʵÏÖÖеÄÓïÑÔ²»ÍêÈ«Ò»Ñù¡£1980Äê´úGuy L. Steele±àдÁËCommon LispÊÔͼ½øÐбê×¼»¯£¬Õâ¸ö±ê×¼±»´ó¶àÊý½âÊÍÆ÷ºÍ±àÒëÆ÷Ëù½ÓÊÜ¡£ÔÚUnix/LinuxϵͳÖУ¬»¹ÓÐÒ»ÖÖºÍEmacsÒ»ÆðµÄEmacs Lisp£¨¶øEmacsÕýÊÇÓÃLisp±àдµÄ£©·Ç³£Á÷ÐУ¬²¢½¨Á¢ÁË×Ô¼ºµÄ±ê×¼¡£

LISPµÄ×æÏÈÊÇ1950Äê´úCarnegie-Mellon´óѧµÄNewell¡¢Shaw¡¢Simon¿ª·¢µÄIPLÓïÑÔ¡£

LISPÓïÑÔµÄÖ÷ÒªÏÖ´ú°æ±¾°üÀ¨Common LispºÍScheme¡£

LISPÓÐ9´ó´´ÐÂ

Ö±µ½ÏÖÔÚ£¬Ô½Á÷ÐÐÓïÑÔÎüÊÕµÄLISPÔªËØÔ½¶à£¬Èçpython£¬ruby¡£LISPÖ±µ½ÏÖÔÚÈÔÈ»±»ÖÚ¶àÅ£ÈËÍƳ硣µ±ÄêLISPÓÐ9´ó´´Ð£¬50Äêºó£¬Éî¿ÌÓ°ÏìÁ˱à³ÌÓïÑԵĽø³Ì¡£¿É¼ûÒ»¸öÍêÉƵÄÀíÂÛ±»Êʵ±µØÓ¦Ó㬿ÉÒÔ±äµÃ¶àôǿ´ó£¬»À·¢¶àô¶áÄ¿µÄÉú»ú£º

  1. Ìõ¼þÓï¾ä¡£µ±³õµÄÓïÑÔÊÇûÓÐif elseµÄ£¬gotoͳÖÎÊÀ½ç¡£
  2. º¯ÊýÀàÐÍ¡£º¯Êý³ÉÁËÓïÑÔÀïµÄÀàÐÍ£¬¿ÉÒÔ±»±äÁ¿Ö¸´ú£¬¿ÉÒÔ±»µ±³É²ÎÊý´«À´´«È¥£¨µÄÒ»À๫ÃñµÄ±ØÒªÌõ¼þ£¬²Î¿¼SICPµÚÒ»Õ£©¡£ÕâÒ»Ìõ¿ÉÒÔ¼«´ó¼ò»¯±à³Ì£¬ÈÃÎÒÃÇд³ö·Ç³£Æ¯ÁÁµÄ³ÌÐò¡£ËùÒÔÏÖÔÚµÄÁ÷ÐÐÓïÑÔ·×·×¼ÓÈëÁËÕâ¸öÌØÐÔ£¨¿ÉϧJavaûÓÐ)¡£
  3. µÝ¹é¡£Õâ¸ö²»ÓÃ˵ÁË°É¡£
  4. ¶¯Ì¬ÀàÐÍ¡£smalltalk£¬ python£¬ ruby¡£¡£¡£Á¬C#Ò²ÓÐÒ»¸öÀàËƵÄvarÁË¡£
  5. À¬»øÊÕ¼¯¡£²»ÒªÒÔΪGCÊÇSmalltalkµÄ·¢Ã÷¹þ£¬¸ü²»ÊÇJavaµÄ¡£
  6. »ùÓÚ±í´ïʽµÄ±à³Ì¡£Èκαí´ïʽ¶¼¿ÉÒÔ³ÉΪÁíÒ»¸ö±í´ïʽµÄÒ»²¿·Ö¡£²»ÏñºÜ¶àÓïÑÔ£¬°Ñ±í´ïºÍ³ÂÊö·Ö¿ª¡£
  7. ·ûºÅÀàÐÍ¡£Õâ¸öÔÚpythonºÍrubyÀï±»²ÉÓ㬹ãÊÜ»¶Ó­¡£
  8. ´úÂë¼´½âÎöÊ÷¡£Õâ¸öÈÃLISPÄÜ·½±ãµØ¶¨Òåеľ䷨£¬²Ù×÷³ÌÐò±¾Éí£¬±àдԪ³ÌÐò£¬Éú³ÉÕæÕýÒâÒåÉϵĺꡣ
  9. ÓïÑÔÎÞʱ²»ÔÚ¡£´úÂëÔËÐÐ/½âÎö¿ÉÒÔÔÚÈκÎʱºò·¢Éú¡£ÕâµãºÍ8.ÅäºÏ¿ÉÒÔÈÃÓïÑÔµÄÀ©Õ¹ºÍ½»Á÷±äµÃ·Ç³£ÈÝÒס£

»ù±¾½éÉÜ

LispµÄ±í´ïʽÊÇÒ»¸öÔ­×Ó(atom)»ò±í(list)£¬Ô­×Ó(atom)ÊÇÒ»¸ö×ÖĸÐòÁУ¬Èçabc£»±íÊÇÓÉÁã¸ö»ò¶à¸ö±í´ïʽ×é³ÉµÄÐòÁУ¬±í´ïʽ֮¼äÓÿոñ·Ö¸ô¿ª£¬·ÅÈëÒ»¶ÔÀ¨ºÅÖУ¬È磺

abc
()
(abc xyz)
(a b (c) d)

×îºóÒ»¸ö±íÊÇÓÉËĸöÔªËع¹³ÉµÄ£¬ÆäÖеÚÈý¸öÔªËر¾ÉíÒ²ÊÇÒ»¸ö±í¡£

ÕýÈçËãÊý±í´ïʽ1+1ÓÐÖµ2Ò»Ñù£¬LispÖеıí´ïʽҲÓÐÖµ£¬Èç¹û±í´ïʽeµÃ³öÖµv£¬ÎÒÃÇ˵e·µ»Øv¡£Èç¹ûÒ»¸ö±í´ïʽÊÇÒ»¸ö±í£¬ÄÇôÎÒÃǰѱíÖеĵÚÒ»¸öÔªËؽÐ×ö²Ù×÷·û£¬ÆäÓàµÄÔªËؽÐ×ö×Ô±äÁ¿¡£

ÏÂÃæÊÇÒ»¸öÔÚ±ê×¼Êä³öÉ豸ÉÏÊä³öHello WorldµÄ¼òµ¥Common Lisp³ÌÐò£¬ÕâÖÖ³ÌÐòͨ³£×÷Ϊ¿ªÊ¼Ñ§Ï°±à³ÌÓïÑÔʱµÄµÚÒ»¸ö³ÌÐò£º(format t ¡°Hello£¬ world!~%¡±)

LispµÄ7¸ö¹«Àí£¨»ù±¾²Ù×÷·û£©£º quote£¬atom£¬eq£¬car£¬cdr£¬cons£¬ºÍ cond.

ÏÖÔÚÎÒÃÇÓÐÁ˵ÚÒ»¸öÐèÒªÇó³ö×Ô±äÁ¿ÖµµÄ²Ù×÷·û£¬ÈÃÎÒÃÇÀ´¿´¿´quote²Ù×÷·ûµÄ×÷Ó᪡ªÍ¨¹ýÒýÓÃ(quote)Ò»¸ö±í£¬ÎÒÃDZÜÃâËü±»ÇóÖµ¡£Ò»¸öδ±»ÒýÓõıí´ïʽ×÷Ϊ×Ô±äÁ¿£¬atom½«ÆäÊÓΪ´úÂ룬ÀýÈ磺

> (atom (atom ¡®a))
t

·´Ö®Ò»¸ö±»ÒýÓõıí½ö½ö±»ÊÓΪ±í

> (atom ¡®(atom ¡®a))
()

ÒýÓÿ´ÉÏÈ¥ÓÐЩÆæ¹Ö£¬ÒòΪÄãºÜÄÑÔÚÆäËüÓïÑÔÖÐÕÒµ½ÀàËƵĸÅÄµ«ÕýÊÇÕâÒ»ÌØÕ÷¹¹³ÉÁËLisp×îΪÓëÖÚ²»Í¬µÄÌص㡪¡ª´úÂëºÍÊý¾ÝʹÓÃÏàͬµÄ½á¹¹À´±íʾ£¬¶øÎÒÃÇÓÃquoteÀ´Çø·ÖËüÃÇ¡£

º¯ÊýµÄ±íʾ

µ±±í´ïʽÒÔÆ߸öԭʼ²Ù×÷·ûÖеÄÎå¸ö¿ªÍ·Ê±£¬ËüµÄ×Ô±äÁ¿×ÜÊÇÒªÇóÖµµÄ¡£ ÎÒÃdzÆÕâÑùµÄ²Ù×÷·ûΪº¯Êý¡£½Ó×ÅÎÒÃǶ¨ÒåÒ»¸ö¼ÇºÅÀ´ÃèÊöº¯Êý¡£º¯Êý±íʾΪ(lambda (¡­) e)£¬ÆäÖÐ ¡­ÊÇÔ­×Ó(½Ð×ö²ÎÊý)£¬eÊDZí´ïʽ¡£Èç¹û±í´ïʽµÄµÚÒ»¸öÔªËØÐÎʽÈçÉÏ((lambda (¡­) e) ¡­) Ôò³ÆΪº¯Êýµ÷Óá£ËüµÄÖµ¼ÆËãÈçÏ£¬Ã¿Ò»¸ö±í´ïʽÏÈÇóÖµ£¬È»ºóeÔÙÇóÖµ¡£ÔÚeµÄÇóÖµ¹ý³ÌÖУ¬Ã¿¸ö³öÏÖÔÚeÖеĵÄÖµÊÇÏàÓ¦µÄÔÚ×î½üÒ»´ÎµÄº¯Êýµ÷ÓÃÖеÄÖµ¡£

> ((lambda (x) (cons x ¡®(b))) ¡®a)
(a b)
> ((lambda (x y) (cons x (cdr y)))
¡®z
¡®(a b c))
(z b c)

Èç¹ûÒ»¸ö±í´ïʽµÄµÚÒ»¸öÔªËØfÊÇÔ­×ÓÇÒf²»ÊÇԭʼ²Ù×÷·û (f ¡­) ²¢ÇÒfµÄÖµÊÇÒ»¸öº¯Êý(lambda (¡­))£¬ÔòÒÔÉϱí´ïʽµÄÖµ¾ÍÊÇ ((lambda (¡­) e) ¡­) µÄÖµ¡£»»¾ä»°Ëµ£¬²ÎÊýÔÚ±í´ïʽÖв»µ«¿ÉÒÔ×÷Ϊ×Ô±äÁ¿Ò²¿ÉÒÔ×÷Ϊ²Ù×÷·ûʹÓÃ:

> ((lambda (f) (f ¡®(b c)))
¡®(lambda (x) (cons ¡®a x)))
(a b c)

ÓÐÁíÍâÒ»¸öº¯Êý¼ÇºÅʹµÃº¯ÊýÄÜÌá¼°Ëü±¾Éí£¬ÕâÑùÎÒÃǾÍÄÜ·½±ãµØ¶¨ÒåµÝ¹éº¯Êý¡£¼ÇºÅ (label f (lambda (¡­) e)) ±íʾһ¸öÏó(lambda (¡­) e)ÄÇÑùµÄº¯Êý£¬¼ÓÉÏÕâÑùµÄÌØÐÔ: ÈκγöÏÖÔÚeÖеÄf½«ÇóֵΪ´Ëlabel±í´ïʽ£¬ ¾ÍºÃÏófÊǴ˺¯ÊýµÄ²ÎÊý¡£

¼ÙÉèÎÒÃÇÒª¶¨Ò庯Êý(subst x y z)£¬ËüÈ¡±í´ïʽx£¬Ô­×ÓyºÍ±íz×ö²ÎÊý£¬·µ»ØÒ»¸öÏózÄÇÑùµÄ±í£¬²»¹ýzÖгöÏÖµÄy(ÔÚÈκÎǶÌײã´ÎÉÏ)±»x´úÌæ¡£

> (subst ¡®m ¡®b ¡®(a b (a b c) d))
(a m (a m c) d)

ÎÒÃÇ¿ÉÒÔÕâÑù±íʾ´Ëº¯Êý

(label subst (lambda (x y z)
(cond ((atom z)
(cond ((eq z y) x)
(¡®t z)))
(¡®t (cons (subst x y (car z))
(subst x y (cdr z)))))))

ÎÒÃǼò¼Çf=(label f (lambda (¡­) e))Ϊ(defun f (¡­) e)ÓÚÊÇ

(defun subst (x y z)
(cond ((atom z)
(cond ((eq z y) x)
(¡®t z)))
(¡®t (cons (subst x y (car z))
(subst x y (cdr z))))))

żȻµØÎÒÃÇÔÚÕâ¶ù¿´µ½ÈçºÎдcond±í´ïʽµÄȱʡ×Ó¾ä. µÚÒ»¸öÔªËØÊÇ¡¯tµÄ×Ó¾ä×ÜÊÇ»á³É¹¦µÄ. ÓÚÊÇ (cond (x y) (¡®t z))µÈͬÓÚÎÒÃÇÔÚijЩÓïÑÔÖÐдµÄ if x then y else z¡£

һЩº¯Êý

¼ÈÈ»ÎÒÃÇÓÐÁ˱íʾº¯ÊýµÄ·½·¨£¬ÎÒÃǸù¾ÝÆ߸öԭʼ²Ù×÷·ûÀ´¶¨ÒåһЩеĺ¯Êý. ΪÁË·½±ãÎÒÃÇÒý½øһЩ³£¼ûģʽµÄ¼ò¼Ç·¨. ÎÒÃÇÓÃcxr£¬ÆäÖÐxÊÇa»òdµÄÐòÁУ¬À´¼ò¼ÇÏàÓ¦µÄcarºÍcdrµÄ×éºÏ. ±ÈÈç(cadr e)ÊÇ(car (cdr e))µÄ¼ò¼Ç£¬Ëü·µ»ØeµÄµÚ¶þ¸öÔªËØ.

> (cadr ¡®((a b) (c d) e))
(c d)
> (caddr ¡®((a b) (c d) e))
e
> (cdar ¡®((a b) (c d) e))
(b)

ÎÒÃÇ»¹ÓÃ(list ¡­)±íʾ(cons ¡­(cons ¡®()) ¡­).

> (cons ¡®a (cons ¡®b (cons ¡®c ¡®())))
(a b c)
> (list ¡®a ¡®b ¡®c)
(a b c)

ÏÖÔÚÎÒÃǶ¨ÒåһЩк¯Êý. ÎÒÔÚº¯ÊýÃûºóÃæ¼ÓÁ˵㣬ÒÔÇø±ðº¯ÊýºÍ¶¨ÒåËüÃǵÄԭʼº¯Êý£¬Ò²±ÜÃâÓëÏÖ´æµÄcommon LispµÄº¯Êý³åÍ».

(null. x)²âÊÔËüµÄ×Ô±äÁ¿ÊÇ·ñÊÇ¿Õ±í.

(defun null. (x)
(eq x ¡®()))
> (null. ¡®a)
()
> (null. ¡®())
t

(and. x y)·µ»ØtÈç¹ûËüµÄÁ½¸ö×Ô±äÁ¿¶¼ÊÇt£¬ ·ñÔò·µ»Ø().

(defun and. (x y)
(cond (x (cond (y ¡®t) (¡®t ¡®())))
(¡®t ¡®())))
> (and. (atom ¡®a) (eq ¡®a ¡®a))
t
> (and. (atom ¡®a) (eq ¡®a ¡®b))
()

(not. x)·µ»ØtÈç¹ûËüµÄ×Ô±äÁ¿·µ»Ø()£¬·µ»Ø()Èç¹ûËüµÄ×Ô±äÁ¿·µ»Øt.

(defun not. (x)
(cond (x ¡®())
(¡®t ¡®t)))
> (not. (eq ¡®a ¡®a))
()
> (not. (eq ¡®a ¡®b))
t

(append. x y)È¡Á½¸ö±í²¢·µ»ØËüÃǵÄÁ¬½á.

(defun append. (x y)
(cond ((null. x) y)
(¡®t (cons (car x) (append. (cdr x) y)))))
> (append. ¡®(a b) ¡®(c d))
(a b c d)
> (append. ¡®() ¡®(c d))
(c d)

(pair. x y)È¡Á½¸öÏàͬ³¤¶ÈµÄ±í£¬·µ»ØÒ»¸öÓÉË«ÔªËØ±í¹¹³ÉµÄ±í£¬Ë«ÔªËرíÊÇÏàӦλÖõÄx£¬yµÄÔªËضÔ.

(defun pair. (x y)
(cond ((and. (null. x) (null. y)) ¡®())
((and. (not. (atom x)) (not. (atom y)))
(cons (list (car x) (car y))
(pair. (cdr) (cdr y))))))
> (pair. ¡®(x y z) ¡®(a b c))
((x a) (y b) (z c))

(assoc. x y)È¡Ô­×ÓxºÍÐÎÈçpair.º¯ÊýËù·µ»ØµÄ±íy£¬·µ»ØyÖеÚÒ»¸ö·ûºÏÈçÏÂÌõ¼þµÄ±íµÄµÚ¶þ¸öÔªËØ:ËüµÄµÚÒ»¸öÔªËØÊÇx.

(defun assoc. (x y)
(cond ((eq (caar y) x) (cadar y))
(¡®t (assoc. x (cdr y)))))
> (assoc. ¡®x ¡®((x a) (y b)))
a
> (assoc. ¡®x ¡®((x new) (x a) (y b)))
new

Ò»¸ö¾ªÏ²

Òò´ËÎÒÃÇÄܹ»¶¨Ò庯ÊýÀ´Á¬½Ó±í£¬Ìæ»»±í´ïʽµÈµÈ.Ò²ÐíËãÊÇÒ»¸öÓÅÃÀµÄ±íʾ·¨£¬ ÄÇÏÂÒ»²½ÄØ? ÏÖÔÚ¾ªÏ²À´ÁË. ÎÒÃÇ¿ÉÒÔдһ¸öº¯Êý×÷ΪÎÒÃÇÓïÑԵĽâÊÍÆ÷:´Ëº¯ÊýÈ¡ÈÎÒâLisp±í´ïʽ×÷×Ô±äÁ¿²¢·µ»ØËüµÄÖµ. ÈçÏÂËùʾ:

(defun eval. (e a)
(cond
((atom e) (assoc. e a))
((atom (car e))
(cond
((eq (car e) ¡®quote) (cadr e))
((eq (car e) ¡®atom) (atom (eval. (cadr e) a)))
((eq (car e) ¡®eq) (eq (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e) ¡®car) (car (eval. (cadr e) a)))
((eq (car e) ¡®cdr) (cdr (eval. (cadr e) a)))
((eq (car e) ¡®cons) (cons (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e) ¡®cond) (evcon. (cdr e) a))
(¡®t (eval. (cons (assoc. (car e) a)
(cdr e))
a))))
((eq (caar e) ¡®label)
(eval. (cons (caddar e) (cdr e))
(cons (list (cadar e) (car e)) a)))
((eq (caar e) ¡®lambda)
(eval. (caddar e)
(append. (pair. (cadar e) (evlis. (cdr e) a))
a)))))
(defun evcon. (c a)
(cond ((eval. (caar c) a)
(eval. (cadar c) a))
(¡®t (evcon. (cdr c) a))))
(defun evlis. (m a)
(cond ((null. m) ¡®())
(¡®t (cons (eval. (car m) a)
(evlis. (cdr m) a)))))

eval.µÄ¶¨Òå±ÈÎÒÃÇÒÔÇ°¿´µ½µÄ¶¼Òª³¤. ÈÃÎÒÃÇ¿¼ÂÇËüµÄÿһ²¿·ÖÊÇÈçºÎ¹¤×÷µÄ. eval.ÓÐÁ½¸ö×Ô±äÁ¿: eÊÇÒªÇóÖµµÄ±í´ïʽ£¬ aÊÇÓÉһЩ¸³¸øÔ­×ÓµÄÖµ¹¹³ÉµÄ±í£¬ÕâЩֵÓеãÏóº¯Êýµ÷ÓÃÖеIJÎÊý. Õâ¸öÐÎÈçpair.µÄ·µ»ØÖµµÄ±í½Ð×ö»·¾³. ÕýÊÇΪÁ˹¹ÔìºÍËÑË÷ÕâÖÖ±íÎÒÃDzÅдÁËpair.ºÍassoc.. eval.µÄ¹Ç¼ÜÊÇÒ»¸öÓÐËĸö×Ó¾äµÄcond±í´ïʽ. ÈçºÎ¶Ô±í´ïʽÇóֵȡ¾öÓÚËüµÄÀàÐÍ. µÚÒ»¸ö×Ӿ䴦ÀíÔ­×Ó. Èç¹ûeÊÇÔ­×Ó£¬ ÎÒÃÇÔÚ»·¾³ÖÐÑ°ÕÒËüµÄÖµ:

> (eval. ¡®x ¡®((x a) (y b)))
a

µÚ¶þ¸ö×Ó¾äÊÇÁíÒ»¸öcond£¬ Ëü´¦ÀíÐÎÈç(a ¡­)µÄ±í´ïʽ£¬ ÆäÖÐaÊÇÔ­×Ó. Õâ°üÀ¨ËùÓеÄԭʼ²Ù×÷·û£¬ ÿ¸ö¶ÔÓ¦Ò»Ìõ×Ó¾ä.

> (eval. ¡®(eq ¡®a ¡®a) ¡®())
t
> (eval. ¡®(cons x ¡®(b c))
¡®((x a) (y b)))
(a b c)

Õ⼸¸ö×Ó¾ä(³ýÁËquote)¶¼µ÷ÓÃeval.À´Ñ°ÕÒ×Ô±äÁ¿µÄÖµ. ×îºóÁ½¸ö×Ó¾ä¸ü¸´ÔÓЩ. ΪÁËÇócond±í´ïʽµÄÖµÎÒÃǵ÷ÓÃÁËÒ»¸ö½Ð evcon.µÄ¸¨Öúº¯Êý. ËüµÝ¹éµØ¶Ôcond×Ó¾ä½øÐÐÇóÖµ£¬Ñ°ÕÒµÚÒ»¸öÔªËØ·µ»ØtµÄ×Ó¾ä. Èç¹ûÕÒµ½ÁËÕâÑùµÄ×Ӿ䣬 Ëü·µ»Ø´Ë×Ó¾äµÄµÚ¶þ¸öÔªËØ.

> (eval. ¡®(cond ((atom x) ¡®atom)
(¡®t ¡®list))
¡®((x ¡®(a b))))
list

µÚ¶þ¸ö×Ó¾äµÄ×îºó²¿·Ö´¦Àíº¯Êýµ÷ÓÃ. Ëü°ÑÔ­×ÓÌ滻ΪËüµÄÖµ(Ó¦¸ÃÊÇlambda »òlabel±í´ïʽ)È»ºó¶ÔËùµÃ½á¹û±í´ïʽÇóÖµ. ÓÚÊÇ

(eval. ¡®(f ¡®(b c))
¡®((f (lambda (x) (cons ¡®a x)))))

±äΪ

(eval. ¡®((lambda (x) (cons ¡®a x)) ¡®(b c))
¡®((f (lambda (x) (cons ¡®a x)))))

Ëü·µ»Ø(a b c). eval.µÄ×îºócondÁ½¸ö×Ӿ䴦ÀíµÚÒ»¸öÔªËØÊÇlambda»òlabelµÄº¯Êýµ÷ÓÃ.ΪÁ˶Ôlabel ±í´ïʽÇóÖµ£¬ ÏȰѺ¯ÊýÃûºÍº¯Êý±¾ÉíѹÈë»·¾³£¬ È»ºóµ÷ÓÃeval.¶ÔÒ»¸öÄÚ²¿ÓÐ lambdaµÄ±í´ïʽÇóÖµ. ¼´:

(eval. ¡®((label firstatom (lambda (x)
(cond ((atom x) x)
(¡®t (firstatom (car x))))))
y)
¡®((y ((a b) (c d)))))

±äΪ

(eval. ¡®((lambda (x)
(cond ((atom x) x)
(¡®t (firstatom (car x)))))
y)
¡®((firstatom
(label firstatom (lambda (x)
(cond ((atom x) x)
(¡®t (firstatom (car x)))))))
(y ((a b) (c d)))))

×îÖÕ·µ»Øa. ×îºó£¬¶ÔÐÎÈç((lambda (¡­) e) ¡­)µÄ±í´ïʽÇóÖµ£¬Ïȵ÷ÓÃevlis.À´ÇóµÃ×Ô±äÁ¿(¡­)¶ÔÓ¦µÄÖµ(¡­)£¬°Ñ()¡­()Ìí¼Óµ½»·¾³À È»ºó¶ÔeÇóÖµ. ÓÚÊÇ

(eval. ¡®((lambda (x y) (cons x (cdr y)))
¡®a
¡®(b c d))
¡®())

±äΪ

(eval. ¡®(cons x (cdr y))
¡®((x a) (y (b c d))))

×îÖÕ·µ»Ø(a c d).

ºó¹û£º¼ÈÈ»Àí½âÁËevalÊÇÈçºÎ¹¤×÷µÄ£¬ ÈÃÎÒÃǻعýÍ·¿¼ÂÇÒ»ÏÂÕâÒâζ×Åʲô. ÎÒÃÇÔÚÕâ¶ùµÃµ½ÁËÒ»¸ö·Ç³£ÓÅÃÀµÄ¼ÆËãÄ£ÐÍ. ½öÓÃquote£¬atom£¬eq£¬car£¬cdr£¬cons£¬ºÍcond£¬ ÎÒÃǶ¨ÒåÁ˺¯Êýeval.£¬ËüÊÂʵÉÏʵÏÖÁËÎÒÃǵÄÓïÑÔ£¬ÓÃËü¿ÉÒÔ¶¨ÒåÈκÎÎÒÃÇÏëÒªµÄ¶îÍâµÄº¯Êý.

µ±È»ÔçÒÑÓÐÁ˸÷ÖÖ¼ÆËãÄ£ÐͨC×îÖøÃûµÄÊÇͼÁé»ú. µ«ÊÇͼÁé»ú³ÌÐòÄÑÒÔ¶Á¶®. Èç¹ûÄãÒªÒ»ÖÖÃèÊöËã·¨µÄÓïÑÔ£¬ Äã¿ÉÄÜÐèÒª¸ü³éÏóµÄ£¬ ¶øÕâ¾ÍÊÇÔ¼º²Âó¿¨Îý¶¨Òå LispµÄÄ¿±êÖ®Ò».

Ô¼º²Âó¿¨ÎýÓÚ1960Ä궨ÒåµÄÓïÑÔ»¹È±²»ÉÙ¶«Î÷. ËüûÓи±×÷Ó㬠ûÓÐÁ¬ÐøÖ´ÐÐ (ËüµÃºÍ¸±×÷ÓÃÔÚÒ»Æð²ÅÓÐÓÃ)£¬ ûÓÐʵ¼Ê¿ÉÓõÄÊý£¬Ã»Óж¯Ì¬¿ÉÊÓÓò. µ«ÕâЩÏÞÖÆ¿ÉÒÔÁîÈ˾ªÑȵØÓü«ÉٵĶîÍâ´úÂëÀ´²¹¾È. SteeleºÍSussmanÔÚһƪ½Ð×ö¡°½âÊÍÆ÷µÄÒÕÊõ¡±µÄÖøÃûÂÛÎÄÖÐÃèÊöÁËÈçºÎ×öµ½Õâµã¡£

Èç¹ûÄãÀí½âÁËÔ¼º²Âó¿¨ÎýµÄeval£¬ ÄÇÄã¾Í²»½ö½öÊÇÀí½âÁ˳ÌÐòÓïÑÔÀúÊ·ÖеÄÒ»¸ö½×¶Î. ÕâЩ˼ÏëÖÁ½ñÈÔÊÇLispµÄÓïÒåºËÐÄ. ËùÒÔ´ÓijÖÖÒâÒåÉÏ£¬ ѧϰԼº²Âó¿¨ÎýµÄÔ­ÖøÏòÎÒÃÇչʾÁËLisp¾¿¾¹ÊÇʲô. ÓëÆä˵LispÊÇÂó¿¨ÎýµÄÉè¼Æ£¬²»Èç˵ÊÇËûµÄ·¢ÏÖ. Ëü²»ÊÇÉúÀ´¾ÍÊÇÒ»ÃÅÓÃÓÚÈ˹¤ÖÇÄÜ£¬ ¿ìËÙÔ­ÐÍ¿ª·¢»òͬµÈ²ã´ÎÈÎÎñµÄÓïÑÔ. ËüÊÇÄãÊÔͼ¹«Àí»¯¼ÆËãµÄ½á¹û(Ö®Ò»).

Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ Öм¶ÓïÑÔ£¬ ¼´±»Öмä²ã³ÌÐòԱʹÓõÄÓïÑÔ£¬ ÕýÒ»ÖµØÏòLisp¿¿½ü. Òò´Ëͨ¹ýÀí½âevalÄãÕýÔÚÃ÷°×½«À´µÄÖ÷Á÷¼ÆËãģʽ»áÊÇʲôÑù.

Peter Norvig£º±à³ÌÓïÑÔµÄÑ¡Ôñ²¢²»ÖØÒª(ת)

Lisp±»Ðí¶à×ÊÉî³ÌÐòÔ±ÊÓΪ±à³ÌÓïÑÔÖеÄÊ¥±­£¬ÒòΪѧÆðÀ´ºÜÄÑ¡£ÖøÃû³ÌÐòÔ±¡¢×îÈÈÃŵļ¼ÊõÎÊ´ðÍøÕ¾StackOverflow´´Ê¼ÈËJoel SpolskyÔø¾­ÔÚ¡°JavaÓïÑÔѧУµÄΣÏÕÐÔ¡±Ò»ÎÄÖÐ˵£¬×Ô¼ºµ±Äê ÔÚ´óѧÀïѧϰÓÃLispµÄµ¼ÂۿγÌÒ²Êǿ಻¿°ÑÔ£¬¶øLispÕâÑùµÄº¯ÊýʽÓïÑÔʵ¼Ê¿ª·¢Öв¢²»³£Ó㬵«ÊÇÒ»µ©µ½ÁËÌåÏÖÓÅÊƵÄʱºò£¬ÄãÈç¹û²»¶®£¬½«Ê§Ö®Ç§Àï¡£Ëû»¹ÈÏΪ£¬GoogleµÄºËÐļ¼ÊõÖ®Ò»MapReduce¾ÍÀ´×Ôº¯ÊýʽÓïÑÔ£¬¶øÇÒʹGoogleÁìÏÈ΢Èí¶àÄê¡£Çë×¢Ò⣬SpolskyÔø¾­1990Äê´ú΢ÈíµÄExcelÏîÄ¿¾­Àí£¬VBAµÄÖ÷Òª´´ÔìÕß¡£

¡¶Unix±à³ÌÒÕÊõ¡·µÄ×÷ÕßEric RaymondÒ²ÔÚ¡°ÈçºÎ³ÉΪºÚ¿Í¡±£¨Ó¢Îİ棩ÖÐ˵¹ý£¬LispÊǶԺڿÍÌرðÖØÒªµÄÓïÑÔ£¬¡°ÕÆÎÕÁËÖ®ºó£¬Äã»áµÃµ½·á¸»µÄÆôµÏºÍ¾­Ñé¡£ ¼´Ê¹Êµ¼ÊÉϺÜÉÙʹÓÃLisp£¬ÕâЩ¾­ÑéÒ²»áʹÄãÔÚÒÔºóµÄÈÕ×ÓÀï³ÉΪ¸üºÃµÄ³ÌÐòÔ±¡£¡±

¶øPaul Graham¸üÊÇLispµÄÍ·ºÅ´µ¹ÄÊÖ£¬ËûÔøÓëÈä³æ²¡¶¾·¢Ã÷ÕßRobert MorrisÒ»Æ𣬳ɹ¦µØÓÃLisp¿ª·¢ÀúÊ·ÉϵÚÒ»¸öWebÓ¦Ó᪡ªViaWeb£¬²¢¸ß¼ÛÂô¸øYahooÖ¸»¡£ËûÔÚ2001ÄêдÁËһƪÐû´«LispµÄÃûÎÄ¡°Beating the Averages¡±£¨Ó¢ÎÄ£©£¬ÆäÖÐ˵µ½£º¡°LispÖ®ËùÒÔ¼«ÎªÓÅÐ㣬²¢²»ÊÇÒòΪֻÓÐÌú¸Ë·ÛË¿²ÅÖªµÀµÄijЩħÊõ°ãµÄÐÔÖÊ£¬¶øÔÚÓÚËüȷʵÊÇ×îÇ¿´óµÄ±à³ÌÓïÑÔ¡£´ó¼Ò²»ÓÃËüµÄÔ­Òò£¬ÔÚÓÚ±à³ÌÓïÑÔ²»Ö»ÊǼ¼Êõ£¬¶øÇÒÒ²ÊÇ˼άϰ¹ß£¬ÕâÊǸıäÆðÀ´×îÂýµÄ¶«Î÷¡£¡±

ÓÐÒâ˼µÄÊÇ£¬ÃÀ¹úʱ¼ä10ÔÂ18ÈÕ£¬ÖøÃû¼¼ÊõÐÂÎÅÍøÕ¾Hacker NewsÉÏ£¬ÃûΪkung-fu-masterµÄÓû§·¢ÁËһƪÃûΪ¡°ÎÊPG: LispÓëPython (2010)¡±µÄÌû×Ó£¬ÄÚÈݺܼòµ¥£º¡°ºÃÏñÐí¶àLispÀÏǹ¶¼¿ªÊ¼×ª¶øÓÃPythonµÄ£¨±ÈÈçPeter Norvig£©¡£½ñÌìÄãÔõô¿´LispÓëPython£¿¡±

ÕâÀïµÄPG¾ÍÊÇÖ¸Hacker NewsµÄ´´Ê¼ÈË¡¢ÖøÃûLisp³ÌÐòÔ±Óë´µ¹ÄÊÖPaul Graham¡£¶øÆäÖÐÌáµ½µÄPeter NorvigÔòÊÇÁíÒ»¸öÖøÃûLisp³ÌÐòÔ±£¬ÏÖÈÎGoogleÑз¢×ܼࡣËûÓÐһƪ¾­µäµÄÎÄÕ¡°Ê®Äêѧ»á±à³Ì¡±£¨Ó¢Îİ棩£¬ÏàÐÅ´ó¼Ò¶¼ÒѾ­¿´¹ý£¬ËûµÄÊ×Ñ¡ÍƼöÓïÑÔµ±È»Ò²ÊÇLisp£¨¸ü׼ȷµÄ˵ÊÇLispµÄ·½ÑÔScheme£©¡£

Ãæ¶ÔÕâÑùÖ±½ÓµÄÎÊÌ⣬ר¼ÒÃÇÊÇÔõô»Ø´ðµÄÄØ£¿

Paul Graham˵£º

ÕâÎÊÌâºÃÏñÀ´×Ô2005Äê¶ø²»ÊÇ2010Äê¡£LispÏÖÔÚÓÉÓÚClojure£¨LispµÄÏÖ´ú·½ÑÔ£¬¿ÉÒÔÔËÐÐÔÚJVMºÍ.NETÉÏ¡ª¡ªCSDN±àÕß×¢£©µÄ³öÏÖ£¬ÒѾ­ÓÖ±äµÃʱ÷ÖÁË¡£µ±È»PythonÒ²ÓкܺõĿ⣬µ«ÊÇÎÒ¾õµÃÓÃȱ·¦ºêµÄÓïÑÔ±à³ÌºÜÊܾÖÏÞ¡£

Ðí¶àÍøÓѶÔPythonûÓкêµÄÎÊÌâ½øÐÐÁËÌÖÂÛ¡£ÓÐÈË˵²»Ö§³ÖºêÊdzöÓÚ´úÂë¿É¶ÁÐԵĿ¼ÂÇ¡£¶ø¸ü¶àµÄÈËÔòÈÏͬºêÊÇÒ»ÖÖ³éÏ󹤾ߣ¬Èκι¤¾ß¶¼»á±»ÎóÓá¢ÀÄÓ㬵«²¢²»±íʾ¹¤¾ß±¾ÉíÓÐÎÊÌâ¡£

ÁíÒ»Lispר¼Ò£¬¡¶Coder at Work¡·ºÍ¡¶Practical Common Lisp¡·×÷Õß>Peter SeibelÒ²¼ÓÈëÁËÌÖÂÛ£¨Ëû×î½üæÓڱ༭һÖÖÔÓÖ¾Code Quarterly£©¡£Ëû˵£º×Ô¼ºÓëPeter NorvigÓÐÀàËƵÄÌåÑé¡£ËäÈ»×Ô¼ºLisp·Ç³£ÊìÁ·£¬µ«ÊÇÔÚ±í´ïËã·¨·½ÃæPythonÊÇ×î¼ÑÑ¡Ôñ¡£²»¹ý£¬Ïà±ÈLispʵÏÖ£¬CPythonµÄÔËÐÐËÙ¶ÈÂýµÃ¾ªÈË£¬ÉõÖÁ²î5-10±¶¡£

¶øPeter NorvigÒ²º±¼ûµØÏÖ³öÕæÉí£¬¸ø³öÁË×Ô¼ºµÄ»Ø´ð£¬ÄÚÈÝÒ»Èç¼ÈÍùµØ¾­µä£º

ÎÒÊÇPeter Norvig¡£ÎÒתÏòPython²»ÊÇÒòΪËü±ÈLisp¸üºÃ¡¢¸üÁîÈËÂúÒâ¡¢¸üʵÓ㬶øÊÇÒòΪËüÓÃ×÷α´úÂë¸üºÏÊÊ¡£Ðí¶àѧÉú˵£¬ÔÚ¡¶È˹¤ÖÇÄÜ¡·£¨NorvigÓëRussellºÏÖøµÄ¾­µä½Ì²Ä£©Ò»ÊéÖеÄα´úÂëÓëÎÒÃÇÔÚÍøÉÏÌṩµÄLisp´úÂëÖ®¼ä½øÐÐת»»Ì«ÄÑÁË¡£ÓÚÊÇÎÒҪѰÕÒÒ»ÖÖ¸ü½üËÆα´úÂëµÄÓïÑÔ£¬·¢ÏÖPythonÊÇ×îºÏÊʵġ£È»ºóÎÒ¾Í×ÔѧÁËPython£¬ÊìÁ·µ½×ãÒÔʵÏֽ̲ÄÖÐʾÀýµÄµØ²½¡£ÎÒ·¢ÏÖPython¶ÔÓÚһЩÀàÐ͵ÄСÎÊÌâ·Ç³£ºÏÊÊ£¬ÓÐЩ¿âÒ²ÊÇÎÒÓëÆäËûµÄһЩ´úÂ루°üÀ¨ÔÚGoogleÄÚºÍÍøÉÏÆäËûµØ·½µÄ´úÂ룩¼¯³É·Ç³£ÐèÒªµÄ¡£ ÎÒÈÏΪLisp¶Ô¸ü´óµÄÏîÄ¿ºÍ±àÒëËٶȺÜÖØÒªµÄÓ¦ÓöøÑÔÈÔÈ»¾ßÓÐÓÅÊÆ¡£µ«ÊÇÔÚÖ÷ҪĿµÄÊǽ»Á÷¶ø·Ç±à³ÌµÄʱºò£¨±ÈÈçÕë¶ÔÊýÁ¿ÖÚ¶àµÄѧÉú£©£¬Python¸üÓÐÓÅÊÆ¡£

¾Í¸üÒ»°ãÒâÒåÉϵıà³Ì¶øÑÔ£¬ÔÚGoogleºÍÆäËûµØ·½£¬ÎÒÈÏΪÓïÑÔµÄÑ¡Ôñ²¢²»ÈçÆäËû·½ÃæµÄÑ¡ÔñÄÇôÖØÒª£ºÈç¹ûÄãÓÐÁËÕýÈ·µÄ×ÜÌå¼Ü¹¹¡¢ÕýÈ·µÄ³ÌÐòÔ±ÍŶӡ¢ÕýÈ·µÄ¿ª·¢¹ý³Ì£¨Äܹ»¿ìËÙ¿ª·¢¡¢³ÖÐø¸ÄÉÆ£©£¬ÄÇôºÜ¶àÓïÑÔ¶¼ÄÜʤÈΣ»µ«Èç¹ûÒÔÉϵĶ«Î÷ÄãûÓУ¬ÄÇÎÞÂÛÑ¡ÔñʲôÓïÑÔ£¬Ä㶼»áÏÝÈëÒ»ÍÅÔã¡£

»¹ÓÐÈËÕÒ³ö½ñÄê2ÔÂNorvigÔÚÒ»´Î²É·Ã£¨ÎÞ·¨Ö±½Ó·ÃÎÊ£©ÖÐÀàËƵĻ°£¬Í¸Â¶ÁËGoogleÄÚ²¿µÄһЩÐÅÏ¢£º

(1) Google×ʼËƺõºËÐijÌÐòÔ±¶¼ÊÇÓÃC++µÄ£¬Ð§Âʺܸߡ£Õⲿ·ÖÐγÉÁ˹«Ë¾µÄÎÄ»¯¡£

(2) GoogleÔçÆÚµÄLisp³ÌÐòÔ±(Erann Gat) ×¢Òâµ½ÆäËû³ÌÐòÔ±ºÍ×Ô¼ºµÄЧÂʲ¶à£¬ÉõÖÁ¸üºÃ¡£¹Ø¼ü»¹ÊÇÔÚÈË£¬Óë20ÄêÇ°Ïà±È£¬ÏÖÔÚÓïÑÔµÄÑ¡Ôñ²»ÄÇôÖØÒªÁË¡£

(3) LispÊÇΪµ¥¸ö³ÌÐòÔ±»òÕßһС×é³ÌÐòÔ±½øÐÐ̽Ë÷ÐÔ¹¤×÷¶øרÃÅÉè¼ÆµÄ¡­¡­Èç¹ûÎÒÏë×Ô¼ºÔÚÖÜÄ©Ð޸ĴúÂ룬»á¸üÔ¸ÒâÓÃLisp£¬µ«ÊÇÈç¹ûÓм¸°Ù¸ö³ÌÐòÔ±Ò»Æð¸Ä´úÂ룬ÄǾͲ»ÊDZà³ÌÓïÑÔµÄÎÊÌ⣬¶øÊÇÉç»áÎÊÌâÁË¡£

(4) ¿â¡£

ÆäËûÈ˾ٳöµÄ²ÄÁÏÖУ¬×îÓÐÒâ˼µÄÓ¦¸ÃÀ´×ÔLispÖ®¸¸¡¢¼ÆËã»ú¿Æѧ¾ÞÈËÔ¼º²Âó¿¨Îý¡£Õâƪ²©¿Í£¨ÎÞ·¨Ö±½Ó·ÃÎÊ£©ÀïÉú¶¯½²ÊöÁËÕâλͼÁé½±µÃÖ÷ÔÚij´ÎÌýPeter Norvig¸Ä¶ø¹Ä´µPythonµÄÑݽ²ºóµÄÇé¾°£º

NorvigÑݽ²ºó£¬½øÈëÌáÎÊ»·½Ú¡£³öºõÎÒµÄÒâÁÏ£¬ËûµãÁËһλÖå°Í°ÍµÄÀÏÍ·¡£ÀÏÍ·µÄºú×ÓºÍÍ··¢¶¼»¨°×ÁË£¬¶øÇÒÂÒÔãÔãµÄ£¬¿´ÉÏÈ¥ÏñÊÇÀ´´Ë²Î¹Ûµ«ÊÇÃÔ·ÁË£¬µ½ÕâÀïÀ´ÐÝϢһϣ¬ºÃÆæµØÌýÌýÎÒÃÇÔÚ˵ʲô¡£ÎÒµÚÒ»¸öÄîÍ·ÊÇ£¬¹À¼ÆËûÒѾ­±»Õâô¼èÉîµÄ»°ÌâŪÔÎÁË¡£µ«ÊÇÂíÉÏÏëµ½£¬²»¶Ô°¡£¬ÕâÀïÀë˹̹¸£ºÜ½ü£¬ÕâÀÏÍ·µÄÄê¼ÍÒ²¶Ô£¬ÄѵÀÊÇ¡­¡­

Ö»ÌýNorvig˵£º¡°ÊÇ£¬John£¬ÄãÓÐʲôÎÊÌ⣿¡±ÎҼDz»ÇåLispÖ®¸¸µ±Ê±ÔõôÎʵÄÁË£¬µ«²»³¬¹ýÊ®¸ö´Ê£¬¾ÍÊÇÎÊ PythonÊÇ·ñÄÜÈçLispÄÇÑùÓÅÑŵØÏñÊý¾ÝÒ»Ñù´¦Àí´úÂë¡£¡°²»£¬John£¬²»ÐС£¡±Norvig»Ø´ð£¬È»ºó¾²µÈÂó¿¨Îý¼ÌÐø·¢ÎÊ¡£µ«ÊÇ£¬ÀÏÈËʲôҲûÓÐÔÙ˵¡£´ËʱÕæÊÇÎÞÑÔʤǧÓï°¡¡­¡­

¿´À´£¬ÔÚ´óʦÑÛÖУ¬Êý¾ÝÓë´úÂëµÈͬ´¦ÀíÊÇ×îÖØÒªµÄÓïÑÔÌØÐÔÖ®Ò»¡£Ëû»¹Ôø¾­ÔÚ·Ã̸ÖÐÕâÑùÆÀ¼ÛRuby£¨ÌáÎÊÕß˵Ruby´ÓLispÖнè¼øÁ˺ࣩܶ£º¡°RubyÄÜÏñÊý¾ÝÄÇÑùʹÓÃÁбí½á¹¹Âð£¿ÄÇÿ´ÎËã¼ÓºÍ¼õµÄʱºò£¬¶¼µÃ½øÐнâÎö†ª£¿Õâ·½ÃæRuby»¹²»Èç1960ÄêµÄLisp¡£¡±

ΪʲôLISPÓïÑÔÈç´ËÏȽø£¨×ª£©

´ËÎĽÚÑ¡×Ô¡¶ºÚ¿ÍÓë»­¼Ò¡·ÖÐÒë°æ

Ò»¡¢

Èç¹ûÎÒÃÇ°ÑÁ÷Ðеıà³ÌÓïÑÔ£¬ÒÔÕâÑùµÄ˳ÐòÅÅÁУºJava¡¢Perl¡¢Python¡¢Ruby¡£Äã»á·¢ÏÖ£¬ÅÅÔÚÔ½ºóÃæµÄÓïÑÔ£¬Ô½ÏñLisp¡£

PythonÄ£·ÂLisp£¬ÉõÖÁ°ÑÐí¶àLispºÚ¿ÍÈÏΪÊôÓÚÉè¼Æ´íÎóµÄ¹¦ÄÜ£¬Ò²Ò»ÆðÄ£·ÂÁË¡£ÖÁÓÚRuby£¬Èç¹û»Øµ½1975Ä꣬ÄãÉù³ÆËüÊÇÒ»ÖÖLisp·½ÑÔ£¬Ã»ÓÐÈ˻ᷴ¶Ô¡£

±à³ÌÓïÑÔÏÖÔڵķ¢Õ¹£¬²»¹ý¸Õ¸Õ¸ÏÉÏ1958ÄêLispÓïÑÔµÄˮƽ¡£

¶þ¡¢

1958Ä꣬John McCarthyÉè¼ÆÁËLispÓïÑÔ¡£ÎÒÈÏΪ£¬µ±Ç°×îг±µÄ±à³ÌÓïÑÔ£¬Ö»ÊÇʵÏÖÁËËûÔÚ1958ÄêµÄÉèÏë¶øÒÑ¡£

ÕâÔõô¿ÉÄÜÄØ£¿¼ÆËã»ú¼¼ÊõµÄ·¢Õ¹£¬²»ÊÇÈÕÐÂÔÂÒìÂð£¿1958ÄêµÄ¼¼Êõ£¬Ôõô¿ÉÄܳ¬¹ý½ñÌìµÄˮƽÄØ£¿

ÈÃÎÒ¸æËßÄãÔ­Òò¡£

ÕâÊÇÒòΪJohn McCarthy±¾À´Ã»´òËã°ÑLispÉè¼Æ³É±à³ÌÓïÑÔ£¬ÖÁÉÙ²»ÊÇÎÒÃÇÏÖÔÚÒâÒåÉϵıà³ÌÓïÑÔ¡£ËûµÄÔ­ÒâÖ»ÊÇÏë×öÒ»ÖÖÀíÂÛÑÝË㣬Óøü¼ò½àµÄ·½Ê½¶¨ÒåͼÁé»ú¡£

ËùÒÔ£¬ÎªÊ²Ã´ÉϸöÊÀ¼Í50Äê´úµÄ±à³ÌÓïÑÔ£¬µ½ÏÖÔÚ»¹Ã»Óйýʱ£¿¼òµ¥Ëµ£¬ÒòΪÕâÖÖÓïÑÔ±¾ÖÊÉϲ»ÊÇÒ»ÖÖ¼¼Êõ£¬¶øÊÇÊýѧ¡£ÊýѧÊDz»»á¹ýʱµÄ¡£Äã²»Ó¦¸Ã°ÑLispÓïÑÔÓë50Äê´úµÄÓ²¼þÁªÏµÔÚÒ»Æ𣬶øÊÇÓ¦¸Ã°ÑËüÓë¿ìËÙÅÅÐò£¨Quicksort£©Ëã·¨½øÐÐÀà±È¡£ÕâÖÖËã·¨ÊÇ1960ÄêÌá³öµÄ£¬ÖÁ½ñÈÔÈ»ÊÇ×î¿ìµÄͨÓÃÅÅÐò·½·¨¡£

Èý¡¢

FortranÓïÑÔÒ²ÊÇÉϸöÊÀ¼Í50Äê´ú³öÏֵģ¬²¢ÇÒһֱʹÓÃÖÁ½ñ¡£Ëü´ú±íÁËÓïÑÔÉè¼ÆµÄÒ»ÖÖÍêÈ«²»Í¬µÄ·½Ïò¡£LispÊÇÎÞÒâÖдӴ¿ÀíÂÛ·¢Õ¹Îª±à³ÌÓïÑÔ£¬¶øFortran´ÓÒ»¿ªÊ¼¾ÍÊÇ×÷Ϊ±à³ÌÓïÑÔÉè¼Æ³öÀ´µÄ¡£µ«ÊÇ£¬½ñÌìÎÒÃÇ°ÑLisp¿´³É¸ß¼¶ÓïÑÔ£¬¶ø°ÑFortran¿´³ÉÒ»ÖÖÏ൱µÍ²ã´ÎµÄÓïÑÔ¡£

1956Ä꣬Fortran¸Õµ®ÉúµÄʱºò£¬½Ð×öFortran I£¬Óë½ñÌìµÄFortranÓïÑÔ²î±ð¼«´ó¡£Fortran Iʵ¼ÊÉÏÊÇ»ã±àÓïÑÔ¼ÓÉÏÊýѧ£¬ÔÚijЩ·½Ã棬»¹²»Èç½ñÌìµÄ»ã±àÓïÑÔÇ¿´ó¡£±ÈÈ磬Ëü²»Ö§³Ö×Ó³ÌÐò£¬Ö»ÓзÖÖ§Ìøת½á¹¹£¨branch£©¡£

LispºÍFortran´ú±íÁ˱à³ÌÓïÑÔ·¢Õ¹µÄÁ½´ó·½Ïò¡£Ç°ÕߵĻù´¡ÊÇÊýѧ£¬ºóÕߵĻù´¡ÊÇÓ²¼þ¼Ü¹¹¡£´ÓÄÇʱÆð£¬ÕâÁ½´ó·½ÏòÒ»Ö±ÔÚ»¥Ï࿿£¡£Lisp¸ÕÉè¼Æ³öÀ´µÄʱºò£¬¾ÍºÜÇ¿´ó£¬½ÓÏÂÀ´µÄ¶þÊ®Ä꣬ËüÌá¸ßÁË×Ô¼ºµÄÔËÐÐËٶȡ£¶øÄÇЩËùνµÄÖ÷Á÷ÓïÑÔ£¬°Ñ¸ü¿ìµÄÔËÐÐËÙ¶È×÷ΪÉè¼ÆµÄ³ö·¢µã£¬È»ºóÔÙÓó¬¹ýËÄÊ®ÄêµÄʱ¼ä£¬Ò»²½²½±äµÃ¸üÇ¿´ó¡£

Ö±µ½½ñÌ죬×î¸ß¼¶µÄÖ÷Á÷ÓïÑÔ£¬Ò²Ö»ÊǸոսӽüLispµÄˮƽ¡£ËäÈ»ÒѾ­ºÜ½Ó½üÁË£¬µ«»¹ÊÇûÓÐLispÄÇÑùÇ¿´ó¡£

ËÄ¡¢

LispÓïÑÔµ®ÉúµÄʱºò£¬¾Í°üº¬ÁË9ÖÖÐÂ˼Ïë¡£ÆäÖÐһЩÎÒÃǽñÌìÒѾ­Ï°ÒÔΪ³££¬ÁíһЩÔò¸Õ¸ÕÔÚÆäËû¸ß¼¶ÓïÑÔÖгöÏÖ£¬ÖÁ½ñ»¹ÓÐ2ÖÖÊÇLisp¶ÀÓеġ£°´ÕÕ±»´óÖÚ½ÓÊܵij̶ȣ¬Õâ9ÖÖ˼ÏëÒÀ´ÎÊÇ£º

1. Ìõ¼þ½á¹¹£¨¼´¡±if-then-else¡±½á¹¹£©¡£ÏÖÔÚ´ó¼Ò¶¼¾õµÃÕâÊÇÀíËùµ±È»µÄ£¬µ«ÊÇFortran I¾ÍûÓÐÕâ¸ö½á¹¹£¬ËüÖ»ÓлùÓڵײã»úÆ÷Ö¸ÁîµÄgoto½á¹¹¡£

2. º¯ÊýÒ²ÊÇÒ»ÖÖÊý¾ÝÀàÐÍ¡£ÔÚLispÓïÑÔÖУ¬º¯ÊýÓëÕûÊý»ò×Ö·û´®Ò»Ñù£¬Ò²ÊôÓÚÊý¾ÝÀàÐ͵ÄÒ»ÖÖ¡£ËüÓÐ×Ô¼ºµÄ×ÖÃæ±íʾÐÎʽ£¨literal representation£©£¬Äܹ»´¢´æÔÚ±äÁ¿ÖУ¬Ò²Äܵ±×÷²ÎÊý´«µÝ¡£Ò»ÖÖÊý¾ÝÀàÐÍÓ¦¸ÃÓеŦÄÜ£¬Ëü¶¼ÓС£

3. µÝ¹é¡£LispÊǵÚÒ»ÖÖÖ§³ÖµÝ¹éº¯ÊýµÄ¸ß¼¶ÓïÑÔ¡£

4. ±äÁ¿µÄ¶¯Ì¬ÀàÐÍ¡£ÔÚLispÓïÑÔÖУ¬ËùÓбäÁ¿Êµ¼ÊÉ϶¼ÊÇÖ¸Õ룬ËùÖ¸ÏòµÄÖµÓÐÀàÐÍÖ®·Ö£¬¶ø±äÁ¿±¾ÉíûÓС£¸´ÖƱäÁ¿¾ÍÏ൱ÓÚ¸´ÖÆÖ¸Õ룬¶ø²»ÊǸ´ÖÆËüÃÇÖ¸ÏòµÄÊý¾Ý¡£

5. À¬»ø»ØÊÕ»úÖÆ¡£

6. ³ÌÐòÓɱí´ïʽ£¨expression£©×é³É¡£Lisp³ÌÐòÊÇһЩ±í´ïʽÇø¿éµÄ¼¯ºÏ£¬Ã¿¸ö±í´ïʽ¶¼·µ»ØÒ»¸öÖµ¡£ÕâÓëFortranºÍ´ó¶àÊýºóÀ´µÄÓïÑÔ¶¼½ØÈ»²»Í¬£¬ËüÃǵijÌÐòÓɱí´ïʽºÍÓï¾ä£¨statement£©×é³É¡£

Çø·Ö±í´ïʽºÍÓï¾ä£¬ÔÚFortran IÖÐÊǺÜ×ÔÈ»µÄ£¬ÒòΪËü²»Ö§³ÖÓï¾äǶÌס£ËùÒÔ£¬Èç¹ûÄãÐèÒªÓÃÊýѧʽ×Ó¼ÆËãÒ»¸öÖµ£¬ÄǾÍÖ»ÓÐÓñí´ïʽ·µ»ØÕâ¸öÖµ£¬Ã»ÓÐÆäËûÓï·¨½á¹¹¿ÉÓã¬ÒòΪ·ñÔò¾ÍÎÞ·¨´¦ÀíÕâ¸öÖµ¡£

ºóÀ´£¬Ðµıà³ÌÓïÑÔÖ§³ÖÇø¿é½á¹¹£¨block£©£¬ÕâÖÖÏÞÖƵ±È»Ò²¾Í²»´æÔÚÁË¡£µ«ÊÇΪʱÒÑÍí£¬±í´ïʽºÍÓï¾äµÄÇø·ÖÒѾ­¸ùÉîµÙ¹Ì¡£Ëü´ÓFortranÀ©É¢µ½AlgolÓïÑÔ£¬½Ó×ÅÓÖÀ©É¢µ½ËüÃÇÁ½Õߵĺó¼ÌÓïÑÔ¡£

7. ·ûºÅ£¨symbol£©ÀàÐÍ¡£·ûºÅʵ¼ÊÉÏÊÇÒ»ÖÖÖ¸Õ룬ָÏò´¢´æÔÚ¹þÏ£±íÖеÄ×Ö·û´®¡£ËùÒÔ£¬±È½ÏÁ½¸ö·ûºÅÊÇ·ñÏàµÈ£¬Ö»Òª¿´ËüÃǵÄÖ¸ÕëÊÇ·ñÒ»Ñù¾ÍÐÐÁË£¬²»ÓÃÖð¸ö×Ö·ûµØ±È½Ï¡£

8. ´úÂëʹÓ÷ûºÅºÍ³£Á¿×é³ÉµÄÊ÷Ðαíʾ·¨£¨notation£©¡£

9. ÎÞÂÛʲôʱºò£¬Õû¸öÓïÑÔ¶¼ÊÇ¿ÉÓõġ£Lisp²¢²»ÕæÕýÇø·Ö¶ÁÈ¡ÆÚ¡¢±àÒëÆÚºÍÔËÐÐÆÚ¡£Äã¿ÉÒÔÔÚ¶ÁÈ¡ÆÚ±àÒë»òÔËÐдúÂ룻Ҳ¿ÉÒÔÔÚ±àÒëÆÚ¶ÁÈ¡»òÔËÐдúÂ룻»¹¿ÉÒÔÔÚÔËÐÐÆÚ¶ÁÈ¡»òÕß±àÒë´úÂë¡£

ÔÚ¶ÁÈ¡ÆÚÔËÐдúÂ룬ʹµÃÓû§¿ÉÒÔÖØе÷Õû£¨reprogram£©LispµÄÓï·¨£»ÔÚ±àÒëÆÚÔËÐдúÂ룬ÔòÊÇLispºêµÄ¹¤×÷»ù´¡£»ÔÚÔËÐÐÆÚ±àÒë´úÂ룬ʹµÃLisp¿ÉÒÔÔÚEmacsÕâÑùµÄ³ÌÐòÖУ¬³äµ±À©Õ¹ÓïÑÔ£¨extension language£©£»ÔÚÔËÐÐÆÚ¶ÁÈ¡´úÂ룬ʹµÃ³ÌÐòÖ®¼ä¿ÉÒÔÓÃS-±í´ïʽ£¨S-expression£©Í¨ÐÅ£¬½üÀ´XML¸ñʽµÄ³öÏÖʹµÃÕâ¸ö¸ÅÄî±»ÖØС±·¢Ã÷¡±³öÀ´ÁË¡£

Îå¡¢

LispÓïÑÔ¸Õ³öÏÖµÄʱºò£¬ËüµÄ˼ÏëÓëÆäËû±à³ÌÓïÑÔ´óÏྶͥ¡£ºóÕßµÄÉè¼Æ˼ÏëÖ÷ÒªÓÉ50Äê´úºóÆÚµÄÓ²¼þ¾ö¶¨¡£Ëæ×Åʱ¼äÁ÷ÊÅ£¬Á÷Ðеıà³ÌÓïÑÔ²»¶Ï¸üл»´ú£¬ÓïÑÔÉè¼Æ˼ÏëÖð½¥ÏòLisp¿¿Â£¡£

˼Ïë1µ½Ë¼Ïë5ÒѾ­±»¹ã·º½ÓÊÜ£¬Ë¼Ïë6¿ªÊ¼ÔÚÖ÷Á÷±à³ÌÓïÑÔÖгöÏÖ£¬Ë¼Ïë7ÔÚPythonÓïÑÔÖÐÓÐËùʵÏÖ£¬²»¹ýËƺõûÓÐרÓõÄÓï·¨¡£

˼Ïë8¿ÉÄÜÊÇ×îÓÐÒâ˼µÄÒ»µã¡£ËüÓë˼Ïë9Ö»ÊÇÓÉÓÚżȻԭÒò£¬²Å³ÉΪLispÓïÑÔµÄÒ»²¿·Ö£¬ÒòΪËüÃDz»ÊôÓÚJohn McCarthyµÄԭʼ¹¹Ï룬ÊÇÓÉËûµÄѧÉúSteve Russell×ÔÐÐÌí¼ÓµÄ¡£ËüÃÇ´Ó´ËʹµÃLisp¿´ÉÏÈ¥ºÜ¹Å¹Ö£¬µ«Ò²³ÉΪÁËÕâÖÖÓïÑÔ×î¶ÀÒ»ÎÞ¶þµÄÌص㡣Lisp¹Å¹ÖµÄÐÎʽ£¬µ¹²»ÊÇÒòΪËüµÄÓï·¨ºÜ¹Å¹Ö£¬¶øÊÇÒòΪËü¸ù±¾Ã»ÓÐÓï·¨£¬³ÌÐòÖ±½ÓÒÔ½âÎöÊ÷£¨parse tree£©µÄÐÎʽ±í´ï³öÀ´¡£ÔÚÆäËûÓïÑÔÖУ¬ÕâÖÖÐÎʽֻÊǾ­¹ý½âÎöÔÚºǫ́²úÉú£¬µ«ÊÇLispÖ±½Ó²ÉÓÃËü×÷Ϊ±í´ïÐÎʽ¡£ËüÓÉÁÐ±í¹¹³É£¬¶øÁбíÔòÊÇLispµÄ»ù±¾Êý¾Ý½á¹¹¡£

ÓÃÒ»ÃÅÓïÑÔ×Ô¼ºµÄÊý¾Ý½á¹¹À´±í´ï¸ÃÓïÑÔ£¬Õâ±»Ö¤Ã÷ÊǷdz£Ç¿´óµÄ¹¦ÄÜ¡£Ë¼Ïë8ºÍ˼Ïë9£¬Òâζ×ÅÄã¿ÉÒÔд³öÒ»ÖÖÄܹ»×Ô¼º±à³ÌµÄ³ÌÐò¡£Õâ¿ÉÄÜÌýÆðÀ´ºÜ¹ÖÒ죬µ«ÊǶÔÓÚLispÓïÑÔÈ´ÊÇÔÙÆÕͨ²»¹ý¡£×î³£ÓõÄ×ö·¨¾ÍÊÇʹÓúꡣ

ÊõÓºê¡±ÔÚLispÓïÑÔÖУ¬ÓëÆäËûÓïÑÔÖеÄÒâ˼²»Ò»Ñù¡£LispºêÎÞËù²»°ü£¬Ëü¼È¿ÉÄÜÊÇijÑù±í´ïʽµÄËõÂÔÐÎʽ£¬Ò²¿ÉÄÜÊÇÒ»ÖÖÐÂÓïÑԵıàÒëÆ÷¡£Èç¹ûÄãÏëÕæÕýµØÀí½âLispÓïÑÔ£¬»òÕßÏëÍØ¿íÄãµÄ±à³ÌÊÓÒ°£¬ÄÇôÄã±ØÐëѧϰºê¡£

¾ÍÎÒËùÖª£¬ºê£¨²ÉÓÃLispÓïÑԵĶ¨Ò壩ĿǰÈÔÈ»ÊÇLisp¶ÀÓеġ£Ò»¸öÔ­ÒòÊÇΪÁËʹÓú꣬Äã´ó¸Å²»µÃ²»ÈÃÄãµÄÓïÑÔ¿´ÉÏÈ¥ÏñLispÒ»Ñù¹Å¹Ö¡£ÁíÒ»¸ö¿ÉÄܵÄÔ­ÒòÊÇ£¬Èç¹ûÄãÏëΪ×Ô¼ºµÄÓïÑÔÌíÉÏÕâÖÖÖÕ¼«ÎäÆ÷£¬Äã´Ó´Ë¾Í²»ÄÜÉù³Æ×Ô¼º·¢Ã÷ÁËÐÂÓïÑÔ£¬Ö»ÄÜ˵·¢Ã÷ÁËÒ»ÖÖLispµÄз½ÑÔ¡£

ÎÒ°ÑÕâ¼þʵ±×÷Ц»°Ëµ³öÀ´£¬µ«ÊÇÊÂʵ¾ÍÊÇÈç´Ë¡£Èç¹ûÄã´´ÔìÁËÒ»ÖÖÐÂÓïÑÔ£¬ÆäÖÐÓÐcar¡¢cdr¡¢cons¡¢quote¡¢cond¡¢atom¡¢eqÕâÑùµÄ¹¦ÄÜ£¬»¹ÓÐÒ»ÖְѺ¯Êýд³ÉÁбíµÄ±íʾ·½·¨£¬ÄÇôÔÚËüÃǵĻù´¡ÉÏ£¬ÄãÍêÈ«¿ÉÒÔÍƵ¼³öLispÓïÑÔµÄËùÓÐÆäËû²¿·Ö¡£ÊÂʵÉÏ£¬LispÓïÑÔ¾ÍÊÇÕâÑù¶¨ÒåµÄ£¬John McCarthy°ÑÓïÑÔÉè¼Æ³ÉÕâ¸öÑù×Ó£¬¾ÍÊÇΪÁËÈÃÕâÖÖÍƵ¼³ÉΪ¿ÉÄÜ¡£

Áù¡¢

¾ÍËãLispȷʵ´ú±íÁËÄ¿Ç°Ö÷Á÷±à³ÌÓïÑÔ²»¶Ï¿¿½üµÄÒ»¸ö·½Ïò£¬ÕâÊÇ·ñÒâζ×ÅÄã¾ÍÓ¦¸ÃÓÃËü±à³ÌÄØ£¿

Èç¹ûʹÓÃÒ»ÖÖ²»ÄÇôǿ´óµÄÓïÑÔ£¬ÄãÓÖ»áÓжàÉÙËðʧÄØ£¿ÓÐʱ²»²ÉÓÃ×î¼â¶ËµÄ¼¼Êõ£¬²»Ò²ÊÇÒ»ÖÖÃ÷ÖǵÄÑ¡ÔñÂð£¿Õâô¶àÈËʹÓÃÖ÷Á÷±à³ÌÓïÑÔ£¬Õâ±¾Éí²»Ò²ËµÃ÷ÄÇЩÓïÑÔÓпÉÈ¡Ö®´¦Âð£¿

ÁíÒ»·½Ã棬ѡÔñÄÄÒ»ÖÖ±à³ÌÓïÑÔ£¬Ðí¶àÏîÄ¿ÊÇÎÞËùνµÄ£¬·´Õý²»Í¬µÄÓïÑÔ¶¼ÄÜÍê³É¹¤×÷¡£Ò»°ãÀ´Ëµ£¬Ìõ¼þÔ½¿Á¿ÌµÄÏîÄ¿£¬Ç¿´óµÄ±à³ÌÓïÑÔ¾ÍÔ½ÄÜ·¢»Ó×÷Óᣵ«ÊÇ£¬ÎÞÊýµÄÏîÄ¿¸ù±¾Ã»ÓпÁ¿ÌÌõ¼þµÄÏÞÖÆ¡£´ó¶àÊýµÄ±à³ÌÈÎÎñ£¬¿ÉÄÜֻҪдһЩºÜСµÄ³ÌÐò£¬È»ºóÓýºË®ÓïÑÔ°ÑÕâЩС³ÌÐòÁ¬ÆðÀ´¾ÍÐÐÁË¡£Äã¿ÉÒÔÓÃ×Ô¼ºÊìϤµÄ±à³ÌÓïÑÔ£¬»òÕßÓöÔÓÚÌض¨ÏîÄ¿À´ËµÓÐ×Å×îÇ¿´óº¯Êý¿âµÄÓïÑÔ£¬À´Ð´ÕâЩС³ÌÐò¡£Èç¹ûÄãÖ»ÊÇÐèÒªÔÚWindowsÓ¦ÓóÌÐòÖ®¼ä´«µÝÊý¾Ý£¬Ê¹ÓÃVisual BasicÕÕÑùÄܴﵽĿµÄ¡£

ÄÇô£¬LispµÄ±à³ÌÓÅÊÆÌåÏÖÔÚÄÄÀïÄØ£¿

Æß¡¢

ÓïÑԵıà³ÌÄÜÁ¦Ô½Ç¿´ó£¬Ð´³öÀ´µÄ³ÌÐò¾ÍÔ½¶Ì£¨µ±È»²»ÊÇÖ¸×Ö·ûÊýÁ¿£¬¶øÊÇÖ¸¶ÀÁ¢µÄÓï·¨µ¥Î»£©¡£

´úÂëµÄÊýÁ¿ºÜÖØÒª£¬ÒòΪ¿ª·¢Ò»¸ö³ÌÐòºÄ·ÑµÄʱ¼ä£¬Ö÷Ҫȡ¾öÓÚ³ÌÐòµÄ³¤¶È¡£Èç¹ûͬһ¸öÈí¼þ£¬Ò»ÖÖÓïÑÔд³öÀ´µÄ´úÂë±ÈÁíÒ»ÖÖÓïÑÔ³¤Èý±¶£¬ÕâÒâζ×ÅÄ㿪·¢ËüºÄ·ÑµÄʱ¼äÒ²»á¶àÈý±¶¡£¶øÇÒ¼´Ê¹Äã¶à¹ÍÓ¶ÈËÊÖ£¬Ò²ÎÞÖúÓÚ¼õÉÙ¿ª·¢Ê±¼ä£¬ÒòΪµ±ÍŶӹæÄ£³¬¹ýij¸öÃż÷ʱ£¬ÔÙÔö¼ÓÈËÊÖÖ»»á´øÀ´¾»Ëðʧ¡£Fred BrooksÔÚËûµÄÃûÖø¡¶ÈËÔÂÉñ»°¡·£¨The Mythical Man-Month£©ÖУ¬ÃèÊöÁËÕâÖÖÏÖÏó£¬ÎÒµÄËù¼ûËùÎÅÓ¡Ö¤ÁËËûµÄ˵·¨¡£

Èç¹ûʹÓÃLispÓïÑÔ£¬ÄÜÈóÌÐò±äµÃ¶à¶Ì£¿ÒÔLispºÍCµÄ±È½ÏΪÀý£¬ÎÒÌýµ½µÄ´ó¶àÊý˵·¨ÊÇC´úÂëµÄ³¤¶ÈÊÇLispµÄ7±¶µ½10±¶¡£µ«ÊÇ×î½ü£¬New ArchitectÔÓÖ¾ÉÏÓÐһƪ½éÉÜITAÈí¼þ¹«Ë¾µÄÎÄÕ£¬ÀïÃæ˵¡±Ò»ÐÐLisp´úÂëÏ൱ÓÚ20ÐÐC´úÂ롱£¬ÒòΪ´ËÎĶ¼ÊÇÒýÓÃITA×ܲõĻ°£¬ËùÒÔÎÒÏëÕâ¸öÊý×ÖÀ´×ÔITAµÄ±à³Ìʵ¼ù¡£ Èç¹ûÕæÊÇÕâÑù£¬ÄÇôÎÒÃÇ¿ÉÒÔÏàÐÅÕâ¾ä»°¡£ITAµÄÈí¼þ£¬²»½öʹÓÃLispÓïÑÔ£¬»¹Í¬Ê±´óÁ¿Ê¹ÓÃCºÍC++£¬ËùÒÔÕâÊÇËûÃǵľ­Ñé̸¡£

¸ù¾ÝÉÏÃæµÄÕâ¸öÊý×Ö£¬Èç¹ûÄãÓëITA¾ºÕù£¬¶øÇÒÄãʹÓÃCÓïÑÔ¿ª·¢Èí¼þ£¬ÄÇôITAµÄ¿ª·¢ËٶȽ«±ÈÄã¿ì20±¶¡£Èç¹ûÄãÐèÒªÒ»Äêʱ¼äʵÏÖij¸ö¹¦ÄÜ£¬ËüÖ»ÐèÒª²»µ½ÈýÐÇÆÚ¡£·´¹ýÀ´Ëµ£¬Èç¹ûij¸öй¦ÄÜ£¬Ëü¿ª·¢ÁËÈý¸öÔ£¬ÄÇôÄãÐèÒªÎåÄê²ÅÄÜ×ö³öÀ´¡£

ÄãÖªµÀÂð£¿ÉÏÃæµÄ¶Ô±È£¬»¹Ö»ÊÇ¿¼Âǵ½×îºÃµÄÇé¿ö¡£µ±ÎÒÃÇÖ»±È½Ï´úÂëÊýÁ¿µÄʱºò£¬ÑÔÏÂÖ®Òâ¾ÍÊǼÙÉèʹÓù¦ÄܽÏÈõµÄÓïÑÔ£¬Ò²ÄÜ¿ª·¢³öͬÑùµÄÈí¼þ¡£µ«ÊÇÊÂʵÉÏ£¬³ÌÐòԱʹÓÃijÖÖÓïÑÔÄÜ×öµ½µÄÊÂÇ飬ÊÇÓм«Ï޵ġ£Èç¹ûÄãÏëÓÃÒ»ÖֵͲã´ÎµÄÓïÑÔ£¬½â¾öÒ»¸öºÜÄѵÄÎÊÌ⣬ÄÇôÄ㽫»áÃæÁÙ¸÷ÖÖÇé¿ö¼«Æ临ÔÓ¡¢ÄËÖÁÏë²»Çå³þµÄ¾½¾³¡£

ËùÒÔ£¬µ±ÎÒ˵¼Ù¶¨ÄãÓëITA¾ºÕù£¬ÄãÓÃÎåÄêʱ¼ä×ö³öµÄ¶«Î÷£¬ITAÔÚLispÓïÑԵİïÖúÏÂÖ»ÓÃÈý¸öÔ¾ÍÍê³ÉÁË£¬ÎÒÖ¸µÄÎåÄ껹ÊÇÒ»ÇÐ˳Àû¡¢Ã»Óз¸´íÎó¡¢Ò²Ã»ÓÐÓöµ½Ì«´óÂé·³µÄÎåÄê¡£ÊÂʵÉÏ£¬°´ÕÕ´ó¶àÊý¹«Ë¾µÄʵ¼ÊÇé¿ö£¬¼Æ»®ÖÐÎåÄêÍê³ÉµÄÏîÄ¿£¬ºÜ¿ÉÄÜÓÀÔ¶¶¼²»»áÍê³É¡£

ÎÒ³ÐÈÏ£¬ÉÏÃæµÄÀý×ÓÌ«¼«¶Ë¡£ITAËƺõÓÐÒ»Åú·Ç³£´ÏÃ÷µÄºÚ¿Í£¬¶øCÓïÑÔÓÖÊÇÒ»ÖֺܵͲã´ÎµÄÓïÑÔ¡£µ«ÊÇ£¬ÔÚÒ»¸ö¸ß¶È¾ºÕùµÄÊг¡ÖУ¬¼´Ê¹¿ª·¢ËÙ¶ÈÖ»Ïà²îÁ½Èý±¶£¬Ò²×ãÒÔʹµÃÄãÓÀÔ¶´¦ÔÚÂäºóµÄλÖá£

¸½Â¼£º±à³ÌÄÜÁ¦

ΪÁ˽âÊÍÎÒËù˵µÄÓïÑÔ±à³ÌÄÜÁ¦²»Ò»Ñù£¬Ç뿼ÂÇÏÂÃæµÄÎÊÌâ¡£ÎÒÃÇÐèҪдһ¸öº¯Êý£¬ËüÄܹ»Éú³ÉÀÛ¼ÓÆ÷£¬¼´Õâ¸öº¯Êý½ÓÊÜÒ»¸ö²ÎÊýn£¬È»ºó·µ»ØÁíÒ»¸öº¯Êý£¬ºóÕß½ÓÊܲÎÊýi£¬È»ºó·µ»ØnÔö¼Ó£¨increment£©ÁËiºóµÄÖµ¡£

Common LispµÄд·¨ÈçÏ£º

¡¡¡¡(defun foo (n) (lambda (i) (incf n i)))

RubyµÄд·¨¼¸ºõÍêÈ«Ïàͬ£º

¡¡¡¡def foo (n) lambda {|i| n += i } end

Perl 5µÄд·¨ÔòÊÇ£º

¡¡¡¡sub foo { my ($n) = @_; sub {$n += shift} }

Õâ±ÈLispºÍRubyµÄ°æ±¾£¬Óиü¶àµÄÓï·¨ÔªËØ£¬ÒòΪÔÚPerlÓïÑÔÖУ¬Äã²»µÃ²»ÊÖ¹¤ÌáÈ¡²ÎÊý¡£

SmalltalkµÄд·¨ÉÔ΢±ÈLispºÍRubyµÄ³¤Ò»µã£º

¡¡¡¡foo: n

s
s := n. ^[:i| s := s+i. ]

ÒòΪÔÚSmalltalkÖУ¬¾Ö²¿±äÁ¿£¨lexical variable£©ÊÇÓÐЧµÄ£¬µ«ÊÇÄãÎÞ·¨¸øÒ»¸ö²ÎÊý¸³Öµ£¬Òò´Ë²»µÃ²»ÉèÖÃÁËÒ»¸öбäÁ¿£¬½ÓÊÜÀÛ¼ÓºóµÄÖµ¡£

JavascriptµÄд·¨Ò²±ÈLispºÍRubyÉÔ΢³¤Ò»µã£¬ÒòΪJavascriptÒÀÈ»Çø·ÖÓï¾äºÍ±í´ïʽ£¬ËùÒÔÄãÐèÒªÃ÷È·Ö¸¶¨returnÓï¾ä£¬À´·µ»ØÒ»¸öÖµ£º

¡¡¡¡function foo (n) { return function (i) { return n += i } }

£¨ÊµÊÂÇóÊǵØ˵£¬PerlÒ²±£ÁôÁËÓï¾äºÍ±í´ïʽµÄÇø±ð£¬µ«ÊÇʹÓÃÁ˵äÐ͵ÄPerl·½Ê½´¦Àí£¬Ê¹Äã¿ÉÒÔÊ¡ÂÔreturn¡££©

Èç¹ûÏë°ÑLisp/Ruby/Perl/Smalltalk/JavascriptµÄ°æ±¾¸Ä³ÉPython£¬Äã»áÓöµ½Ò»Ð©ÏÞÖÆ¡£ÒòΪPython²¢²»ÍêÈ«Ö§³Ö¾Ö²¿±äÁ¿£¬Äã²»µÃ²»´´ÔìÒ»ÖÖÊý¾Ý½á¹¹£¬À´½ÓÊÜnµÄÖµ¡£¶øÇÒ¾¡¹ÜPythonȷʵ֧³Öº¯ÊýÊý¾ÝÀàÐÍ£¬µ«ÊÇûÓÐÒ»ÖÖ×ÖÃæÁ¿µÄ±íʾ·½Ê½£¨literal representation£©¿ÉÒÔÉú³Éº¯Êý£¨³ý·Çº¯ÊýÌåÖ»ÓÐÒ»¸ö±í´ïʽ£©£¬ËùÒÔÄãÐèÒª´´ÔìÒ»¸öÃüÃûº¯Êý£¬°ÑËü·µ»Ø¡£×îºóµÄд·¨ÈçÏ£º

¡¡¡¡def foo (n): s = [n] def bar (i): s[0] += i return s[0] return bar

PythonÓû§ÍêÈ«¿ÉÒÔºÏÀíµØÖÊÒÉ£¬ÎªÊ²Ã´²»ÄÜд³ÉÏÂÃæÕâÑù£º

¡¡¡¡def foo (n): return lambda i: return n += i

»òÕߣº

¡¡¡¡def foo (n): lambda i: n += i

ÎÒ²ÂÏ룬PythonÓÐÒ»Ìì»áÖ§³ÖÕâÑùµÄд·¨¡££¨Èç¹ûÄã²»ÏëµÈµ½PythonÂýÂý½ø»¯µ½¸üÏñLisp£¬Äã×ÜÊÇ¿ÉÒÔÖ±½Ó¡­¡­£©

ÔÚÃæÏò¶ÔÏó±à³ÌµÄÓïÑÔÖУ¬ÄãÄܹ»ÔÚÓÐÏ޳̶ÈÉÏÄ£ÄâÒ»¸ö±Õ°ü£¨¼´Ò»¸öº¯Êý£¬Í¨¹ýËü¿ÉÒÔÒýÓÃÓÉ°üº¬Õâ¸öº¯ÊýµÄ´úÂëËù¶¨ÒåµÄ±äÁ¿£©¡£Ä㶨ÒåÒ»¸öÀࣨclass£©£¬ÀïÃæÓÐÒ»¸ö·½·¨ºÍÒ»¸öÊôÐÔ£¬ÓÃÓÚÌæ»»·â±Õ×÷ÓÃÓò£¨enclosing scope£©ÖеÄËùÓбäÁ¿¡£ÕâÓеãÀàËÆÓÚÈóÌÐòÔ±×Ô¼º×ö´úÂë·ÖÎö£¬±¾À´ÕâÓ¦¸ÃÊÇÓÉÖ§³Ö¾Ö²¿×÷ÓÃÓòµÄ±àÒëÆ÷Íê³ÉµÄ¡£Èç¹ûÓжà¸öº¯Êý£¬Í¬Ê±Ö¸ÏòÏàͬµÄ±äÁ¿£¬ÄÇôÕâÖÖ·½·¨¾Í»áʧЧ£¬µ«ÊÇÔÚÕâ¸ö¼òµ¥µÄÀý×ÓÖУ¬ËüÒѾ­×ã¹»ÁË¡£

Python¸ßÊÖ¿´À´Ò²Í¬Ò⣬ÕâÊǽâ¾öÕâ¸öÎÊÌâµÄ±È½ÏºÃµÄ·½·¨£¬Ð´·¨ÈçÏ£º

¡¡¡¡def foo (n): class acc: def _ init _ (self£¬ s): self.s = s def inc (self£¬ i): self.s += i return self.s return acc (n).inc

»òÕß

¡¡¡¡class foo: def _ init _ (self£¬ n): self.n = n def _ call _ (self£¬ i): self.n += i return self.n

ÎÒÌí¼ÓÕâÒ»¶Î£¬Ô­ÒòÊÇÏë±ÜÃâPython°®ºÃÕß˵ÎÒÎó½âÕâÖÖÓïÑÔ¡£µ«ÊÇ£¬ÔÚÎÒ¿´À´£¬ÕâÁ½ÖÖд·¨ºÃÏñ¶¼±ÈµÚÒ»¸ö°æ±¾¸ü¸´ÔÓ¡£Äãʵ¼ÊÉϾÍÊÇÔÚ×öͬÑùµÄÊ£¬Ö»²»¹ý»®³öÁËÒ»¸ö¶ÀÁ¢µÄÇøÓò£¬±£´æÀÛ¼ÓÆ÷º¯Êý£¬Çø±ðÖ»ÊDZ£´æÔÚ¶ÔÏóµÄÒ»¸öÊôÐÔÖУ¬¶ø²»ÊDZ£´æÔÚÁÐ±í£¨list£©µÄÍ·£¨head£©ÖС£Ê¹ÓÃÕâЩÌØÊâµÄÄÚ²¿ÊôÐÔÃû£¨ÓÈÆäÊÇ_call_£©£¬¿´ÉÏÈ¥²¢²»Ïñ³£¹æµÄ½â·¨£¬¸üÏñÊÇÒ»ÖÖÆƽ⡣

ÔÚPerlºÍPythonµÄ½ÏÁ¿ÖУ¬PythonºÚ¿ÍµÄ¹ÛµãËƺõÊÇÈÏΪPython±ÈPerl¸üÓÅÑÅ£¬µ«ÊÇÕâ¸öÀý×Ó±íÃ÷£¬×îÖÕÀ´Ëµ£¬±à³ÌÄÜÁ¦¾ö¶¨ÁËÓÅÑÅ¡£PerlµÄд·¨¸ü¼òµ¥£¨°üº¬¸üÉÙµÄÓï·¨ÔªËØ£©£¬¾¡¹ÜËüµÄÓï·¨ÓÐÒ»µã³óª¡£

ÆäËûÓïÑÔÔõôÑù£¿Ç°ÎÄÔø¾­Ìáµ½¹ýFortran¡¢C¡¢C++¡¢JavaºÍVisual Basic£¬¿´ÉÏȥʹÓÃËüÃÇ£¬¸ù±¾ÎÞ·¨½â¾öÕâ¸öÎÊÌâ¡£Ken Anderson˵£¬JavaÖ»ÄÜд³öÒ»¸ö½üËƵĽⷨ£º

¡¡¡¡public interface Inttoint { public int call (int i); }

public static Inttoint foo (final int n) { return new Inttoint () { int s = n; public int call (int i) { s = s + i; return s; }}; }

ÕâÖÖд·¨²»·ûºÏÌâÄ¿ÒªÇó£¬ÒòΪËüÖ»¶ÔÕûÊýÓÐЧ¡£

µ±È»£¬ÎÒ˵ʹÓÃÆäËûÓïÑÔÎÞ·¨½â¾öÕâ¸öÎÊÌ⣬Õâ¾ä»°²¢²»ÍêÈ«ÕýÈ·¡£ËùÓÐÕâЩÓïÑÔ¶¼ÊÇͼÁéµÈ¼ÛµÄ£¬ÕâÒâζ×ÅÑϸñµØ˵£¬ÄãÄÜʹÓÃËüÃÇÖ®ÖеÄÈκÎÒ»ÖÖÓïÑÔ£¬Ð´³öÈκÎÒ»¸ö³ÌÐò¡£ÄÇô£¬ÔõÑù²ÅÄÜ×öµ½ÕâÒ»µãÄØ£¿¾ÍÕâ¸öССµÄÀý×Ó¶øÑÔ£¬Äã¿ÉÒÔʹÓÃÕâЩ²»ÄÇôǿ´óµÄÓïÑÔ£¬Ð´Ò»¸öLisp½âÊÍÆ÷¾ÍÐÐÁË¡£

ÕâÑù×öÌýÉÏÈ¥ºÃÏñ¿ªÍæЦ£¬µ«ÊÇÔÚ´óÐͱà³ÌÏîÄ¿ÖУ¬È´²»Í¬³Ì¶ÈµØ¹ã·º´æÔÚ¡£Òò´Ë£¬ÓÐÈË°ÑËü×ܽá³öÀ´£¬ÆðÃûΪ¡±¸ñÁÖ˹Å˵ÚÊ®¶¨ÂÉ¡±£¨Greenspun¡¯s Tenth Rule£©£º

¡°ÈκÎC»òFortran³ÌÐò¸´ÔÓµ½Ò»¶¨³Ì¶ÈÖ®ºó£¬¶¼»á°üº¬Ò»¸öÁÙʱ¿ª·¢µÄ¡¢Ö»ÓÐÒ»°ë¹¦Äܵġ¢²»ÍêÈ«·ûºÏ¹æ¸ñµÄ¡¢µ½´¦¶¼ÊÇbugµÄ¡¢ÔËÐÐËٶȺÜÂýµÄCommon LispʵÏÖ¡£¡±

Èç¹ûÄãÏë½â¾öÒ»¸öÀ§ÄѵÄÎÊÌ⣬¹Ø¼ü²»ÊÇÄãʹÓõÄÓïÑÔÊÇ·ñÇ¿´ó£¬¶øÊǺü¸¸öÒòËØͬʱ·¢»Ó×÷Óã¨a£©Ê¹ÓÃÒ»ÖÖÇ¿´óµÄÓïÑÔ£¬£¨b£©ÎªÕâ¸öÄÑÌâдһ¸öÊÂʵÉϵĽâÊÍÆ÷£¬»òÕߣ¨c£©Äã×Ô¼º±ä³ÉÕâ¸öÄÑÌâµÄÈËÈâ±àÒëÆ÷¡£ÔÚPythonµÄÀý×ÓÖУ¬ÕâÑùµÄ´¦Àí·½·¨ÒѾ­¿ªÊ¼³öÏÖÁË£¬ÎÒÃÇʵ¼ÊÉϾÍÊÇ×Ô¼ºÐ´´úÂ룬ģÄâ³ö±àÒëÆ÷ʵÏÖ¾Ö²¿±äÁ¿µÄ¹¦ÄÜ¡£

ÕâÖÖʵ¼ù²»½öºÜÆձ飬¶øÇÒÒѾ­ÖƶȻ¯ÁË¡£¾ÙÀýÀ´Ëµ£¬ÔÚÃæÏò¶ÔÏó±à³ÌµÄÊÀ½çÖУ¬ÎÒÃÇ´óÁ¿Ìýµ½¡±Ä£Ê½¡±£¨pattern£©Õâ¸ö´Ê£¬ÎÒ¾õµÃÄÇЩ¡±Ä£Ê½¡±¾ÍÊÇÏÖʵÖеÄÒòËØ£¨c£©£¬Ò²¾ÍÊÇÈËÈâ±àÒëÆ÷¡£ µ±ÎÒÔÚ×Ô¼ºµÄ³ÌÐòÖУ¬·¢ÏÖÓõ½ÁËģʽ£¬ÎÒ¾õµÃÕâ¾Í±íÃ÷ij¸öµØ·½³ö´íÁË¡£³ÌÐòµÄÐÎʽ£¬Ó¦¸Ã½ö½ö·´Ó³ËüËùÒª½â¾öµÄÎÊÌâ¡£´úÂëÖÐÆäËûÈκÎÍâ¼ÓµÄÐÎʽ£¬¶¼ÊÇÒ»¸öÐźţ¬£¨ÖÁÉÙ¶ÔÎÒÀ´Ëµ£©±íÃ÷ÎÒ¶ÔÎÊÌâµÄ³éÏó»¹²»¹»ÉҲ¾­³£ÌáÐÑÎÒ£¬×Ô¼ºÕýÔÚÊÖ¹¤Íê³ÉµÄÊÂÇ飬±¾Ó¦¸Ãд´úÂ룬ͨ¹ýºêµÄÀ©Õ¹×Ô¶¯ÊµÏÖ¡£