Kullanımları Γ
Listelerde desen eşleştirme veya liste yapısökümüΓ olarak bilinen yerleşik öğenin ana kullanımı, bir listeyi bir baş ve kuyruğa bölmek ve bunlara ikili bir işlev uygulamaktır. Bu, Haskell desen eşleştirme deyimine karşılık gelir
f (x : xs) = <something>
f [] = <something else>
burada <something>bir ihtiva eden bir ifadedir x, xsve muhtemelen f. Her Γbiri biraz farklı çalışan 4 aşırı yükleme vardır .
list
İlk aşırı yükleme, listbir değer ave bir ikili fonksiyon alır f. Bir liste alan, aboşsa geri dönen yeni bir işlev döndürür ve boş fdeğilse baş ve kuyruğu çağırır . Örneğin, Γ_1€bir liste alır, -1boşsa döndürür ve kuyrukta ilk öğenin ilk oluşma dizini değilse döndürür .
listN
İkinci aşırı yükleme, listNbuna benzer list, ancak bunun adışındadır ve bunun yerine dönüş türünün varsayılan değeri kullanılır. Örneğin , varsayılan sayısal değer olduğundan Γ€eşdeğerdir .Γ0€0
Pratikte, varsayılan değer alakasız veya tam olarak ihtiyacınız olan şey listNolduğundan daha sık kullanılır list. Ortak bir örüntü, üç fonksiyonun Γ~αβγnerede αβγolduğu; bu βilk eleman ve γkuyruk için geçerlidir ve sonuçları ile birleştirir α. Örneğin bu cevapta kullanılmıştır . Diğer modeller şunlardır Γo:αtatbik edilmesi için αbirinci elemana ve sadece Γ·:mαtatbik edilmesi için αbirinci dışındaki tüm elemanlar için. İkincisi bu cevapta kullanıldı .
listF
Üçüncü aşırı yüklenme biraz daha karmaşıktır. Mesela list, bir değer ave bir işlev alır ve bir liste alan fyeni bir işlev döndürür g. Ancak, bu süre f, gkendisi olan ve herhangi bir değerde (giriş listesinin kuyruğu dahil, ancak bunlarla sınırlı olmamak üzere) ek bir işlev argümanı alır . Bu , listelerde listFgenel bir özyineleme şeması uyguladığı anlamına gelir .
/ listFile açık özyineleme genellikle bu cevaptakiyle aynı uzunlukta veya daha kısa olduğu için çok sık kullanılmaz .listlistN
listNF
listNFetmektir listFNe listNetmektir listgirişi: aatlanırsa, ve dönüş türü varsayılan değeri yerine kullanılır. Nadir durumlarda, örneğin bu cevapta , doğru bir kattan daha kısa olabilir .
Özyinelemeli sürümlerinin bir örneği olarak, Γişlev Γλ·:o⁰↔bir listeyi önce sırayla, son, ikinci, ikinci-son, üçüncü, üçüncü-son, vb. Karıştırır.
Çevrimiçi deneyin!
İşlev f, λ·:o⁰↔argümanı ⁰tüm işlev olan açık lambda'dır . Yapan fşey kuyruğu tersine çevirir ↔, daha sonra ana işlevi özyinelemeli olarak çağırır o⁰ve son olarak kafayı geri yapıştırır ·:. Tabii ki, Γ·:o₀↔bir bayt daha kısadır, ancak çizgi bu işlevden başka bir şey içeriyorsa çalışmaz.