«áááºáá®ážáá°ážááá»áŸ áááá¯ááááºážáááºážáá¬áá¬á áá¬áž á¡ááŒá®ážáá»ááºáá¯á¶ážÂ«
- Alan Kay, "on Lisp"
McCarthy ááẠ1950 áá¯ááŸá
áºááŸá±á¬ááºážááá¯ááºážááœáẠLisp ááᯠáá®ááœááºáá²á·áá±á¬á¡áá«ááœáẠáááºážááẠáááºááŸááá¬áá¬á
áá¬ážáá»á¬ážááŸáá·áº ááœááºá
áœá¬ááœá¬ááŒá¬ážááœá¬ážáá²á·ááŒá®áž á¡áá±ážááŒá®ážáá¯á¶ážááŸá¬á
Lisp ááẠá¡ááŒá¶á¥á¬ááºáá
áºááá¯ážáá¯ááᯠááááºáááºáá±ážáá²á·áááºá
1. á¡ááŒá±á¡áá±áá»á¬áž. Conditional statements áá»á¬ážááẠif- then-else áááºáá±á¬ááºááŸá¯áá»á¬ážááŒá
áºáááºá á¡áá¯áá°ááá¯á·ááᯠá¡áá±ážááá¬ážáá°ážá áá°ááá¯á·áááº
2. áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯ážá¡á á¬áž. Lisp ááœááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááááááºážá á¬ážá¡áá¬ááá¹áá¯áá»á¬ážááŒá áºááẠ- áááºážááá¯á·ááẠááááºážááááºážáá»á¬ážá á á¬ááŒá±á¬ááºážáá»á¬áž á áááºááá¯á·áá²á·ááá¯á· áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá áºáá¯ááŒá áºááŒá®áž á á¬áá¬ážááá¯ááºá á¬ážááŒá¯ááŸá¯áá«ááŸáááŒá®ážá variables áá»á¬ážááœáẠááááºážáááºážáá¬ážááá¯ááºáááºá á¡ááŒááºážá¡áá¯á¶áá»á¬ážá¡ááŒá ẠááŒááºáááºážááá¯ááºáááºá
3. ááŒááºááŸáá·áºááŒááºážá. Recursion ááẠLisp áááá¯ááºáá®á áááºá¹áá»á¬á¡áá°á¡ááá áºáá¯á¡ááŒá ẠáááºááŸááá²á·áá±á¬áºáááºáž Lisp ááẠáááºážááᯠáá¶á·ááá¯ážááẠááááá¯á¶áž áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááŒá áºáááºá (áááºážááẠááááááºážá á¬áž á¡áá¬ááá¹áá¯áá»á¬ážá¡ááŒá Ạáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºáá®ážáá¬ááœáẠá¡áááá¹áá¬ááºáááºáá±á¬ááºááá¯ááºáááºá)
4. ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ á¡áá°á¡áá¡áá áº. Lisp ááœááºá ááááºážááŸááºá¡á¬ážáá¯á¶ážááẠáááá±á¬ááºáá±á¬ááœáŸááºááŒáá»ááºáá»á¬ážááŒá áºáááºá áááºááá¯ážáá»á¬ážááẠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááŸáá áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬á ááŸáá·áº áááºááŸááºáá±ážááá·áº ááá¯á·ááá¯áẠáá»áááºááœá²áá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážááẠáááºážááá¯á·ááœáŸááºááŒááá·áºá¡áá¬ááᯠáá°ážáá°ááŒááºážááá¯ááºáá² ááœáŸááºááŒáá»ááºáá»á¬ážááᯠáá°ážáá°ááŒááºážáᯠá¡áááá¹áá«ááºááááºá
5. á¡ááŸáá¯ááºááááºáž.
6. á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŒáá·áº ááœá²á·á ááºážáá¬ážáá±á¬ á¡á á®á¡á ááºáá»á¬áž. Lisp áááá¯ááááºáá»á¬ážááẠáááºááá¯ážáá áºáá¯á á®ááᯠááŒááºáá±ážááá·áº á¡áá¯á¶ážá¡ááŸá¯ááºážáá áºáááºáá»á¬ážááŒá áºáááºá (á¡áá»áá¯á· Lisp á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááẠáááºááá¯ážáá»á¬ážá áœá¬ááᯠááŒááºáá±ážááá¯ááºáááºá) áááºážááẠFortran ááŸáá·áº âá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážâ ááŸáá·áº âáá±á¬áºááŒáá»ááºáá»á¬ážâ á¡ááŒá¬áž ááá¯ááºážááŒá¬ážáá±á¬ á¡ááŒá¬ážá¡á±á¬ááºááŒááºáá±á¬áá¬áá¬á áá¬ážáá»á¬ážááŸáá·áº ááá·áºáá»ááºáááºááŒá áºáááºá
áá¬áá¬á áá¬ážááẠáá»ááºážá¡áá¬ážáá±ážááŒá áºáá±á¬ááŒá±á¬áá·áº (Fortran ááœáẠá€áá°ážááŒá¬ážáá»ááºááᯠáááŸááááŒááºážááŸá¬ ááá¬ááá»áá«ááẠ(ááá·áºááœááºážáá±á¬áºáááºáá¬ážáá±á¬ áááºááŒá¬ážáá áºáá¯ááŒá áºááá·áº áá¬áá¬á áá¬ážá¡ááœáẠá¡á¶á·ááŒá áá¬ááá¯ááºáá«)á ááá·áºááœáẠá¡ááá¯ááºá¡ááŒá¯á¶ááŸááºážáááºážáá»á¬áž ááá«áááºááá¯ááºáá«á áááºá¡áá¯ááºáá¯ááºááẠáááºá¹áá»á¬ááá¯ááºáá¬á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬áž ááá¯á¡ááºáá±ááá»áŸ áá¬ááááºáá¯á¶áž ááŒááºáá¬ááẠá á±á¬áá·áºááá¯ááºážá áᬠáá áºá á¯á¶áá áºáᬠáááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº áááºááá¯ážáá áºáᯠááŒááºáá±ážáááºá¡ááœáẠá¡ááŒá¬ážáá¬á០áá±ážá áá¬á¡ááŒá±á¬ááºážáááŸááá«á
ááááºááá¯á·ááœá²á·á ááºážáá¯á¶ááŸááá±á¬ áá¬áá¬á áá¬ážáá»á¬áž ááœááºážáá¬ážáá¬áááŒáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠáá¯ááºááááºážááá¯ááºáá±á¬áºáááºáž ááá¯á¡áá»áááºááœáẠáá±á¬ááºáá»ááœá¬ážááŒá®ááŒá áºáááºá á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŸáá·áº áá±á¬áºááŒáá»ááºáá»á¬ážá¡ááŒá¬áž ááŒá¬ážáá¬ážááŸá¯ááᯠáá°áá±á¬ááºáá¬ážááŒá®ážááŒá áºáááºá Fortran á០Algol ááá¯á· áá°ážááœá¬ážááŒá®áž áá°ááá¯á·á áá¬ážá ááºááŒá±ážáááºáá»á¬ážáá®ááá¯á· áá°ážááœá¬ážáááºá
áá¬áá¬á
áá¬ážáá
áºáá¯ááẠá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááᯠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬ážááŒá¯áá¯ááºáá±á¬á¡áá«á áááºá¡ááá¯ááŸáááá·áºá¡ááá¯ááºáž á
áá¬ážá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááᯠáá±ážááœá²á·ááá¯ááºáááºá (á¡áá¬ážá¡ááá¯ááᯠá¡áá¯á¶ážááŒá¯á áá±á¬áºáááºážáá±á¬ááºáž áá±ážááá¯ááºáááºá
(if foo (= x 1) (= x 2))
ááá¯á·ááá¯ááº
(= x (if foo 1 2))
7. áááºá¹áá±áá¡áá»áá¯ážá¡á á¬áž. á á¬áá¯á¶ážáá»á¬ážááẠá á¬ááŒá±á¬ááºážáá»á¬ážááŸáá·áº ááœá²ááŒá¬ážáááºá áááºážá¡ááŒá±á¡áá±ááœáẠááœáŸááºááŸááºáá»á¬ážááᯠááŸáá¯ááºážááŸááºááŒááºážááŒáá·áº áá¬áá°áá®áá»áŸááŸááááŸá á á áºáá±ážááá¯ááºáááºá
8. áá¯ááºá¡ááœáẠá¡ááŸááºá¡áá¬ážáá áºáᯠáááºá¹áá±ááá áºáááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯.
9. áá¬áá¬á áá¬ážáá áºáá¯áá¯á¶ážááᯠá¡ááŒá²áá¯á¶ážááá¯ááºáááº. á á¬áááºáá»áááºá á á¯á ááºážáá»áááºááŸáá·áº á¡áá¯ááºáá¯ááºáá»áááºááá¯á·ááŒá¬áž áááá¬áááºááŸá¬ážáá±á¬ ááœá¬ááŒá¬ážáá»ááºáááŸááá«á áááºáááºáá±á ááºá¡ááœááºáž áá¯ááºááᯠá á¯á ááºážááá¯ááºááẠááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºááá¯ááºáááºá ááá¯á·ááá¯áẠáááºá á¯á ááºážáá±áá»áááºááœáẠáá¯ááºááá¯áááºááẠááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºááá¯ááºáááºá ááá¯á·ááá¯áẠáááºážáá¯ááºáá±á¬ááºáá±áá»áááºááœáẠáá¯ááºááᯠáááºááẠááá¯á·ááá¯áẠá á¯á ááºážááá¯ááºáááºá
áá¯ááºáááºáá±á ááºá¡ááœááºáž áá¯ááºáá±á¬ááºááŒááºážááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡á¬áž Lisp á syntax ááᯠááŒááºáááºáááá¯ááááºááŒá¯áá¯ááºááá¯ááºá á±áá«áááºá compile time ááœáẠrun code ááẠmacro á¡ááœáẠá¡ááŒá±áá¶ááŒá áºáááºá runtime compilation ááẠLisp ááᯠEmacs áá²á·ááá¯á·áá±á¬ áááá¯ááááºáá»á¬ážááœáẠááá¯ážáá»á²á·áá¬áá¬á áá¬ážá¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááŒááºážá¡ááœáẠá¡ááŒá±áá¶ááŒá áºáááºá áá±á¬ááºáá¯á¶ážá¡áá±ááŸáá·áºá runtime reading áááá¯ááááºáá»á¬ážááᯠXML ááœáẠáááŒá¬áá±ážáá®á ááŒááºáááºáá®ááœááºáá¬ážáá±á¬ á¡áá¯ááºáá®áá¬ááŒá áºáá±á¬ s-expressions ááᯠá¡áá¯á¶ážááŒá¯á áááºááœááºááá¯ááºá á±áá«áááºá
áá±á¬ááºáá»ááº
Lisp ááᯠá áááºáá®ááœááºáá²á·á ááºá á€á áááºáá°ážáá»á¬ážááẠ1950 ááŸá±á¬ááºážááá¯ááºážááœáẠáááŸáááá¯ááºáá±á¬ áá¬á·ááºáá²á០ááœáŸááºááŒáá±á¬ ááá¬ážááá¯ážáá» áááá¯ááááºá¡áá±á·á¡áá»áá·áºáá»á¬ážááŸáá·áº áá±ážááœá¬ááŸáááºá
á¡áá»áááºááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá áá°ááŒáá¯ááºáá»á¬ážáá±á¬áá¬áá¬á áá¬ážáá»á¬ážá¡á±á¬ááºááŒááºááŸá¯ááŒáá·áº áá¯á¶áá±á¬áºáá¬ážáá±á¬ áá°áááºážáá¬áá¬á áá¬ážááẠLisp ááá¯á· áááŒááºážááŒááºáž ááŒá±á¬ááºážáá²áá¬áááºá á¡ááŸáẠ1-5 ááᯠááᯠááœááºáá»ááºá áœá¬ áááºáá¶áá¬ážáá«áááºá á¡ááŸáẠ6 ááẠáááºááá±á á®ážááŒá±á¬ááºážááœáẠá áááºáá±á«áºáá¬áááºá Python ááœáẠááá·áºáá»á±á¬áºáá±á¬ syntax áááŸááá±á¬áºáááºáž á¡áá»áá¯á·áá¯á¶á á¶ááœáẠclause 7 ááŸááááºá Lisp ááœáẠáááºáááá¯áá»á¬ážááŒá áºááá¯ááºá á±ááá·áº á¡áᬠ8 ááẠLisp ááœááºáᬠááŸááá±áá±ážáááºá á¡ááŒá±á¬ááºážááŸá¬ (á) áááºážááẠá¡ááá¯áá« ááœááºážáááẠááá¯á·ááá¯áẠá¡áá®á¡áá»áŸ ááá¯ážááœá¬ážááá·áº á¡áá¬áá áºáᯠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº ááŒá áºááá¯ááºááŒá®áž (á) á€áá±á¬ááºáá¯á¶áž áá«áá«ááá¯ážáá¬áá«á áááºáá¯ááºááá¯ááºáááºá áá¬áá¬á áá¬ážá¡áá áºááᯠáá®ááœááºááá¯á· ááá±á¬ááºážááá¯áá±á¬á·áá² Lisp áá²á· áá±áááá áá¬ážá¡áá áºááᯠáá®ááœááºááá¯á·áá¬ááá¯áá«áá±á¬á·áááºá -)
áááºážááẠáá±ááºáá
áºáááá¯ááááºáá¬áá»á¬ážá¡ááœáẠá¡áá¯á¶ážáááºáá±á¬áºáááºážá á¡ááŒá¬ážáá¬áá¬á
áá¬ážáá»á¬ážááœáẠáááºáá¶áá»áá·áºáá¯á¶ážáá±á¬ áá»áááºážáááºážááá¬áá»á¬ážááŸáá·áº áááºážáááŒá¬ážáá¬ážáá»ááºááŸáá·áºáááºáááºá Lisp ááᯠáá±á¬áºááŒááŒááºážááẠáá°ážáááºážáá«áááºá áá«áᬠMcCarthy ááœá±ážáá±áá¯á¶áá»áá¯ážáá±á¬á· ááá¯ááºáá«áá°ážá Lisp ááẠFortran áá¡ááŸá¬ážáá»á¬ážááá¯ááŒááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážááŒááºážááá¯ááºáá±á ááŒáá¯ážá
á¬ážááŒááºážá ááááºáá
áºáá¯á¡ááŒá
Ạááá¯ááááºááŸá¬ážáá¬áááºá
source: www.habr.com