·¢²©ÎÄ
ÀäÓêÓÄÉ­

http://blog.chinaunix.net/space.php?uid=331920

µ±Ò»¸öÈË¿ÉÒÔÓÃ×Ô¼º¾«Õ¿µÄרҵ֪ʶ ÓëÈËÉúÀíÏëÏàÈںϵÄ˲¼ä ÄÇÑùºÁ²»¾ÐÊøµÄ΢Ц ×ÔÈ»¾ÍÊÇÉúÃü³É¹¦µÄÒ»¸öÁÁµã   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º181186
  • ²©ÎÄÊýÁ¿£º82
  • ²©¿Í»ý·Ö£º2510
  • ²©¿ÍµÈ¼¶£ºÉÙУ
  • ×¢²áʱ¼ä£º2006-10-13 18:40:51
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
·ÖÀࣺ Web

¼ò½é

º¯Êýʽ±à³ÌÓïÑÔÔÚѧÊõÁìÓòÒѾ­´æÔÚÏ൱³¤Ò»¶Îʱ¼äÁË£¬µ«ÊÇ´ÓÀúÊ·ÉÏ¿´£¬ËüÃÇûÓзḻµÄ¹¤¾ßºÍ¿â¿É¹©Ê¹Óá£Ëæ×Å .NET ƽ̨É쵀 Haskell µÄ³öÏÖ£¬º¯Êýʽ±à³Ì±äµÃ¸ü¼ÓÁ÷ÐС£Ò»Ð©´«Í³µÄ±à³ÌÓïÑÔ£¬ÀýÈç C++ ºÍ JavaScript£¬ÒýÈëÁËÓɺ¯Êýʽ±à³ÌÌṩµÄһЩ¹¹ÔìºÍÌØÐÔ¡£ÔÚÐí¶àÇé¿öÏ£¬JavaScript µÄÖØ¸´´úÂëµ¼ÖÂÁËһЩ׾ÁӵıàÂë¡£Èç¹ûʹÓú¯Êýʽ±à³Ì£¬¾Í¿ÉÒÔ±ÜÃâÕâЩÎÊÌâ¡£´ËÍ⣬¿ÉÒÔÀûÓú¯Êýʽ±à³Ì·ç¸ñ±àд¸ü¼ÓÓÅÃÀµÄ»Øµ÷¡£

º¯Êýʽ±à³Ì

º¯Êýʽ±à³ÌÖ»ÃèÊöÔÚ³ÌÐòÊäÈëÉÏÖ´ÐеIJÙ×÷£¬²»±ØÊ¹ÓÃÁÙʱ±äÁ¿±£´æÖмä½á¹û¡£ÖصãÊDz¶×½ ¡°ÊÇʲôÒÔ¼°ÎªÊ²Ã´¡±£¬¶ø²»ÊÇ ¡°ÈçºÎ×ö¡±¡£Óë½«ÖØµã·ÅÔÚÖ´ÐÐÁ¬ÐøÃüÁîÉϵĹý³ÌÐÔ±à³ÌÏà±È£¬º¯Êýʽ±à³ÌµÄÖØµãÊǺ¯ÊýµÄ¶¨Òå¶ø²»ÊÇ״̬»ú£¨state machine£©µÄʵÏÖ¡£

´óÐÍ֪ʶ¹ÜÀíϵͳӦÓóÌÐò´ÓʹÓú¯Êýʽ±à³Ì·ç¸ñÉÏÊÜÒæÆÄ¶à£¬ÒòΪº¯Êýʽ±à³Ì¼ò»¯ÁË¿ª·¢¡£

