2011-05-08 27 views
5

Haskell'de 'iç içe geçmiş' modeli nedir. Her yerde terimi duyuyorum ama aslında ne anlama geldiğinden emin değilim. Bunu nasıl tanımlarsınız? Herhangi bir örnek?Haskell'de iç içe geçmiş bir desen nedir?

Şimdiden teşekkürler.

eklemek için düzenlenebilir:

"Desenler örneklerde olduğu gibi değişmezleri ve iç içe desenleri içerebilir (istek üzerine ders kitabı naklen):

addPair (0,y) = y 

addPair (x,y) = x+y 


shift :: ((Int,Int),Int) -> (Int,(Int,Int)) 

shift ((x,y),z) = (x,(y,z)) 
+0

Sanırım Haskell'de yoğun olarak kullanılan özyinelemeli mantıkla ilgili bir şey olabilir. – Pieter

+0

@Pieter bundan daha basit olmalıdır – maclunian

+2

Duyduklarınızın bir örneğini belirtmek ister misiniz? Benim bildiğim kadarıyla, bu terime bağlı kanonik bir anlam yoktur. – Ingo

cevap

6

Bu, bir modelle eşleştirilecek anlamına gelir bu başka desen içeren örnekte, (x, y) desen daha büyük ((x, y), z) desen içinde bulunan yuvalama aşağıdakilerin tümünü yasal örneğin keyfi derin olabilir.:.

f ((x2,x0),x1)     =() 
f' (((x3, x2),x0),x1)   =() 
f'' ((((x4,x3), x2),x0),x1)  =() 
f''' (((((x5,x4),x3), x2),x0),x1) =() 

vb. Bu aynı zamanda listeleri ve cebirsel veri türleri kapsar: Burada

f [[x]] =() 
f' [[[x]]] =() 

g (Just (Just x))  =() 
g' (Just (Just (Just x))) =() 

, f listelerin bir listesini alır f' listelerinin listelerin bir listesini alır g başka Maybe (yani, Maybe (Maybe a) olan) içeren Maybe alır ve g' Yanılıyor olabilirim ama ben sadece bir "iç içe olmayan" desen addPair x = x veya addPair x y = x+y gibi bir şey olurdu bağlamdan varsayabiliriz bir Maybe (Maybe (Maybe a))

+0

eğer plz yapabiliyorsan? yuvalama genellikle olursa olsun desen ne kadar derinden "iç içe" doğrusal olmalıdır desenlerde sözcük kapsamlarda ama değişkenlerle ilişkili olduğu için - bu mutsuz ifadeler IMHO olduğunu – maclunian

+0

ah, ben şimdi anlamaya başladım. Bu nedenle, * alt-desen * terimi daha iyi olabilir (* alt ifadelere * benzer şekilde). – maclunian

+0

Not); – Ingo

0

sürer. Benim inandığım argümanların bir desen olduğuna inanıyorum. Çoğu programlama dilinde, bu basit bir x y olacaktır. Bu durumda argüman deseniniz daha karmaşık olabilir, örn. (x, y) veya ((x, y), z).

Yuvalama muhtemelen "bir demet veya liste" ya da "bir nonflat tuple veya liste" anlamına gelir.

İlgili konular