1 #LyX 1.6.4 created this file. For more info see http://www.lyx.org/
7 % This file was converted from HTML to LaTeX with
8 % Tomasz Wegrzanowski's <maniek@beer.com> gnuhtml2latex program
11 % This text is taken from Wikipedia, the free encyclopedia, presented here
12 % under the Creative Commons Attribution-Share Alike 3.0 Unported license.
14 % This license is acceptable for Free Cultural Works.
18 % * to Share - to copy, distribute and transmit the work
20 % * to Remix - to adapt the work
22 % Under the following conditions:
24 % Attribution - You must attribute the work in the manner specified by the
25 % author or licensor (but not in any way that suggests that they endorse
26 % you or your use of the work).
28 % Share Alike If you alter, transform, or build upon this work, you may
29 % distribute the resulting work only under the same, similar or a
33 \lstset{numbers=left, stepnumber=1, numbersep=5pt, breaklines=false,
34 basicstyle=\footnotesize\ttfamily,
35 numberstyle=\tiny,language=C,columns=fullflexible,
38 \use_default_options false
46 \font_typewriter default
47 \font_default_family default
54 \paperfontsize default
63 \paperorientation portrait
66 \paragraph_separation skip
68 \quotes_language english
71 \paperpagestyle default
72 \tracking_changes false
84 \begin_layout Section*
88 \begin_layout Standard
89 (C) Copyright various Wikipedia Contributors.
90 This text is taken from Wikipedia, the free encyclopedia
94 \begin_layout Plain Layout
95 http://en.wikipedia.org/wiki/Literate_programming
100 , presented here under the
104 Attribution-Share Alike 3.0 Unported license.
107 \begin_layout Standard
108 This license is acceptable for Free Cultural Works.
111 \begin_layout Standard
115 \begin_layout Itemize
116 to Share — to copy, distribute and transmit the work
119 \begin_layout Itemize
120 to Remix — to adapt the work
123 \begin_layout Standard
124 Under the following conditions:
128 \labelwidthstring 00.00.0000
129 Attribution You must attribute the work in the manner specified by the author
130 or licensor (but not in any way that suggests that they endorse you or
131 your use of the work).
135 \labelwidthstring 00.00.0000
140 Alike If you alter, transform, or build upon this work, you may distribute
141 the resulting work only under the same, similar or a compatible license.
144 \begin_layout Section*
148 \begin_layout Standard
153 is an approach to programming introduced by Donald Knuth as an alternative
154 to the structured programming paradigm of the 1970s.
158 \begin_layout Plain Layout
161 "Literate Programming" (PDF).
166 (British Computer Society)
171 doi:10.1093/comjnl/27.2.97.
172 http://www.literateprogramming.com/knuthweb.pdf.
173 Retrieved January 4, 2009.
174 \begin_inset CommandInset label
188 \begin_layout Standard
189 The literate programming paradigm, as conceived by Knuth, represents a move
190 away from writing programs in the manner and order imposed by the computer,
191 and instead enables programmers to develop programs in the order demanded
192 by the logic and flow of their thoughts.
196 \begin_layout Plain Layout
197 \begin_inset Quotes eld
200 I had the feeling that top-down and bottom-up were opposing methodologies:
201 one more suitable for program exposition and the other more suitable for
203 But after gaining experience with WEB, I have come to realize that there
204 is no need to choose once and for all between top-down and bottom-up, because
205 a program is best thought of as a web instead of a tree.
206 A hierarchical structure is present, but the most important thing about
207 a program is its structural relationships.
208 A complex piece of software consists of simple parts and simple relations
209 between those parts; the programmer's task is to state those parts and
210 those relationships, in whatever order is best for human comprehension
211 not in some rigidly determined order like top-down or bottom-up.
212 \begin_inset Quotes erd
218 Knuth, Literate Programming
224 \begin_layout Plain Layout
238 Literate programs are written as an uninterrupted exposition of logic in
239 an ordinary human language, much like the text of an essay, in which macros
240 which hide abstractions and traditional source code are included.
241 Literate programming tools are used to obtain two representations from
242 a literate source file: one suitable for further compilation or execution
244 \begin_inset Quotes eld
248 \begin_inset Quotes erd
251 code, and another for viewing as formatted documentation, which is said
253 \begin_inset Quotes eld
257 \begin_inset Quotes erd
260 from the literate source.
261 (If one remembers that the first version of the tool was called
265 , the amusing literary reference hidden by Knuth in these names becomes
267 \begin_inset Quotes eld
270 Oh, what a tangled web we weave when first we practise to deceive
271 \begin_inset Quotes erd
274 --- Sir Walter Scott, in Canto VI, Stanza 17 of
275 \begin_inset Quotes eld
279 \begin_inset Quotes erd
282 (1808) an epic poem about the Battle of Flodden Field in 1513.).
283 While the first generation of literate programming tools were computer
284 language-specific, the later ones are language-agnostic and exist above
285 the programming languages.
289 \begin_layout Subsection*
293 \begin_layout Standard
294 \begin_inset CommandInset toc
295 LatexCommand tableofcontents
302 \begin_layout Section
306 \begin_layout Standard
307 A literate program is an explanation of the program logic in a natural language,
308 such as English, interspersed with snippets of macros and traditional source
310 Macros in a literate source file are simply title-like or explanatory phrases
311 in a human language that describe human abstractions created while solving
312 the programming problem, and hiding chunks of code or lower-level macros.
313 These macros are similar to the algorithms in pseudocode typically used
314 in teaching computer science.
315 These arbitrary explanatory phrases become precise new operators, created
316 on the fly by the programmer, forming a
320 on top of the underlying programming language.
324 \begin_layout Standard
325 A preprocessor is used to substitute arbitrary hierarchies, or rather
326 \begin_inset Quotes eld
329 interconnected 'webs' of macros
330 \begin_inset Quotes erd
337 \begin_layout Plain Layout
338 \begin_inset Quotes eld
341 WEB's macros are allowed to have at most one parameter.
342 Again, I did this in the interests of simplicity, because I noticed that
343 most applications of multiple parameters could in fact be reduced to the
345 For example, suppose that you want to define something like...
346 In other words, the name of one macro can usefully be a parameter to another
348 This particular trick makes it possible to...
349 \begin_inset Quotes erd
355 Knuth, Literate Programming
361 \begin_layout Plain Layout
375 to produce the compilable source code with one command (
376 \begin_inset Quotes eld
380 \begin_inset Quotes erd
383 ), and documentation with another (
384 \begin_inset Quotes eld
388 \begin_inset Quotes erd
392 The preprocessor also provides an ability to write out the content of the
393 macros and to add to already created macros in any place in the text of
394 the literate program source file, thereby disposing of the need to keep
395 in mind the restrictions imposed by traditional programming languages or
396 to interrupt the flow of thought.
400 \begin_layout Subsection
401 Advantages of the method
404 \begin_layout Standard
409 \begin_layout Plain Layout
410 Knuth, Donald E.; Andrew Binstock (April 25, 2008).
411 "Interview with Donald Knuth".
412 http://www.informit.com/articles/article.aspx?p=1193856.
413 Retrieved January 4, 2009.
414 "Yet to me, literate programming is certainly the most important thing
415 that came out of the TeX project.
416 Not only has it enabled me to write and maintain programs faster and more
417 reliably than ever before, and been one of my greatest sources of joy since
418 the 1980s-it has actually been indispensable at times.
419 Some of my major programs, such as the MMIX meta-simulator, could not have
420 been written with any other methodology that I've ever heard of.
421 The complexity was simply too daunting for my limited brain to handle;
422 without literate programming, the whole enterprise would have flopped miserably.
424 Literate programming is what you need to rise above the ordinary level
434 \begin_layout Plain Layout
435 "Another surprising thing that I learned while using WEB was that traditional
436 programming languages had been causing me to write inferior programs, although
437 I hadn't realized what I was doing.
438 My original idea was that WEB would be merely a tool for documentation,
439 but I actually found that my WEB programs were better than the programs
440 I had been writing in other languages." ---
443 Knuth, Literate Programming
449 \begin_layout Plain Layout
463 literate programming provides for higher-quality programs, since it forces
464 programmers to explicitly state the thoughts behind the program, making
465 poorly thought-out design decisions more obvious.
466 Knuth also claims that literate programming provides a first-rate documentation
467 system, which is not an add-on, but is grown naturally in the process of
468 exposition of one's thoughts during a program creation.
472 \begin_layout Plain Layout
473 \begin_inset Quotes eld
476 Thus the WEB language allows a person to express programs in a
478 "stream of consciousness" order
481 TANGLE is able to scramble everything up into the arrangement that a PASCAL
483 This feature of WEB is perhaps its greatest asset; it makes a WEB-written
484 program much more readable than the same program written purely in PASCAL,
485 even if the latter program is well commented.
486 And the fact that there's no need to be hung up on the question of top-down
487 versus bottom-up, since a programmer can now
489 view a large program as a web, to be explored in a
491 psychologically correct order
493 is perhaps the greatest lesson
495 I have learned from my recent experiences.
496 \begin_inset Quotes erd
502 Knuth, Literate Programming
508 \begin_layout Plain Layout
522 The resulting documentation allows authors to restart their own thought
523 processes at any later time, and allows other programmers to more easily
524 understand the construction of the program.
525 This differs from traditional documentation, in which a programmer is presented
526 with source code that follows a compiler-imposed order, and must decipher
527 the thought process behind the program from the code and its associated
529 The meta-language capabilities of literate programming are also claimed
530 to facilitate thinking in general, giving a higher
531 \begin_inset Quotes eld
535 \begin_inset Quotes erd
538 of the code and increasing the number of concepts the mind can successfully
540 Applicability of the concept to programming on a large scale, that of commercia
541 l-grade programs is proven by an edition of TeX code as a literate program.
545 \begin_layout Subsection
549 \begin_layout Standard
550 Literate programming is very often misunderstood
554 \begin_layout Plain Layout
555 Dominus, Mark-Jason (March 20, 2000).
557 \begin_inset Quotes eld
560 POD is not Literate Programming
561 \begin_inset Quotes erd
570 http://www.perl.com/pub/a/tchrist/litprog.html.
571 Retrieved January 3, 2009.
572 \begin_inset CommandInset label
583 to refer only to formatted documentation produced from a common file with
584 both source code and comments, or to voluminous commentaries included with
586 This misconception has led to claims that comment-extraction tools, such
587 as the Perl Plain Old Documentation system, are
588 \begin_inset Quotes eld
591 literate programming tools
592 \begin_inset Quotes erd
596 However, because these tools do not implement the
597 \begin_inset Quotes eld
600 web of abstract concepts
601 \begin_inset Quotes erd
604 hiding behind the system of natural-language macros, or provide an ability
605 to change the order of the source code from a machine-imposed sequence
606 to one convenient to the human mind, they cannot properly be called literate
607 programming tools in the sense intended by Knuth.
611 \begin_layout Plain Layout
624 \begin_layout Plain Layout
625 \begin_inset Quotes eld
628 I chose the name WEB partly because it was one of the few three-letter words
629 of English that hadn't already been applied to computers.
630 But as time went on, I've become extremely pleased with the name, because
631 I think that a complex piece of software is, indeed, best regarded as a
632 web that has been delicately pieced together from simple materials.
633 We understand a complicated system by understanding its simple parts, and
634 by understanding the simple relations between those parts and their immediate
636 If we express a program as a web of ideas, we can emphasize its structural
637 properties in a natural and satisfying way.
638 \begin_inset Quotes erd
644 Knuth, Literate Programming
650 \begin_layout Plain Layout
667 \begin_layout Section
671 \begin_layout Standard
672 A classic example of literate programming is the literate implementation
677 word counting program.
678 Knuth presented a CWEB version of this example in Chapter 12 of his
683 The same example was later rewritten for the noweb literate programming
688 \begin_layout Plain Layout
689 Ramsey, Norman (May 13, 2008).
691 \begin_inset Quotes eld
695 \begin_inset Quotes erd
699 http://www.cs.tufts.edu/
700 \begin_inset space \space{}
703 nr/noweb/examples/wc.html.
704 Retrieved January 4, 2009.
705 \begin_inset CommandInset label
716 This example provides a good illustration of the basic elements of literate
721 \begin_layout Section
725 \begin_layout Standard
726 The following snippet of the
734 \begin_layout Plain Layout
743 shows how arbitrary descriptive phrases in a natural language are used
744 in a literate program to create macros, which act as new
745 \begin_inset Quotes eld
749 \begin_inset Quotes erd
752 in the literate programming language, and hide chunks of code or other
754 The mark-up notation consists of double angle brackets (
755 \begin_inset Quotes eld
759 \begin_inset Flex CharStyle:Code
762 \begin_layout Plain Layout
763 <<\SpecialChar \ldots{}
770 \begin_inset Quotes erd
773 ) that indicate macros, the
774 \begin_inset Quotes eld
778 \begin_inset Flex CharStyle:Code
781 \begin_layout Plain Layout
788 \begin_inset Quotes erd
791 symbol which indicates the end of the code section in a noweb file.
793 \begin_inset Quotes eld
797 \begin_inset Flex CharStyle:Code
800 \begin_layout Plain Layout
807 \begin_inset Quotes erd
810 symbol stands for the
811 \begin_inset Quotes eld
815 \begin_inset Quotes erd
818 , topmost node the literate programming tool will start expanding the web
820 Actually, writing out the expanded source code can be done from any section
822 a piece of code designated as
823 \begin_inset Quotes erd
827 \begin_inset Flex CharStyle:Code
830 \begin_layout Plain Layout
831 <<name of the chunk>>=
837 \begin_inset Quotes erd
840 , with the equal sign), so one literate program file can contain several
841 files with machine source code.
844 \begin_layout Standard
845 \begin_inset listings
849 \begin_layout Plain Layout
851 The purpose of wc is to count lines, words, and/or characters in a list
856 \begin_layout Plain Layout
858 number of lines in a file is ......../more explanations/
861 \begin_layout Plain Layout
865 \begin_layout Plain Layout
867 Here, then, is an overview of the file wc.c that is defined by the noweb
871 \begin_layout Plain Layout
876 \begin_layout Plain Layout
878 <<Header files to include>>
881 \begin_layout Plain Layout
886 \begin_layout Plain Layout
891 \begin_layout Plain Layout
896 \begin_layout Plain Layout
901 \begin_layout Plain Layout
906 \begin_layout Plain Layout
910 \begin_layout Plain Layout
912 We must include the standard I/O definitions, since we want to send formatted
916 \begin_layout Plain Layout
918 to stdout and stderr.
921 \begin_layout Plain Layout
923 <<Header files to include>>=
926 \begin_layout Plain Layout
931 \begin_layout Plain Layout
941 \begin_layout Standard
942 Note also that the unraveling of the chunks can be done in any place in
943 the literate program text file, not necessarily in the order they are sequenced
944 in the enclosing chunk, but as is demanded by the logic reflected in the
945 explanatory text that envelops the whole program.
949 \begin_layout Section
950 Program as a Web - Macros are not just section names
953 \begin_layout Standard
954 Macros are not the same as
955 \begin_inset Quotes eld
959 \begin_inset Quotes erd
962 in standard documentation.
963 Literate programming macros can hide any chunk of code behind themselves,
964 and be used inside any low-level machine language operators, often inside
965 logical operators such as
966 \begin_inset Quotes eld
970 \begin_inset Flex CharStyle:Code
973 \begin_layout Plain Layout
980 \begin_inset Quotes erd
984 \begin_inset Quotes eld
988 \begin_inset Flex CharStyle:Code
991 \begin_layout Plain Layout
998 \begin_inset Quotes erd
1002 \begin_inset Quotes eld
1006 \begin_inset Flex CharStyle:Code
1009 \begin_layout Plain Layout
1016 \begin_inset Quotes erd
1020 This is illustrated by the following snippet of the
1028 \begin_layout Plain Layout
1040 \begin_layout Standard
1041 \begin_inset listings
1045 \begin_layout Plain Layout
1049 \begin_layout Plain Layout
1051 The present chunk, which does the counting that is wc's raison d'etre, was
1055 \begin_layout Plain Layout
1057 the simplest to write.
1058 We look at each character and change state if it begins or ends
1061 \begin_layout Plain Layout
1066 \begin_layout Plain Layout
1070 \begin_layout Plain Layout
1075 \begin_layout Plain Layout
1080 \begin_layout Plain Layout
1082 <<Fill buffer if it is empty; break at end of file>>
1085 \begin_layout Plain Layout
1090 \begin_layout Plain Layout
1092 if (c > ' ' && c < 0177) {
1095 \begin_layout Plain Layout
1097 /* visible ASCII codes */
1100 \begin_layout Plain Layout
1105 \begin_layout Plain Layout
1110 \begin_layout Plain Layout
1115 \begin_layout Plain Layout
1120 \begin_layout Plain Layout
1125 \begin_layout Plain Layout
1130 \begin_layout Plain Layout
1137 \begin_layout Plain Layout
1139 else if (c != ' ' && c != '
1144 \begin_layout Plain Layout
1149 \begin_layout Plain Layout
1151 /* c is newline, space, or tab */
1154 \begin_layout Plain Layout
1159 \begin_layout Plain Layout
1169 \begin_layout Standard
1170 In fact, macros can stand for any arbitrary chunk of code or other macros,
1171 and are thus more general than top-down or bottom-up
1172 \begin_inset Quotes eld
1176 \begin_inset Quotes erd
1179 , or than subsectioning.
1180 Knuth says that when he realized this, he began to think of a program as
1189 \begin_layout Plain Layout
1201 \begin_layout Subsection
1202 Order of human logic, not that of the compiler
1205 \begin_layout Standard
1206 In a noweb literate program besides the free order of their exposition,
1207 the chunks behind macros, once introduced with
1208 \begin_inset Quotes eld
1212 \begin_inset Flex CharStyle:Code
1215 \begin_layout Plain Layout
1216 <<\SpecialChar \ldots{}
1223 \begin_inset Quotes erd
1226 , can be grown later in any place in the file by simply writing
1227 \begin_inset Quotes eld
1231 \begin_inset Flex CharStyle:Code
1234 \begin_layout Plain Layout
1235 <<name of the chunk>>=
1241 \begin_inset Quotes erd
1244 and adding more content to it, as the following snippet illustrates.
1248 \begin_layout Plain Layout
1260 \begin_layout Standard
1261 \begin_inset listings
1265 \begin_layout Plain Layout
1267 The grand totals must be initialized to zero at the beginning of the program.
1270 \begin_layout Plain Layout
1272 If we made these variables local to main, we would have to do this initializatio
1276 \begin_layout Plain Layout
1278 explicitly; however, C globals are automatically zeroed.
1280 \begin_inset Quotes eld
1286 \begin_layout Plain Layout
1289 \begin_inset Quotes erd
1295 \begin_layout Plain Layout
1297 <<Global variables>>+=
1300 \begin_layout Plain Layout
1302 long totwordcount, totlinecount,
1305 \begin_layout Plain Layout
1310 \begin_layout Plain Layout
1312 /* total number of words, lines, chars */
1315 \begin_layout Plain Layout
1325 \begin_layout Subsection
1326 Record of the train of thought creates superior documentation
1329 \begin_layout Standard
1330 The documentation for a literate program is produced as part of writing
1332 Instead of comments provided as side notes to source code a literate program
1333 contains the explanation of concepts on each level, with lower level concepts
1334 deferred to their appropriate place, which allows for better communication
1336 The snippets of the literate
1337 \begin_inset Flex CharStyle:Code
1340 \begin_layout Plain Layout
1346 above show how an explanation of the program and its source code are interwoven.
1347 Such exposition of ideas creates the flow of thought that is like a literary
1349 Knuth famously wrote a
1350 \begin_inset Quotes eld
1354 \begin_inset Quotes erd
1357 which explains the code of the computer strategy game Colossal Cave Adventure,
1362 \begin_layout Plain Layout
1363 The game, also known as
1367 , was originally written by Crowther in about 700 lines of FORTRAN code;
1368 Knuth recast it into the WEB idiom.
1369 It is available at literateprogramming.com or on Knuth's website.
1378 \begin_layout Section
1379 Literate programming tools
1382 \begin_layout Standard
1383 The first published literate programming environment was WEB, introduced
1384 by Donald Knuth in 1981 for his TeX typesetting system; it uses Pascal
1385 as its underlying programming language and TeX for typesetting of the documenta
1387 The complete commented TeX source code was published in Knuth's
1391 , volume B of his 5-volume
1393 Computers and Typesetting
1396 Knuth had privately used a literate programming system called DOC as early
1398 He was inspired by the ideas of Pierre-Arnoul de Marneffe
1402 \begin_layout Plain Layout
1403 de Marneffe, Pierre Arnoul (December 1973).
1406 Holon Programming - Report PMAR 73-23
1409 University de Liège, Service d'Informatique.
1415 The free CWEB, written by Knuth and Silvio Levy, is WEB adapted for C and
1416 C++, runs on most operating systems and can produce TeX and PDF documentation.
1420 \begin_layout Standard
1421 Other implementations of the literate programming concept are noweb and
1422 FunnelWeb, both of which are independent of the programming language of
1424 Noweb is well-known for its simplicity: just 2 text markup conventions
1425 and 2 tool invocations are needed to use it, and it allows for text formatting
1426 in HTML rather than going through the TeX system.
1427 FunnelWeb is another program without dependency on TeX which can produce
1428 HTML documentation output.
1429 It has more complicated markup (with
1430 \begin_inset Quotes eld
1434 \begin_inset Flex CharStyle:Code
1437 \begin_layout Plain Layout
1444 \begin_inset Quotes erd
1447 escaping any FunnelWeb command), but has many more flexible options.
1451 \begin_layout Standard
1452 The Leo text editor is an
1456 editor which supports optional noweb and CWEB markup.
1457 The author of Leo actually mixes two different approaches: first, Leo is
1458 an outlining editor, which helps with management of large texts, second,
1459 Leo incorporates some of the ideas of literate programming, which in its
1461 the way it is used by Knuth Web tool and/or tools like
1462 \begin_inset Quotes eld
1466 \begin_inset Quotes erd
1469 ) is possible only with some degree of inventiveness and the use of the
1470 editor in a way not exactly envisioned by its author (in modified @root
1472 However this and other extensions (@file nodes) make outline programming
1473 and text management successful and easy and in some ways similar to literate
1478 \begin_layout Plain Layout
1480 (September 2, 2008).
1482 http://webpages.charter.net/edreamleo/front.html.
1483 Retrieved January 4, 2009.
1491 \begin_layout Standard
1492 The Haskell programming language has native support for semi-literate programmin
1493 g, inspired by CWEB but with a simpler implementation.
1494 When aiming for TeX output, one writes a plain LaTeX file where source
1495 code is marked by a given surrounding environment; LaTeX can be set up
1496 to handle that environment, while the Haskell compiler looks for the right
1497 markers to identify Haskell statements to compile, removing the TeX documentati
1498 on as if they were comments.
1499 However, as described above, this is not literate programming in the sense
1501 Haskell's functional, modular nature
1505 \begin_layout Plain Layout
1506 Hughes, John (January 9, 2002).
1509 Why Functional Programming Matters
1512 Institutionen för Datavetenskap, Chalmers Tekniska Högskola,.
1513 http://www.cs.chalmers.se/
1514 \begin_inset space ~
1517 rjmh/Papers/whyfp.pdf.
1518 Retrieved January 4, 2009.
1523 makes literate programming directly in the language somewhat easier, but
1524 it is not nearly as powerful as one of the a WEB tools where
1525 \begin_inset Quotes eld
1529 \begin_inset Quotes erd
1532 can reorganize in arbitrary ways.
1536 \begin_layout Section
1540 \begin_layout Standard
1541 Sweave - an example of use of the
1542 \begin_inset Quotes eld
1546 \begin_inset Quotes erd
1549 -like Literate Programming tool inside the R language for creation of dynamic
1553 \begin_layout Section
1557 \begin_layout Standard
1562 Literate Programming
1565 , California: Stanford University Center for the Study of Language and
1567 ISBN 978-0937073803.
1568 \begin_inset space ~
1574 \begin_layout Standard
1579 TeX & LaTeX: Drawing and Literate Programming
1584 \begin_inset space ~
1587 (includes software).
1591 \begin_layout Standard
1592 Nørmark, Kurt (August 13, 1998).
1593 "Literate Programming - Issues and Problems".
1594 University of Aalborg.
1595 http://www.cs.aau.dk/
1596 \begin_inset space ~
1599 normark/litpro/issues-and-problems.html.
1600 \begin_inset space ~
1606 \begin_layout Section
1610 \begin_layout Standard
1611 comp.programming.literate FAQ at Internet FAQ Archives
1614 \begin_layout Standard
1615 Literate Programming newsgroup
1618 \begin_layout Standard
1619 LiteratePrograms a literate programming wiki.
1623 \begin_layout Standard
1624 Select A literate programming example using noweb
1627 \begin_layout Standard
1628 Softpanorama page on literate programming
1631 \begin_layout Standard
1632 Haskell literate programming
1635 \begin_layout Standard
1636 Specification of literate programming in the Haskell Report the accepted
1640 \begin_layout Standard
1641 Noweb — A Simple, Extensible Tool for Literate Programming
1644 \begin_layout Standard
1645 Lp4all — A Simple Literate Programming Tool with a wiki-like markup syntax