
La programación literaria ( PL ) es un paradigma de programación introducido en 1984 por Donald Knuth en el que un programa informático se presenta como una explicación de su funcionamiento en un lenguaje natural , como el inglés, intercalado (incrustado) con fragmentos de macros y código fuente tradicional , a partir del cual se puede generar código fuente compilable . [ 1 ] Este enfoque se utiliza de forma rutinaria en la computación científica y en la ciencia de datos para la investigación reproducible y el acceso abierto . [ 2 ] Millones de programadores utilizan hoy en día herramientas de programación literaria. [ 3 ]
El paradigma de programación literaria, tal como lo concibió Donald Knuth, representa un alejamiento de la escritura de programas informáticos en el modo y orden impuestos por el compilador , y en su lugar proporciona a los programadores macros para desarrollar programas en el orden que exige la lógica y el flujo de sus pensamientos. [ 4 ] Los programas literarios se escriben como una exposición de la lógica en un lenguaje más natural en el que se utilizan macros para ocultar abstracciones y el código fuente tradicional , más como el texto de un ensayo .
Las herramientas de programación literaria se utilizan para obtener dos representaciones de un archivo fuente: una comprensible para un compilador o intérprete , el código "enredado", y otra para visualizar como documentación formateada , que se dice que está "tejida" a partir del código fuente literario. [ 5 ] Si bien la primera generación de herramientas de programación literaria era específica de un lenguaje de programación , las posteriores son independientes del lenguaje y existen más allá de los lenguajes de programación individuales.
Historia y filosofía
La programación literaria fue introducida por primera vez en 1984 por Donald Knuth, quien la concibió para crear programas que fueran literatura adecuada para los seres humanos. La implementó en la Universidad de Stanford como parte de su investigación sobre algoritmos y tipografía digital . La implementación se denominó " WEB " porque creía que era una de las pocas palabras de tres letras en inglés que aún no se había aplicado a la informática. [ 6 ] Sin embargo, se asemeja a la naturaleza compleja del software delicadamente ensamblado a partir de materiales simples. [ 1 ] La práctica de la programación literaria ha experimentado un importante resurgimiento en la década de 2010 con el uso de cuadernos computacionales , especialmente en la ciencia de datos .
Concepto
La programación literaria consiste en escribir la lógica del programa en lenguaje natural, incluyendo fragmentos de código y macros (separados por un marcado primitivo). Las macros en un archivo fuente literario son simplemente frases explicativas o descriptivas en lenguaje natural que describen abstracciones creadas durante la resolución del problema de programación, ocultando fragmentos de código o macros de bajo nivel. Estas macros son similares a los algoritmos en pseudocódigo que se utilizan habitualmente en la enseñanza de la informática . Estas frases explicativas arbitrarias se convierten en operadores nuevos y precisos, creados sobre la marcha por el programador, formando un metalenguaje sobre el lenguaje de programación subyacente.
Un preprocesador se utiliza para sustituir jerarquías arbitrarias, o más bien "redes interconectadas" de macros, [ 7 ] para producir el código fuente compilable con un comando ("tangle") y la documentación con otro ("weave"). El preprocesador también permite escribir el contenido de las macros y añadir código a las ya creadas en cualquier parte del texto del archivo fuente del programa, eliminando así la necesidad de tener en cuenta las restricciones impuestas por los lenguajes de programación tradicionales o de interrumpir el flujo de pensamiento.
Ventajas
Según Knuth, [ 8 ] [ 9 ] la programación literaria proporciona programas de mayor calidad, ya que obliga a los programadores a expresar explícitamente las ideas que subyacen al programa, haciendo más evidentes las decisiones de diseño mal concebidas. Knuth también afirma que la programación literaria proporciona un sistema de documentación de primera categoría, que no es un añadido, sino que se desarrolla de forma natural durante el proceso de exposición de las ideas durante la creación de un programa. [ 10 ] La documentación resultante permite al autor retomar sus propios procesos de pensamiento en cualquier momento posterior y facilita a otros programadores la comprensión de la estructura del programa. Esto difiere de la documentación tradicional, en la que al programador se le presenta el código fuente siguiendo un orden impuesto por el compilador y debe descifrar el proceso de pensamiento que subyace al programa a partir del código y sus comentarios asociados. También se afirma que las capacidades de metalenguaje de la programación literaria facilitan el pensamiento, proporcionando una visión más general del código y aumentando el número de conceptos que la mente puede retener y procesar con éxito. La aplicabilidad del concepto a la programación a gran escala, la de programas de grado comercial, se demuestra mediante una edición de código TeX como un programa legible. [ 8 ]
Knuth también afirma que la programación literaria puede conducir a una fácil portabilidad del software a múltiples entornos, e incluso cita la implementación de TeX como ejemplo. [ 11 ]
Contraste con la generación de documentación
La programación literaria se malinterpreta con frecuencia [ 12 ] como referida únicamente a la documentación formateada producida a partir de un archivo común con código fuente y comentarios —lo que propiamente se denomina generación de documentación— o a los extensos comentarios incluidos con el código. Esto es lo contrario de la programación literaria: el código bien documentado o la documentación extraída del código sigue la estructura del código, con la documentación integrada en él; mientras que en la programación literaria, el código está integrado en la documentación, y el código sigue la estructura de la documentación.
Esta idea errónea ha llevado a afirmar que las herramientas de extracción de comentarios, como los sistemas Perl Plain Old Documentation o Java Javadoc , son "herramientas de programación literaria". Sin embargo, dado que estas herramientas no implementan la "red de conceptos abstractos" que se esconde tras el sistema de macros de lenguaje natural, ni proporcionan la capacidad de cambiar el orden del código fuente de una secuencia impuesta por la máquina a una que resulte conveniente para la mente humana, no pueden considerarse propiamente herramientas de programación literaria en el sentido que les da Knuth. [ 12 ] [ 13 ]
Flujo de trabajo
La implementación de la programación literaria consta de dos pasos:
- Elaboración: Generación de un documento completo sobre el programa y su mantenimiento.
- Tangling: Generación de código ejecutable por máquina
El tejido y el entrelazado se realizan sobre la misma fuente para que sean coherentes entre sí.
Ejemplo
Un ejemplo clásico de programación literaria es la implementación literaria del programa estándar de conteo de palabras de Unixwc . Knuth presentó una versión CWEB de este ejemplo en el capítulo 12 de su libro Literate Programming . El mismo ejemplo fue posteriormente reescrito para la herramienta de programación literaria noweb . [ 14 ] Este ejemplo ilustra bien los elementos básicos de la programación literaria.
Creación de macros
El siguiente fragmento del wcprograma literario [ 14 ] muestra cómo se utilizan frases descriptivas arbitrarias en un lenguaje natural en un programa literario para crear macros, que actúan como nuevos "operadores" en el lenguaje de programación literario y ocultan bloques de código u otras macros. La notación de marcado consiste en corchetes angulares dobles ( ) que indican macros. El símbolo que, en un archivo noweb, indica el comienzo de un bloque de documentación. El símbolo representa la "raíz", el nodo superior desde el que la herramienta de programación literaria comenzará a expandir la red de macros. De hecho, la escritura del código fuente expandido se puede hacer desde cualquier sección o subsección (es decir, un fragmento de código designado como , con el signo igual), por lo que un archivo de programa literario puede contener varios archivos con código fuente de máquina.<<...>>@<<*>><<name of the chunk>>=
El propósito de wc es contar líneas , palabras y / o caracteres en una lista de archivos . El número de líneas en un archivo es ........ / más explicaciones /Aquí , entonces , hay una descripción general del archivo wc.c que es definido por el programa noweb wc.nw : << * >> = << Archivos de cabecera a incluir >> << Definiciones >> << Variables globales >> << Funciones >> << El programa principal >> @Debemos incluir las definiciones de E / S estándar , ya que queremos enviar la salida formateada a stdout y stderr . << Archivos de cabecera a incluir >>= #include <stdio.h> @El desenlace de los fragmentos puede realizarse en cualquier parte del archivo de texto del programa, no necesariamente en el orden en que aparecen en el fragmento que los contiene, sino según lo exija la lógica reflejada en el texto explicativo que engloba todo el programa.
Programa como una web
Las macros no son lo mismo que los "nombres de sección" en la documentación estándar. Las macros de programación literaria ocultan el código real y se pueden usar dentro de cualquier operador de lenguaje máquina de bajo nivel, a menudo dentro de operadores lógicos como if, whileo case. Esto se puede ver en el siguiente wcprograma literario. [ 14 ]
El fragmento actual , que realiza el conteo , fue en realidad uno de los más sencillos de escribir . Analizamos cada carácter y cambiamos de estado si comienza o termina una palabra .<< Escanear archivo >>= while ( 1 ) { << Llenar el búfer si está vacío ; salir al final del archivo >> c = * ptr ++ ; if ( c > ' ' && c < 0177 ) { /* códigos ASCII visibles */ if ( ! in_word ) { word_count ++ ; in_word = 1 ; } continue ; } if ( c == ' \n' ) line_count ++ ; else if ( c != ' ' && c != '\t' ) continue ; in_word = 0 ; /* c es nueva línea, espacio o tabulación */ } @Las macros representan cualquier fragmento de código u otras macros, y son más generales que la segmentación de arriba hacia abajo o de abajo hacia arriba, o que la subsección. Donald Knuth dijo que cuando se dio cuenta de esto, comenzó a pensar en un programa como una red de varias partes. [ 1 ]
El orden de la lógica humana, no el del compilador.
En un programa sin alfabetización web, además del orden libre de su exposición, los fragmentos detrás de las macros, una vez introducidos con , pueden ampliarse posteriormente en cualquier lugar del archivo simplemente escribiendo y añadiendo más contenido, como ilustra el siguiente fragmento ( es añadido por el formateador de documentos para facilitar la lectura y no está en el código). [ 14 ]<<...>>=<<name of the chunk>>=+
Los totales generales deben inicializarse a cero al comienzo del programa. Si hiciéramos que estas variables fueran locales a main, tendríamos que hacer esta inicialización. explícitamente; sin embargo, las variables globales de C se inicializan automáticamente a cero. (O mejor dicho, ``estáticamente puesto a cero.' ' (¿Lo entiendes?) < < Variables globales > > +=longtot_word_count,tot_line_count,recuento_total_de_caracteres;/* total number of words, lines, chars */@
Registro del hilo de pensamiento
La documentación de un programa escrito se genera como parte del proceso de escritura del programa. En lugar de comentarios como notas al margen del código fuente, un programa escrito contiene la explicación de conceptos en cada nivel, con los conceptos de nivel inferior ubicados en el lugar correspondiente, lo que facilita una mejor comunicación del pensamiento. Los fragmentos de código escritos wcanteriores muestran cómo se entrelazan la explicación del programa y su código fuente. Esta exposición de ideas crea un flujo de pensamiento similar al de una obra literaria. Knuth escribió una «novela» que explica el código del juego de ficción interactiva Colossal Cave Adventure . [ 15 ]
Ejemplos notables
- TeX y METAFONT , los lenguajes de composición tipográfica y descripción de fuentes de Knuth, respectivamente. Escritos en WEB , fueron pruebas de concepto de la programación literaria.
- El libro " Renderizado basado en la física " [ 16 ] describe tanto la teoría matemática que sustenta un sistema moderno de renderizado fotorrealista como su implementación práctica. Este libro ganó un premio Óscar.
- Comprender MP3, [ 17 ] una implementación completa de flujos de bits MPEG que también es un excelente tutorial. (Véase también los programas literarios de Ruckert relacionados con HINT. [ 18 ] )
- Principia Softwarica, [ 19 ] una versión legible del Plan 9 de Bell Labs .
- La Stanford GraphBase, [ 20 ] 30 ensayos cortos de CWEB de Knuth que definen una plataforma de computación combinatoria, describen algoritmos y estructuras de datos de última generación y proporcionan ejemplos de su uso.
- MMIXware, [ 21 ] Software de Knuth para admitir la programación MMIX y ejecutar simulaciones en diferentes arquitecturas.
- Interfaces e implementaciones de C, [ 22 ] una demostración de la metodología de diseño titular en 24 ejemplos.
- Un compilador C reorientable, [ 23 ] describe el pequeño compilador C LCC .
- Estructuras de datos y algoritmos en C++: Introducción de bolsillo, [ 24 ] un recorrido pedagógico conciso.
- Inform , un lenguaje y sistema para escribir ficción interactiva. Uno de los programas más grandes hasta la fecha, Inform está escrito en inweb [ 25 ] (un ejemplo notable en sí mismo).
- Axiom , que evolucionó a partir de Scratchpad, un sistema de álgebra computacional desarrollado por IBM, está siendo desarrollado actualmente por Tim Daly, uno de los desarrolladores de Scratchpad. Axiom está escrito completamente como un programa literario. [ 26 ] [ 27 ]
Prácticas de programación alfabetizadas
El primer entorno de programación literaria publicado fue WEB , presentado por Knuth en 1981 para su sistema de composición tipográfica TeX ; utiliza Pascal como lenguaje de programación subyacente y TeX para la composición tipográfica de la documentación. El código fuente TeX completo y comentado se publicó en TeX: The program de Knuth , volumen B de su obra de 5 volúmenes Computers and Typesetting . Knuth había utilizado en privado un sistema de programación literaria llamado DOC ya en 1979. Se inspiró en las ideas de Pierre-Arnoul de Marneffe . [ 28 ] El CWEB gratuito , escrito por Knuth y Silvio Levy, es WEB adaptado para C y C++ , se ejecuta en la mayoría de los sistemas operativos y puede producir documentación TeX y PDF .
Existen diversas implementaciones del concepto de programación literaria, como se detalla a continuación. Muchas de las más recientes carecen de macros y, por lo tanto, no se ajustan al principio de lógica humana , lo que las convierte en herramientas "semiliterarias". Sin embargo, permiten la ejecución celular del código, lo que las asemeja más a herramientas de programación exploratoria .
Otras herramientas útiles incluyen:
- El editor de texto Leo es un editor de esquemas que admite el marcado opcional noweb y CWEB. El autor de Leo combina dos enfoques diferentes: primero, Leo es un editor de esquemas que facilita la gestión de textos extensos; segundo, Leo incorpora algunas ideas de la programación literaria, que en su forma pura (es decir, como la utiliza la herramienta web Knuth o herramientas como "noweb") solo es posible con cierto grado de inventiva y el uso del editor de una manera no prevista exactamente por su autor (en nodos @root modificados). Sin embargo, esta y otras extensiones (@file nodes) hacen que la programación de esquemas y la gestión de textos sean exitosas y fáciles, y en cierto modo similares a la programación literaria. [ 40 ]
- El lenguaje Haskell cuenta con soporte nativo para programación semiliteraria. El compilador-intérprete admite dos extensiones de archivo:
.hsy.lhs; esta última corresponde a Haskell literario. Los scripts literarios pueden ser texto fuente LaTeX completo y, al mismo tiempo, pueden compilarse sin modificaciones, ya que el intérprete solo compila el texto en un entorno de código, por ejemplo:% aquí texto que describe la función: \begin { code } fact 0 = 1 fact ( n + 1 ) = ( n + 1 ) * fact n \end { code } aquí más texto
El código también puede marcarse al estilo de Richard Bird, comenzando cada línea con un símbolo de mayor que y un espacio, y precediendo y terminando el fragmento de código con líneas en blanco.
El
listingspaquete LaTeX proporciona unlstlistingentorno que se puede utilizar para embellecer el código fuente. Se puede usar para definir uncodeentorno que se utilizará dentro de Haskell para imprimir los símbolos de la siguiente manera:\newenvironment { code }{ \lstlistings [language=Haskell] }{ \endlstlistings }\ begin { code } comp :: ( beta - > gamma ) -> ( alpha - > beta ) -> ( alpha - > gamma ) ( g`comp`f ) x = g ( f x ) \end { code }
que se puede configurar para producir:
Aunque el paquete no proporciona ningún medio para organizar fragmentos de código, el código fuente de LaTeX se puede dividir en diferentes archivos. [ 41 ] - El sistema de programación literaria Web 68 utilizaba ALGOL 68 como lenguaje subyacente, aunque no había nada en el preprocesador 'tang' que forzara dicho uso. [ 42 ]
- El mecanismo de personalización de la Iniciativa de Codificación de Texto (TEI), que permite restringir, modificar o extender el esquema TEI, posibilita la combinación de documentación en prosa con fragmentos de especificación de esquema en el formato One Document Does-it-all (Un documento lo hace todo ). A partir de esta documentación en prosa, se pueden generar esquemas y flujos de trabajo de modelos de procesamiento, y el paradigma de Programación Literaria de Knuth se cita como inspiración para esta forma de trabajar. [ 43 ]
Véase también
- Generador de documentación : lo opuesto a la programación literaria, donde la documentación está integrada y se genera a partir del código fuente.
- Interfaz de cuaderno : entorno de cuaderno virtual utilizado para la programación literaria.
- Sweave y Knitr : ejemplos del uso de la herramienta de programación literaria tipo "noweb" dentro del lenguaje R para la creación de informes estadísticos dinámicos.
- Código autodocumentado : código fuente que se puede entender fácilmente sin necesidad de documentación.
- Codificación de vibraciones
Referencias
- 1 2 3 v w x y z Knuth, Donald E. (1984). "Literate Programming" (PDF) . The Computer Journal . 27 (2). British Computer Society : 97–111 . doi : 10.1093/comjnl/27.2.97 . Recuperado el 4 de enero de 2009 .
- ↑ Schulte, Eric (2012). "Un entorno informático multilingüe para la programación literaria y la investigación reproducible" (PDF) . Journal of Statistical Software . 46 (3). doi : 10.18637/jss.v046.i03 . Archivado (PDF) del original el 9 de noviembre de 2014. Recuperado el 30 de mayo de 2020 .
- ↑ Kery, Mary Beth (abril de 2018). "La historia en el cuaderno: ciencia de datos exploratoria mediante una herramienta de programación literaria". CHI '18: Actas de la Conferencia CHI de 2018 sobre factores humanos en sistemas informáticos . Association for Computing Machinery . págs. 1–11 . doi : 10.1145/3173574.3173748 .
- ↑
Tenía la impresión de que los enfoques descendente y ascendente eran metodologías opuestas: una más adecuada para la exposición de programas y la otra para su creación. Sin embargo, tras adquirir experiencia con la web, me he dado cuenta de que no es necesario elegir de una vez por todas entre ambos enfoques, ya que un programa se concibe mejor como una red que como un árbol. Si bien existe una estructura jerárquica, lo más importante de un programa son sus relaciones estructurales. Un software complejo se compone de partes simples y relaciones simples entre ellas; la tarea del programador consiste en enunciar esas partes y esas relaciones en el orden que mejor facilite la comprensión humana, no en un orden rígidamente determinado como el descendente o el ascendente.
— Donald E. Knuth , Programación Literaria [1]
- ↑ Si uno recuerda que la primera versión de la herramienta se llamaba WEB, la divertida referencia literaria oculta por Knuth en estos nombres se vuelve obvia: "Oh, qué enredada red tejemos cuando practicamos el engaño por primera vez" — Sir Walter Scott , en el Canto VI, Estrofa 17 de Marmion (1808), un poema épico sobre la Batalla de Flodden en 1513. – la cita real apareció como epígrafe en un artículo de mayo de 1986 de Jon Bentley y Donald Knuth en una de las columnas clásicas "Programming Pearls" en Communications of the ACM , vol. 29, n.° 5, pág. 365.
- ↑ "Programación Literaria" (PDF) . Archive.ComputerHistory.org . Consultado el 3 de junio de 2019 .
- ↑
Las macros de WEB pueden tener como máximo un parámetro. De nuevo, lo hice por simplicidad, ya que observé que la mayoría de las aplicaciones con múltiples parámetros se podían reducir al caso de un solo parámetro. Por ejemplo, supongamos que queremos definir algo como [ejemplo omitido] ... En otras palabras, el nombre de una macro puede ser útil como parámetro de otra macro.
— Donald E. Knuth , Programación Literaria [1]
- 1 2 Knuth, Donald E. ; Binstock, Andrew (25 de abril de 2008). "Entrevista con Donald Knuth" . Recuperado el 4 de enero de 2009. Sin
embargo, para mí, la programación literaria es sin duda lo más importante que surgió del proyecto
TeX
. No solo me ha permitido escribir y mantener programas más rápido y de forma más fiable que nunca, y ha sido una de mis mayores fuentes de alegría desde la década de 1980, sino que en ocasiones ha sido indispensable. Algunos de mis programas principales, como el metasimulador
MMIX
, no podrían haberse escrito con ninguna otra metodología que yo conozca. La complejidad era simplemente demasiado abrumadora para mi cerebro limitado; sin la programación literaria, toda la empresa habría fracasado estrepitosamente.
... La programación literaria es lo que necesitas para elevarte por encima del nivel ordinario de logros.
- ↑
Otra cosa sorprendente que aprendí al usar WEB fue que los lenguajes de programación tradicionales me habían llevado a escribir programas de menor calidad, aunque no me había dado cuenta. Mi idea original era que WEB sería simplemente una herramienta de documentación, pero descubrí que mis programas WEB eran mejores que los que había estado escribiendo en otros lenguajes.
— Donald E. Knuth , Programación Literaria [1]
- ↑
Así, el lenguaje WEB permite expresar programas en un orden de "flujo de conciencia" . TANGLE es capaz de reorganizarlo todo en la estructura que exige un compilador de PASCAL. Esta característica de WEB es quizás su mayor ventaja; hace que un programa escrito en WEB sea mucho más legible que el mismo programa escrito exclusivamente en PASCAL, incluso si este último está bien comentado. Y el hecho de que no haya necesidad de obsesionarse con la cuestión de arriba hacia abajo frente a abajo hacia arriba, ya que un programador ahora puede ver un programa extenso como una red que se puede explorar en un orden psicológicamente correcto , es quizás la mayor lección que he aprendido de mis experiencias recientes.
— Donald E. Knuth , Programación Literaria [1]
- ↑ "«Historia oral de Donald Knuth: una entrevista con Ed Feigenbaum» (PDF) . Archive.ComputerHistory.org . Consultado el 7 de diciembre de 2018 .
- 1 2 Dominus, Mark-Jason (20 de marzo de 2000). "POD no es programación literaria" . Perl.com . Archivado del original el 2 de enero de 2009.
- ↑
Elegí el nombre WEB en parte porque era una de las pocas palabras de tres letras en inglés que aún no se había aplicado a la informática. Pero con el tiempo, me ha gustado mucho, porque creo que un programa informático complejo se entiende mejor como una red cuidadosamente construida a partir de elementos sencillos. Comprendemos un sistema complejo al entender sus partes simples y las relaciones simples entre esas partes y sus vecinas inmediatas. Si describimos un programa como una red de ideas, podemos enfatizar sus propiedades estructurales de una manera natural y satisfactoria.
— Donald E. Knuth , Programación Literaria [1]
- 1 2 3 4 Ramsey, Norman (13 de mayo de 2008). "Un ejemplo de noweb" . Recuperado el 4 de enero de 2009 .
- ↑ El juego, también conocido como ADVENT , fue escrito originalmente por Crowther en aproximadamente 700 líneas de código FORTRAN; Knuth lo adaptó al lenguaje WEB. Está disponible en literateprogramming.com o en el sitio web de Knuth. Archivado el 20 de agosto de 2008 en Wayback Machine .
- ↑ "Renderizado basado en la física: de la teoría a la implementación" . pbr-book.org . Consultado el 3 de julio de 2026 .
- ↑ "Página principal de Comprensión de MP3" . hint.userweb.mwn.de . Consultado el 3 de julio de 2026 .
- ^ "Prof. Dr. Martin Ruckert - Página de inicio" . sugerencia.userweb.mwn.de . Consultado el 3 de julio de 2026 .
- ↑ "Principia Softwarica" . principia-softwarica.org . Consultado el 3 de julio de 2026 .
- ↑ "Knuth: The Stanford GraphBase" . cs.stanford.edu . Consultado el 3 de julio de 2026 .
- ↑ "Página principal de MMIX" . mmix.cs.hm.edu . Consultado el 3 de julio de 2026 .
- ↑ "Interfaces e implementaciones de C" . drh.github.io . Consultado el 3 de julio de 2026 .
- ↑ "lcc, un compilador reorientable para ANSI C" . drh.github.io . Consultado el 3 de julio de 2026 .
- ↑ "Estructuras de datos y algoritmos : Introducción de bolsillo" . Amazon.com . Consultado el 4 de julio de 2026 .
- ↑ "Bienvenido a la fuente Inweb" .
- ↑ Page, William S. (septiembre de 2007). "AXIOM: sistema de álgebra computacional de código abierto" . ACM Communications in Computer Algebra . 41 (3): 114. doi : 10.1145/1358190.1358206 . ISSN 1932-2240 .
- ↑ Jenks, Richard D.; Sutor, Robert S. (1992). Axiom: el sistema de computación científica . Nueva York : Downer's Grove, Ill., EE. UU.: Springer-Verlag; Comercializado y distribuido por Numerical Algorithms Group. ISBN 978-0-387-97855-0.
- ^ de Marneffe, Pierre Arnoul (diciembre de 1973). Programación de holones: una encuesta (informe). Universidad de Lieja , Servicio de Informática. pag. 135 – vía GitHub .
- ↑ "Introducción a Babel" . Orgmode.org . Consultado el 4 de julio de 2026 .
- ↑ "Idiomas Babel: redirección" . OrgMode.org .
- ↑ "Introducción a Babel" . Orgmode.org . Consultado el 4 de julio de 2026 .
- ↑ Ashkenas, Jeremy. "Literate CoffeeScript" . Consultado el 13 de noviembre de 2014 .
- ↑ Hitos en Ciencias de la Computación y Tecnologías de la Información por Edwin D. Reilly, pág. 157.
- ↑ "Cuadernos Wolfram" . Wolfram.com . Consultado el 28 de noviembre de 2018 .
- ↑ «Agda alfabetizada» . Wikia Agda . Consultado el 26 de marzo de 2017 .
- ↑ Leisch, Friedrich (2002). "Sweave, Parte I: Mezclando R y LaTeX: Una breve introducción al formato de archivo Sweave y las funciones correspondientes de R" (PDF) . R News . 2 (3): 28–31 . Recuperado el 22 de enero de 2012 .
- ↑ Pineda-Krch, Mario (17 de enero de 2011). "The Joy of Sweave – A Beginner's Guide to Reproducible Research with Sweave" (PDF) . Consultado el 22 de enero de 2012 .
- ↑ Xie, Yihui (2015). Documentos dinámicos con R y knitr, 2.ª edición . Chapman & Hall/CRC. ISBN 9781498716963.
- ↑ Xie, Yihui. "knitr: Una herramienta de propósito general para la generación dinámica de informes en R" (PDF) – vía GitHub .
- ↑ Ream, Edward K. (2 de septiembre de 2008). "Página principal de Leo" . Recuperado el 3 de abril de 2015 .
- ↑ Consulte el manual de listados para obtener una descripción general.
- ↑ Mountbatten, Sian. "Web 68: Programación literaria con ALGOL 68" . Archivado del original el 20 de enero de 2013. Recuperado el 1 de enero de 2013 .
- ↑ "Directrices TEI" . TEI-C.org . Consorcio TEI. Archivado del original el 22 de agosto de 2018. Consultado el 23 de agosto de 2018 .
Lecturas adicionales
- Sewell, Wayne (1989). "Tejiendo un programa: Programación literaria en la web" . Van Nostrand Reinhold. ISBN 0-442-31946-0.
- Knuth, Donald E. (1992). Programación alfabetizada . Centro para el Estudio del Lenguaje y la Información de la Universidad de Stanford . ISBN 978-0-937073-80-3.
- Gurari, Eitan M. (1994). TeX y LaTeX: Dibujo y programación literaria . McGraw Hill. ISBN 0-07-911616-7.(incluye software)
- Nørmark, Kurt (13 de agosto de 1998). "Programación alfabetizada: cuestiones y problemas" . Universidad de Aalborg .
- Schulte, Eric (enero de 2012). "Un entorno informático multilingüe para la programación literaria y la investigación reproducible" (PDF) . Journal of Statistical Software . Vol. 46, n.º 3. doi : 10.18637/jss.v046.i03 .
- Mall, Daniel. "Programación literaria" .
- Walsh, Norman (15 de octubre de 2002). Programación literaria en XML . XML 2002. CiteSeerX 10.1.1.537.6728 . Archivado del original el 11 de mayo de 2008.
Enlaces externos
- AlfabetizadoProgramación en WikiWikiWeb
- Preguntas frecuentes sobre programación alfabetizada en CTAN
- Programación alfabetizada
- Introducciones relacionadas con la informática en 1981
- paradigmas de programación