ÒòΪº¯Êýʽ±à³Ì²ÉÓÃÁËÍêÈ«²»Í¬µÄ×éÖ¯³ÌÐòµÄ·½Ê½£¬ËùÒÔÄÇЩϰ¹ßÓÚ²ÉÓÃÃüÁîʽ·¶ÀýµÄ³ÌÐòÔ±¿ÉÄܻᷢÏÖº¯Êýʽ±à³ÌÓеãÄÑѧ¡£ÔÚÕâÆªÎÄÕÂÖУ¬Äú½«Á˽âһЩ¹ØÓÚÈçºÎ²ÉÓú¯Êýʽ·ç¸ñ£¬Óà JavaScript ±àдÁ¼ºÃµÄ¡¢ÓÅÃÀµÄ´úÂëµÄʾÀý¡£ÎÒ½«ÌÖÂÛ£º

  • º¯Êýʽ±à³Ì¸ÅÄ°üÀ¨ÄäÃûº¯Êý¡¢µ÷Óú¯ÊýµÄ²»Í¬·½·¨£¬ÒÔ¼°½«º¯Êý×÷Ϊ²ÎÊý´«µÝ¸øÆäËûº¯ÊýµÄ·½Ê½¡£
  • º¯Êýʽ¸ÅÄîµÄÔËÓ㬲ÉÓõÄʾÀý°üÀ¨£ºÀ©Õ¹Êý×éÅÅÐò£»¶¯Ì¬ HTML Éú³ÉµÄÓÅÃÀ´úÂ룻ϵÁк¯ÊýµÄÓ¦Óá£



º¯Êýʽ±à³Ì¸ÅÄî

ÔÚÄÇЩͨ¹ýÃèÊö ¡°ÈçºÎ×ö¡± Ö¸¶¨½â¾öÎÊÌâµÄ·½·¨µÄÓïÑÔÖУ¬Ðí¶à¿ª·¢ÈËÔ±¶¼ÖªµÀÈçºÎ½øÐбàÂë¡£ÀýÈ磬Ҫ±àдһ¸ö¼ÆËã½×³ËµÄº¯Êý£¬ÎÒ¿ÉÒÔ±àдһ¸öÑ­»·À´ÃèÊö³ÌÐò£¬»òÕßʹÓõݹéÀ´²éÕÒËùÓÐÊý×ֵij˻ý¡£ÔÚÕâÁ½ÖÖÇé¿öÏ£¬¼ÆËãµÄ¹ý³Ì¶¼ÔÚ³ÌÐòÖнøÐÐÁËÏêϸ˵Ã÷¡£Çåµ¥ 1 ÏÔʾÁËÒ»¸ö¼ÆËã½×³ËµÄ¿ÉÄÜʹÓÃµÄ C ´úÂë¡£


Çåµ¥ 1. ¹ý³Ì·ç¸ñµÄ½×³Ë
                  
int factorial (int n)
{
  if (n <= 0)
    return 1;
  else
    return n * factorial (n-1);
}

ÕâÀàÓïÑÔÒ²½Ð×ö¹ý³ÌÐÔ ±à³ÌÓïÑÔ£¬ÒòΪËüÃǶ¨ÒåÁ˽â¾öÎÊÌâµÄ¹ý³Ì¡£º¯Êýʽ±à³ÌÓëÕâ¸öÔ­ÀíÓÐÏÔÖø²»Í¬¡£ÔÚº¯Êýʽ±à³ÌÖУ¬ÐèÒªÃèÊöÎÊÌâ ¡°ÊÇʲô¡±¡£ º¯Êýʽ±à³ÌÓïÑÔÓÖ½Ð×öÉùÃ÷ÐÔ ÓïÑÔ¡£Í¬ÑùµÄ¼ÆËã½×³ËµÄ³ÌÐò¿ÉÒÔд³ÉËùÓе½ n µÄÊý×ֵij˻ý¡£¼ÆËã½×³ËµÄµäÐͺ¯Êýʽ³ÌÐò¿´ÆðÀ´Èç Çåµ¥ 2 ÖеÄʾÀýËùʾ¡£


Çåµ¥ 2. º¯Êýʽ·ç¸ñµÄ½×³Ë
                          
factorial n, where n <= 0    := 1
factorial n    := foldr * 1 take n [1..]

µÚ¶þ¸öÓï¾äÖ¸Ã÷ÒªµÃµ½´Ó 1 ¿ªÊ¼µÄǰ n ¸öÊý×ÖµÄÁÐ±í£¨take n [1..]£©£¬È»ºóÕÒ³öËüÃǵij˻ý£¬1 Ϊ»ùÔª¡£Õâ¸ö¶¨ÒåÓëÇ°ÃæµÄʾÀý²»Í¬£¬Ã»ÓÐÑ­»·»òµÝ¹é¡£Ëü¾ÍÏñ½×³Ëº¯ÊýµÄËãÊõ¶¨Òå¡£Ò»µ©Á˽âÁ˿⺯Êý£¨take ºÍ foldr£©ºÍ±ê¼Ç£¨list notation [ ]£©µÄÒâÒ壬±àд´úÂë¾ÍºÜÈÝÒ×£¬¶øÇҿɶÁÐÔÒ²ºÜºÃ¡£

