> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/id/artikel-mendalam/31-latex-is-more-powerful-than-you-think-computing-the-fibonacci-numbers-and-turing-completeness.md).

# LaTeX Lebih Kuat daripada yang Anda Pikirkan - Menghitung bilangan Fibonacci dan kelengkapan Turing

**Penulis: Robert Murrish (April 2012 (disunting oleh Overleaf pada April 2023))**

LaTeX adalah alat yang hebat. Begitu hebat, bahkan, sehingga dapat digunakan untuk jauh lebih dari sekadar penanda dokumen. LaTeX adalah [lengkap Turing](https://en.wikipedia.org/wiki/Turing_completeness); artinya, ia dapat diprogram untuk menghitung hampir apa saja.

Untuk mendemonstrasikan kemampuan pemrograman tujuan umum dari LaTeX, kita akan melihat contoh yang menghitung bilangan Fibonacci pertama. Walaupun ini bukan bukti kelengkapan Turing, ini adalah contoh yang baik dari algoritma lengkap yang diimplementasikan dalam LaTeX.

### Bilangan Fibonacci

Setiap bilangan dalam deret Fibonacci adalah jumlah dari dua suku sebelumnya dalam deret tersebut, dengan dua suku pertama didefinisikan sebagai 1 untuk menyediakan titik awal.

Kita dapat menulis perintah baru untuk menghitung bilangan ini. Mari mulai dengan memutuskan seperti apa pemanggilan perintah yang belum kita tulis itu akan terlihat:

```latex
\fibonacci{10}
```

Saat perintah ini dipanggil dari dokumen LaTeX kita, ia seharusnya menghasilkan daftar `n` bilangan Fibonacci (di mana `n=10` dalam contoh pemanggilan di sini). Berikut adalah kode untuk `\fibonacci` perintah (yaitu makro LaTeX). Mari kita lihat cara kerjanya.

```latex
\documentclass{article}
\begin{document}

\newcount\temp
\newcount\fone
\newcount\ftwo
\newcount\fcnt

\newcommand{\fibonacci}[1]{%
	\fcnt=#1
	\fone=1
	\ftwo=1
	\temp=0
	\the\fone, \the\ftwo
	\let\next=\fibloop
	\fibloop
}

\def\fibloop{, %
	\temp=\fone
	\fone=\ftwo
	\advance\ftwo by \temp
	\ifnum\fcnt=0
            \let\next=\relax
        \else
            \advance\fcnt by -1
        \fi
	\the\ftwo
	\next
}

(\fibonacci{10})
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Fibonacci+sequence+in+LaTeX\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cnewcount%5Ctemp%0A%5Cnewcount%5Cfone%0A%5Cnewcount%5Cftwo%0A%5Cnewcount%5Cfcnt%0A%0A%5Cnewcommand%7B%5Cfibonacci%7D%5B1%5D%7B%25%0A%09%5Cfcnt%3D%231%0A%09%5Cfone%3D1%0A%09%5Cftwo%3D1%0A%09%5Ctemp%3D0%0A%09%5Cthe%5Cfone%2C+%5Cthe%5Cftwo%0A%09%5Clet%5Cnext%3D%5Cfibloop%0A%09%5Cfibloop%0A%7D%0A%0A%5Cdef%5Cfibloop%7B%2C+%25%0A%09%5Ctemp%3D%5Cfone%0A%09%5Cfone%3D%5Cftwo%0A%09%5Cadvance%5Cftwo+by+%5Ctemp%0A%09%5Cifnum%5Cfcnt%3D0%0A++++++++++++%5Clet%5Cnext%3D%5Crelax%0A++++++++%5Celse%0A++++++++++++%5Cadvance%5Cfcnt+by+-1%0A++++++++%5Cfi%0A%09%5Cthe%5Cftwo%0A%09%5Cnext%0A%7D%0A%0A%28%5Cfibonacci%7B10%7D%29%0A%5Cend%7Bdocument%7D)

Pertama, kita menyiapkan beberapa variabel yang akan kita gunakan nanti. Perintah `\newcount` memberi kita sebuah variabel yang dapat digunakan untuk menyimpan bilangan bulat; di sini, kita membuat empat: `\fcnt`, `\fone`, `\ftwo` dan `\temp`. Perlu disebutkan bahwa ini bukan variabel baru; mereka lebih mirip alias untuk penghitung yang sudah ada. [Penghitung LaTeX](/latex/id/pemformatan/10-counters.md) dapat digunakan secara langsung seperti pada `\count0`, `\count1`, dll., tetapi memberi nama pada mereka mencegah kita menulis ke penghitung yang sudah digunakan. Jika Anda penasaran, ganti salah satu variabel dalam kode ini dengan `\count0`, dan nomor halaman akan menjadi salah untuk sisa dokumen.

Berikutnya ada `\fibonacci` perintah `\newcommand`, yang kita buat dengan `\fibloop`, yang kita berikan nama, jumlah argumen, dan kode TeX untuk diproses sebagai argumen. Untuk perintah ini, kita menerima satu argumen, yaitu jumlah bilangan Fibonacci yang akan ditampilkan. Isi perintah ini sederhana: kita menetapkan nilai awal untuk variabel kita, mencetak dua bilangan Fibonacci pertama (karena mereka tidak perlu dihitung), lalu memanggil

Perintah `\fibloop` dideklarasikan dengan cara yang sama, tetapi bagian kunci dari perintah ini adalah cara ia melakukan perulangan. Kita menggunakan perintah yang disebut `\next`, diinisialisasi ke `\fibloop` di dalam `\fibonacci`, dan digunakan di dalam `\fibloop` untuk mengendalikan perulangan. `\fibloop` akan berulang sampai `\next` diubah oleh kode di dalam `\fibloop` perintah itu sendiri. Kita hanya ingin berulang `n` kali, jadi kita menggunakan sebuah `\ifnum` pernyataan yang memeriksa nilai penghitung kita (`\fcnt`) lalu jika belum mencapai nilai ambang 0, `\fcnt` dikurangi setiap kali perulangan diulang. Jika kondisinya terpenuhi, kita menetapkan `\next` ke `\relax`, yang akan mencegah `\fibloop` dari berulang— `\next` perintah terakhir tidak melakukan apa-apa, dan perulangan berakhir.

Perintah lain dalam blok ini menghitung bilangan Fibonacci berikutnya dalam deret dan memperbarui nilai-nilai variabel sehingga siap untuk putaran berikutnya. Perintah `\the\ftwo` mencetak nilai bilangan Fibonacci saat ini ke dokumen, dan Anda juga akan melihat koma dan spasi di bagian atas `\fibloop` perintah yang digunakan untuk memisahkan setiap nilai.

#### Hasil

Cara paling sederhana untuk melihat kode ini beraksi adalah menjalankannya di Overleaf menggunakan **Buka contoh ini di Overleaf** tautan di bagian bawah tampilan kode. Deret Fibonacci tumbuh cepat, jadi apa pun `n>44` akan menghasilkan overflow integer dalam implementasi khusus ini.

### Ke mana selanjutnya?

Sebagai bukti informal bahwa LaTeX lengkap Turing, saya sajikan kode berikut yang merupakan implementasi cepat dan sederhana dari sebuah [gerbang NAND](https://en.wikipedia.org/wiki/NAND_gate):

```latex
\newcount\nanone
\newcount\nantwo

\newcommand{\nand}[2]{%
\nanone=#1
\nantwo=#2
  \ifnum\nanone=\nantwo
    \ifnum\nanone=0\relax 1
      \else 0
    \fi
   \else 1
\fi
}
```

Gerbang logika NAND (dan juga NOR) memiliki sifat menarik bahwa gerbang logika lain apa pun dapat dibentuk dengan satu jenis gerbang ini saja. Dari gerbang logika dasar, Anda dapat membangun latch, flip-flop, dan memori. Itu adalah bahan-bahan untuk komputer serbaguna. Anda dapat menguji gerbang NAND ini untuk masing-masing dari empat kemungkinan inputnya dengan contoh berikut yang dapat Anda buka di Overleaf.

```latex
\documentclass{article}
\begin{document}

\newcount\nanone
\newcount\nantwo

\newcommand{\nand}[2]{%
\nanone=#1
\nantwo=#2
  \ifnum\nanone=\nantwo
    \ifnum\nanone=0\relax 1
      \else 0
    \fi
   \else 1
\fi
}

\nand{0}{0}
\nand{0}{1}
\nand{1}{0}
\nand{1}{1}
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=NAND+gate+in+LaTeX\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cnewcount%5Cnanone%0A%5Cnewcount%5Cnantwo%0A%0A%5Cnewcommand%7B%5Cnand%7D%5B2%5D%7B%25%0A%5Cnanone%3D%231%0A%5Cnantwo%3D%232%0A++%5Cifnum%5Cnanone%3D%5Cnantwo%0A++++%5Cifnum%5Cnanone%3D0%5Crelax+1%0A++++++%5Celse+0%0A++++%5Cfi%0A+++%5Celse+1%0A%5Cfi%0A%7D%0A%0A%5Cnand%7B0%7D%7B0%7D%0A%5Cnand%7B0%7D%7B1%7D%0A%5Cnand%7B1%7D%7B0%7D%0A%5Cnand%7B1%7D%7B1%7D%0A%5Cend%7Bdocument%7D)

