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

时间:2010-06-03 17:39:30

标签: latex turing-complete

可以用通常被认为是排版语言来做有趣的事情。例如,您可以构造Mandelbrot集using postscript

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

6 个答案:

答案 0 :(得分:81)

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

答案 1 :(得分:24)

另外,Andrew Greene写了a BASIC interpreter in TeXmore details)。这可能算得上有些不正常。

答案 2 :(得分:8)

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

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

答案 3 :(得分:7)

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

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:1)

我知道有人在LaTeX中写了an ACM contest problem的答案。