> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/latex/tr/derinlemesine-makaleler/31-latex-is-more-powerful-than-you-think-computing-the-fibonacci-numbers-and-turing-completeness.md).

# LaTeX Sandığınızdan Daha Güçlüdür - Fibonacci Sayılarının Hesaplanması ve Turing Tamlığı

**Yazar: Robert Murrish (Nisan 2012 (Overleaf tarafından Nisan 2023'te düzenlendi))**

LaTeX güçlü bir araçtır. Hatta o kadar güçlüdür ki, belge biçimlendirmesinden çok daha fazlası için kullanılabilir. LaTeX [Turing açısından tam](https://en.wikipedia.org/wiki/Turing_completeness); yani, neredeyse her şeyi hesaplamak üzere programlanabilir.

LaTeX'in genel amaçlı programlama yeteneklerini göstermek için, ilk Fibonacci sayılarının hesaplandığı bir örneğe bakacağız. Bu, Turing açısından tamlığın bir kanıtı olmasa da, LaTeX'te uygulanmış eksiksiz bir algoritmanın iyi bir örneğidir.

### Fibonacci Sayıları

Fibonacci dizisindeki her sayı, dizideki önceki iki terimin toplamıdır; ilk iki terim ise bir başlangıç noktası sağlamak için 1 olarak tanımlanır.

Bu sayıları hesaplamak için yeni bir komut yazabiliriz. Henüz yazılmamış komutumuza yapılacak bir çağrının nasıl görünebileceğine karar vererek başlayalım:

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

Bu komut LaTeX belgemizden çağrıldığında, bir `n` Fibonacci sayıları listesi üretmelidir (burada `n=10` buradaki örnek çağrıda). İşte `\fibonacci` komutunun (yani, LaTeX makrosunun) kodu. Nasıl çalıştığına bir bakalım.

```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}
```

[Bu örneği Overleaf'te açın](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)

İlk olarak, daha sonra kullanacağımız birkaç değişken ayarlıyoruz. Şu `\newcount` komutu, bir tam sayı tutmak için kullanabileceğimiz bir değişken sağlar; burada dört tane oluşturuyoruz: `\fcnt`, `\fone`, `\ftwo` ve `\temp`. Bunların yeni değişkenler olmadığını belirtmekte fayda var; bunlar daha çok var olan sayaçlar için takma ad gibidir. [LaTeX sayaçları](/latex/tr/bicimlendirme/10-counters.md) şu şekilde doğrudan kullanılabilir `\count0`, `\count1`, vb. Ancak onlara ad vermek, zaten kullanımda olan bir sayaca yazmamızı engeller. Merak ediyorsanız, bu koddaki değişkenlerden birini `\count0`ile değiştirin, ve belgenin geri kalanında sayfa numaraları yanlış olacaktır.

Şimdi sıradaki `\fibonacci` komutu var. Onu oluştururken `\newcommand`, buna isim, argüman sayısı ve argüman olarak işlenecek TeX kodunu veririz. Bu komut için tek bir argüman, yani çıktı verilecek Fibonacci sayılarının sayısını kabul ederiz. Bu komutun içeriği basittir: değişkenlerimiz için başlangıç değerlerini ayarlarız, ilk iki Fibonacci sayısını yazdırırız (çünkü bunların hesaplanmasına gerek yoktur) ve ardından `\fibloop`bu da hesaplamalarımızın ağır işini yapacaktır.

Komut `\fibloop` aynı şekilde tanımlanır, ancak bu komutun önemli bir parçası nasıl döngü yaptığıdır. Adı `\next`, ile başlatılan ve `\fibloop` içinde `\fibonacci`, ve içinde kullanılan bir komut kullanırız `\fibloop` döngüyü kontrol etmek için. `\fibloop` tekrar edecektir `\next` komutu içindeki kod tarafından değiştirilene kadar `\fibloop` komutunun kendisi. Biz yalnızca `n` kez döngü yapmak istiyoruz, bu yüzden bir `\ifnum` ifadesi kullanırız; bu ifade sayaç değerimizi (`\fcnt`) kontrol eder ve eğer 0 eşik değerine ulaşmamışsa, `\fcnt` döngü her tekrarlandığında bir azaltılır. Koşul sağlanırsa, `\next` ile `\relax`, bu da `\fibloop` tekrarlanmasını engeller—son `\next` komutu hiçbir şey yapmaz ve döngü sona erer.

Bu bloktaki diğer komutlar, dizideki bir sonraki Fibonacci sayısını hesaplar ve değişkenlerin değerlerini günceller, böylece bir sonraki geçişe hazır olurlar. Komut `\the\ftwo` mevcut Fibonacci sayısının değerini belgeye yazdırır ve ayrıca `\fibloop` komutunun en üstündeki, her değeri ayırmak için kullanılan virgül ve boşluğu da fark edeceksiniz.

#### Sonuç

Bu kodun çalışmasını görmenin en basit yolu, onu Overleaf üzerinde **Bu örneği Overleaf'te açın** kod gösteriminin altındaki bağlantıyı kullanarak çalıştırmaktır. Fibonacci dizisi hızlı büyür, bu yüzden herhangi bir `n>44` bu özel uygulamada tamsayı taşmasına yol açacaktır.

### Buradan nereye?

LaTeX'in Turing açısından tam olduğuna dair gayriresmî bir kanıt olarak, aşağıdaki kodu sunuyorum; bu, bir [NAND kapısı](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
}
```

NAND (ve ayrıca NOR) mantık kapılarının ilginç bir özelliği vardır: diğer herhangi bir mantık kapısı bu tek kapı türüyle oluşturulabilir. Temel mantık kapılarından mandallar, flip-flop'lar ve bellek oluşturabilirsiniz. Bunlar, genel amaçlı bir bilgisayar için gereken bileşenlerdir. Bu NAND kapısını, Overleaf'te açabileceğiniz aşağıdaki örnekle dört olası girdisinin her biri için test edebilirsiniz.

```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}
```

[Bu örneği Overleaf'te açın](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)

LaTeX'in Turing açısından tam olduğunu bilmek, bir olasılıklar dünyasının kapısını açar. Bunun gibi kodlar, sayfa ve şekil numaralarını takip etmek ve kayan nesnelerin nereye yerleştirileceğine karar vermek gibi işler için LaTeX'in arka ucunda yaygındır. Bu, karmaşık belge düzenlerini basitleştirmek için kendi avantajınıza kullanabileceğiniz bir araçtır.

Bu yazıyı bitirirken, sizi LaTeX'te programlama örnekleri ve Turing makineleri hakkında daha fazla okumaya bırakıyorum.

#### LaTeX Programlama Örnekleri

* [LaTeX'te Mandelbrot Kümesi](http://warp.povusers.org/MandScripts/latex.html) . Özellikle buna özel teşekkürler; Fibonacci komutumu yazarken bu kod yardımcı bir örnekti.
* [LaTeX'te bir Turing makinesi: devam yazısı](http://pbelmans.ncag.info/blog/2010/12/12/a-turing-machine-in-latex-follow-u/) Not: Bu makaleyi başka bir içerik barındırma sistemine aktarırken, özgün makalede referans verilen sitenin (<http://en.literateprograms.org/Turing_machine_simulator_(LaTeX))> artık erişilebilir olmadığını fark ettik, bu nedenle o bağlantıyı başka bir yazarın devam yazısıyla değiştirdik.
* [TeX komutları üzerine Wikibook](http://en.wikibooks.org/wiki/Category:TeX)
* [Bir programlama yarışmasında LaTeX](http://sdh33b.blogspot.com/2008/07/icfp-contest-2008.html). LaTeX'te yazılmış bir Mars gezgini denetleyicisi, daha yaygın birkaç programlama dilindeki katılımları geride bıraktı.

### Beklenmedik Yerlerde Turing Makineleri

* [Conway'in Yaşam Oyunu Turing açısından tamdır](http://rendell-attic.org/gol/utm/index.htm). İşte bir Turing makinesinin bir uygulaması.
* [Rule 110](http://en.wikipedia.org/wiki/Rule_110) Turing açısından tam olan tek boyutlu bir hücresel otomat.
* Minecraft (video oyunu) Turing açısından tamdır. Birkaç örnek oluşturulmuştur, bu nedenle aşağıdaki bağlantı yalnızca bir [ilgili YouTube arama sonuçları sayfasına](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://ayakaleaf-pro.ayaka.space/latex/tr/derinlemesine-makaleler/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.