Mengetahui bahwa LaTeX lengkap Turing membuka dunia berbagai kemungkinan. Kode seperti ini umum di bagian belakang LaTeX untuk hal-hal seperti melacak nomor halaman dan gambar serta memutuskan di mana menempatkan objek mengambang. Ini adalah alat yang dapat Anda gunakan untuk keuntungan Anda guna menyederhanakan tata letak dokumen yang kompleks.

Untuk menutup tulisan ini, saya akan meninggalkan Anda dengan bacaan lanjutan tentang contoh pemrograman dalam LaTeX dan mesin Turing.

#### Contoh Pemrograman LaTeX

* [Himpunan Mandlebrot dalam LaTeX](http://warp.povusers.org/MandScripts/latex.html) . Terima kasih khusus untuk yang satu ini; kode ini adalah contoh yang membantu saat saya menulis perintah Fibonacci saya.
* [Sebuah mesin Turing dalam LaTeX: tindak lanjut](http://pbelmans.ncag.info/blog/2010/12/12/a-turing-machine-in-latex-follow-u/) NB: Saat memindahkan artikel ini ke sistem hosting konten lain, kami melihat bahwa situs yang dirujuk dalam artikel asli (<http://en.literateprograms.org/Turing_machine_simulator_(LaTeX))> sudah tidak dapat diakses lagi, jadi kami mengganti tautan itu dengan artikel lanjutan oleh penulis lain.
* [Buku Wiki tentang perintah TeX](http://en.wikibooks.org/wiki/Category:TeX)
* [LaTeX dalam kompetisi pemrograman](http://sdh33b.blogspot.com/2008/07/icfp-contest-2008.html). Pengendali rover Mars dalam LaTeX mengalahkan entri dalam beberapa bahasa pemrograman yang lebih umum.

### Mesin Turing di Tempat yang Tak Terduga

* [Permainan Hidup Conway bersifat lengkap Turing](http://rendell-attic.org/gol/utm/index.htm). Berikut adalah implementasi sebuah mesin Turing.
* [Aturan 110](http://en.wikipedia.org/wiki/Rule_110) adalah automata seluler 1-D yang lengkap Turing.
* Minecraft (video game) bersifat lengkap Turing. Beberapa contoh telah dibuat, jadi tautan berikut hanyalah ke [halaman hasil pencarian YouTube yang relevan](http://www.youtube.com/results?search_query=minecraft+turing+machine)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/id/artikel-mendalam/31-latex-is-more-powerful-than-you-think-computing-the-fibonacci-numbers-and-turing-completeness.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
