web-dev-qa-db-fra.com

J'ai entendu dire que LaTeX est Turing complet. Existe-t-il des programmes écrits en LaTeX?

Il est possible de faire des choses intéressantes avec ce qui serait normalement considéré comme des langues de composition. Par exemple, vous pouvez construire l'ensemble Mandelbrot en utilisant postscript .

Il est suggéré dans cette question MathOverflow que LaTeX peut être Turing-complete . Cela implique la possibilité d'écrire des programmes arbitraires (bien que cela ne soit pas facile!). Quelqu'un connaît-il un exemple concret d'un tel programme dans LaTeX, qui fait quelque chose de très inhabituel avec le langage?

70
ire_and_curses

Dans le numéro 13 de The Monad Reader , Stephen Hicks écrit sur l'implémentation de la solution à un concours ICFP (impliquant la navigation sur Mars rover) dans TeX, avec une utilisation abondante des macros. De manière amusante, la sortie de la solution lors de la composition est une carte postscript du chemin du rover.

81
Derrick Turk

Alternativement, Andrew Greene a écrit n interpréteur BASIC dans TeX ( plus de détails ). Cela peut être considéré comme légèrement pervers.

24
Norman Gray

La bibliothèque pgfmath m'étonne toujours. Mais sur une note plus liée à Turing: il est possible d'écrire une machine Turing réelle dans TeX, selon http://en.literateprograms.org/Turing_machine_simulator_ (LaTeX) . C'est juste une façon astucieuse d'utiliser les extensions dans TeX.

PostScript est également complet, si vous lisez le manuel vous serez étonné par les capacités générales de programmation de celui-ci (du moins, je l'étais).

8
Pieter

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

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

7
Mateusz Grotek

Je ne sais pas si cela se qualifie comme programmation en soi, mais j'ai récemment commencé à faire quelque chose un peu comme des trucs orientés objet dans LaTeX. (Vous n'avez pas besoin de connaître les mathématiques pour suivre ce qui suit.) Dans des articles récents, j'ai écrit sur categories, qui ont objets et morphismes. Puisqu'il y en a eu plusieurs, je voulais un style cohérent pour que, disons, ???? soit une catégorie avec un objet typique C et un morphisme typique - c. Ensuite, j'aurais aussi ???? avec D et d. Je définis donc une "classe", disons "catégorie" (vous devez être un mathématicien pour comprendre la blague là-bas), et déclarer que C est une instance de cette classe, puis avoir accès à\ccat,\cobj,\cmor et ainsi de suite. La raison de ne pas faire\cat {c},\obj {c} et\mor {c}, et ainsi de suite, est que parfois ces catégories ont des noms spéciaux et donc après avoir déclaré l'instance, je peux modifier son nom très facilement (redéfinissez simplement\ccat - enfin, en fait\mathccat puisque\ccat est un wrapper qui sélectionne\mathccat en mode mathématique et\textccat en mode texte). (Bien sûr, c'est un peu plus compliqué que ce qui précède et les choses OO sont vraiment utiles lorsque je veux définir une nouvelle catégorie comme une variante d'une ancienne (elle peut même traiter avec le cas où l'ancien n'existe pas encore.).)

Bien qu'il ne puisse pas être qualifié de programmation réelle, je l'utilise dans des articles et je le trouve utile - les autres réponses (jusqu'à présent) ont plus l'impression de montrer les capacités de LaTeX que d'une solution sensée à un problème pratique.

5
Loop Space

Je connais quelqu'un qui a écrit la réponse à n problème de concours ACM dans LaTeX.

1
Amber