Ö»ÓÃÈýÐÐ Miranda ´úÂë¾Í¿ÉÒÔ±àдÀý³Ì£¬¸ù¾Ý²ÎÊý£¬Ê¹Óùã¶ÈÓÅÏÈ»òÉî¶ÈÓÅÏȱéÀú´¦Àí n ²æÊ÷µÄÿ¸ö½Úµã£¬¶øÇÒÔªËØ¿ÉÒÔÊÇÈκÎͨÓÃÀàÐÍ¡£

´ÓÀúÊ·ÉÏ¿´£¬º¯Êýʽ±à³ÌÓïÑÔ²»Ì«Á÷ÐÐÓи÷ÖÖÔ­Òò¡£µ«ÊÇ×î½ü£¬ÓÐЩº¯Êýʽ±à³ÌÓïÑÔÕýÔÚ½øÈë¼ÆËã»úÐÐÒµ¡£ÆäÖÐÒ»¸öÀý×Ó¾ÍÊÇ .NET ƽ̨É쵀 Haskell¡£ÆäËûÇé¿öÏ£¬ÏÖÓеÄһЩÓïÑÔ½èÓÃÁ˺¯Êýʽ±à³ÌÓïÑÔÖеÄһЩ¸ÅÄһЩ C++ ʵÏÖÖеĵü´úÆ÷ºÍ continuation£¬ÒÔ¼° JavaScript ÖÐÌṩµÄһЩº¯Êýʽ¹¹Ô죨functional construct£©£¬¾ÍÊÇÕâÖÖ½èÓõÄʾÀý¡£µ«ÊÇ£¬Í¨¹ý½èÓú¯Êýʽ¹¹Ô죬×ܵÄÓïÑÔ±à³Ì·¶Àý²¢Ã»Óз¢Éú±ä»¯¡£JavaScript ²¢Ã»ÒòΪº¯Êýʽ¹¹ÔìµÄÌí¼Ó¾Í±ä³ÉÁ˺¯Êýʽ±à³ÌÓïÑÔ¡£

ÎÒÏÖÔÚÒªÌÖÂÛ JavaScript Öеĺ¯Êýʽ¹¹ÔìµÄ¸÷ÖÖÃÀÃîÖ®´¦£¬ÒÔ¼°ÔÚÈÕ³£±àÂëºÍ¹¤×÷ÖÐʹÓÃËüÃǵķ½Ê½¡£ÎÒÃǽ«´ÓһЩ»ù±¾¹¦ÄÜ¿ªÊ¼£¬È»ºóÓÃËüÃDz鿴һЩ¸üÓÐȤµÄÓ¦Óá£

ÄäÃûº¯Êý

ÔÚ JavaScript ÖУ¬¿ÉÒÔ±àдÄäÃûº¯Êý»òûÓÐÃû³ÆµÄº¯Êý¡£ÎªÊ²Ã´ÐèÒªÕâÑùµÄº¯Êý£¿Çë¼ÌÐøÍù϶Á£¬µ«Ê×ÏÈÎÒÃǽ«Ñ§Ï°ÈçºÎ±àдÕâÑùÒ»¸öº¯Êý¡£Èç¹ûÓµÓÐÒÔÏ JavaScript º¯Êý£º
Çåµ¥ 3. µäÐ͵ĺ¯Êý

                          
function sum(x,y,z) {
  return (x+y+z);
}

È»ºó¶ÔÓ¦µÄÄäÃûº¯Êý¿´ÆðÀ´Ó¦µ±ÈçÏÂËùʾ£º
Çåµ¥ 4. ÄäÃûº¯Êý

                          
function(x,y,z) {
  return (x+y+z);
}

ҪʹÓÃËü£¬ÔòÐèÒª±àдÒÔÏ´úÂ룺


