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 %keywordstyle=\color{darkgreen},
36 numberstyle=\tiny,language=C,columns=fullflexible,
39 \use_default_options false
47 \font_typewriter default
48 \font_default_family default
55 \paperfontsize default
64 \paperorientation portrait
67 \paragraph_separation skip
69 \quotes_language english
72 \paperpagestyle default
73 \tracking_changes false
85 \begin_layout Section*
89 \begin_layout Standard
90 (C) Copyright various Wikipedia Contributors.
91 This text is taken from Wikipedia, the free encyclopedia
95 \begin_layout Plain Layout
96 http://en.wikipedia.org/wiki/Literate_programming
101 , presented here under the
105 Attribution-Share Alike 3.0 Unported license.
108 \begin_layout Standard
109 This license is acceptable for Free Cultural Works.
112 \begin_layout Standard
116 \begin_layout Itemize
117 to Share — to copy, distribute and transmit the work
120 \begin_layout Itemize
121 to Remix — to adapt the work
124 \begin_layout Standard
125 Under the following conditions:
129 \labelwidthstring 00.00.0000
130 Attribution You must attribute the work in the manner specified by the author
131 or licensor (but not in any way that suggests that they endorse you or
132 your use of the work).
136 \labelwidthstring 00.00.0000
141 Alike If you alter, transform, or build upon this work, you may distribute
142 the resulting work only under the same, similar or a compatible license.
145 \begin_layout Section*
149 \begin_layout Standard
154 is an approach to programming introduced by Donald Knuth as an alternative
155 to the structured programming paradigm of the 1970s.
159 \begin_layout Plain Layout
162 "Literate Programming" (PDF).
167 (British Computer Society)
172 doi:10.1093/comjnl/27.2.97.
173 http://www.literateprogramming.com/knuthweb.pdf.
174 Retrieved January 4, 2009.
175 \begin_inset CommandInset label
189 \begin_layout Standard
190 The literate programming paradigm, as conceived by Knuth, represents a move
191 away from writing programs in the manner and order imposed by the computer,
192 and instead enables programmers to develop programs in the order demanded
193 by the logic and flow of their thoughts.
197 \begin_layout Plain Layout
198 \begin_inset Quotes eld
201 I had the feeling that top-down and bottom-up were opposing methodologies:
202 one more suitable for program exposition and the other more suitable for
204 But after gaining experience with WEB, I have come to realize that there
205 is no need to choose once and for all between top-down and bottom-up, because
206 a program is best thought of as a web instead of a tree.
207 A hierarchical structure is present, but the most important thing about
208 a program is its structural relationships.
209 A complex piece of software consists of simple parts and simple relations
210 between those parts; the programmer's task is to state those parts and
211 those relationships, in whatever order is best for human comprehension
212 not in some rigidly determined order like top-down or bottom-up.
213 \begin_inset Quotes erd
219 Knuth, Literate Programming
225 \begin_layout Plain Layout
239 Literate programs are written as an uninterrupted exposition of logic in
240 an ordinary human language, much like the text of an essay, in which macros
241 which hide abstractions and traditional source code are included.
242 Literate programming tools are used to obtain two representations from
243 a literate source file: one suitable for further compilation or execution
245 \begin_inset Quotes eld
249 \begin_inset Quotes erd
252 code, and another for viewing as formatted documentation, which is said
254 \begin_inset Quotes eld
258 \begin_inset Quotes erd
261 from the literate source.
262 (If one remembers that the first version of the tool was called
266 , the amusing literary reference hidden by Knuth in these names becomes
268 \begin_inset Quotes eld
271 Oh, what a tangled web we weave when first we practise to deceive
272 \begin_inset Quotes erd
275 --- Sir Walter Scott, in Canto VI, Stanza 17 of
276 \begin_inset Quotes eld
280 \begin_inset Quotes erd
283 (1808) an epic poem about the Battle of Flodden Field in 1513.).
284 While the first generation of literate programming tools were computer
285 language-specific, the later ones are language-agnostic and exist above
286 the programming languages.
290 \begin_layout Subsection*
294 \begin_layout Standard
295 \begin_inset CommandInset toc
296 LatexCommand tableofcontents
303 \begin_layout Section
307 \begin_layout Standard
308 A literate program is an explanation of the program logic in a natural language,
309 such as English, interspersed with snippets of macros and traditional source
311 Macros in a literate source file are simply title-like or explanatory phrases
312 in a human language that describe human abstractions created while solving
313 the programming problem, and hiding chunks of code or lower-level macros.
314 These macros are similar to the algorithms in pseudocode typically used
315 in teaching computer science.
316 These arbitrary explanatory phrases become precise new operators, created
317 on the fly by the programmer, forming a
321 on top of the underlying programming language.
325 \begin_layout Standard
326 A preprocessor is used to substitute arbitrary hierarchies, or rather
327 \begin_inset Quotes eld
330 interconnected 'webs' of macros
331 \begin_inset Quotes erd
338 \begin_layout Plain Layout
339 \begin_inset Quotes eld
342 WEB's macros are allowed to have at most one parameter.
343 Again, I did this in the interests of simplicity, because I noticed that
344 most applications of multiple parameters could in fact be reduced to the
346 For example, suppose that you want to define something like...
347 In other words, the name of one macro can usefully be a parameter to another
349 This particular trick makes it possible to...
350 \begin_inset Quotes erd
356 Knuth, Literate Programming
362 \begin_layout Plain Layout
376 to produce the compilable source code with one command (
377 \begin_inset Quotes eld
381 \begin_inset Quotes erd
384 ), and documentation with another (
385 \begin_inset Quotes eld
389 \begin_inset Quotes erd
393 The preprocessor also provides an ability to write out the content of the
394 macros and to add to already created macros in any place in the text of
395 the literate program source file, thereby disposing of the need to keep
396 in mind the restrictions imposed by traditional programming languages or
397 to interrupt the flow of thought.
401 \begin_layout Subsection
402 Advantages of the method
405 \begin_layout Standard
410 \begin_layout Plain Layout
411 Knuth, Donald E.; Andrew Binstock (April 25, 2008).
412 "Interview with Donald Knuth".
413 http://www.informit.com/articles/article.aspx?p=1193856.
414 Retrieved January 4, 2009.
415 "Yet to me, literate programming is certainly the most important thing
416 that came out of the TeX project.
417 Not only has it enabled me to write and maintain programs faster and more
418 reliably than ever before, and been one of my greatest sources of joy since
419 the 1980s-it has actually been indispensable at times.
420 Some of my major programs, such as the MMIX meta-simulator, could not have
421 been written with any other methodology that I've ever heard of.
422 The complexity was simply too daunting for my limited brain to handle;
423 without literate programming, the whole enterprise would have flopped miserably.
425 Literate programming is what you need to rise above the ordinary level
435 \begin_layout Plain Layout
436 "Another surprising thing that I learned while using WEB was that traditional
437 programming languages had been causing me to write inferior programs, although
438 I hadn't realized what I was doing.
439 My original idea was that WEB would be merely a tool for documentation,
440 but I actually found that my WEB programs were better than the programs
441 I had been writing in other languages." ---
444 Knuth, Literate Programming
450 \begin_layout Plain Layout
464 literate programming provides for higher-quality programs, since it forces
465 programmers to explicitly state the thoughts behind the program, making
466 poorly thought-out design decisions more obvious.
467 Knuth also claims that literate programming provides a first-rate documentation
468 system, which is not an add-on, but is grown naturally in the process of
469 exposition of one's thoughts during a program creation.
473 \begin_layout Plain Layout
474 \begin_inset Quotes eld
477 Thus the WEB language allows a person to express programs in a
479 "stream of consciousness" order
482 TANGLE is able to scramble everything up into the arrangement that a PASCAL
484 This feature of WEB is perhaps its greatest asset; it makes a WEB-written
485 program much more readable than the same program written purely in PASCAL,
486 even if the latter program is well commented.
487 And the fact that there's no need to be hung up on the question of top-down
488 versus bottom-up, since a programmer can now
490 view a large program as a web, to be explored in a
492 psychologically correct order
494 is perhaps the greatest lesson
496 I have learned from my recent experiences.
497 \begin_inset Quotes erd
503 Knuth, Literate Programming
509 \begin_layout Plain Layout
523 The resulting documentation allows authors to restart their own thought
524 processes at any later time, and allows other programmers to more easily
525 understand the construction of the program.
526 This differs from traditional documentation, in which a programmer is presented
527 with source code that follows a compiler-imposed order, and must decipher
528 the thought process behind the program from the code and its associated
530 The meta-language capabilities of literate programming are also claimed
531 to facilitate thinking in general, giving a higher
532 \begin_inset Quotes eld
536 \begin_inset Quotes erd
539 of the code and increasing the number of concepts the mind can successfully
541 Applicability of the concept to programming on a large scale, that of commercia
542 l-grade programs is proven by an edition of TeX code as a literate program.
546 \begin_layout Subsection
550 \begin_layout Standard
551 Literate programming is very often misunderstood
555 \begin_layout Plain Layout
556 Dominus, Mark-Jason (March 20, 2000).
558 \begin_inset Quotes eld
561 POD is not Literate Programming
562 \begin_inset Quotes erd
571 http://www.perl.com/pub/a/tchrist/litprog.html.
572 Retrieved January 3, 2009.
573 \begin_inset CommandInset label
584 to refer only to formatted documentation produced from a common file with
585 both source code and comments, or to voluminous commentaries included with
587 This misconception has led to claims that comment-extraction tools, such
588 as the Perl Plain Old Documentation system, are
589 \begin_inset Quotes eld
592 literate programming tools
593 \begin_inset Quotes erd
597 However, because these tools do not implement the
598 \begin_inset Quotes eld
601 web of abstract concepts
602 \begin_inset Quotes erd
605 hiding behind the system of natural-language macros, or provide an ability
606 to change the order of the source code from a machine-imposed sequence
607 to one convenient to the human mind, they cannot properly be called literate
608 programming tools in the sense intended by Knuth.
612 \begin_layout Plain Layout
625 \begin_layout Plain Layout
626 \begin_inset Quotes eld
629 I chose the name WEB partly because it was one of the few three-letter words
630 of English that hadn't already been applied to computers.
631 But as time went on, I've become extremely pleased with the name, because
632 I think that a complex piece of software is, indeed, best regarded as a
633 web that has been delicately pieced together from simple materials.
634 We understand a complicated system by understanding its simple parts, and
635 by understanding the simple relations between those parts and their immediate
637 If we express a program as a web of ideas, we can emphasize its structural
638 properties in a natural and satisfying way.
639 \begin_inset Quotes erd
645 Knuth, Literate Programming
651 \begin_layout Plain Layout
668 \begin_layout Section
672 \begin_layout Standard
673 A classic example of literate programming is the literate implementation
678 word counting program.
679 Knuth presented a CWEB version of this example in Chapter 12 of his
684 The same example was later rewritten for the noweb literate programming
689 \begin_layout Plain Layout
690 Ramsey, Norman (May 13, 2008).
692 \begin_inset Quotes eld
696 \begin_inset Quotes erd
700 http://www.cs.tufts.edu/
701 \begin_inset space \space{}
704 nr/noweb/examples/wc.html.
705 Retrieved January 4, 2009.
706 \begin_inset CommandInset label
717 This example provides a good illustration of the basic elements of literate
722 \begin_layout Section
726 \begin_layout Standard
727 The following snippet of the
735 \begin_layout Plain Layout
744 shows how arbitrary descriptive phrases in a natural language are used
745 in a literate program to create macros, which act as new
746 \begin_inset Quotes eld
750 \begin_inset Quotes erd
753 in the literate programming language, and hide chunks of code or other
755 The mark-up notation consists of double angle brackets (
756 \begin_inset Quotes eld
760 \begin_inset Flex CharStyle:Code
763 \begin_layout Plain Layout
764 <<\SpecialChar \ldots{}
771 \begin_inset Quotes erd
774 ) that indicate macros, the
775 \begin_inset Quotes eld
779 \begin_inset Flex CharStyle:Code
782 \begin_layout Plain Layout
789 \begin_inset Quotes erd
792 symbol which indicates the end of the code section in a noweb file.
794 \begin_inset Quotes eld
798 \begin_inset Flex CharStyle:Code
801 \begin_layout Plain Layout
808 \begin_inset Quotes erd
811 symbol stands for the
812 \begin_inset Quotes eld
816 \begin_inset Quotes erd
819 , topmost node the literate programming tool will start expanding the web
821 Actually, writing out the expanded source code can be done from any section
823 a piece of code designated as
824 \begin_inset Quotes erd
828 \begin_inset Flex CharStyle:Code
831 \begin_layout Plain Layout
832 <<name of the chunk>>=
838 \begin_inset Quotes erd
841 , with the equal sign), so one literate program file can contain several
842 files with machine source code.
845 \begin_layout Standard
846 \begin_inset listings
850 \begin_layout Plain Layout
852 The purpose of wc is to count lines, words, and/or characters in a list
857 \begin_layout Plain Layout
859 number of lines in a file is ......../more explanations/
862 \begin_layout Plain Layout
866 \begin_layout Plain Layout
868 Here, then, is an overview of the file wc.c that is defined by the noweb
872 \begin_layout Plain Layout
877 \begin_layout Plain Layout
879 <<Header files to include>>
882 \begin_layout Plain Layout
887 \begin_layout Plain Layout
892 \begin_layout Plain Layout
897 \begin_layout Plain Layout
902 \begin_layout Plain Layout
907 \begin_layout Plain Layout
911 \begin_layout Plain Layout
913 We must include the standard I/O definitions, since we want to send formatted
917 \begin_layout Plain Layout
919 to stdout and stderr.
922 \begin_layout Plain Layout
924 <<Header files to include>>=
927 \begin_layout Plain Layout
932 \begin_layout Plain Layout
942 \begin_layout Standard
943 Note also that the unraveling of the chunks can be done in any place in
944 the literate program text file, not necessarily in the order they are sequenced
945 in the enclosing chunk, but as is demanded by the logic reflected in the
946 explanatory text that envelops the whole program.
950 \begin_layout Section
951 Program as a Web - Macros are not just section names
954 \begin_layout Standard
955 Macros are not the same as
956 \begin_inset Quotes eld
960 \begin_inset Quotes erd
963 in standard documentation.
964 Literate programming macros can hide any chunk of code behind themselves,
965 and be used inside any low-level machine language operators, often inside
966 logical operators such as
967 \begin_inset Quotes eld
971 \begin_inset Flex CharStyle:Code
974 \begin_layout Plain Layout
981 \begin_inset Quotes erd
985 \begin_inset Quotes eld
989 \begin_inset Flex CharStyle:Code
992 \begin_layout Plain Layout
999 \begin_inset Quotes erd
1003 \begin_inset Quotes eld
1007 \begin_inset Flex CharStyle:Code
1010 \begin_layout Plain Layout
1017 \begin_inset Quotes erd
1021 This is illustrated by the following snippet of the
1029 \begin_layout Plain Layout
1041 \begin_layout Standard
1042 \begin_inset listings
1046 \begin_layout Plain Layout
1050 \begin_layout Plain Layout
1052 The present chunk, which does the counting that is wc's raison d'etre, was
1056 \begin_layout Plain Layout
1058 the simplest to write.
1059 We look at each character and change state if it begins or ends
1062 \begin_layout Plain Layout
1067 \begin_layout Plain Layout
1071 \begin_layout Plain Layout
1076 \begin_layout Plain Layout
1081 \begin_layout Plain Layout
1083 <<Fill buffer if it is empty; break at end of file>>
1086 \begin_layout Plain Layout
1091 \begin_layout Plain Layout
1093 if (c > ' ' && c < 0177) {
1096 \begin_layout Plain Layout
1098 /* visible ASCII codes */
1101 \begin_layout Plain Layout
1106 \begin_layout Plain Layout
1111 \begin_layout Plain Layout
1116 \begin_layout Plain Layout
1121 \begin_layout Plain Layout
1126 \begin_layout Plain Layout
1131 \begin_layout Plain Layout
1138 \begin_layout Plain Layout
1140 else if (c != ' ' && c != '
1145 \begin_layout Plain Layout
1150 \begin_layout Plain Layout
1152 /* c is newline, space, or tab */
1155 \begin_layout Plain Layout
1160 \begin_layout Plain Layout
1170 \begin_layout Standard
1171 In fact, macros can stand for any arbitrary chunk of code or other macros,
1172 and are thus more general than top-down or bottom-up
1173 \begin_inset Quotes eld
1177 \begin_inset Quotes erd
1180 , or than subsectioning.
1181 Knuth says that when he realized this, he began to think of a program as
1190 \begin_layout Plain Layout
1202 \begin_layout Subsection
1203 Order of human logic, not that of the compiler
1206 \begin_layout Standard
1207 In a noweb literate program besides the free order of their exposition,
1208 the chunks behind macros, once introduced with
1209 \begin_inset Quotes eld
1213 \begin_inset Flex CharStyle:Code
1216 \begin_layout Plain Layout
1217 <<\SpecialChar \ldots{}
1224 \begin_inset Quotes erd
1227 , can be grown later in any place in the file by simply writing
1228 \begin_inset Quotes eld
1232 \begin_inset Flex CharStyle:Code
1235 \begin_layout Plain Layout
1236 <<name of the chunk>>=
1242 \begin_inset Quotes erd
1245 and adding more content to it, as the following snippet illustrates.
1249 \begin_layout Plain Layout
1261 \begin_layout Standard
1262 \begin_inset listings
1266 \begin_layout Plain Layout
1268 The grand totals must be initialized to zero at the beginning of the program.
1271 \begin_layout Plain Layout
1273 If we made these variables local to main, we would have to do this initializatio
1277 \begin_layout Plain Layout
1279 explicitly; however, C globals are automatically zeroed.
1281 \begin_inset Quotes eld
1287 \begin_layout Plain Layout
1290 \begin_inset Quotes erd
1296 \begin_layout Plain Layout
1298 <<Global variables>>+=
1301 \begin_layout Plain Layout
1303 long totwordcount, totlinecount,
1306 \begin_layout Plain Layout
1311 \begin_layout Plain Layout
1313 /* total number of words, lines, chars */
1316 \begin_layout Plain Layout
1326 \begin_layout Subsection
1327 Record of the train of thought creates superior documentation
1330 \begin_layout Standard
1331 The documentation for a literate program is produced as part of writing
1333 Instead of comments provided as side notes to source code a literate program
1334 contains the explanation of concepts on each level, with lower level concepts
1335 deferred to their appropriate place, which allows for better communication
1337 The snippets of the literate
1338 \begin_inset Flex CharStyle:Code
1341 \begin_layout Plain Layout
1347 above show how an explanation of the program and its source code are interwoven.
1348 Such exposition of ideas creates the flow of thought that is like a literary
1350 Knuth famously wrote a
1351 \begin_inset Quotes eld
1355 \begin_inset Quotes erd
1358 which explains the code of the computer strategy game Colossal Cave Adventure,
1363 \begin_layout Plain Layout
1364 The game, also known as
1368 , was originally written by Crowther in about 700 lines of FORTRAN code;
1369 Knuth recast it into the WEB idiom.
1370 It is available at literateprogramming.com or on Knuth's website.
1379 \begin_layout Section
1380 Literate programming tools
1383 \begin_layout Standard
1384 The first published literate programming environment was WEB, introduced
1385 by Donald Knuth in 1981 for his TeX typesetting system; it uses Pascal
1386 as its underlying programming language and TeX for typesetting of the documenta
1388 The complete commented TeX source code was published in Knuth's
1392 , volume B of his 5-volume
1394 Computers and Typesetting
1397 Knuth had privately used a literate programming system called DOC as early
1399 He was inspired by the ideas of Pierre-Arnoul de Marneffe
1403 \begin_layout Plain Layout
1404 de Marneffe, Pierre Arnoul (December 1973).
1407 Holon Programming - Report PMAR 73-23
1410 University de Liège, Service d'Informatique.
1416 The free CWEB, written by Knuth and Silvio Levy, is WEB adapted for C and
1417 C++, runs on most operating systems and can produce TeX and PDF documentation.
1421 \begin_layout Standard
1422 Other implementations of the literate programming concept are noweb and
1423 FunnelWeb, both of which are independent of the programming language of
1425 Noweb is well-known for its simplicity: just 2 text markup conventions
1426 and 2 tool invocations are needed to use it, and it allows for text formatting
1427 in HTML rather than going through the TeX system.
1428 FunnelWeb is another program without dependency on TeX which can produce
1429 HTML documentation output.
1430 It has more complicated markup (with
1431 \begin_inset Quotes eld
1435 \begin_inset Flex CharStyle:Code
1438 \begin_layout Plain Layout
1445 \begin_inset Quotes erd
1448 escaping any FunnelWeb command), but has many more flexible options.
1452 \begin_layout Standard
1453 The Leo text editor is an
1457 editor which supports optional noweb and CWEB markup.
1458 The author of Leo actually mixes two different approaches: first, Leo is
1459 an outlining editor, which helps with management of large texts, second,
1460 Leo incorporates some of the ideas of literate programming, which in its
1462 the way it is used by Knuth Web tool and/or tools like
1463 \begin_inset Quotes eld
1467 \begin_inset Quotes erd
1470 ) is possible only with some degree of inventiveness and the use of the
1471 editor in a way not exactly envisioned by its author (in modified @root
1473 However this and other extensions (@file nodes) make outline programming
1474 and text management successful and easy and in some ways similar to literate
1479 \begin_layout Plain Layout
1481 (September 2, 2008).
1483 http://webpages.charter.net/edreamleo/front.html.
1484 Retrieved January 4, 2009.
1492 \begin_layout Standard
1493 The Haskell programming language has native support for semi-literate programmin
1494 g, inspired by CWEB but with a simpler implementation.
1495 When aiming for TeX output, one writes a plain LaTeX file where source
1496 code is marked by a given surrounding environment; LaTeX can be set up
1497 to handle that environment, while the Haskell compiler looks for the right
1498 markers to identify Haskell statements to compile, removing the TeX documentati
1499 on as if they were comments.
1500 However, as described above, this is not literate programming in the sense
1502 Haskell's functional, modular nature
1506 \begin_layout Plain Layout
1507 Hughes, John (January 9, 2002).
1510 Why Functional Programming Matters
1513 Institutionen för Datavetenskap, Chalmers Tekniska Högskola,.
1514 http://www.cs.chalmers.se/
1515 \begin_inset space ~
1518 rjmh/Papers/whyfp.pdf.
1519 Retrieved January 4, 2009.
1524 makes literate programming directly in the language somewhat easier, but
1525 it is not nearly as powerful as one of the a WEB tools where
1526 \begin_inset Quotes eld
1530 \begin_inset Quotes erd
1533 can reorganize in arbitrary ways.
1537 \begin_layout Section
1541 \begin_layout Standard
1542 Sweave - an example of use of the
1543 \begin_inset Quotes eld
1547 \begin_inset Quotes erd
1550 -like Literate Programming tool inside the R language for creation of dynamic
1554 \begin_layout Section
1558 \begin_layout Standard
1563 Literate Programming
1566 , California: Stanford University Center for the Study of Language and
1568 ISBN 978-0937073803.
1569 \begin_inset space ~
1575 \begin_layout Standard
1580 TeX & LaTeX: Drawing and Literate Programming
1585 \begin_inset space ~
1588 (includes software).
1592 \begin_layout Standard
1593 Nørmark, Kurt (August 13, 1998).
1594 "Literate Programming - Issues and Problems".
1595 University of Aalborg.
1596 http://www.cs.aau.dk/
1597 \begin_inset space ~
1600 normark/litpro/issues-and-problems.html.
1601 \begin_inset space ~
1607 \begin_layout Section
1611 \begin_layout Standard
1612 comp.programming.literate FAQ at Internet FAQ Archives
1615 \begin_layout Standard
1616 Literate Programming newsgroup
1619 \begin_layout Standard
1620 LiteratePrograms a literate programming wiki.
1624 \begin_layout Standard
1625 Select A literate programming example using noweb
1628 \begin_layout Standard
1629 Softpanorama page on literate programming
1632 \begin_layout Standard
1633 Haskell literate programming
1636 \begin_layout Standard
1637 Specification of literate programming in the Haskell Report the accepted
1641 \begin_layout Standard
1642 Noweb — A Simple, Extensible Tool for Literate Programming
1645 \begin_layout Standard
1646 Lp4all — A Simple Literate Programming Tool with a wiki-like markup syntax