Evrensel özyinelemeli işlev yazma [kapalı]


9

Evrensel özyinelemeli bir işlevin kısa bir açık yapısı var mı ? Gördüğüm tüm tanımlar Turing makinelerinin bir şekilde numaralandırılmasını içeriyor, bu da mümkün ancak yine de daha yüksek seviyeli bir programlama dilinde (Python, Haskell vb.) Yazmak zor ve yönetilemez görünüyor.


Soru aslen de istendi SO , daha uygun olanı burada görünüyor.
sdcvvc

1
Anladığım kadarıyla, evrensel bir özyinelemeli işlevin yaptığı, sonuçta özyinelemeli işlevlerin ve girdilerin dizininden hesaplanabilmesi için tam olarak yinelenen işlevlerin (veya eşdeğer Turing makinelerinin) numaralandırılmasıdır. Bu nedenle “Turing makinelerini numaralandırmadan evrensel bir özyinelemeli fonksiyon” bana mantıklı gelmiyor.
Tsuyoshi Ito

3
Araştırma seviyesi değil. Turing-complete dili için herhangi bir tercüman evrensel bir özyinelemeli işlevdir.
Warren Schudy

Yanıtlar:



13

Elbette. Godel'in ilkel özyinelemeli işlevlerini hesaplayan rutinler yazın ve sınırsız bir arama operatörü için bir rutin yazın. Bu şekilde hesaplayabileceğiniz fonksiyonlar grubu Turing makinelerinin hesaplayabileceği fonksiyonlar grubuna eşdeğerdir. Daha fazla bilgi burada .

Dezavantajı, evrensel programınıza yapılacak herhangi bir girdinin, bu basit işlemler açısından çerçevelenmesi gerekmesidir. Tabii ki, derleyiciler bunun için.


10

Tamamlanan herhangi bir dil için herhangi bir tercüman evrensel bir özyinelemeli işlevdir. C ++ veya Python gibi üst düzey diller için tercümanlar vardır.

Godel numaralandırması var ama üstü kapalı. Örneğin, bir özyinelemeli fonksiyon bilgisayar C ++ kod için bir endekstir .gg


Turing Makineleri için bir yorumlayıcı (veya Kayıt Makineleri veya özyinelemeli işlevler) aynı zamanda evrensel bir özyinelemeli işlevdir ve bunları uygulamak zor değildir. Onları birkaç yıl önce C ++ ile uyguladım ve Python'da daha da basit olacağından eminim. Google'ı kullanın, İnternet'te birçok ücretsiz simülatör vardır ve bazıları açık kaynaklıdır.
Kaveh

8

Evrensel bir fonksiyon uHaskell benzeri bir dilde kolayca yazılabilir (yan etki yok, üst düzey fonksiyonlar):

u f x = f x

Fonksiyonu uo (açıklamasını) bir programı kabul ettiğinden evrenseldir fve bir giriş bandı xve size çalışan sonucunu söyler füzerinde x.

Bu cevap tamamen ciddi olmasa da, Haskell benzeri bir dil için bir derleyici veya yorumlayıcının zaten evrensel bir işlev için gerekli tüm yapı parçalarını içerdiğini göstermektedir. Hikayenin ahlakı, derleyicilerin ve tercümanların nasıl çalıştığını incelemek için zamanın Turing makineleri açısından evrensel bir işlev uygulamaktan endişe etmekten daha iyi olmasıdır.


Ancak, ubir işlev alır - ben daha yüksek dereceli bir işlev olarak adlandırırdım. uBir tamsayı veya düzenli bir cebirsel veri türü almak istiyorum . Herhangi bir hesaplama modelini zorlamıyorum, argüman usomut olduğu sürece - örneğin, bir dizeden / dizeye serileştirilebilir.
sdcvvc

Gerçek bir makinede (kod derlendiğinde) usonlu bir bayt dizisi olan bir kapatma alır. Her zamanki utm teoreminde bile, alınan tam sayı ubir işlevi temsil eder.
Andrej Bauer

5

Kombinasyon mantığı kullanarak John Tromp'ın bu makalesini de kontrol edin . Görünüşe göre artık mevcut olmayan daha önceki bir yazı bile daha temizdi.

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.