Knowledge

Emacs Lisp

Source đź“ť

1322:; lexical scoping was still uncommon and of uncertain performance. In computer scientist Olin Shivers’s recollection, "I asked RMS when he was implementing emacs lisp why it was dynamically scoped and his exact reply was that lexical scope was too inefficient." Dynamic scoping was also meant to provide greater flexibility for user customizations. However, dynamic scoping has several disadvantages. Firstly, it can easily lead to bugs in large programs, due to unintended interactions between variables in different functions. Secondly, accessing variables under dynamic scoping is generally slower than under lexical scoping. 3459: 1462:, and a little by Common Lisp. If you know Common Lisp, you will notice many similarities. However, many features of Common Lisp have been omitted or simplified in order to reduce the memory requirements of GNU Emacs. Sometimes the simplifications are so drastic that a Common Lisp user might be very confused. We will occasionally point out how GNU Emacs Lisp differs from Common Lisp." – from the "History" section of the "Introduction" to the Emacs Lisp Manual, as of Emacs 21 2942: 2932: 2912: 1471:"So the development of that operating system, the GNU operating system, is what led me to write the GNU Emacs. In doing this, I aimed to make the absolute minimal possible Lisp implementation. The size of the programs was a tremendous concern. There were people in those days, in 1985, who had one-megabyte machines without virtual memory. They wanted to be able to use GNU Emacs. This meant I had to keep the program as small as possible." – from 2902: 3433: 3135: 3423: 2922: 2989: 27: 1258:. This package replaces an earlier "cl" package, which would overwrite existing Emacs Lisp function definitions with ones more similar to those found in Common Lisp. The "cl-lib" package, on the other hand, follows Emacs Lisp style guidelines more closely and prefixes each function and macro it defines with "cl-" (e.g., 1035:
to execute the user-supplied code whenever it is called, after executing the rest of the function. Advice can also be specified to execute before the original function, around it (literally wrapping the original), or to conditionally execute the original function based on the results of the advice.
822:
The development of Emacs Lisp was guided by the goal of providing data structures and features specific to making a versatile text editor over implementing a general-purpose programming language. For example, Emacs Lisp cannot easily read a file a line at a time—the entire file must be read into an
1245:
Bytecode still runs more slowly than primitives, but functions loaded as bytecode can be easily modified and re-loaded. In addition, bytecode files are platform-independent. The standard Emacs Lisp code distributed with Emacs is loaded as bytecode, although the matching source files are usually
1156:
component of the Emacs program reads and parses the functions and variables, storing them in memory. They are then available to other editing functions, and to user commands. Functions and variables can be freely modified and redefined without restarting the editor or reloading the config file.
848:. Normally, when the new window appears, it displays the same buffer as the previous one. Suppose we wish to make it display the next available buffer. In order to do this, the user writes the following Emacs Lisp code, in either an existing Emacs Lisp source file or an empty Emacs buffer: 965:
around existing functions instead of defining their own. This has the advantage of not requiring keybindings to be changed and working wherever the original function is called, as well as being simpler to write but the disadvantage of making debugging more complicated. For this reason,
1204:. Functions may be written as primitives because they need access to external data and libraries not otherwise available from Emacs Lisp, or because they are called often enough that the comparative speed of C versus Emacs Lisp makes a worthwhile difference. 397:
by default. That is, a function may reference local variables in the scope it is called from, but not in the scope where it was defined. Recently, there has been an ongoing effort to update code to use lexical scoping, for reasons outlined below.
392:
The Lisp dialect used in Emacs differs substantially from the more modern Common Lisp and Scheme dialects used for applications programming. A prominent characteristic of Emacs Lisp is in its use of dynamic rather than lexical
380:
into GNU Emacs, he also chose Lisp as the extension language, because of its powerful features, including the ability to treat functions as data. Although the Common Lisp standard had yet to be formulated,
333:. In this way it may be called from the command line or via an executable file, and its editing functions, such as buffers and movement commands are available to the program just as in the normal mode. No 1119:
a configuration file. If the code is saved into an Emacs init file, then Emacs will load the extension the next time it starts. Otherwise, the changes must be reevaluated manually when Emacs is restarted.
1160:
In order to save time and memory space, much of the functionality of Emacs loads only when required. Each set of optional features shipped with Emacs is implemented by a collection of Emacs code called a
284:
pages allowing the user to set options and preview their effect in the running Emacs session. When the user saves their changes, Customize simply writes the necessary Emacs Lisp code to the user's
1318:
In dynamic scoping, if a programmer declares a variable within the scope of a function, it is available to subroutines called from within that function. Originally, this was intended as an
2599: 1152:. Additionally, users may specify any file to load as a config file on the command line, or explicitly state that no config file is to be loaded. When the files are loaded, an 3514: 823:
Emacs buffer. However, Emacs Lisp provides many features for navigating and modifying buffer text at a sentence, paragraph, or higher syntactic level as defined by modes.
2593: 1246:
provided for the user's reference as well. User-supplied extensions are typically not byte-compiled, as they are neither as large nor as computationally intensive.
970:
is not allowed in the source code of GNU Emacs, but if a user wishes, the advice feature can be used in their code to reimplement the above code as follows:
1686: 1746: 3479: 2502: 1427: 3509: 1285: 826:
Here follows a simple example of an Emacs extension written in Emacs Lisp. In Emacs, the editing area can be split into separate areas called
337:
is presented when Emacs is started in batch mode; it simply executes the passed-in script and exits, displaying any output from the script.
2926: 1403: 1415:
We have some experience in Lisp implementation now, since Elisp (the extended implementation of Rutgers/UCI Lisp) is essentially finished.
1996: 1519: 809: 385:
existed at the time but Stallman chose not to use it because of its comparatively poor performance on workstations (as opposed to the
3494: 2946: 2906: 2229: 3489: 2916: 1739: 1192:. Although primitives can be called from Lisp code, they can only be modified by editing the C source files and recompiling. In 3294: 2978: 2587: 1773: 1696: 1307:, offering static (or lexical) as an option starting from version 24. It can be activated by setting the file local variable 1295:
like Common Lisp, meaning that it has a function namespace which is separate from the namespace it uses for other variables.
1212: 3463: 2936: 2638: 2368: 1242:". Compared to source files, bytecode files load and run faster, occupy less disk space, and use less memory when loaded. 1169:. For example, there is a library for highlighting keywords in program source code, and a library for playing the game of 1876: 1162: 834:. A buffer is a region of text loaded into Emacs' memory (possibly from a file) which can be saved into a text document. 288:, which can be set to a special file that only Customize uses, to avoid the possibility of altering the user's own file. 1211:
or to more subtle bugs, which crash the editor, and because writing C code that interacts correctly with the Emacs Lisp
389:
that were Emacs' traditional home), and he wanted to develop a dialect which he thought would be more easily optimized.
3350: 2714: 2694: 2604: 2448: 1778: 1732: 1638: 948:(the old window-splitting function), then tells the new window to display another (new) buffer. The second statement, 2265: 1047:, which is claimed to be more flexible and simpler. The advice above could be reimplemented using the new system as: 1374: 277: 1533: 1350: 276:
Emacs Lisp code is used to modify, extend and customize Emacs. Those not wanting to write the code themselves the
2709: 2673: 2012: 1319: 1153: 265:. It is used for implementing most of the editing functionality built into Emacs, the remainder being written in 197: 3340: 2033: 2017: 1862: 683: 421: 2782: 2374: 2066: 1987: 729: 539: 382: 1557: 3499: 2556: 2220: 2043: 1814: 1809: 1664: 1173:. Each library is implemented using one or more Emacs Lisp source files. Libraries can define one or more 2820: 2135: 2081: 2058: 2022: 1842: 1755: 1421: 118: 60: 1545:
Lisp programmers will want to note that the current Emacs Lisp compiler does not optimize tail recursion
1397: 568: 3449: 2330: 2310: 2295: 2280: 2200: 1484: 789: 779: 558: 515: 1596: 1575: 1266:), avoiding the unexpected changes in behavior that could occur whenever the "cl" package was loaded. 2971: 2751: 2383: 2255: 1977: 1851: 1617: 799: 255: 2668: 2481: 2091: 1824: 1798: 1304: 1288:
library aids in writing portable Emacs Lisp code, with the help of the polysylabi platform bridge.
631: 394: 266: 160: 1215:
is error-prone, the number of functions implemented as primitives is kept to a necessary minimum.
3166: 2843: 312: 270: 1399: 1292: 1196:, primitives are not available as external libraries; they are part of the Emacs executable. In 3426: 2486: 2325: 1971: 1936: 1909: 1270: 1208: 957: 365: 361: 50: 42: 3504: 3279: 3257: 3070: 3043: 2795: 2497: 2453: 2431: 1953: 1788: 962: 2911: 2964: 2699: 2653: 2421: 1200:, runtime loading of such primitives is possible, using the operating system's support for 292: 37: 8: 3289: 3176: 3160: 1904: 1832: 1166: 258: 1144:" despite being evaluated as any Emacs Lisp code. Since the mid-1990s, Emacs also loads 3330: 3325: 3320: 3110: 2805: 2790: 2742: 2648: 1931: 1885: 414: 315: 204: 170: 84: 77: 3398: 3368: 3206: 3186: 2881: 2800: 2767: 2401: 2285: 1692: 527: 3134: 1505: 3363: 3080: 2747: 2719: 2633: 2551: 2360: 373: 192: 182: 72: 3014: 2858: 2853: 2628: 2519: 2070: 1942: 1925: 1315:
macro from the (now deprecated) "cl" package to provide effective lexical scope.
1235: 1230:
which can translate Emacs Lisp source files into a special representation termed
1201: 67: 46: 1485:"Re: [Emacs-diffs] /srv/bzr/emacs/trunk r111086: gmm-utils.el (gmm-flet" 3484: 3373: 3299: 3284: 3181: 3100: 3000: 2848: 2838: 2833: 2772: 2643: 2048: 1783: 1278: 1274: 368:
methods. Lisp was the default extension language for Emacs derivatives such as
334: 3473: 3335: 3304: 3274: 3095: 3058: 2810: 2757: 2737: 2689: 2658: 2340: 407: 377: 369: 304: 153: 2956: 1724: 3266: 2876: 2409: 1819: 1803: 386: 322: 3436: 2988: 3355: 3345: 3105: 2828: 2762: 2729: 2681: 2663: 2414: 2224: 2007: 1894: 1857: 1793: 1398:"HEDRICK at RUTGERS (Mngr DEC-20's/Dir LCSR Comp Facility" (1981-12-18). 1255: 841: 643: 588: 357: 344:, although there are also older, unrelated Lisp dialects with that name. 308: 285: 239: 149: 144: 89: 1472: 3403: 3085: 2704: 2561: 2546: 2345: 2246: 2096: 1920: 1331: 1133: 1129: 723: 611: 578: 281: 3408: 3171: 3022: 2566: 2260: 2076: 2053: 2028: 1948: 1193: 749: 503: 1716: 218: 3393: 3201: 3063: 3048: 2350: 2335: 2320: 2210: 2205: 2153: 2114: 1827: 1231: 1227: 759: 713: 673: 663: 300: 296: 3226: 1254:
Notably, the "cl-lib" package implements a fairly large subset of
2571: 2492: 2315: 2305: 2290: 2250: 2215: 2158: 2148: 2143: 2038: 1459: 769: 739: 601: 491: 353: 243: 1269:
Emacs Lisp (unlike some other Lisp implementations) does not do
1112: 3216: 3149: 3027: 2868: 2378: 2275: 2241: 2187: 2176: 2168: 2106: 2002: 1966: 1197: 1170: 1116: 703: 693: 479: 3221: 3211: 3196: 3154: 3115: 3090: 2992: 2458: 2300: 2270: 2182: 1915: 1140:". The user's init file is an exception, often appearing as " 621: 262: 175: 26: 3247: 3191: 3120: 3075: 3053: 2594:
MIT Computer Science and Artificial Intelligence Laboratory
2388: 2086: 1958: 1115:. It is not necessary to recompile, restart Emacs, or even 326: 319: 1226:
can make Emacs Lisp code execute faster. Emacs contains a
3009: 1180:
Emacs developers write certain functions in C. These are
1447:
CCA EMACS and Elisp are trademarks of CCA Uniworks, Inc.
844:
to open a new window. This runs the Emacs Lisp function
1262:, which doesn't conflict with the name of the built-in 952:
re-binds the key sequence "C-x 2" to the new function.
1473:"My Lisp Experiences and the Development of GNU Emacs" 3515:
GNU Project Lisp programming language implementations
3447: 1391: 1207:
However, because errors in C code can easily lead to
1684: 1311:. Before this option was added, one could use the 1298: 955:This can also be written using the feature called 347: 2503:Structure and Interpretation of Computer Programs 1685:Featherston, Sam; Winkler, Susanne (2009-06-02). 1111:These changes take effect as soon as the code is 3471: 1400:""information about Common Lisp implementation"" 1136:files, by convention with the filename suffix " 2986: 2972: 1754: 1740: 1477: 415: 1402:. Letter to "rpg at SU-AI, jonl at MIT-AI". 2600:Stanford Artificial Intelligence Laboratory 1426:: CS1 maint: numeric names: authors list ( 280:function can be used. It provides a set of 2979: 2965: 2901: 1747: 1733: 1375:"Compilation of Emacs Lisp to native code" 422: 408: 3480:Dynamically scoped programming languages 1434: 1177:to activate and control their function. 16:Dialect of Lisp in the Emacs text editor 1458:"GNU Emacs Lisp is largely inspired by 609: 3472: 3432: 1303:Like MacLisp, Emacs Lisp uses dynamic 807: 797: 787: 777: 767: 757: 747: 737: 727: 721: 711: 701: 691: 681: 671: 661: 651: 641: 629: 619: 599: 592: 586: 576: 566: 556: 549: 546: 543: 537: 525: 513: 501: 489: 477: 352:Emacs Lisp is most closely related to 3510:Programming languages created in 1985 3295:Massachusetts Institute of Technology 2960: 2588:Massachusetts Institute of Technology 1728: 1234:. Emacs Lisp bytecode files have the 311:, Emacs Lisp can also function as an 3422: 2921: 1618:"Dynamic Binding Vs Lexical Binding" 1249: 13: 2605:University of California, Berkeley 2449:Scheme Requests for Implementation 961:, which allows the user to create 569:ZIL (Zork Implementation Language) 14: 3526: 2266:Knowledge Engineering Environment 1708: 356:, with some later influence from 3495:Lisp programming language family 3457: 3431: 3421: 3133: 2987: 2941: 2940: 2931: 2930: 2920: 2910: 2900: 1534:"Appendix C Porting Common Lisp" 25: 3490:Free compilers and interpreters 1678: 1657: 1643:GNU Emacs Common Lisp Emulation 1631: 1610: 1589: 1568: 1550: 1526: 1406:from the original on 2016-09-20 1299:From dynamic to lexical scoping 348:Compared to other Lisp dialects 1512: 1498: 1465: 1452: 1367: 1343: 1123: 1103:switch-to-next-window-in-split 1058:switch-to-next-window-in-split 830:, each displaying a different 1: 3464:Free and open-source software 2375:Common Lisp Interface Manager 1445:. December 1984. p. 16. 1337: 1128:Emacs Lisp code is stored in 1774:Automatic storage management 1218: 837:Users can press the default 7: 3300:Thorn EMI Computer Software 2023:Game Oriented Assembly Lisp 1599:. Lists.gnu.org. 2011-04-01 1487:. Lists.gnu.org. 2012-12-05 1351:"Byte compiling Emacs Lisp" 1325: 165:Dynamic, optionally lexical 124:29.4 / 22 June 2024 101:; 39 years ago 10: 3531: 3427:Emacs on Wikimedia Commons 1639:"Obsolete Lexical Binding" 990:my-window-splitting-advice 940:, defines a new function, 817: 805: 795: 785: 775: 765: 483: 340:Emacs Lisp is also termed 3417: 3386: 3313: 3265: 3256: 3235: 3142: 3131: 3036: 3008: 2999: 2898: 2867: 2819: 2781: 2728: 2624: 2617: 2580: 2539: 2532: 2512: 2474: 2467: 2441: 2430: 2400: 2359: 2167: 2134: 2127: 2105: 1986: 1893: 1884: 1875: 1852:Common Lisp Object System 1841: 1769: 1762: 1756:Lisp programming language 1039:Emacs 24.4 replaces this 755: 745: 735: 719: 709: 699: 689: 679: 669: 659: 649: 639: 635: 627: 617: 607: 597: 584: 574: 564: 554: 535: 531: 523: 519: 511: 507: 499: 495: 487: 403:Timeline of Lisp dialects 238: 233: 213: 203: 191: 181: 169: 159: 143: 139: 117: 113: 95: 83: 66: 56: 36: 24: 2552:Bolt, Beranek and Newman 2482:Common Lisp the Language 1049: 972: 850: 472: 469: 466: 463: 460: 457: 454: 451: 448: 445: 442: 439: 436: 433: 3167:Emacs Speaks Statistics 1620:. EmacsWiki. 2013-05-17 1277:can eventually lead to 1209:segmentation violations 1094:'split-window-below 2487:How to Design Programs 2326:Portable Standard Lisp 1972:Steel Bank Common Lisp 1937:Embeddable Common Lisp 1910:Armed Bear Common Lisp 1789:Higher-order functions 1667:. People.csail.mit.edu 1271:tail-call optimization 366:functional programming 329:, by calling Emacs in 126:; 3 months ago 2796:Shriram Krishnamurthi 2498:Practical Common Lisp 2454:Common Lisp HyperSpec 1978:Symbolics Common Lisp 1954:Macintosh Common Lisp 1691:. Walter de Gruyter. 1576:"Emacs 24.1 released" 936:The first statement, 3346:Joris van der Hoeven 2700:Robert Tappan Morris 2654:Robert Bruce Findler 2422:Space-cadet keyboard 1833:Tree data structures 1810:Read–eval–print loop 1520:"Porting old advice" 1441:"Ad for CCA EMACS". 950:(global-set-key ...) 942:my-split-window-func 928:my-split-window-func 859:my-split-window-func 593: ANSI standard 293:programming language 3500:Scripting languages 3437:Emacs on Wikiquotes 3290:Mark of the Unicorn 2442:Technical standards 1905:Allegro Common Lisp 478: LISP 1, 1.5, 430: 205:Filename extensions 96:First appeared 21: 3331:Richard P. Gabriel 2806:Gerald Jay Sussman 2791:Matthias Felleisen 2743:Richard P. Gabriel 2674:Richard Greenblatt 2649:Matthias Felleisen 1932:Corman Common Lisp 1422:cite press release 1186:built-in functions 1150:~/.emacs.d/init.el 1033:split-window-below 981:split-window-below 946:split-window-below 877:split-window-below 846:split-window-below 401: 316:scripting language 78:Guy L. Steele, Jr. 19: 3445: 3444: 3399:Dissociated press 3382: 3381: 3369:Guy L. Steele Jr. 3129: 3128: 2954: 2953: 2894: 2893: 2890: 2889: 2882:Robin Popplestone 2801:Guy L. Steele Jr. 2768:Guy L. Steele Jr. 2613: 2612: 2528: 2527: 2396: 2395: 2286:Lisp Machine Lisp 2196: 2195: 2123: 2122: 1871: 1870: 1698:978-3-11-021614-1 1597:"Lexical binding" 1562:groups.google.com 1250:Language features 1213:garbage collector 1067:set-window-buffer 1008:set-window-buffer 919:"C-x 2" 886:set-window-buffer 815: 814: 550: R7RS small 528:Lisp Machine Lisp 269:, as is the Lisp 249: 248: 145:Typing discipline 3522: 3462: 3461: 3460: 3453: 3435: 3434: 3425: 3424: 3364:Richard Stallman 3285:Perfect Software 3263: 3262: 3137: 3006: 3005: 2991: 2981: 2974: 2967: 2958: 2957: 2944: 2943: 2934: 2933: 2924: 2923: 2914: 2904: 2903: 2748:Philip Greenspun 2720:Richard Stallman 2634:Daniel G. Bobrow 2622: 2621: 2537: 2536: 2472: 2471: 2439: 2438: 2361:Operating system 2132: 2131: 1891: 1890: 1882: 1881: 1767: 1766: 1749: 1742: 1735: 1726: 1725: 1720: 1719: 1717:Official website 1703: 1702: 1682: 1676: 1675: 1673: 1672: 1661: 1655: 1654: 1652: 1650: 1635: 1629: 1628: 1626: 1625: 1614: 1608: 1607: 1605: 1604: 1593: 1587: 1586: 1584: 1583: 1572: 1566: 1565: 1554: 1548: 1547: 1542: 1541: 1530: 1524: 1523: 1516: 1510: 1509: 1502: 1496: 1495: 1493: 1492: 1481: 1475: 1469: 1463: 1456: 1450: 1449: 1438: 1432: 1431: 1425: 1417: 1412: 1411: 1395: 1389: 1388: 1386: 1385: 1379:GNU Emacs manual 1371: 1365: 1364: 1362: 1361: 1355:GNU Emacs manual 1347: 1314: 1310: 1291:Emacs Lisp is a 1273:. Without this, 1265: 1261: 1241: 1151: 1147: 1143: 1139: 1107: 1104: 1101: 1098: 1095: 1092: 1089: 1086: 1083: 1080: 1077: 1074: 1071: 1068: 1065: 1062: 1059: 1056: 1053: 1046: 1042: 1034: 1027: 1024: 1021: 1018: 1015: 1012: 1009: 1006: 1003: 1000: 997: 994: 991: 988: 985: 982: 979: 976: 951: 947: 943: 939: 932: 929: 926: 923: 920: 917: 914: 911: 908: 905: 902: 899: 896: 893: 890: 887: 884: 881: 878: 875: 872: 869: 866: 863: 860: 857: 854: 847: 431: 424: 417: 410: 400: 374:Richard Stallman 318:, much like the 291:Besides being a 229: 226: 224: 222: 220: 134: 132: 127: 109: 107: 102: 73:Richard Stallman 68:Designed by 29: 22: 18: 3530: 3529: 3525: 3524: 3523: 3521: 3520: 3519: 3470: 3469: 3468: 3458: 3456: 3448: 3446: 3441: 3413: 3378: 3309: 3280:Lugaru Software 3252: 3231: 3138: 3125: 3032: 3013: 3001:Implementations 2995: 2985: 2955: 2950: 2886: 2863: 2859:Cynthia Solomon 2854:Mitchel Resnick 2815: 2777: 2724: 2678:Timothy P. Hart 2639:William Clinger 2629:Edmund Berkeley 2609: 2576: 2524: 2520:ProgramByDesign 2508: 2463: 2433: 2426: 2392: 2355: 2192: 2163: 2119: 2101: 1982: 1943:GNU Common Lisp 1926:CMU Common Lisp 1896: 1877:Implementations 1867: 1837: 1758: 1753: 1715: 1714: 1711: 1706: 1699: 1683: 1679: 1670: 1668: 1663: 1662: 1658: 1648: 1646: 1637: 1636: 1632: 1623: 1621: 1616: 1615: 1611: 1602: 1600: 1595: 1594: 1590: 1581: 1579: 1578:. Lists.gnu.org 1574: 1573: 1569: 1558:"Google Groups" 1556: 1555: 1551: 1539: 1537: 1532: 1531: 1527: 1518: 1517: 1513: 1504: 1503: 1499: 1490: 1488: 1483: 1482: 1478: 1470: 1466: 1457: 1453: 1440: 1439: 1435: 1419: 1418: 1409: 1407: 1396: 1392: 1383: 1381: 1373: 1372: 1368: 1359: 1357: 1349: 1348: 1344: 1340: 1328: 1312: 1309:lexical-binding 1308: 1301: 1275:tail recursions 1263: 1259: 1252: 1239: 1236:filename suffix 1221: 1202:dynamic linking 1149: 1145: 1141: 1137: 1126: 1109: 1108: 1105: 1102: 1099: 1096: 1093: 1090: 1087: 1084: 1081: 1078: 1075: 1072: 1069: 1066: 1063: 1060: 1057: 1054: 1051: 1044: 1043:mechanism with 1040: 1032: 1031:This instructs 1029: 1028: 1025: 1022: 1019: 1016: 1013: 1010: 1007: 1004: 1001: 998: 995: 992: 989: 986: 983: 980: 977: 974: 949: 945: 941: 937: 934: 933: 930: 927: 924: 921: 918: 915: 912: 909: 906: 903: 900: 897: 894: 891: 888: 885: 882: 879: 876: 873: 870: 867: 864: 861: 858: 855: 852: 845: 840: 820: 429: 428: 350: 217: 209:.el, .elc, .eln 135: 130: 128: 125: 105: 103: 100: 76: 32: 17: 12: 11: 5: 3528: 3518: 3517: 3512: 3507: 3502: 3497: 3492: 3487: 3482: 3467: 3466: 3443: 3442: 3440: 3439: 3429: 3418: 3415: 3414: 3412: 3411: 3406: 3401: 3396: 3390: 3388: 3384: 3383: 3380: 3379: 3377: 3376: 3374:Daniel Weinreb 3371: 3366: 3361: 3358: 3353: 3348: 3343: 3338: 3333: 3328: 3323: 3317: 3315: 3311: 3310: 3308: 3307: 3302: 3297: 3292: 3287: 3282: 3277: 3271: 3269: 3260: 3254: 3253: 3251: 3250: 3245: 3239: 3237: 3233: 3232: 3230: 3229: 3224: 3219: 3214: 3209: 3204: 3199: 3194: 3189: 3184: 3179: 3174: 3169: 3164: 3157: 3152: 3146: 3144: 3140: 3139: 3132: 3130: 3127: 3126: 3124: 3123: 3118: 3113: 3108: 3103: 3101:Perfect Writer 3098: 3093: 3088: 3083: 3078: 3073: 3068: 3067: 3066: 3056: 3051: 3046: 3040: 3038: 3034: 3033: 3031: 3030: 3025: 3019: 3017: 3003: 2997: 2996: 2984: 2983: 2976: 2969: 2961: 2952: 2951: 2899: 2896: 2895: 2892: 2891: 2888: 2887: 2885: 2884: 2879: 2873: 2871: 2865: 2864: 2862: 2861: 2856: 2851: 2849:Seymour Papert 2846: 2841: 2839:Wally Feurzeig 2836: 2834:Denison Bollay 2831: 2825: 2823: 2817: 2816: 2814: 2813: 2808: 2803: 2798: 2793: 2787: 2785: 2779: 2778: 2776: 2775: 2773:Daniel Weinreb 2770: 2765: 2760: 2755: 2745: 2740: 2734: 2732: 2726: 2725: 2723: 2722: 2717: 2712: 2707: 2702: 2697: 2692: 2687: 2684: 2679: 2676: 2671: 2666: 2661: 2656: 2651: 2646: 2644:R. Kent Dybvig 2641: 2636: 2631: 2625: 2619: 2615: 2614: 2611: 2610: 2608: 2607: 2602: 2597: 2591: 2584: 2582: 2578: 2577: 2575: 2574: 2569: 2564: 2559: 2554: 2549: 2547:Apple Computer 2543: 2541: 2534: 2530: 2529: 2526: 2525: 2523: 2522: 2516: 2514: 2510: 2509: 2507: 2506: 2500: 2495: 2490: 2484: 2478: 2476: 2469: 2465: 2464: 2462: 2461: 2456: 2451: 2445: 2443: 2436: 2428: 2427: 2425: 2424: 2419: 2418: 2417: 2406: 2404: 2398: 2397: 2394: 2393: 2391: 2386: 2381: 2372: 2365: 2363: 2357: 2356: 2354: 2353: 2348: 2343: 2338: 2333: 2328: 2323: 2318: 2313: 2308: 2303: 2298: 2293: 2288: 2283: 2278: 2273: 2268: 2263: 2258: 2253: 2244: 2239: 2234: 2218: 2213: 2208: 2203: 2197: 2194: 2193: 2191: 2190: 2185: 2180: 2173: 2171: 2165: 2164: 2162: 2161: 2156: 2151: 2146: 2140: 2138: 2129: 2128:Unstandardized 2125: 2124: 2121: 2120: 2118: 2117: 2111: 2109: 2103: 2102: 2100: 2099: 2094: 2089: 2084: 2079: 2074: 2064: 2061: 2056: 2051: 2049:MIT/GNU Scheme 2046: 2041: 2036: 2031: 2026: 2020: 2015: 2010: 2005: 2000: 1992: 1990: 1984: 1983: 1981: 1980: 1975: 1969: 1964: 1961: 1956: 1951: 1946: 1940: 1934: 1929: 1923: 1918: 1913: 1907: 1901: 1899: 1888: 1879: 1873: 1872: 1869: 1868: 1866: 1865: 1860: 1855: 1848: 1846: 1839: 1838: 1836: 1835: 1830: 1822: 1817: 1812: 1807: 1801: 1796: 1791: 1786: 1784:Dynamic typing 1781: 1776: 1770: 1764: 1760: 1759: 1752: 1751: 1744: 1737: 1729: 1723: 1722: 1710: 1709:External links 1707: 1705: 1704: 1697: 1677: 1656: 1630: 1609: 1588: 1567: 1549: 1525: 1511: 1497: 1476: 1464: 1451: 1433: 1390: 1366: 1341: 1339: 1336: 1335: 1334: 1327: 1324: 1300: 1297: 1279:stack overflow 1251: 1248: 1224:Byte-compiling 1220: 1217: 1184:, also termed 1125: 1122: 1050: 973: 944:, which calls 910:global-set-key 851: 838: 819: 816: 813: 812: 806: 803: 802: 796: 793: 792: 786: 783: 782: 776: 773: 772: 766: 763: 762: 756: 753: 752: 746: 743: 742: 736: 733: 732: 726: 720: 717: 716: 710: 707: 706: 700: 697: 696: 690: 687: 686: 680: 677: 676: 670: 667: 666: 660: 657: 656: 650: 647: 646: 640: 637: 636: 634: 628: 625: 624: 618: 615: 614: 608: 605: 604: 598: 595: 594: 591: 585: 582: 581: 575: 572: 571: 565: 562: 561: 555: 552: 551: 548: 545: 542: 536: 533: 532: 530: 524: 521: 520: 518: 512: 509: 508: 506: 500: 497: 496: 494: 488: 485: 484: 482: 475: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 438: 435: 427: 426: 419: 412: 404: 402: 360:. It supports 349: 346: 335:user interface 247: 246: 236: 235: 231: 230: 215: 211: 210: 207: 201: 200: 195: 189: 188: 187:Cross-platform 185: 179: 178: 173: 167: 166: 163: 157: 156: 147: 141: 140: 137: 136: 123: 121: 119:Stable release 115: 114: 111: 110: 97: 93: 92: 87: 81: 80: 70: 64: 63: 58: 54: 53: 40: 34: 33: 30: 15: 9: 6: 4: 3: 2: 3527: 3516: 3513: 3511: 3508: 3506: 3503: 3501: 3498: 3496: 3493: 3491: 3488: 3486: 3483: 3481: 3478: 3477: 3475: 3465: 3455: 3454: 3451: 3438: 3430: 3428: 3420: 3419: 3416: 3410: 3407: 3405: 3402: 3400: 3397: 3395: 3392: 3391: 3389: 3385: 3375: 3372: 3370: 3367: 3365: 3362: 3360:David Reitter 3359: 3357: 3354: 3352: 3351:Daniel Murphy 3349: 3347: 3344: 3342: 3339: 3337: 3336:James Gosling 3334: 3332: 3329: 3327: 3324: 3322: 3321:Thomas Dickey 3319: 3318: 3316: 3312: 3306: 3303: 3301: 3298: 3296: 3293: 3291: 3288: 3286: 3283: 3281: 3278: 3276: 3273: 3272: 3270: 3268: 3267:Organizations 3264: 3261: 3259: 3255: 3249: 3246: 3244: 3241: 3240: 3238: 3234: 3228: 3225: 3223: 3220: 3218: 3215: 3213: 3210: 3208: 3205: 3203: 3200: 3198: 3195: 3193: 3190: 3188: 3185: 3183: 3180: 3178: 3175: 3173: 3170: 3168: 3165: 3163: 3162: 3158: 3156: 3153: 3151: 3148: 3147: 3145: 3141: 3136: 3122: 3119: 3117: 3114: 3112: 3109: 3107: 3104: 3102: 3099: 3097: 3096:Multics Emacs 3094: 3092: 3089: 3087: 3084: 3082: 3079: 3077: 3074: 3072: 3069: 3065: 3062: 3061: 3060: 3059:Gosling Emacs 3057: 3055: 3052: 3050: 3047: 3045: 3042: 3041: 3039: 3035: 3029: 3026: 3024: 3021: 3020: 3018: 3016: 3011: 3007: 3004: 3002: 2998: 2994: 2990: 2982: 2977: 2975: 2970: 2968: 2963: 2962: 2959: 2949: 2948: 2939: 2938: 2929: 2928: 2919: 2918: 2913: 2909: 2908: 2897: 2883: 2880: 2878: 2875: 2874: 2872: 2870: 2866: 2860: 2857: 2855: 2852: 2850: 2847: 2845: 2842: 2840: 2837: 2835: 2832: 2830: 2827: 2826: 2824: 2822: 2818: 2812: 2811:Julie Sussman 2809: 2807: 2804: 2802: 2799: 2797: 2794: 2792: 2789: 2788: 2786: 2784: 2780: 2774: 2771: 2769: 2766: 2764: 2761: 2759: 2758:David A. Moon 2756: 2753: 2749: 2746: 2744: 2741: 2739: 2738:Scott Fahlman 2736: 2735: 2733: 2731: 2727: 2721: 2718: 2716: 2715:Steve Russell 2713: 2711: 2708: 2706: 2703: 2701: 2698: 2696: 2695:John McCarthy 2693: 2691: 2690:David Luckham 2688: 2685: 2683: 2680: 2677: 2675: 2672: 2670: 2667: 2665: 2662: 2660: 2659:Matthew Flatt 2657: 2655: 2652: 2650: 2647: 2645: 2642: 2640: 2637: 2635: 2632: 2630: 2627: 2626: 2623: 2620: 2616: 2606: 2603: 2601: 2598: 2595: 2592: 2589: 2586: 2585: 2583: 2579: 2573: 2570: 2568: 2565: 2563: 2560: 2558: 2555: 2553: 2550: 2548: 2545: 2544: 2542: 2538: 2535: 2533:Organizations 2531: 2521: 2518: 2517: 2515: 2511: 2504: 2501: 2499: 2496: 2494: 2491: 2488: 2485: 2483: 2480: 2479: 2477: 2473: 2470: 2466: 2460: 2457: 2455: 2452: 2450: 2447: 2446: 2444: 2440: 2437: 2435: 2429: 2423: 2420: 2416: 2413: 2412: 2411: 2408: 2407: 2405: 2403: 2399: 2390: 2387: 2385: 2382: 2380: 2376: 2373: 2371: 2370: 2366: 2364: 2362: 2358: 2352: 2349: 2347: 2344: 2342: 2339: 2337: 2334: 2332: 2329: 2327: 2324: 2322: 2319: 2317: 2314: 2312: 2309: 2307: 2304: 2302: 2299: 2297: 2294: 2292: 2289: 2287: 2284: 2282: 2279: 2277: 2274: 2272: 2269: 2267: 2264: 2262: 2259: 2257: 2254: 2252: 2248: 2245: 2243: 2240: 2238: 2235: 2232: 2231: 2226: 2222: 2219: 2217: 2214: 2212: 2209: 2207: 2204: 2202: 2199: 2198: 2189: 2186: 2184: 2181: 2178: 2175: 2174: 2172: 2170: 2166: 2160: 2157: 2155: 2152: 2150: 2147: 2145: 2142: 2141: 2139: 2137: 2133: 2130: 2126: 2116: 2113: 2112: 2110: 2108: 2104: 2098: 2095: 2093: 2090: 2088: 2085: 2083: 2080: 2078: 2075: 2072: 2068: 2065: 2063:Pocket Scheme 2062: 2060: 2057: 2055: 2052: 2050: 2047: 2045: 2042: 2040: 2037: 2035: 2032: 2030: 2027: 2024: 2021: 2019: 2016: 2014: 2011: 2009: 2006: 2004: 2001: 1999: 1998: 1994: 1993: 1991: 1989: 1985: 1979: 1976: 1973: 1970: 1968: 1965: 1962: 1960: 1957: 1955: 1952: 1950: 1947: 1944: 1941: 1938: 1935: 1933: 1930: 1927: 1924: 1922: 1919: 1917: 1914: 1911: 1908: 1906: 1903: 1902: 1900: 1898: 1892: 1889: 1887: 1883: 1880: 1878: 1874: 1864: 1861: 1859: 1856: 1853: 1850: 1849: 1847: 1844: 1840: 1834: 1831: 1829: 1826: 1823: 1821: 1820:S-expressions 1818: 1816: 1813: 1811: 1808: 1805: 1804:M-expressions 1802: 1800: 1797: 1795: 1792: 1790: 1787: 1785: 1782: 1780: 1777: 1775: 1772: 1771: 1768: 1765: 1761: 1757: 1750: 1745: 1743: 1738: 1736: 1731: 1730: 1727: 1721:, GNU Project 1718: 1713: 1712: 1700: 1694: 1690: 1689: 1681: 1666: 1660: 1644: 1640: 1634: 1619: 1613: 1598: 1592: 1577: 1571: 1563: 1559: 1553: 1546: 1535: 1529: 1521: 1515: 1507: 1501: 1486: 1480: 1474: 1468: 1461: 1455: 1448: 1444: 1437: 1429: 1423: 1416: 1405: 1401: 1394: 1380: 1376: 1370: 1356: 1352: 1346: 1342: 1333: 1330: 1329: 1323: 1321: 1316: 1306: 1296: 1294: 1289: 1287: 1282: 1280: 1276: 1272: 1267: 1257: 1247: 1243: 1237: 1233: 1229: 1225: 1216: 1214: 1210: 1205: 1203: 1199: 1195: 1191: 1187: 1183: 1178: 1176: 1172: 1168: 1164: 1158: 1155: 1135: 1131: 1121: 1118: 1114: 1048: 1037: 971: 969: 964: 960: 959: 953: 849: 843: 835: 833: 829: 824: 811: 804: 801: 794: 791: 784: 781: 774: 771: 764: 761: 754: 751: 744: 741: 734: 731: 725: 718: 715: 708: 705: 698: 695: 688: 685: 678: 675: 668: 665: 658: 655: 648: 645: 638: 633: 626: 623: 616: 613: 606: 603: 596: 590: 583: 580: 573: 570: 563: 560: 553: 541: 534: 529: 522: 517: 510: 505: 498: 493: 486: 481: 476: 432: 425: 420: 418: 413: 411: 406: 405: 399: 396: 390: 388: 387:minicomputers 384: 379: 378:Gosling Emacs 375: 371: 370:EINE and ZWEI 367: 363: 359: 355: 345: 343: 338: 336: 332: 328: 324: 321: 317: 314: 310: 306: 305:transcompiled 302: 298: 294: 289: 287: 283: 279: 274: 272: 268: 264: 260: 257: 253: 245: 241: 237: 234:Influenced by 232: 228: 216: 212: 208: 206: 202: 199: 196: 194: 190: 186: 184: 180: 177: 174: 172: 168: 164: 162: 158: 155: 151: 148: 146: 142: 138: 122: 120: 116: 112: 98: 94: 91: 88: 86: 82: 79: 74: 71: 69: 65: 62: 59: 55: 52: 48: 44: 41: 39: 35: 28: 23: 3505:Text editors 3242: 3159: 2945: 2935: 2925: 2915: 2905: 2877:Rod Burstall 2844:Brian Harvey 2410:Lisp machine 2367: 2236: 2228: 1995: 1886:Standardized 1825:Self-hosting 1806:(deprecated) 1794:Linked lists 1779:Conditionals 1687: 1680: 1669:. Retrieved 1659: 1647:. Retrieved 1642: 1633: 1622:. Retrieved 1612: 1601:. Retrieved 1591: 1580:. Retrieved 1570: 1561: 1552: 1544: 1538:. Retrieved 1528: 1514: 1500: 1489:. Retrieved 1479: 1467: 1454: 1446: 1442: 1436: 1414: 1408:. Retrieved 1393: 1382:. Retrieved 1378: 1369: 1358:. Retrieved 1354: 1345: 1320:optimization 1317: 1302: 1290: 1283: 1268: 1253: 1244: 1223: 1222: 1206: 1189: 1185: 1181: 1179: 1174: 1159: 1127: 1110: 1082:other-buffer 1038: 1030: 1023:other-buffer 967: 956: 954: 935: 901:other-buffer 836: 831: 827: 825: 821: 653: 391: 351: 341: 339: 330: 323:Bourne shell 295:that can be 290: 275: 251: 250: 3356:Russ Nelson 3106:GNU TeXmacs 2829:Hal Abelson 2763:Kent Pitman 2730:Common Lisp 2682:Louis Hodes 2669:Paul Graham 2664:Phyllis Fox 2434:of practice 2415:TI Explorer 2008:Chez Scheme 1858:CommonLoops 1645:. GNU Press 1506:"NEWS.24.4" 1443:Unix Review 1313:lexical-let 1256:Common Lisp 1175:major modes 1154:interpreter 1146:~/.emacs.el 1130:filesystems 1124:Source code 1073:next-window 1014:next-window 938:(defun ...) 892:next-window 868:interactive 842:key binding 760:Visual LISP 644:Chez Scheme 589:Common Lisp 547: R6RS 544: R5RS 358:Common Lisp 313:interpreted 309:native code 286:config file 282:preferences 271:interpreter 240:Common Lisp 90:GNU Project 3474:Categories 3404:Editor war 3243:Emacs Lisp 3086:MicroEMACS 3015:derivative 2710:David Park 2705:Joel Moses 2686:Mike Levin 2562:Lucid Inc. 2513:Curriculum 2346:Spice Lisp 2247:Franz Lisp 2237:Emacs Lisp 2097:TinyScheme 1921:Clozure CL 1671:2013-08-18 1624:2013-08-18 1603:2013-08-18 1582:2013-08-18 1540:2019-10-28 1491:2013-08-18 1410:2019-07-28 1384:2024-06-14 1360:2024-06-14 1338:References 1332:Vim script 1182:primitives 1134:plain text 1091:advice-add 1045:advice-add 724:PLT Scheme 654:Emacs Lisp 612:MIT Scheme 579:Franz Lisp 362:imperative 331:batch mode 252:Emacs Lisp 131:2024-06-22 51:reflective 43:Functional 31:Emacs logo 20:Emacs Lisp 3409:Spacemacs 3275:Honeywell 3258:Community 3236:Internals 3172:Emacspeak 3023:GNU Emacs 2752:10th rule 2581:Education 2567:Symbolics 2557:Harlequin 2468:Education 2432:Community 2261:Interlisp 2077:Scheme 48 2054:MultiLisp 2029:GNU Guile 1949:LispWorks 1815:Recursion 1536:. Gnu.org 1219:Byte code 1194:GNU Emacs 1113:evaluated 1041:defadvice 978:defadvice 750:GNU Guile 504:Interlisp 278:Customize 261:made for 225:/software 85:Developer 3394:Conkeror 3341:Jim Hall 3326:Paul Fox 3305:UniPress 3202:Org-mode 3064:Mocklisp 3049:Freemacs 2947:Category 2937:Category 2540:Business 2402:Hardware 2351:Zetalisp 2336:S-1 Lisp 2321:Picolisp 2211:BBN LISP 2206:AutoLISP 2154:StarLogo 2115:OpenLisp 2071:features 1828:compiler 1763:Features 1404:Archived 1326:See also 1260:cl-defun 1232:bytecode 1228:compiler 999:activate 963:wrappers 810:Chialisp 714:OpenLisp 674:PicoLisp 664:AutoLISP 301:bytecode 297:compiled 171:Platform 38:Paradigm 3207:Planner 3071:Hemlock 3044:Epsilon 2927:Commons 2596:(CSAIL) 2572:Xanalys 2493:On Lisp 2316:PC-LISP 2306:newLISP 2291:Maclisp 2251:PC-LISP 2230:history 2216:Clojure 2179:(POP-1) 2159:UCBLogo 2149:NetLogo 2144:MSWLogo 2039:JScheme 2013:Chicken 1997:History 1928:(CMUCL) 1863:Flavors 1845:systems 1688:Process 1460:Maclisp 1167:library 1163:package 1097::before 828:windows 818:Example 770:Clojure 740:newLISP 602:Le Lisp 492:Maclisp 376:forked 372:. When 354:Maclisp 259:dialect 244:Maclisp 214:Website 193:License 150:Dynamic 129: ( 104: ( 3450:Portal 3314:People 3217:RefTeX 3161:Dunnet 3150:AUCTeX 3028:XEmacs 2783:Scheme 2618:People 2505:(SICP) 2489:(HTDP) 2384:Genera 2379:McCLIM 2276:LeLisp 2242:EuLisp 2188:POP-11 2177:COWSEL 2107:ISLISP 2067:Racket 2034:Ikarus 2025:(GOAL) 2018:Gambit 2003:Bigloo 1988:Scheme 1974:(SBCL) 1967:Poplog 1963:Movitz 1912:(ABCL) 1895:Common 1854:(CLOS) 1843:Object 1799:Macros 1695:  1649:27 May 1293:Lisp-2 1198:XEmacs 1171:Tetris 1142:.emacs 1117:rehash 1100:#' 968:advice 958:advice 925:#' 832:buffer 808:  798:  788:  778:  768:  758:  748:  738:  730:Racket 728:  722:  712:  704:ISLISP 702:  694:EuLisp 692:  684:Gambit 682:  672:  662:  652:  642:  630:  620:  610:  600:  587:  577:  567:  557:  540:Scheme 538:  526:  514:  502:  490:  480:LISP 2 383:Scheme 227:/emacs 154:strong 57:Family 3485:Emacs 3387:Other 3222:SLIME 3212:rcirc 3197:Magit 3155:Dired 3143:Modes 3116:Zmacs 3091:MINCE 3037:Other 2993:Emacs 2917:Books 2590:(MIT) 2475:Books 2459:X3J13 2341:SKILL 2301:MLisp 2271:*Lisp 2225:Apple 2221:Dylan 2183:POP-2 1945:(GCL) 1939:(ECL) 1916:CLISP 1305:scope 1264:defun 1190:subrs 1055:defun 993:first 987:after 856:defun 839:C-x 2 622:XLISP 473:2020 470:2015 467:2010 464:2005 461:2000 458:1995 455:1990 452:1985 449:1980 446:1975 443:1970 440:1965 437:1960 434:1958 395:scope 342:Elisp 263:Emacs 254:is a 198:GPLv3 176:Emacs 161:Scope 3248:MULE 3192:Gnus 3177:EMMS 3121:ZWEI 3111:vile 3076:JOVE 3054:EINE 2907:List 2821:Logo 2389:Scsh 2369:List 2136:Logo 2087:SIOD 2059:Pico 2044:Kawa 1959:Mocl 1897:Lisp 1693:ISBN 1651:2021 1428:link 1286:apel 1284:The 1240:.elc 1148:and 364:and 327:Perl 320:Unix 303:and 256:Lisp 223:.org 221:.gnu 106:1985 99:1985 61:Lisp 47:meta 3227:w3m 3187:eww 3182:ERC 3012:and 3010:GNU 2869:POP 2331:RPL 2311:NIL 2296:MDL 2281:LFE 2201:Arc 2169:POP 2082:SCM 1665:"T" 1188:or 1165:or 1138:.el 1132:as 1085:))) 1026:))) 916:kbd 904:))) 790:LFE 780:Arc 559:NIL 516:MDL 325:or 307:to 299:to 219:www 3476:: 3081:mg 2377:, 2256:Hy 2249:, 2227:, 1641:. 1560:. 1543:. 1424:}} 1420:{{ 1413:. 1377:. 1353:. 1281:. 1061:() 996:() 862:() 800:Hy 273:. 242:, 183:OS 152:, 49:, 45:, 3452:: 2980:e 2973:t 2966:v 2754:) 2750:( 2233:) 2223:( 2092:T 2073:) 2069:( 1748:e 1741:t 1734:v 1701:. 1674:. 1653:. 1627:. 1606:. 1585:. 1564:. 1522:. 1508:. 1494:. 1430:) 1387:. 1363:. 1238:" 1106:) 1088:( 1079:( 1076:) 1070:( 1064:( 1052:( 1020:( 1017:) 1011:( 1005:( 1002:) 984:( 975:( 931:) 922:) 913:( 907:( 898:( 895:) 889:( 883:( 880:) 874:( 871:) 865:( 853:( 632:T 423:e 416:t 409:v 267:C 133:) 108:) 75:,

Index


Paradigm
Functional
meta
reflective
Lisp
Designed by
Richard Stallman
Guy L. Steele, Jr.
Developer
GNU Project
Stable release
Typing discipline
Dynamic
strong
Scope
Platform
Emacs
OS
License
GPLv3
Filename extensions
www.gnu.org/software/emacs
Common Lisp
Maclisp
Lisp
dialect
Emacs
C
interpreter

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