1ãå ³äºä¹¦ç±çéæ©
1ï¼ãéæ©å¥½å¦ä¹ çå½æ°å¼ç¼ç¨è¯è¨åï¼å¯ä»¥æ ¹æ®èªå·±çæ
åµå»ä¸äºä¹¦åºãç½ä¸ååï¼æ¯äº¬ä¸ãå½å½ï¼éæ©ç¸åºç¼ç¨è¯è¨ç书ç±èµæã
2ï¼ãå¦æä»ææ³å
¥æï¼å¹¶ä¸å¸æå¦çæ´æ·±å
¥ï¼ä¸ªäººå»ºè®®ä»SICPï¼ã计ç®æºç¨åºçæé å解éãï¼å
¥æï¼Schemeè¯è¨æ¯ææ³çé¤ç¼ã
3ï¼ãå¦æç¨æ·æ¯javaç¨åºåï¼å»ºè®®ççclojureï¼è¿æ¯ä¸ªæå
·ç产åçè¯è¨å·¥å
·ï¼å®è¿è¡äºjavaå¹³å°ä¸çlispãtwitterçstormå°±æ¯ç¨å®åçãclojureç°å¨å·²ç»æ¯é»å®¢é¢åæèç¼çææäºãæéè¦çæ¯clojureå·²ç»åºçäºå¾å¤æ¬ä¸æææï¼å¯ä»¥å
¥æå¦ä¹ äºã顺带å ä¸SICPå¯ä»¥å å¿«å¦ä¹ è¿åº¦ã以项ç®ä¸ºä¸å¿å¯ä»¥éæ©ãClojureç»å
¸å®ä¾ åè½æ§ç¼ç¨å
¨é¢æåãã没æåºç¡çå¯ä»¥éæ©ãLiving Clojureãï¼ä¸æçï¼ãèç¨åºåå¯ä»¥åèãClojureç¼ç¨ä¹è¶£ãä¸æç ã
4ï¼ãå¦æä¸ä¸ºä½é¡¹ç®ï¼åªæ¯ä¸ºäºæå个人çè½åæè ç¼ç¨ææ³ï¼å¯ä»¥éæ©haskellè¯è¨ï¼è¿ä¸ªèµæä¹æ¯è¾å¤ï¼æ 论书ç±è¿æ¯è§é¢ãææ¡£çç ã
2ãç®å说ï¼"å½æ°å¼ç¼ç¨"æ¯ä¸ç§"ç¼ç¨èå¼"ï¼programming paradigmï¼ï¼ä¹å°±æ¯å¦ä½ç¼åç¨åºçæ¹æ³è®ºã
å®å±äº"ç»æåç¼ç¨"çä¸ç§ï¼ä¸»è¦ææ³æ¯æè¿ç®è¿ç¨å°½éåæä¸ç³»ååµå¥çå½æ°è°ç¨ã举ä¾æ¥è¯´ï¼ç°å¨æè¿æ ·ä¸ä¸ªæ°å¦è¡¨è¾¾å¼ï¼
ãã(1 + 2) * 3 - 4ä¼ ç»çè¿ç¨å¼ç¼ç¨ï¼å¯è½è¿æ ·åï¼
ããvar a = 1 + 2;å½æ°å¼ç¼ç¨è¦æ±ä½¿ç¨å½æ°ï¼æ们å¯ä»¥æè¿ç®è¿ç¨å®ä¹ä¸ºä¸åçå½æ°ï¼ç¶ååæä¸é¢è¿æ ·ï¼
ããvar result = subtract(multiply(add(1,2), 3), 4);è¿å°±æ¯å½æ°å¼ç¼ç¨ã
3ãå½æ°ç¼ç¨çç¹ç¹ï¼
å½æ°å¼ç¼ç¨å ·æäºä¸ªé²æçç¹ç¹ã
1ï¼ã å½æ°æ¯"第ä¸çå ¬æ°"
æè°"第ä¸çå ¬æ°"ï¼first classï¼ï¼æçæ¯å½æ°ä¸å ¶ä»æ°æ®ç±»åä¸æ ·ï¼å¤äºå¹³çå°ä½ï¼å¯ä»¥èµå¼ç»å ¶ä»åéï¼ä¹å¯ä»¥ä½ä¸ºåæ°ï¼ä¼ å ¥å¦ä¸ä¸ªå½æ°ï¼æè ä½ä¸ºå«çå½æ°çè¿åå¼ã
举ä¾æ¥è¯´ï¼ä¸é¢ä»£ç ä¸çprintåéå°±æ¯ä¸ä¸ªå½æ°ï¼å¯ä»¥ä½ä¸ºå¦ä¸ä¸ªå½æ°çåæ°ã
ããvar print = function(i){ console.log(i);};2ï¼ãåªç¨"表达å¼"ï¼ä¸ç¨"è¯å¥"
"表达å¼"ï¼expressionï¼æ¯ä¸ä¸ªå纯çè¿ç®è¿ç¨ï¼æ»æ¯æè¿åå¼ï¼"è¯å¥"ï¼statementï¼æ¯æ§è¡æç§æä½ï¼æ²¡æè¿åå¼ãå½æ°å¼ç¼ç¨è¦æ±ï¼åªä½¿ç¨è¡¨è¾¾å¼ï¼ä¸ä½¿ç¨è¯å¥ãä¹å°±æ¯è¯´ï¼æ¯ä¸æ¥é½æ¯å纯çè¿ç®ï¼èä¸é½æè¿åå¼ã
åå æ¯å½æ°å¼ç¼ç¨çå¼åå¨æºï¼ä¸å¼å§å°±æ¯ä¸ºäºå¤çè¿ç®ï¼computationï¼ï¼ä¸èèç³»ç»ç读åï¼I/Oï¼ã"è¯å¥"å±äºå¯¹ç³»ç»ç读åæä½ï¼æ以就被ææ¥å¨å¤ã
å½ç¶ï¼å®é åºç¨ä¸ï¼ä¸åI/Oæ¯ä¸å¯è½çãå æ¤ï¼ç¼ç¨è¿ç¨ä¸ï¼å½æ°å¼ç¼ç¨åªè¦æ±æI/Oéå¶å°æå°ï¼ä¸è¦æä¸å¿ è¦ç读åè¡ä¸ºï¼ä¿æ计ç®è¿ç¨çå纯æ§ã
3ï¼ã没æ"å¯ä½ç¨"
æè°"å¯ä½ç¨"ï¼side effectï¼ï¼æçæ¯å½æ°å é¨ä¸å¤é¨äºå¨ï¼æå ¸åçæ åµï¼å°±æ¯ä¿®æ¹å ¨å±åéçå¼ï¼ï¼äº§çè¿ç®ä»¥å¤çå ¶ä»ç»æã
å½æ°å¼ç¼ç¨å¼ºè°æ²¡æ"å¯ä½ç¨"ï¼æå³çå½æ°è¦ä¿æç¬ç«ï¼ææåè½å°±æ¯è¿åä¸ä¸ªæ°çå¼ï¼æ²¡æå ¶ä»è¡ä¸ºï¼å°¤å ¶æ¯ä¸å¾ä¿®æ¹å¤é¨åéçå¼ã
4ï¼ãä¸ä¿®æ¹ç¶æ
ä¸ä¸ç¹å·²ç»æå°ï¼å½æ°å¼ç¼ç¨åªæ¯è¿åæ°çå¼ï¼ä¸ä¿®æ¹ç³»ç»åéãå æ¤ï¼ä¸ä¿®æ¹åéï¼ä¹æ¯å®çä¸ä¸ªéè¦ç¹ç¹ã
å¨å ¶ä»ç±»åçè¯è¨ä¸ï¼åéå¾å¾ç¨æ¥ä¿å"ç¶æ"ï¼stateï¼ãä¸ä¿®æ¹åéï¼æå³çç¶æä¸è½ä¿åå¨åéä¸ãå½æ°å¼ç¼ç¨ä½¿ç¨åæ°ä¿åç¶æï¼æ好çä¾åå°±æ¯éå½ãä¸é¢ç代ç æ¯ä¸ä¸ªå°å符串éåºæåçå½æ°ï¼å®æ¼ç¤ºäºä¸åçåæ°å¦ä½å³å®äºè¿ç®æå¤ç"ç¶æ"ã
ããfunction reverse(string) {ç±äºä½¿ç¨äºéå½ï¼å½æ°å¼è¯è¨çè¿è¡é度æ¯è¾æ ¢ï¼è¿æ¯å®é¿æä¸è½å¨ä¸çæ¨å¹¿ç主è¦åå ã
5ï¼ãå¼ç¨éæ
å¼ç¨éæï¼Referential transparencyï¼ï¼æçæ¯å½æ°çè¿è¡ä¸ä¾èµäºå¤é¨åéæ"ç¶æ"ï¼åªä¾èµäºè¾å ¥çåæ°ï¼ä»»ä½æ¶ååªè¦åæ°ç¸åï¼å¼ç¨å½æ°æå¾å°çè¿åå¼æ»æ¯ç¸åçã
æäºåé¢ç第ä¸ç¹å第åç¹ï¼è¿ç¹æ¯å¾æ¾ç¶çãå ¶ä»ç±»åçè¯è¨ï¼å½æ°çè¿åå¼å¾å¾ä¸ç³»ç»ç¶ææå ³ï¼ä¸åçç¶æä¹ä¸ï¼è¿åå¼æ¯ä¸ä¸æ ·çãè¿å°±å«"å¼ç¨ä¸éæ"ï¼å¾ä¸å©äºè§å¯åç解ç¨åºçè¡ä¸ºã