Я слышал, что LaTeX завершен по Тьюрингу. Есть ли программы, написанные на LaTeX?

79

Можно делать интересные вещи с помощью того, что обычно принято называть языками набора. Например, вы можете построить множество Мандельброта, используя постскриптум .

В этом вопросе MathOverflow предполагается, что LaTeX может быть полным по Тьюрингу . Это подразумевает возможность писать произвольные программы (хотя это может быть непросто!). Кто-нибудь знает какой-либо конкретный пример такой программы в LaTeX, которая делает что-то очень необычное с языком?

ire_and_curses
источник
88
Знаешь, я собирался провести выходные на улице. Вы знаете, один из тех, кто не занимается компьютерными выходными? Затем вы отправляете этот вопрос. Вот почему у меня не может быть хороших вещей.
Wheaties 03
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 exch d / BA / A z sub X add d B 2 mm Y add dz add 4 gt {exit} if / f 64 d} для f 64 div setgray XY moveto 0 q neg u 0 0 qu 0 rrrr fill / Y} for / X} для showpage
DNA

Ответы:

84

В 13-м выпуске The Monad Reader Стивен Хикс пишет о реализации решения для конкурса ICFP (включающего навигацию марсохода) в TeX с обильным использованием макросов. Забавно, но на выходе решение после набора представляет собой карту пути марсохода.

Деррик Терк
источник
10

pgfmathБиблиотека до сих пор поражает меня. Но еще одно замечание, связанное с Тьюрингом: можно написать настоящую машину Тьюринга в TeX, согласно http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Это просто отличный способ использования расширений в TeX.

PostScript также является полным по Тьюрингу, если вы прочтете руководство, вы будете поражены его общими возможностями программирования (по крайней мере, я был).

Питер
источник
1
Люди написали LISP на PostScript. (Прочтите предыдущее предложение, пока полностью не уловите странную красоту такой конструкции).
new123456 03
Руководство PLRM упоминается теперь мертвая ссылка, попробуйте это вместо adobe.com/products/postscript/pdfs/PLRM.pdf
Аарон Robson
9

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

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

Матеуш Гротек
источник
4
наконец кто-то, что имеет смысл
user1129682
Что это должно делать?
URL
6

Я не уверен, можно ли это квалифицировать как программирование как таковое, но недавно я начал делать что-то вроде объектно-ориентированного в LaTeX. (Вам не нужно знать математику, чтобы понять следующее.) В недавних статьях я писал о категориях , которые имеют объекты и морфизмы . Так как их было довольно много, я хотел согласованного стиля, чтобы, скажем, 𝒞 была категорией с типичным объектом C и типичным морфизмом c . Тогда я бы также с D и d. Итак, я определяю «класс», скажем «категорию» (вам нужно быть математиком, чтобы понять шутку), и объявляю, что C является экземпляром этого класса, а затем имею доступ к \ ccat, \ cobj, \ cmor и так далее. Причина, по которой я не выполняю \ cat {c}, \ obj {c}, \ mor {c} и т. Д., Заключается в том, что иногда у этих категорий есть специальные имена, и поэтому после объявления экземпляра я могу очень легко изменить его имя. (просто переопределите \ ccat - ну, на самом деле \ mathccat, поскольку \ ccat - это оболочка, которая выбирает \ mathccat в математическом режиме и \ textccat в текстовом режиме). (Конечно, это немного сложнее, чем предлагается выше, и объектно-ориентированный материал действительно оказывается полезным, когда я хочу определить новую категорию как вариант старой (это может даже иметь дело со случаем, когда старая категория не работает) пока не существует.).

Хотя это может не квалифицироваться как реальное программирование, я использую его в статьях и считаю его полезным - другие ответы (пока) больше похожи на демонстрацию возможностей LaTeX, чем на разумное решение практической проблемы.

Эндрю Стейси
источник
Хотелось бы увидеть, как вы это делаете!
Nate Stemen
1

Я знаю человека, который написал ответ на задачу конкурса ACM в LaTeX.

Янтарь
источник
Хм ... к сожалению, у меня нет кода, и я потерял связь с человеком, который его написал. : /
Эмбер