SORU
31 Mayıs 2009, Pazar


Her yineleme yineleme dönüştürülebilir?

reddit thread görünüşe göre ilginç bir soru gündeme getirdi

Kuyruk özyinelemeli fonksiyonlar basit fonksiyonlar, yinelemeli dönüştürülebilir. Diğerleri, bir açık kullanılarak dönüştürülmesi yığını olabilir. Olabilirheryineleme yineleme dönüştürülmüş?

(Karşı?)the post örnek çift:

(define (num-ways x y)
  (case ((= x 0) 1)
        ((= y 0) 1)
        (num-ways2 x y) ))

(define (num-ways2 x y)
  (  (num-ways (- x 1) y)
     (num-ways x (- y 1))

CEVAP
1 HAZİRAN 2009, PAZARTESİ


Her zaman bir yinelemeli bir özyinelemeli bir fonksiyon dönebilir misin? Evet, kesinlikle, ve Church-Turing tezi, eğer hafızam beni yanıltmıyorsa bunu kanıtlıyor. Hüküm koymak, özyinelemeli fonksiyonlar ile hesaplanabilir ne yinelemeli bir model (Turing makinesi) ile hesaplanabilir ve tam tersi olduğunu belirtiyor. Tez dönüştürme yapmak için tam olarak ne kadar söylemek değil, ama kesinlikle mümkün olduğunu yazıyor.

Birçok durumda, bir özyinelemeli işlevi dönüştürme kolaydır. Knuth çeşitli teknikleri "Bilgisayar Programlama Sanatı". Ve genellikle, bir şey özyinelemeli olarak hesaplanan daha az zaman ve uzayda tamamen farklı bir yaklaşım ile hesaplanabilir. Bu klasik örneği Fibonacci sayıları veya bunların dizileri. Kesinlikle derece planında bu sorunla karşılaştın.

On taraftan bu para, biz kesinlikle hayal bir programlama sistemi çok gelişmiş olarak tedavi etmek için bir özyinelemeli tanımı bir formül gibi davet için bugünkü ileri matematik ve ön sonuçlar, bu nedenle teklif hızını parası olmadan güçlük söylüyorum bilgisayarı tam olarak hangi adımları takip hesabı, bir formül ile bir özyinelemeli tanımı. Dijkstra neredeyse kesinlikle böyle bir sistemi hayal mi. Uzun zaman programlama dilinin semantiği edilmesi ayırmak için harcadı. Sonra tekrar, belirli olmayan ve onun çoklu programlama dillerini pratik bir profesyonel programcı yukarıda bir ligde.

Son tahlilde, birçok işlevi sadece düz daha kolay, okumak, anlamak, ve özyinelemeli formu yazmak için. Zorlayıcı bir sebep olmadıkça, muhtemelen (el ile) açıkça yinelemeli bir algoritma bu işlevler dönüştürme olmamalı. Bilgisayarınızı bu işi doğru bir şekilde idare edecektir.

Bir zorlayıcı bir neden göremiyorum. Süper-yüksek bir düzeyde prototip bir sistem var dil gibi varsayalım [asbest iç çamaşırı giyme] Scheme, Lisp, Haskell, OCaml, Perl, Pascal ya. Varsayalım koşulları C ya da Java uygulaması gerekir. (Belki de siyaset.) O zaman kesinlikle yinelemeli olarak yazılmış bazı işlevler olabilir ama, kelimenin tam anlamıyla tercüme, çalışma zamanı sistemi patlar. Örneğin, sonsuz kuyruk özyineleme Düzeni içinde mümkündür, ama aynı deyim mevcut C ortamlar için bir soruna neden olur. Başka bir örnek, Pascal destekleyen lexically iç içe fonksiyonlar ve statik kapsam, ama C Yok.

Bu şartlar altında, orijinal dil siyasi direnci aşmak için deneyebilirsiniz. Lisp kötü, Greenspun (yanak) onuncu hukuk olarak kendini reimplementing bulabilirsiniz. Yoksa sadece çözüm için tamamen farklı bir yaklaşım bulabilirsiniz. Ancak, ne olursa olsun, mutlaka bir yolu var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • grickle

    grickle

    22 AĞUSTOS 2006
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • Kanál používateľa McsFuego

    Kanál použ

    12 EKİM 2011