Yüksek Sipariş İşlevleri, İşlevsel Programlamaya daha fazla güç sağlıyor mu?


13

Benzer bir soruyu cstheory'de sordum .

Stackoverflow'daki bu cevaba göre, tembel olmayan bir saf fonksiyonel programlama dilinde bir karmaşıklığına sahipken, zorunlu programlamada aynı algoritma Ω ( n ) olan bir algoritma vardır . FP diline tembellik eklemek algoritmayı Ω ( n ) yapar .Ω(nlogn)Ω(n)Ω(n)

Yüksek Dereceli Fonksiyonlar ile ve bunlar olmadan FP dilini karşılaştıran eşdeğer bir ilişki var mı? Hala Tamamlanıyor mu? Öyleyse, FP'de Yüksek Düzen eksikliği dili daha az "güçlü" veya verimli hale getirir mi?


Hangi FP dili?
reinierpost

Yüksek mertebe fonksiyonları ve tembel değerlendirme aynı değildir, afaik. Peki sorunuz ne hakkında?
Raphael

Yanıtlar:


11

Yeterince güçlü bir işlevsel programlama dilinde (örneğin, kapakları uygulamak için veri türleriyle ), işlev bozukluğunun dönüşümü ile daha yüksek düzenin tüm kullanımlarını ortadan kaldırabilirsiniz . Bu yöntem bu tür bir dili derlemek için kullanıldığından, bunun performansları etkilemediğini ve bu ayarda daha yüksek düzenin dili daha az güçlü yapmadığını makul bir şekilde varsayabilirsiniz . Ancak kodun nasıl yazılacağını etkiler.

Ancak, dil yeterince güçlü değilse, evet, daha yüksek düzen ifade gücü sağlar. Lambda hesabını düşünün: herhangi bir üst düzey işlev olmadan, çoğu şey en temel veri türleri (tamsayılar, booleans) işlevler kullanılarak uygulandığından gerçekten hiçbir şey yapamaz.

Sonuç olarak, bu gerçekten dile bağlıdır.


Yukarıda benim cevabım. Aşağıda, zorunlu diller hakkında olağan bir varsayım hakkında bir yorum.

Ω(nlogn)Ω(n)Ω(n)

nO(1)O(logn)O(logm)mmnmn

O(1)


4

İfade ile ne demek istediğinize bağlı.

Yüksek dereceli bir şey eklediğine dair bir argüman: birinci dereceden dillerle, ilkel özyineleme Ackermann işlevini ifade etmek için yeterli değildir . Bununla birlikte, üst düzey işlevlerin varlığında, ilkel özyineleme yeterlidir:

Ackermann 0=λx.x+1Ackermann (m+1)=Iter (Ackermann m)Iter f 0=f 1Iter f (n+1)=f (Iter f n)

Bu, Ackermann işlevini yalnızca ilkel özyineleme kullanarak tanımlar.

IterIterNkNkIter(NN)(NN)

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.