Tôi nghe nói rằng LaTeX đã hoàn thành Turing. Có chương trình nào được viết bằng LaTeX không?


79

Có thể làm những điều thú vị với thứ thường được coi là ngôn ngữ sắp chữ. Ví dụ, bạn có thể xây dựng bộ Mandelbrot bằng cách sử dụng tái bút .

Trong câu hỏi MathOverflow này gợi ý rằng LaTeX có thể là Turing-hoàn chỉnh . Điều này ngụ ý khả năng viết các chương trình tùy ý (mặc dù nó có thể không dễ dàng!). Có ai biết về bất kỳ ví dụ cụ thể nào về một chương trình như vậy trong LaTeX, chương trình này có điều gì đó rất bất thường với ngôn ngữ không?


87
Bạn biết đấy, tôi sẽ có một ngày cuối tuần chơi ở ngoài trời. Bạn biết không, một trong những người không sử dụng máy tính vào cuối tuần? Sau đó, bạn đi và đăng câu hỏi này. Đây là lý do tại sao tôi không thể có những điều tốt đẹp.
wheaties

1
/ d {def} def / u {lặp} 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 thêm d B 2 mm Y thêm dz thêm 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

Câu trả lời:


84

Trong số 13 của The Monad Reader , Stephen Hicks viết về việc triển khai giải pháp cho một cuộc thi ICFP (liên quan đến điều hướng máy dò sao Hỏa) trong TeX, với việc sử dụng nhiều macro. Thật thú vị, đầu ra của giải pháp khi bộ sắp chữ là một bản đồ tái bút của đường dẫn của người định hướng.



10

Các pgfmaththư viện vẫn làm tôi ngạc nhiên. Nhưng trên một lưu ý khác liên quan đến Turing: có thể viết một máy Turing thực tế trong TeX, theo http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Đó chỉ là một cách tiện lợi để sử dụng các bản mở rộng trong TeX.

PostScript là Turing cũng hoàn chỉnh, nếu bạn đọc hướng dẫn sử dụng, bạn sẽ ngạc nhiên bởi khả năng lập trình chung của nó (ít nhất là tôi).


1
Mọi người đã viết LISP trong PostScript. (Đọc câu trước cho đến khi bạn hoàn toàn hiểu được vẻ đẹp kỳ lạ của một công trình xây dựng như vậy).
new123456

Hướng dẫn PLRM nêu tại là một liên kết chết, hãy thử này để thay thế adobe.com/products/postscript/pdfs/PLRM.pdf
Aaron Robson


6

Tôi không chắc liệu điều này có đủ điều kiện là lập trình hay không , nhưng gần đây tôi đã bắt đầu làm một cái gì đó giống như công cụ Hướng đối tượng trong LaTeX. (Bạn không cần phải biết bất kỳ phép toán nào để làm theo những điều sau đây.) Trong các bài báo gần đây, tôi đã viết về các thể loại , có các đối tượnghình thái . Vì có khá nhiều trong số đó, tôi muốn có một phong cách nhất quán sao cho say là một danh mục có đối tượng điển hình C và phép biến hình điển hình c . Sau đó, tôi cũng có 𝒟 với Dd. Vì vậy, tôi định nghĩa một "lớp", giả sử "thể loại" (bạn cần phải là một nhà toán học để hiểu trò đùa ở đó) và tuyên bố rằng C là một thể hiện của lớp này, sau đó có quyền truy cập vào \ ccat, \ cobj, \ cmor và kể từ đó trở đi. Lý do không thực hiện \ cat {c}, \ obj {c}, và \ mor {c}, v.v., là đôi khi các danh mục này có tên đặc biệt và vì vậy sau khi khai báo trường hợp, tôi có thể sửa đổi tên của nó rất dễ dàng (chỉ cần xác định lại \ ccat - tốt, thực ra \ mathccat vì \ ccat là một trình bao bọc chọn \ mathccat trong chế độ toán học và \ textccat trong chế độ văn bản). (Tất nhiên, nó phức tạp hơn một chút so với gợi ý ở trên và nội dung OO thực sự hữu ích khi tôi muốn xác định một danh mục mới như một biến thể của danh mục cũ (nó thậm chí có thể giải quyết trường hợp danh mục cũ thì không) chưa tồn tại.).)

Mặc dù nó có thể không đủ tiêu chuẩn như một chương trình thực tế, nhưng tôi đang sử dụng nó trong các bài báo và thấy nó hữu ích - các câu trả lời khác (cho đến nay) mang nhiều cảm giác thể hiện khả năng của LaTeX hơn là một giải pháp hợp lý cho một vấn đề thực tế.


Rất thích xem bạn đang làm việc này như thế nào!
Nate Stemen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.