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 \begin_inset CommandInset href
97 target "http://en.wikipedia.org/wiki/Literate_programming"
106 , presented here under the
110 Attribution-Share Alike 3.0 Unported license.
113 \begin_layout Standard
114 This license is acceptable for Free Cultural Works.
117 \begin_layout Standard
121 \begin_layout Itemize
122 to Share — to copy, distribute and transmit the work
125 \begin_layout Itemize
126 to Remix — to adapt the work
129 \begin_layout Standard
130 Under the following conditions:
134 \labelwidthstring 00.00.0000
135 Attribution You must attribute the work in the manner specified by the author
136 or licensor (but not in any way that suggests that they endorse you or
137 your use of the work).
141 \labelwidthstring 00.00.0000
146 Alike If you alter, transform, or build upon this work, you may distribute
147 the resulting work only under the same, similar or a compatible license.
150 \begin_layout Section*
154 \begin_layout Standard
159 is an approach to programming introduced by Donald Knuth as an alternative
160 to the structured programming paradigm of the 1970s.
164 \begin_layout Plain Layout
167 "Literate Programming" (PDF).
172 (British Computer Society)
177 doi:10.1093/comjnl/27.2.97.
178 http://www.literateprogramming.com/knuthweb.pdf.
179 Retrieved January 4, 2009.
180 \begin_inset CommandInset label
194 \begin_layout Standard
195 The literate programming paradigm, as conceived by Knuth, represents a move
196 away from writing programs in the manner and order imposed by the computer,
197 and instead enables programmers to develop programs in the order demanded
198 by the logic and flow of their thoughts.
202 \begin_layout Plain Layout
203 \begin_inset Quotes eld
206 I had the feeling that top-down and bottom-up were opposing methodologies:
207 one more suitable for program exposition and the other more suitable for
209 But after gaining experience with WEB, I have come to realize that there
210 is no need to choose once and for all between top-down and bottom-up, because
211 a program is best thought of as a web instead of a tree.
212 A hierarchical structure is present, but the most important thing about
213 a program is its structural relationships.
214 A complex piece of software consists of simple parts and simple relations
215 between those parts; the programmer's task is to state those parts and
216 those relationships, in whatever order is best for human comprehension
217 not in some rigidly determined order like top-down or bottom-up.
218 \begin_inset Quotes erd
224 Knuth, Literate Programming
230 \begin_layout Plain Layout
244 Literate programs are written as an uninterrupted exposition of logic in
245 an ordinary human language, much like the text of an essay, in which macros
246 which hide abstractions and traditional source code are included.
247 Literate programming tools are used to obtain two representations from
248 a literate source file: one suitable for further compilation or execution
250 \begin_inset Quotes eld
254 \begin_inset Quotes erd
257 code, and another for viewing as formatted documentation, which is said
259 \begin_inset Quotes eld
263 \begin_inset Quotes erd
266 from the literate source.
267 (If one remembers that the first version of the tool was called
271 , the amusing literary reference hidden by Knuth in these names becomes
273 \begin_inset Quotes eld
276 Oh, what a tangled web we weave when first we practise to deceive
277 \begin_inset Quotes erd
280 --- Sir Walter Scott, in Canto VI, Stanza 17 of
281 \begin_inset Quotes eld
285 \begin_inset Quotes erd
288 (1808) an epic poem about the Battle of Flodden Field in 1513.).
289 While the first generation of literate programming tools were computer
290 language-specific, the later ones are language-agnostic and exist above
291 the programming languages.
295 \begin_layout Subsection*
299 \begin_layout Standard
300 \begin_inset CommandInset toc
301 LatexCommand tableofcontents
308 \begin_layout Section
312 \begin_layout Standard
313 A literate program is an explanation of the program logic in a natural language,
314 such as English, interspersed with snippets of macros and traditional source
316 Macros in a literate source file are simply title-like or explanatory phrases
317 in a human language that describe human abstractions created while solving
318 the programming problem, and hiding chunks of code or lower-level macros.
319 These macros are similar to the algorithms in pseudocode typically used
320 in teaching computer science.
321 These arbitrary explanatory phrases become precise new operators, created
322 on the fly by the programmer, forming a
326 on top of the underlying programming language.
330 \begin_layout Standard
331 A preprocessor is used to substitute arbitrary hierarchies, or rather
332 \begin_inset Quotes eld
335 interconnected 'webs' of macros
336 \begin_inset Quotes erd
343 \begin_layout Plain Layout
344 \begin_inset Quotes eld
347 WEB's macros are allowed to have at most one parameter.
348 Again, I did this in the interests of simplicity, because I noticed that
349 most applications of multiple parameters could in fact be reduced to the
351 For example, suppose that you want to define something like...
352 In other words, the name of one macro can usefully be a parameter to another
354 This particular trick makes it possible to...
355 \begin_inset Quotes erd
361 Knuth, Literate Programming
367 \begin_layout Plain Layout
381 to produce the compilable source code with one command (
382 \begin_inset Quotes eld
386 \begin_inset Quotes erd
389 ), and documentation with another (
390 \begin_inset Quotes eld
394 \begin_inset Quotes erd
398 The preprocessor also provides an ability to write out the content of the
399 macros and to add to already created macros in any place in the text of
400 the literate program source file, thereby disposing of the need to keep
401 in mind the restrictions imposed by traditional programming languages or
402 to interrupt the flow of thought.
406 \begin_layout Subsection
407 Advantages of the method
410 \begin_layout Standard
415 \begin_layout Plain Layout
416 Knuth, Donald E.; Andrew Binstock (April 25, 2008).
417 "Interview with Donald Knuth".
418 http://www.informit.com/articles/article.aspx?p=1193856.
419 Retrieved January 4, 2009.
420 "Yet to me, literate programming is certainly the most important thing
421 that came out of the TeX project.
422 Not only has it enabled me to write and maintain programs faster and more
423 reliably than ever before, and been one of my greatest sources of joy since
424 the 1980s-it has actually been indispensable at times.
425 Some of my major programs, such as the MMIX meta-simulator, could not have
426 been written with any other methodology that I've ever heard of.
427 The complexity was simply too daunting for my limited brain to handle;
428 without literate programming, the whole enterprise would have flopped miserably.
430 Literate programming is what you need to rise above the ordinary level
440 \begin_layout Plain Layout
441 "Another surprising thing that I learned while using WEB was that traditional
442 programming languages had been causing me to write inferior programs, although
443 I hadn't realized what I was doing.
444 My original idea was that WEB would be merely a tool for documentation,
445 but I actually found that my WEB programs were better than the programs
446 I had been writing in other languages." ---
449 Knuth, Literate Programming
455 \begin_layout Plain Layout
469 literate programming provides for higher-quality programs, since it forces
470 programmers to explicitly state the thoughts behind the program, making
471 poorly thought-out design decisions more obvious.
472 Knuth also claims that literate programming provides a first-rate documentation
473 system, which is not an add-on, but is grown naturally in the process of
474 exposition of one's thoughts during a program creation.
478 \begin_layout Plain Layout
479 \begin_inset Quotes eld
482 Thus the WEB language allows a person to express programs in a
484 "stream of consciousness" order
487 TANGLE is able to scramble everything up into the arrangement that a PASCAL
489 This feature of WEB is perhaps its greatest asset; it makes a WEB-written
490 program much more readable than the same program written purely in PASCAL,
491 even if the latter program is well commented.
492 And the fact that there's no need to be hung up on the question of top-down
493 versus bottom-up, since a programmer can now
495 view a large program as a web, to be explored in a
497 psychologically correct order
499 is perhaps the greatest lesson
501 I have learned from my recent experiences.
502 \begin_inset Quotes erd
508 Knuth, Literate Programming
514 \begin_layout Plain Layout
528 The resulting documentation allows authors to restart their own thought
529 processes at any later time, and allows other programmers to more easily
530 understand the construction of the program.
531 This differs from traditional documentation, in which a programmer is presented
532 with source code that follows a compiler-imposed order, and must decipher
533 the thought process behind the program from the code and its associated
535 The meta-language capabilities of literate programming are also claimed
536 to facilitate thinking in general, giving a higher
537 \begin_inset Quotes eld
541 \begin_inset Quotes erd
544 of the code and increasing the number of concepts the mind can successfully
546 Applicability of the concept to programming on a large scale, that of commercia
547 l-grade programs is proven by an edition of TeX code as a literate program.
551 \begin_layout Subsection
555 \begin_layout Standard
556 Literate programming is very often misunderstood
560 \begin_layout Plain Layout
561 Dominus, Mark-Jason (March 20, 2000).
563 \begin_inset Quotes eld
566 POD is not Literate Programming
567 \begin_inset Quotes erd
576 http://www.perl.com/pub/a/tchrist/litprog.html.
577 Retrieved January 3, 2009.
578 \begin_inset CommandInset label
589 to refer only to formatted documentation produced from a common file with
590 both source code and comments, or to voluminous commentaries included with
592 This misconception has led to claims that comment-extraction tools, such
593 as the Perl Plain Old Documentation system, are
594 \begin_inset Quotes eld
597 literate programming tools
598 \begin_inset Quotes erd
602 However, because these tools do not implement the
603 \begin_inset Quotes eld
606 web of abstract concepts
607 \begin_inset Quotes erd
610 hiding behind the system of natural-language macros, or provide an ability
611 to change the order of the source code from a machine-imposed sequence
612 to one convenient to the human mind, they cannot properly be called literate
613 programming tools in the sense intended by Knuth.
617 \begin_layout Plain Layout
630 \begin_layout Plain Layout
631 \begin_inset Quotes eld
634 I chose the name WEB partly because it was one of the few three-letter words
635 of English that hadn't already been applied to computers.
636 But as time went on, I've become extremely pleased with the name, because
637 I think that a complex piece of software is, indeed, best regarded as a
638 web that has been delicately pieced together from simple materials.
639 We understand a complicated system by understanding its simple parts, and
640 by understanding the simple relations between those parts and their immediate
642 If we express a program as a web of ideas, we can emphasize its structural
643 properties in a natural and satisfying way.
644 \begin_inset Quotes erd
650 Knuth, Literate Programming
656 \begin_layout Plain Layout
673 \begin_layout Section
677 \begin_layout Standard
678 A classic example of literate programming is the literate implementation
683 word counting program.
684 Knuth presented a CWEB version of this example in Chapter 12 of his
689 The same example was later rewritten for the noweb literate programming
694 \begin_layout Plain Layout
695 Ramsey, Norman (May 13, 2008).
697 \begin_inset Quotes eld
701 \begin_inset Quotes erd
705 http://www.cs.tufts.edu/
706 \begin_inset space \space{}
709 nr/noweb/examples/wc.html.
710 Retrieved January 4, 2009.
711 \begin_inset CommandInset label
722 This example provides a good illustration of the basic elements of literate
727 \begin_layout Section
731 \begin_layout Standard
732 The following snippet of the
740 \begin_layout Plain Layout
749 shows how arbitrary descriptive phrases in a natural language are used
750 in a literate program to create macros, which act as new
751 \begin_inset Quotes eld
755 \begin_inset Quotes erd
758 in the literate programming language, and hide chunks of code or other
760 The mark-up notation consists of double angle brackets (
761 \begin_inset Quotes eld
765 \begin_inset Flex CharStyle:Code
768 \begin_layout Plain Layout
769 <<\SpecialChar \ldots{}
776 \begin_inset Quotes erd
779 ) that indicate macros, the
780 \begin_inset Quotes eld
784 \begin_inset Flex CharStyle:Code
787 \begin_layout Plain Layout
794 \begin_inset Quotes erd
797 symbol which indicates the end of the code section in a noweb file.
799 \begin_inset Quotes eld
803 \begin_inset Flex CharStyle:Code
806 \begin_layout Plain Layout
813 \begin_inset Quotes erd
816 symbol stands for the
817 \begin_inset Quotes eld
821 \begin_inset Quotes erd
824 , topmost node the literate programming tool will start expanding the web
826 Actually, writing out the expanded source code can be done from any section
828 a piece of code designated as
829 \begin_inset Quotes erd
833 \begin_inset Flex CharStyle:Code
836 \begin_layout Plain Layout
837 <<name of the chunk>>=
843 \begin_inset Quotes erd
846 , with the equal sign), so one literate program file can contain several
847 files with machine source code.
850 \begin_layout Standard
851 \begin_inset listings
855 \begin_layout Plain Layout
857 The purpose of wc is to count lines, words, and/or characters in a list
862 \begin_layout Plain Layout
864 number of lines in a file is ......../more explanations/
867 \begin_layout Plain Layout
871 \begin_layout Plain Layout
873 Here, then, is an overview of the file wc.c that is defined by the noweb
877 \begin_layout Plain Layout
882 \begin_layout Plain Layout
884 <<Header files to include>>
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
912 \begin_layout Plain Layout
916 \begin_layout Plain Layout
918 We must include the standard I/O definitions, since we want to send formatted
922 \begin_layout Plain Layout
924 to stdout and stderr.
927 \begin_layout Plain Layout
929 <<Header files to include>>=
932 \begin_layout Plain Layout
937 \begin_layout Plain Layout
947 \begin_layout Standard
948 Note also that the unraveling of the chunks can be done in any place in
949 the literate program text file, not necessarily in the order they are sequenced
950 in the enclosing chunk, but as is demanded by the logic reflected in the
951 explanatory text that envelops the whole program.
955 \begin_layout Section
956 Program as a Web - Macros are not just section names
959 \begin_layout Standard
960 Macros are not the same as
961 \begin_inset Quotes eld
965 \begin_inset Quotes erd
968 in standard documentation.
969 Literate programming macros can hide any chunk of code behind themselves,
970 and be used inside any low-level machine language operators, often inside
971 logical operators such as
972 \begin_inset Quotes eld
976 \begin_inset Flex CharStyle:Code
979 \begin_layout Plain Layout
986 \begin_inset Quotes erd
990 \begin_inset Quotes eld
994 \begin_inset Flex CharStyle:Code
997 \begin_layout Plain Layout
1004 \begin_inset Quotes erd
1008 \begin_inset Quotes eld
1012 \begin_inset Flex CharStyle:Code
1015 \begin_layout Plain Layout
1022 \begin_inset Quotes erd
1026 This is illustrated by the following snippet of the
1034 \begin_layout Plain Layout
1046 \begin_layout Standard
1047 \begin_inset listings
1051 \begin_layout Plain Layout
1055 \begin_layout Plain Layout
1057 The present chunk, which does the counting that is wc's raison d'etre, was
1061 \begin_layout Plain Layout
1063 the simplest to write.
1064 We look at each character and change state if it begins or ends
1067 \begin_layout Plain Layout
1072 \begin_layout Plain Layout
1076 \begin_layout Plain Layout
1081 \begin_layout Plain Layout
1086 \begin_layout Plain Layout
1088 <<Fill buffer if it is empty; break at end of file>>
1091 \begin_layout Plain Layout
1096 \begin_layout Plain Layout
1098 if (c > ' ' && c < 0177) {
1101 \begin_layout Plain Layout
1103 /* visible ASCII codes */
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
1136 \begin_layout Plain Layout
1143 \begin_layout Plain Layout
1145 else if (c != ' ' && c != '
1150 \begin_layout Plain Layout
1155 \begin_layout Plain Layout
1157 /* c is newline, space, or tab */
1160 \begin_layout Plain Layout
1165 \begin_layout Plain Layout
1175 \begin_layout Standard
1176 In fact, macros can stand for any arbitrary chunk of code or other macros,
1177 and are thus more general than top-down or bottom-up
1178 \begin_inset Quotes eld
1182 \begin_inset Quotes erd
1185 , or than subsectioning.
1186 Knuth says that when he realized this, he began to think of a program as
1195 \begin_layout Plain Layout
1207 \begin_layout Subsection
1208 Order of human logic, not that of the compiler
1211 \begin_layout Standard
1212 In a noweb literate program besides the free order of their exposition,
1213 the chunks behind macros, once introduced with
1214 \begin_inset Quotes eld
1218 \begin_inset Flex CharStyle:Code
1221 \begin_layout Plain Layout
1222 <<\SpecialChar \ldots{}
1229 \begin_inset Quotes erd
1232 , can be grown later in any place in the file by simply writing
1233 \begin_inset Quotes eld
1237 \begin_inset Flex CharStyle:Code
1240 \begin_layout Plain Layout
1241 <<name of the chunk>>=
1247 \begin_inset Quotes erd
1250 and adding more content to it, as the following snippet illustrates.
1254 \begin_layout Plain Layout
1266 \begin_layout Standard
1267 \begin_inset listings
1271 \begin_layout Plain Layout
1273 The grand totals must be initialized to zero at the beginning of the program.
1276 \begin_layout Plain Layout
1278 If we made these variables local to main, we would have to do this initializatio
1282 \begin_layout Plain Layout
1284 explicitly; however, C globals are automatically zeroed.
1286 \begin_inset Quotes eld
1292 \begin_layout Plain Layout
1295 \begin_inset Quotes erd
1301 \begin_layout Plain Layout
1303 <<Global variables>>+=
1306 \begin_layout Plain Layout
1308 long totwordcount, totlinecount,
1311 \begin_layout Plain Layout
1316 \begin_layout Plain Layout
1318 /* total number of words, lines, chars */
1321 \begin_layout Plain Layout
1331 \begin_layout Subsection
1332 Record of the train of thought creates superior documentation
1335 \begin_layout Standard
1336 The documentation for a literate program is produced as part of writing
1338 Instead of comments provided as side notes to source code a literate program
1339 contains the explanation of concepts on each level, with lower level concepts
1340 deferred to their appropriate place, which allows for better communication
1342 The snippets of the literate
1343 \begin_inset Flex CharStyle:Code
1346 \begin_layout Plain Layout
1352 above show how an explanation of the program and its source code are interwoven.
1353 Such exposition of ideas creates the flow of thought that is like a literary
1355 Knuth famously wrote a
1356 \begin_inset Quotes eld
1360 \begin_inset Quotes erd
1363 which explains the code of the computer strategy game Colossal Cave Adventure,
1368 \begin_layout Plain Layout
1369 The game, also known as
1373 , was originally written by Crowther in about 700 lines of FORTRAN code;
1374 Knuth recast it into the WEB idiom.
1375 It is available at literateprogramming.com or on Knuth's website.
1384 \begin_layout Section
1385 Literate programming tools
1388 \begin_layout Standard
1389 The first published literate programming environment was WEB, introduced
1390 by Donald Knuth in 1981 for his TeX typesetting system; it uses Pascal
1391 as its underlying programming language and TeX for typesetting of the documenta
1393 The complete commented TeX source code was published in Knuth's
1397 , volume B of his 5-volume
1399 Computers and Typesetting
1402 Knuth had privately used a literate programming system called DOC as early
1404 He was inspired by the ideas of Pierre-Arnoul de Marneffe
1408 \begin_layout Plain Layout
1409 de Marneffe, Pierre Arnoul (December 1973).
1412 Holon Programming - Report PMAR 73-23
1415 University de Liège, Service d'Informatique.
1421 The free CWEB, written by Knuth and Silvio Levy, is WEB adapted for C and
1422 C++, runs on most operating systems and can produce TeX and PDF documentation.
1426 \begin_layout Standard
1427 Other implementations of the literate programming concept are noweb and
1428 FunnelWeb, both of which are independent of the programming language of
1430 Noweb is well-known for its simplicity: just 2 text markup conventions
1431 and 2 tool invocations are needed to use it, and it allows for text formatting
1432 in HTML rather than going through the TeX system.
1433 FunnelWeb is another program without dependency on TeX which can produce
1434 HTML documentation output.
1435 It has more complicated markup (with
1436 \begin_inset Quotes eld
1440 \begin_inset Flex CharStyle:Code
1443 \begin_layout Plain Layout
1450 \begin_inset Quotes erd
1453 escaping any FunnelWeb command), but has many more flexible options.
1457 \begin_layout Standard
1458 The Leo text editor is an
1462 editor which supports optional noweb and CWEB markup.
1463 The author of Leo actually mixes two different approaches: first, Leo is
1464 an outlining editor, which helps with management of large texts, second,
1465 Leo incorporates some of the ideas of literate programming, which in its
1467 the way it is used by Knuth Web tool and/or tools like
1468 \begin_inset Quotes eld
1472 \begin_inset Quotes erd
1475 ) is possible only with some degree of inventiveness and the use of the
1476 editor in a way not exactly envisioned by its author (in modified @root
1478 However this and other extensions (@file nodes) make outline programming
1479 and text management successful and easy and in some ways similar to literate
1484 \begin_layout Plain Layout
1486 (September 2, 2008).
1488 http://webpages.charter.net/edreamleo/front.html.
1489 Retrieved January 4, 2009.
1497 \begin_layout Standard
1498 The Haskell programming language has native support for semi-literate programmin
1499 g, inspired by CWEB but with a simpler implementation.
1500 When aiming for TeX output, one writes a plain LaTeX file where source
1501 code is marked by a given surrounding environment; LaTeX can be set up
1502 to handle that environment, while the Haskell compiler looks for the right
1503 markers to identify Haskell statements to compile, removing the TeX documentati
1504 on as if they were comments.
1505 However, as described above, this is not literate programming in the sense
1507 Haskell's functional, modular nature
1511 \begin_layout Plain Layout
1512 Hughes, John (January 9, 2002).
1515 Why Functional Programming Matters
1518 Institutionen för Datavetenskap, Chalmers Tekniska Högskola,.
1519 http://www.cs.chalmers.se/
1520 \begin_inset space ~
1523 rjmh/Papers/whyfp.pdf.
1524 Retrieved January 4, 2009.
1529 makes literate programming directly in the language somewhat easier, but
1530 it is not nearly as powerful as one of the a WEB tools where
1531 \begin_inset Quotes eld
1535 \begin_inset Quotes erd
1538 can reorganize in arbitrary ways.
1542 \begin_layout Section
1546 \begin_layout Standard
1547 Sweave - an example of use of the
1548 \begin_inset Quotes eld
1552 \begin_inset Quotes erd
1555 -like Literate Programming tool inside the R language for creation of dynamic
1559 \begin_layout Section
1563 \begin_layout Standard
1568 Literate Programming
1571 , California: Stanford University Center for the Study of Language and
1573 ISBN 978-0937073803.
1574 \begin_inset space ~
1580 \begin_layout Standard
1585 TeX & LaTeX: Drawing and Literate Programming
1590 \begin_inset space ~
1593 (includes software).
1597 \begin_layout Standard
1598 Nørmark, Kurt (August 13, 1998).
1599 "Literate Programming - Issues and Problems".
1600 University of Aalborg.
1601 http://www.cs.aau.dk/
1602 \begin_inset space ~
1605 normark/litpro/issues-and-problems.html.
1606 \begin_inset space ~
1612 \begin_layout Section
1616 \begin_layout Standard
1617 comp.programming.literate FAQ at Internet FAQ Archives
1620 \begin_layout Standard
1621 Literate Programming newsgroup
1624 \begin_layout Standard
1625 LiteratePrograms a literate programming wiki.
1629 \begin_layout Standard
1630 Select A literate programming example using noweb
1633 \begin_layout Standard
1634 Softpanorama page on literate programming
1637 \begin_layout Standard
1638 Haskell literate programming
1641 \begin_layout Standard
1642 Specification of literate programming in the Haskell Report the accepted
1646 \begin_layout Standard
1647 Noweb — A Simple, Extensible Tool for Literate Programming
1650 \begin_layout Standard
1651 Lp4all — A Simple Literate Programming Tool with a wiki-like markup syntax