Çåµ¥ 5. Ó¦ÓÃÄäÃûº¯Êý
                          
var sum = function(x,y,z) {
  return (x+y+z);
}(1,2,3);
alert(sum);

ʹÓú¯Êý×÷Ϊֵ

Ò²¿ÉÒÔ½«º¯Êý×÷ΪֵʹÓ᣻¹¿ÉÒÔÓµÓÐһЩËù¸³ÖµÊǺ¯ÊýµÄ±äÁ¿¡£ÔÚ×îºóÒ»¸öʾÀýÖУ¬»¹¿ÉÒÔÖ´ÐÐÒÔϲÙ×÷£º
Çåµ¥ 6. ʹÓú¯Êý¸³Öµ

                          
var sum = function(x,y,z) {
  return (x+y+z);
}
alert(sum(1,2,3));

ÔÚÉÏÃæ Çåµ¥ 6 µÄʾÀýÖУ¬Îª±äÁ¿ sum ¸³µÄÖµÊǺ¯Êý¶¨Òå±¾Éí¡£ÕâÑù£¬sum ¾Í³ÉÁËÒ»¸öº¯Êý£¬¿ÉÒÔÔÚÈκεط½µ÷Óá£

µ÷Óú¯ÊýµÄ²»Í¬·½·¨

JavaScript ÔÊÐíÓÃÁ½ÖÖ·½Ê½µ÷Óú¯Êý£¬ÈçÇåµ¥ 7 ºÍ Çåµ¥ 8 Ëùʾ¡£


Çåµ¥ 7. µäÐ͵ĺ¯ÊýÓ¦ÓÃ
                          
