Herhangi bir programlama dili genel özyinelemeli işlevleri temel olarak kullanıyor mu?


23

Bu naif ve bu nedenle, muhtemelen yanlış biçimlendirilmiş bir soru, şimdiden özür dileriz!

Benim görüşüme göre, bir Turing Makinesi, işlemsel / zorunlu programlama dilleri için hesaplama temeli olarak görülebilir. Benzer şekilde, lambda matematiği, fonksiyonel programlama dilleri için temeldir.

Son zamanlarda Kilise Turing Tezi'nin de üçüncü bir hesaplama modeliyle karşılıklı denklik gösterdiğini öğrendim: genel özyinelemeli fonksiyonlar . Bunu hesaplama modeli olarak kullanan herhangi bir programlama dili var mı? Olmazsa, bunun teknik bir nedeni var mı; yani, "Henüz kimse denemedi" dışında.


1
Turing makinelerinin ya da üniversal register makinelerinin işlemcili PL'lerin (Meclis PL'leri) temeli olduğunu söyleyebilirim. İşlevleri yoktur. -Recursive fonksiyonlar zorunlu PL bir temelini oluşturur. Daha üst düzey işlevlere sahip değiller. μ
beroal

1
Prolog ve birinci dereceden mantığa bakmanızı da tavsiye ederim.
beroal

1
C ++ 11'den önce constexprderleyici tarafından derleme sırasında hesaplamaları yapmak için 'şablonları' kullanabilirsiniz (/ kullanmak zorunda). Şablonlardaki kısıtlamalar döngülere izin vermez, ancak herhangi bir döngüyü taklit etmek için özyinelemeyi kullanabilirsiniz, böylece C ++ dil standardının bir parçası olarak bir Turing-complete (meta-programlama) özelliğine sahip olursunuz, örneğin bkz: stackoverflow.com/questions / 189172 / c-templates-turing-complete
JimmyB

Yanıtlar:


45

Sorusuna Doğrudan cevap: evet, orada dayalı ezoterik ve son derece pratik PL olan -Recursive fonksiyonları (Whitespace düşünün), ancak hiçbir pratik programlama dili dayanmaktadır μ dolayı geçerli nedenlerle -Yinelemeli fonksiyonlar.μμ

Genel yinelemeli (yani -Recursive) işlevleri önemli ölçüde daha az olan ifade lambda taşı daha. Böylece, programlama dilleri için zayıf bir temel oluştururlar. Ayrıca, TM'nin zorunlu PL'lerin temeli olduğu konusunda da doğru değilsiniz: gerçekte, iyi zorunlu programlama dilleri, λ- calculus'a Turing makinelerine göre çok daha yakındır .μλ

Hesaplanabilirliğin açısından, -Recursive fonksiyonları, Turing makinesi ve türsüz  -calculus tüm eşdeğerdir. Bununla birlikte, türetilmemiş LC, diğer ikisinin hiçbirinin sahip olmadığı iyi özelliklere sahiptir. Çok basittir (sadece 3 sözdizimsel form ve 2 hesaplama kuralı), oldukça kompozisyonludur ve programlama yapılarını nispeten kolay bir şekilde ifade edebilir. Ayrıca, basit bir tip sistemi ile donatılmış (örneğin, Sistem F Ê ile genişletilmiş f ı x ), λ -calculus son derece doğru ve kompozisyonel kolayca birçok karmaşık programlama yapıları ifade edebilir ki anlatım edilebilir. Ayrıca λμλFωfixλλ-calculus kolayca lambda olmayan yapıları içerecektir. Yukarıda belirtilen diğer hesaplama modellerinin hiçbiri size bu güzel özellikleri vermiyor.

Turing makinesi ne bileşim ne de evrenseldir (her problem için bir TM'niz olması gerekir). "İşlev", "değişken" veya "bileşim" kavramı yoktur. Ayrıca, TM'lerin zorunlu PL'lerin temeli olduğu da kesin değildir - FWIW, zorunlu PL'lerin, kontrol operatörleri ile lambda calculi'ye Turing makinelerine göre çok daha yakın olduğu kesin değildir. Ayrıntılı bir açıklama için Peter J. Landin'in "ALGOL 60 ile Church's Lambda Notasyonu Arasında Bir Yazışma" bölümüne bakın . Brainf ** k ile programlandıysanız (aslında oldukça basit bir Turing makinesi uygular), Turing makinelerinin programlama için iyi bir fikir olmadığını bilirsiniz.

μμμN

λλμλλ

Aslında, orada çok, çok daha fazla Turing komple sistemi var, ancak bunların hiçbirinde olağanüstü bir özellik bulunmuyor. Conway'in Yaşam Oyunu, LaTeX makroları ve hatta (bazı iddialar) DNA'nın tümü Turing tamamlandı, ancak Conway ile birlikte hiçbir program (yani ciddi programlama yapmayın) ya da LaTeX makrolarını kullanarak hesaplamalı karmaşıklığı incelemiyor. Onlar sadece iyi özelliklerden yoksundurlar. Başına tam dönüş yapmak, programlama söz konusu olduğunda neredeyse anlamsızdır.

λ-calculus.


7
"Conway ile hiçbir program" yok ... bazıları Conway'in Yaşam Oyununda
Tetris'in

λλ

@AlexeiLevenkov Bu tamamen doğru değildir. Boşluk, garip bir sözdizimine rağmen, temelde (basit) zorunlu bir dildir. Bu imkanı vardır aritmetik, temel kontrol akış, yığını ve yığın manipülasyon ve I / O . Öte yandan, QFT projesi, OTCA Metapixels kullanılarak taklit edilen Wireworld benzeri hücresel otomat içinde yerleşik bir CPU için oluşturulan bir RISC düzeneğine kadar çok basit bir dilden bir derleyici tasarlamayı gerektiriyordu .
İçerik Dışı Yazım,

@AlexeiLevenkov Nihai Cogol → CGoL derleyicisi dört yıl boyunca birçok insanın çalışmasını gerektirirken, boş zamanlarında bir kişi tarafından yazılmış olan Whitespace'e çok daha karmaşık bir dil derleyen HaPyLi adlı bir proje var .
İçerik Dışı Yazım,

4

µ-recursive function programming languageGoogle’da yazmak beni bu GitHub deposuna yönlendirdi , bu nedenle sorunuzun cevabı:

Evet, buna miyopi denir.

Bu arada Haskell'da yazılmıştır.


μ

2
Tabii ki. Sadece o OP ;-) onunla aslında fethetmek dünyaya değil, teori falan incelemek için böyle bir dil bulmak isteyen farz
Kapol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.