我听说LaTeX是Turing完整的.有没有用LaTeX编写的程序?

ire*_*ses 72 latex turing-complete

用通常被认为是排版语言的东西做一些有趣的事情是可能的.例如,您可以使用postscript构造Mandelbrot集.

此MathOverflow问题中建议LaTeX可能是图灵完备的.这意味着能够编写任意程序(虽然这可能并不容易!).有没有人知道LaTeX中这样一个程序的任何具体例子,它使用该语言做了一些非常不寻常的事情?

Der*_*urk 81

Monad Reader 13期中,Stephen Hicks撰写了关于在TeX中实施ICFP竞赛(涉及火星探测器导航)的解决方案,并大量使用宏.有趣的是,当排版是流动站路径的postscript地图时,解决方案的输出.


Nor*_*ray 24

或者,Andrew Greene 在TeX中编写了一个BASIC解释器(更多细节).这可能算作有点不正常.

  • 翻译链接已经死了 (2认同)
  • 使用 Archive.org 查看解释器:https://web.archive.org/web/20120707000649/http://texcatalogue.sarovar.org/entries/basix.html (2认同)

Pie*_*ter 9

pgfmath库仍然让我感到吃惊.但是在更多与图灵相关的说明中:根据http://en.literateprograms.org/Turing_machine_simulator_(LaTeX),可以在TeX中编写实际的图灵机.这只是在TeX中使用扩展的一种很好的方式.

PostScript也是Turing完成的,如果您阅读本手册,您会对它的一般编程功能感到惊讶(至少,我是).


小智 7

\ DEF\K#1#2#{2}

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

  • 终于有人说得通了 (6认同)
  • @URL 它表明[图灵完整的S和K组合器](https://en.wikipedia.org/wiki/SKI_combinator_calculus)可以用LaTeX表示。 (3认同)

Loo*_*ace 5

我不确定这是否有资格作为编程本身,但我最近开始做一些像LaTeX中的面向对象的东西.(你不需要知道任何数学来遵循以下内容.)在最近的论文中,我一直在写关于具有对象态射的类别.由于已经有不少的,我希望有一个一贯的风格,这样,比方说,?是典型的对象类别ç和典型的射Ç.然后我也有?和Dd.所以我定义了一个"类",比如说"类别"(你需要成为一个数学家来理解那里的笑话),并声明C是这个类的一个实例,然后可以访问\ ccat,\ cobj,\ cmor等等.不做\ cat {c},\ obj {c}和\ mor {c}等的原因是有时这些类别有特殊名称,所以在声明实例之后,我可以很容易地修改它的名字(只需重新定义\ ccat - 好吧,实际上是\ mathccat,因为\ ccat是一个包装器,在数学模式下选择\ mathccat,在文本模式下选择\ textccat).(当然,它比上面的建议稍微复杂一点,当我想将一个新类别定义为一个旧类别的变体时,OO的东西真的很有用(它甚至可以处理旧类别的情况)还存在.).)

虽然它可能不符合实际编程的条件,但我在论文中使用它并且确实发现它很有用 - 其他答案(到目前为止)有更多的感觉来展示LaTeX的功能而不是对实际问题的合理解决方案.