ChatGPT解决这个技术问题 Extra ChatGPT

我听说 LaTeX 是图灵完备的。有没有用 LaTeX 编写的程序?

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

this MathOverflow question 中建议 LaTeX 可能是 Turing-complete。这意味着编写任意程序的能力(尽管这可能并不容易!)。有谁知道 LaTeX 中此类程序的任何具体示例,它对该语言做了一些非常不寻常的事情?

你知道,我打算在外面玩一个周末。你知道,其中一个远离电脑的周末?然后你去发布这个问题。这就是为什么我不能拥有美好的东西。
/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}for f 64 div setgray XY moveto 0 q neg u 0 0 qu 0 rrrr fill/Y}for/X}for showpage

M
Matt Ball

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


N
Nulano

或者,Andrew Greene 写了 a BASIC interpreter in TeX (more details)。这可能算得上有点反常。


解释器链接已失效
使用 Archive.org 查看解释器:web.archive.org/web/20120707000649/http://…
M
Mateusz Grotek

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

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


终于有人说得通了
这应该做什么?
@URL 它表明 Turing complete S and K combinators 可以用 LaTeX 表示。
N
Nulano

pgfmath 库仍然让我感到惊讶。但在一个更与图灵相关的说明上:可以按照 http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) 在 TeX 中编写一个实际的图灵机。这只是在 TeX 中使用扩展的一种绝妙方式。

PostScript 也是图灵完备的,如果您阅读 the manual,您会惊讶于它的一般编程能力(至少,我是这样)。


人们用 PostScript 编写了 LISP。 (阅读上一句,直到你完全掌握了这种结构的奇异之美)。
提到的 PLRM 手册现在是一个死链接,试试这个adobe.com/products/postscript/pdfs/PLRM.pdf
A
Andrew Stacey

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

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


很想看看你是怎么做到的!
A
Amber

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


嗯......不幸的是,我没有代码,而且我已经与编写它的人失去了联系。 :/