Ho sentito dire che LaTeX è Turing completo. Ci sono dei programmi scritti in LaTeX?

StackOverflow https://stackoverflow.com/questions/2968411

  •  24-10-2019
  •  | 
  •  

Domanda

E 'possibile fare cose interessanti con quello che sarebbe normalmente essere pensato come lingue di composizione. Ad esempio, è possibile costruire l'insieme di Mandelbrot Utilizzo di PostScript .

Si suggerisce in questa domanda MathOverflow che LaTeX può essere Turing-complete . Ciò implica la capacità di scrivere programmi arbitrari (anche se può non essere facile!). Qualcuno sa di qualsiasi concreto esempio di un tale programma in LaTeX, che fa qualcosa di molto inusuale con la lingua?

È stato utile?

Soluzione

Nel numero 13 di La Monade Reader , Stephen Hicks scrive di implementare la soluzione ad un concorso ICFP (che coinvolge Mars rover navigazione) in TeX, con l'uso abbondante di macro. In modo divertente, l'uscita della soluzione quando comporre è una mappa PostScript del percorso del rover.

Altri suggerimenti

In alternativa, Andrew Greene scrisse un BASIC interprete TeX ( maggiori dettagli ). Questo può contare come un po 'perverso.

La biblioteca pgfmath ancora mi stupisce. Ma su una nota più Turing-correlato: è possibile scrivere una macchina di Turing reale in TeX, come da http://en.literateprograms.org/Turing_machine_simulator_ (LaTeX) . E 'solo un modo ingegnoso di usare espansioni in TeX.

PostScript è Turing completo così, se leggerete manuale sarete stupiti dalla capacità di programmazione generale di esso (almeno, io ero).

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

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

Non sono sicuro se questo si qualifica come programmazione di per sé, ma recentemente ho iniziare a fare qualcosa di un po 'come roba Object Oriented in LaTeX. (Non è necessario conoscere eventuali matematica per seguire il seguente.) Negli ultimi giornali, ho scritto su categorie , che hanno oggetti e morfismi . Dal momento che ci sono stati un bel po 'di quelli, ho voluto uno stile coerente in modo che, per esempio, era un ?? categoria con oggetto tipico C e tipico morfismo c . Poi mi piacerebbe anche avere ?? con D e d . Così ho definisco una "classe", dire "categoria" (è necessario essere un matematico per capire lo scherzo lì), e dichiarare che la C è un esempio di questa classe, e quindi avere accesso a \ ccat, \ cobj, \ CMOR e così via. La ragione per non fare \ gatto {c}, \ obj {c} e \ mor {c}, e così via, è che a volte queste categorie hanno nomi particolari e così dopo aver dichiarato l'istanza, posso modificare il suo nome molto facilmente (semplicemente ridefinire \ ccat - beh, in realtà \ mathccat poiché \ ccat è un wrapper che seleziona \ mathccat in modalità matematica e \ textccat in modalità testo). (Naturalmente, è un po 'più complicato di quanto sopra suggerisce e la roba OO realmente viene in utile quando voglio definire una nuova categoria come una variante di un vecchio (si può anche affrontare il caso in cui il vecchio doesn' t esiste ancora.).)

Anche se non può qualificarsi come programmazione vera e propria, Io lo utilizzo in carte e lo trovo utile - le altre risposte (finora) hanno più della sensazione di mettersi in mostra le funzionalità di LaTeX che di una soluzione ragionevole a un problema pratico.

So di qualcuno che ha scritto la risposta a un ACM contest problema in LaTeX.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top