Escuché que LaTeX es Turing completo. ¿Hay programas escritos en LaTeX?

79

Es posible hacer cosas interesantes con lo que normalmente se consideraría lenguajes de composición tipográfica. Por ejemplo, puede construir el conjunto de Mandelbrot usando postscript .

En esta pregunta de MathOverflow se sugiere que LaTeX puede ser Turing completo . Esto implica la capacidad de escribir programas arbitrarios (¡aunque puede que no sea fácil!). ¿Alguien sabe de algún ejemplo concreto de un programa de este tipo en LaTeX, que hace algo muy inusual con el lenguaje?

ire_and_curses
fuente
88
Sabes, Iba a tener un fin de semana jugando afuera. ¿Sabes, uno de esos que se aleja de una computadora los fines de semana? Luego ve y publica esta pregunta. Por eso no puedo tener cosas bonitas.
Wheaties
1
/ d {def} def / u {dup} d [0-185 u 0300 u] concat / q 5e-3 d / m {mul} d / z {A um B um} d / r {rlineto} d / X -2 q 1 {d / Y -2 q 2 {d / A 0 d / B 0 d 64-1 1 {/ f intercambiar d / BA / A z sub X agregar d B 2 mm Y agregar dz agregar 4 gt {exit} if / f 64 d} for f 64 div setgray XY moveto 0 q neg u 0 0 qu 0 rrrr fill / Y} for / X} for showpage
DNA

Respuestas:

84

En el número 13 de The Monad Reader , Stephen Hicks escribe sobre la implementación de la solución a un concurso ICFP (que involucra la navegación de un rover en Marte) en TeX, con un uso copioso de macros. Curiosamente, la salida de la solución cuando se compone es un mapa posdata de la ruta del rover.

Derrick Turk
fuente
10

La pgfmathbiblioteca todavía me sorprende. Pero en una nota más relacionada con Turing: es posible escribir una máquina de Turing real en TeX, según http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Es solo una forma ingeniosa de usar expansiones en TeX.

PostScript también es Turing completo, si lee el manual , se sorprenderá de sus capacidades generales de programación (al menos yo lo estaba).

Pieter
fuente
1
La gente ha escrito LISP en PostScript. (Lea la oración anterior hasta que haya captado completamente la extraña belleza de tal construcción).
new123456
El manual PLRM mencionado es ahora un vínculo roto, prueba este lugar adobe.com/products/postscript/pdfs/PLRM.pdf
Aaron Robson
9

\ def \ K # 1 # 2 {# 2}

\ def \ S # 1 # 2 # 3 {# 1 # 3 {# 2 # 3}}

Mateusz Grotek
fuente
4
finalmente alguien que tenga sentido
user1129682
¿Qué se supone que debe hacer esto?
URL
6

No estoy seguro de si esto califica como programación per se, pero recientemente comencé a hacer algo un poco como cosas orientadas a objetos en LaTeX. (No es necesario saber nada de matemáticas para seguir lo siguiente). En artículos recientes, he estado escribiendo sobre categorías que tienen objetos y morfismos . Como ha habido bastantes de esos, quería un estilo coherente para que, digamos, 𝒞 fuera una categoría con el objeto C típico y el morfismo c típico . Entonces también tendría 𝒟 con D y d. Entonces defino una "clase", digo "categoría" (necesitas ser un matemático para entender la broma), y declaro que C es una instancia de esta clase, y luego tengo acceso a \ ccat, \ cobj, \ cmor Etcétera. La razón para no hacer \ cat {c}, \ obj {c} y \ mor {c}, y así sucesivamente, es que a veces estas categorías tienen nombres especiales y, por tanto, después de declarar la instancia, puedo modificar su nombre muy fácilmente (simplemente redefine \ ccat - bueno, en realidad \ mathccat ya que \ ccat es un contenedor que selecciona \ mathccat en modo matemático y \ textccat en modo texto). (Por supuesto, es un poco más complicado de lo que sugiere lo anterior y las cosas de OO realmente son útiles cuando quiero definir una nueva categoría como una variante de una anterior (incluso puede lidiar con el caso en el que la anterior no lo hace) t existe todavía.).)

Aunque puede que no califique como programación real, lo estoy usando en artículos y lo encuentro útil: las otras respuestas (hasta ahora) tienen más la sensación de mostrar las capacidades de LaTeX que de una solución sensata a un problema práctico.

Andrew Stacey
fuente
¡Me encantaría ver cómo estás haciendo esto!
Nate Stemen
1

Sé de alguien que escribió la respuesta a un problema de concurso de ACM en LaTeX.

Ámbar
fuente
Hm ... desafortunadamente, no tengo el código por ahí, y he perdido el contacto con la persona que lo escribió. : /
Ámbar