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
, xs
ve muhtemelen f
. Her Γ
biri biraz farklı çalışan 4 aşırı yükleme vardır .
list
İlk aşırı yükleme, list
bir değer a
ve bir ikili fonksiyon alır f
. Bir liste alan, a
boşsa geri dönen yeni bir işlev döndürür ve boş f
değilse baş ve kuyruğu çağırır . Örneğin, Γ_1€
bir liste alır, -1
boş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, listN
buna benzer list
, ancak bunun a
dışı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 listN
olduğ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 a
ve bir işlev alır ve bir liste alan f
yeni bir işlev döndürür g
. Ancak, bu süre f
, g
kendisi 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 listF
genel bir özyineleme şeması uyguladığı anlamına gelir .
/ listF
ile açık özyineleme genellikle bu cevaptakiyle aynı uzunlukta veya daha kısa olduğu için çok sık kullanılmaz .list
listN
listNF
listNF
etmektir listF
Ne listN
etmektir list
girişi: a
atlanı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.