Słyszałem, że LaTeX jest kompletny w Turingu. Czy są jakieś programy napisane w LaTeX?

79

Możliwe jest robienie interesujących rzeczy za pomocą języków, które zwykle są uważane za języki składu. Na przykład, możesz skonstruować zbiór Mandelbrota używając PostScript .

W tym pytaniu MathOverflow sugeruje się, że LaTeX może być kompletny w Turingu . Oznacza to możliwość pisania dowolnych programów (chociaż może to nie być łatwe!). Czy ktoś zna jakiś konkretny przykład takiego programu w LaTeX, który robi coś bardzo nietypowego z językiem?

ire_and_curses
źródło
88
Wiesz, MIAŁEM spędzić weekend na zewnątrz. Wiesz, jeden z tych z dala od komputera w weekendy? Następnie idź i zadaj to pytanie. Dlatego nie mogę mieć fajnych rzeczy.
pszenicy
1
/ d {def} def / u {dup} d [0 -185 u 0 300 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 wymiana d / BA / A z sub X dodaj d B 2 mm Y dodaj dz dodaj 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

Odpowiedzi:

84

W 13. wydaniu The Monad Reader Stephen Hicks pisze o wdrożeniu rozwiązania do konkursu ICFP (obejmującego nawigację łazikiem marsjańskim) w TeX-u, z obfitym wykorzystaniem makr. Co zabawne, wyjście rozwiązania po złożeniu jest postcriptową mapą ścieżki łazika.

Derrick Turk
źródło
10

pgfmathBiblioteka wciąż mnie zadziwia. Ale uwaga bardziej związana z Turingiem: możliwe jest napisanie rzeczywistej maszyny Turinga w TeX-ie, jak na http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . To po prostu sprytny sposób korzystania z rozszerzeń w TeX-ie.

PostScript jest również kompletny w Turingu, jeśli przeczytasz instrukcję , będziesz zdumiony ogólnymi możliwościami programowania (przynajmniej ja byłem).

Pieter
źródło
1
Ludzie napisali LISP w PostScript. (Czytaj poprzednie zdanie, aż w pełni uchwycisz dziwne piękno takiej konstrukcji).
nowy123456
Instrukcja PLRM wspomniano jest teraz martwy link, spróbuj zamiast tego 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
źródło
4
wreszcie ktoś, kto ma sens
user1129682
Co to ma zrobić?
URL
6

Nie jestem pewien, czy kwalifikuje się to jako programowanie jako takie , ale ostatnio zacząłem robić coś w rodzaju rzeczy zorientowanych obiektowo w LaTeX. (Nie musisz znać matematyki, aby postępować zgodnie z poniższym.) W ostatnich artykułach pisałem o kategoriach , które mają obiekty i morfizmy . Ponieważ było ich sporo, chciałem mieć spójny styl, aby, powiedzmy, 𝒞 była kategorią z typowym przedmiotem C i typowym morfizmem c . Wtedy ja też mam 𝒟 z D i D. Więc definiuję „klasę”, mówię „kategorię” (musisz być matematykiem, aby zrozumieć żart) i deklaruję, że C jest instancją tej klasy, a następnie mam dostęp do \ ccat, \ cobj, \ cmor i tak dalej. Powodem, dla którego nie wykonujesz \ cat {c}, \ obj {c}, \ mor {c} i tak dalej, jest to, że czasami te kategorie mają specjalne nazwy, więc po zadeklarowaniu instancji mogę bardzo łatwo zmodyfikować jej nazwę (po prostu przedefiniuj \ ccat - cóż, właściwie \ mathccat, ponieważ \ ccat jest opakowaniem, które wybiera \ mathccat w trybie matematycznym i \ textccat w trybie tekstowym). (Oczywiście jest to trochę bardziej skomplikowane niż sugeruje to powyżej, a rzeczy OO naprawdę przydają się, gdy chcę zdefiniować nową kategorię jako wariant starej (może nawet poradzić sobie z przypadkiem, w którym stara nie działa) jeszcze nie istnieje.).)

Chociaż może nie kwalifikować się jako faktyczne programowanie, używam go w artykułach i uważam go za przydatny - inne odpowiedzi (jak dotąd) mają bardziej wrażenie pokazania możliwości LaTeX niż rozsądnego rozwiązania praktycznego problemu.

Andrew Stacey
źródło
Chciałbym zobaczyć, jak to robisz!
Nate Stemen
1

Znam kogoś, kto napisał odpowiedź na problem konkursu ACM w LaTeX.

Bursztyn
źródło
Hm ... niestety nie mam kodu leżącego w pobliżu i straciłem kontakt z osobą, która go napisała. : /
Amber