alert (¡°Hello, World!");

»ò


Çåµ¥ 8. Óú¯Êý×÷Ϊ±í´ïʽ
                          
(alert) (¡°Hello, World!");

ËùÒÔÒ²¿ÉÒÔ±àдÒÔÏ´úÂ룺


Çåµ¥ 9. ¶¨Ò庯ÊýÖ®ºó¾Í¿ÉÒÔÁ¢¼´Ê¹ÓÃËü
( function(x,y,z) { return (x+y+z) } ) (1, 2, 3);

¿ÉÒÔÔÚÀ¨ºÅÖбàдº¯Êý±í´ïʽ£¬È»ºó´«µÝ¸ø²ÎÊý£¬¶Ô²ÎÊý½øÐÐÔËËã¡£ËäÈ»ÔÚ Çåµ¥ 8 µÄʾÀýÖУ¬ÓÐÖ±½Ó°üº¬ÔÚÀ¨ºÅÖеĺ¯ÊýÃû³Æ£¬µ«Êǰ´ Çåµ¥ 9 ÖÐËùʾ·½Ê½Ê¹ÓÃËüʱ£¬¾Í²»ÊÇÕâÑùÁË¡£

½«º¯Êý×÷Ϊ²ÎÊý´«µÝ¸øÆäËûº¯Êý

Ò²¿ÉÒÔ½«º¯Êý×÷Ϊ²ÎÊý´«µÝ¸øÆäËûº¯Êý¡£ËäÈ»Õâ²»ÊÇʲôиÅÄµ«ÊÇÔÚºóÐøµÄʾÀýÖдóÁ¿µÄʹÓÃÁËÕâ¸ö¸ÅÄî¡£¿ÉÒÔ´«µÝº¯Êý²ÎÊý£¬Èç Çåµ¥ 10 Ëùʾ¡£


Çåµ¥ 10. ½«º¯Êý×÷Ϊ²ÎÊý´«µÝ£¬²¢Ó¦Óøú¯Êý
                          
var passFunAndApply = function (fn,x,y,z) { return fn(x,y,z); };

var sum = function(x,y,z) {
  return x+y+z;
};

alert( passFunAndApply(sum,3,4,5) ); // 12

Ö´ÐÐ×îºóÒ»¸ö alert Óï¾äÊä³öÁËÒ»¸ö´óСΪ 12 µÄÖµ¡£

ʹÓú¯Êýʽ¸ÅÄî

ǰһ½Ú½éÉÜÁËһЩʹÓú¯Êýʽ·ç¸ñµÄ±à³Ì¸ÅÄî¡£Ëù¸øµÄʾÀý²¢Ã»Óаüº¬ËùÓеĸÅÄËüÃÇÔÚÖØÒªÐÔ·½ÃæÒ²Ã»ÓÐÏȺó˳Ðò£¬Ö»ÊÇһЩÓëÕâ¸öÌÖÂÛÓйصĸÅÄî¶øÒÑ¡£ÏÂÃæ¶Ô JavaScript Öеĺ¯Êýʽ·ç¸ñ×÷Ò»¿ìËÙ×ܽ᣺

  • º¯Êý²¢²»×ÜÊÇÐèÒªÃû³Æ¡£
  • º¯Êý¿ÉÒÔÏñÆäËûÖµÒ»Ñù·ÖÅ䏸±äÁ¿¡£
  • º¯Êý±í´ïʽ¿ÉÒÔ±àд²¢·ÅÔÚÀ¨ºÅÖУ¬Áô´ýÒÔºóÓ¦Óá£
  • º¯Êý¿ÉÒÔ×÷Ϊ²ÎÊý´«µÝ¸øÆäËûº¯Êý¡£

ÕâÒ»½Ú½«½éÉÜһЩÓÐЧʹÓÃÕâЩ¸ÅÄî±àдÓÅÃÀµÄ JavaScript ´úÂëµÄʾÀý¡££¨Ê¹Óà JavaScript º¯Êýʽ·ç¸ñ£¬¿ÉÒÔ×öÐí¶à³¬³öÕâ¸öÌÖÂÛ·¶Î§µÄÊ¡££©

À©Õ¹Êý×éÅÅÐò
ÏÈÀ´±àдһ¸öÅÅÐò·½·¨£¬¿ÉÒÔ¸ù¾ÝÊý×éÔªËØµÄÈÕÆÚ¶ÔÊý¾Ý½øÐÐÅÅÐò¡£Óà JavaScript ±àдÕâ¸ö·½·¨·Ç³£¼òµ¥¡£Êý¾Ý¶ÔÏóµÄÅÅÐò·½·¨½ÓÊÜÒ»¸ö¿ÉÑ¡²ÎÊý£¬Õâ¸ö¿ÉÑ¡²ÎÊý¾ÍÊDZȽϺ¯Êý¡£ÔÚÕâÀÐèҪʹÓà Çåµ¥ 11 ÖеıȽϺ¯Êý¡£


Çåµ¥ 11. ±È½Ïº¯Êý

function (x,y) {
        return x.date ¨C y.date;
}

ÒªµÃµ½ÐèÒªµÄº¯Êý£¬ÇëʹÓà Çåµ¥ 12 µÄʾÀý¡£


Çåµ¥ 12. ÅÅÐòº¯ÊýµÄÀ©Õ¹
arr.sort( function (x,y) {        return x.date ¨C y.date; } );

ÆäÖÐ arr ÊÇÀàÐÍÊý×é¶ÔÏó¡£ÅÅÐòº¯Êý»á¸ù¾Ý arr Êý×éÖжÔÏóµÄÈÕÆÚ¶ÔËùÓжÔÏó½øÐÐÅÅÐò¡£±È½Ïº¯ÊýºÍËüµÄ¶¨ÒåÒ»Æð±»´«µÝ¸øÅÅÐòº¯Êý£¬ÒÔÍê³ÉÅÅÐò²Ù×÷¡£Ê¹ÓÃÕâ¸öº¯Êý£º

  • ÿ¸ö JavaScript ¶ÔÏó¶¼ÓÐÒ»¸ö date ÊôÐÔ¡£
  • JavaScript µÄÊý×éÀàÐ͵ÄÅÅÐòº¯Êý½ÓÊÜ¿ÉÑ¡²ÎÊý£¬¿ÉÑ¡²ÎÊýÊÇÓÃÀ´ÅÅÐòµÄ±È½Ïº¯Êý¡£ÕâÓë C ¿âÖÐµÄ qsort º¯ÊýÀàËÆ¡£
¶¯Ì¬Éú³É HTML µÄÓÅÃÀ´úÂë
ÔÚÕâ¸öʾÀýÖУ¬½«¿´µ½ÈçºÎ±àдÓÅÃÀµÄ´úÂ룬´ÓÊý×鶯̬µØÉú³É HTML¡£¿ÉÒÔ¸ù¾Ý´ÓÊý¾ÝÖеõ½µÄÖµÉú³É±í¸ñ¡£»òÕߣ¬Ò²¿ÉÒÔÓÃÊý×éµÄÄÚÈÝÉú³ÉÅÅÐòºÍδÅÅÐòµÄÁÐ±í¡£Ò²¿ÉÒÔÉú³É´¹Ö±»òˮƽµÄ²Ëµ¥ÏîÄ¿¡£

Çåµ¥ 13 ÖеĴúÂë·ç¸ñͨ³£±»ÓÃÀ´´ÓÊý×éÉú³É¶¯Ì¬ HTML¡£


Çåµ¥ 13. Éú³É¶¯Ì¬ HTML µÄÆÕͨ´úÂë
var str=' ';
for (var i=0;i<arr.length;i++) {
  var element=arr[i];
  str+=... HTML generation code...
}
document.write(str);

¿ÉÒÔÓà Çåµ¥ 14 µÄ´úÂëÌæ»»Õâ¸ö´úÂë¡£


Çåµ¥ 14. Éú³É¶¯Ì¬ HTML µÄͨÓ÷½Ê½
                                          
Array.prototype.fold=function(templateFn) {
  var len=this.length;
  var str=' ';
  for (var i=0 ; i<len ; i++) 
        str+=templateFn(this[i]);
  return str;
}

function templateInstance(element) {
  return ... HTML generation code ...
}

document.write(arr.fold(templateInstance));

ÎÒʹÓà Array ÀàÐ굀 prototype ÊôÐÔ¶¨Òåк¯Êý fold¡£ÏÖÔÚ¿ÉÒÔÔÚºóÃæ¶¨ÒåµÄÈκÎÊý×éÖÐʹÓøú¯Êý¡£

ϵÁк¯ÊýµÄÓ¦ÓÃ
¿¼ÂÇÒÔÏÂÕâÖÖÇé¿ö£ºÏëÓÃÒ»×麯Êý×÷Ϊ»Øµ÷º¯Êý¡£ÎªÊµÏÖÕâһĿµÄ£¬½«Ê¹Óà window.setTimeout º¯Êý£¬¸Ãº¯ÊýÓÐÁ½¸ö²ÎÊý¡£µÚÒ»¸ö²ÎÊýÊÇÔÚµÚ¶þ¸ö²ÎÊý±íʾµÄºÁÃëÊýÖ®ºó±»µ÷Óõĺ¯Êý¡£Çåµ¥ 15 ÏÔʾÁËÍê³É´Ë²Ù×÷µÄÒ»ÖÖ·½·¨¡£
Çåµ¥ 15. Ôڻص÷Öе÷ÓÃÒ»×麯Êý
window.setTimeout(function(){alert(¡®First!¡¯);alert(¡®Second!¡¯);}, 5000);

Çåµ¥ 16 ÏÔʾÁËÍê³É´Ë²Ù×÷µÄ¸üºÃµÄ·½Ê½¡£


Çåµ¥ 16. µ÷ÓÃϵÁк¯ÊýµÄ¸üºÃµÄ·½Ê½
Function.prototype.sequence=function(g) {
  var f=this;
  return function() {
    f();g();
  }
};
function alertFrst() { alert(¡®First!¡¯); }
function alertSec() { alert(¡®Second!¡¯); }
setTimeout( alertFrst.sequence(alertSec), 5000);

ÔÚ´¦Àíʼþʱ£¬Èç¹ûÏëÔÚµ÷ÓÃÍêÒ»¸ö»Øµ÷Ö®ºóÔÙµ÷ÓÃÒ»¸ö»Øµ÷£¬Ò²¿ÉÒÔʹÓà Çåµ¥ 16 ÖеĴúÂëÀ©Õ¹¡£Õâ¿ÉÄÜÊÇÒ»¸öÐèÒªÄú×ÔÐÐÍê³ÉµÄÒ»¸öÁ·Ï°£¬ÏÖÔÚÄúµÄÐËȤ±»µãȼÁ˰ɡ£

Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