yılında Fix, Mu ve Nu arasındaki fark üç beyanlar Ne var olan nedir?Ed Kmett en <code>recursion-scheme</code> pakette Ed Kmett en tekrarlama düzeni paketinde
cevap
Mu
, katlama olarak yinelemeli bir türü temsil eder ve Nu
, açıldığını gösterir. Haskell'de, bunlar izomorftur ve aynı türü temsil etmenin farklı yollarıdır. Eğer Haskell'in keyfi bir özyinelemeye sahip olmadığını iddia ediyorsanız, bu türler arasındaki ayrım daha ilginç hale gelir: Mu f
en az (başlangıç) f
sabit noktasıdır ve Nu f
en büyük (uçbirim) sabit noktasıdır.
f
sabit bir nokta, yani ters fonksiyonlar in :: f T -> T
, out :: T -> f T
bir çift tip T
T
ve f T
arasında bir izomorfizm vardır. Fix
tipi sadece, doğrudan izomorfizmi ilan etmek için Haskell'in yerleşik tipi özyinesini kullanır. Ancak hem Mu
hem de Nu
için giriş/çıkış yapabilirsiniz.
Somut bir örnek için, bir an için yinelemeli değerler yazamayacağınızı varsayın. Mu Maybe
, yani :: forall r. (Maybe r -> r) -> r
değerlerine sahip olanlar, doğal olanlardır, {0, 1, 2, ...}; Nu Maybe
'un sakinleri, yani :: exists x. (x, x -> Maybe x)
değerleri, {0, 1, 2, ..., ∞} conaturallarıdır. Nu Maybe
'un neden fazladan bir sakinin olduğunu görmek için bu türlerin olası değerlerini düşünün.
bu türleri için bazı sezgi almak istiyorsanız, bir eğlence egzersiz (kabaca zorluk artan sırada) özyineleme olmadan aşağıdakileri uygulamak olabilir:
zeroMu :: Mu Maybe
-
,
zeroNu :: Nu Maybe
,succNu :: Nu Maybe -> Nu Maybe
,inftyNu :: Nu Maybe
muTofix :: Mu f -> Fix f
,fixToNu :: Fix f -> Nu f
inMu :: f (Mu f) -> Mu f
,outMu :: Mu f -> f (Mu f)
inNu :: f (Nu f) -> Nu f
,outNu :: Nu f -> f (Nu f)
succMu :: Mu Maybe -> Mu Maybe
Ayrıca şu uygulamaya çalışıyorum, ama onlar Özyinelemeyi gerektirir:
nuToFix :: Nu f -> Fix f
,fixToMu :: Fix f -> Mu f
Mu f
az sabit noktasıdır ve Nu f
olduğunu En büyük, bu yüzden :: Mu f -> Nu f
bir fonksiyon yazmak çok kolay, ama bir fonksiyon yazıyor :: Nu f -> Mu f
serttir; Akıma karşı yüzmek gibi.
(az bir nokta ben bu tür daha ayrıntılı bir açıklama yazmak için anlamı, ama o bu biçim için biraz fazla uzun olabilir.)
- 1. "@ject" -ed özniteliği sıfırdır
- 2. c typedef (ed) opak işaretçi
- 3. eclipse, pydev, easy_install-ed yumurta problemi
- 4. ip fragmanları 8 bayt metin kitabında <strong>Bilgisayar Ağları</strong> James F.Kurose Beşinci Ed yılında
- 5. En İyi Sıvı Düzeni CSS Çerçevesi?
- 6. En Büyük Numara <x?
- 7. Swift kodunu en yeni sürüme güncellemek gerekiyor
- 8. D3 Kabarcık grafik/paket düzeni - En büyük baloncuklardan en küçüğüne kadar kabarcıklar nasıl ortaya çıkar?
- 9. Farklı düzenlerde sabit en boy oranıyla android düzeni ölçeklendirme
- 10. Jquery.Mobile sayfalarına ASP.NET MVC Düzeni uygulamak için en iyi yöntemler
- 11. Diğer kullanıcıları kaydetmek/favorilere eklemek için en iyi ray eklentisi?
- 12. En erken tarih IEnumerable'dan <DateTime>
- 13. AutoFac en Func <T> hizmet
- 14. Arama sonuçları sıralama düzeni Plone
- 15. En büyükten en alçaktan en düşük olan en iyi 10'a kadar en iyi `oyuncu adı`` sikkeleri ile görüntüleyin
- 16. en iyi (veya en azından iyi) kılavuz
- 17. En son veya en erken tarihi bul
- 18. En hızlı/en güvenli dosya bulma/ayrıştırma?
- 19. Öğrenme için aralıklı tekrarlama (SRS)
- 20. Karakter kümesini tekrarlama
- 21. Koşul karşılandığında diziyi tekrarlama
- 22. İran halısı tekrarlama
- 23. Java'da gridLayout'ın en boy oranını nasıl kilitleyebilirim?
- 24. Bir ipi en soldaki en yakın + ve en yakın + nasıl kırpılır? devam ediyor 4gl
- 25. en son, ikinci en son ve üçüncü en son kayıt almak için
- 26. En etkili yolu bir <code>IList<T></code> nesneden birden fazla öğe kaldırmak için en etkili yoludur Ne ılist <T>
- 27. 0 test sınıfı paketinde bulundu ‘<varsayılan paket>’
- 28. CoreGraphics ile en düşük/en yüksek kuadil bezier bulma
- 29. Ambarlardaki en yüksek ve en düşük noktayı vurgulama
- 30. Jmeter'da en iyi yolu bulmanın en iyi yolu nedir?
çok fazla teori bilmiyorum, ama ben toplamak Daha fazla ispatlama dili için, 'Mu' en az sabit nokta ve 'Nu' en büyük sabit nokta. Haskell'de, bu üçünün hepsinin eşdeğer olması gerekiyordu (inanıyorum).Nu' için 'Mu' ve' ana' için 'cata'ı uygulamak çok kolay olduğunu unutmayın. – dfeuer
Bu kata https://www.codewars.com/kata/folding-through-a-fixed-point/haskell'i çözmeye çalışın – xgrommx