Bu biraz belirsiz, ama matematik cebirsel veri türlerinde ortaya çıkıyor. Herhangi bir tür için, tek delikli bağlamların türü bu türün türevidir. Konuyla ilgili genel bir bakış için bu mükemmel konuşmaya bakın . Bu çok teknik bir terminoloji, o yüzden açıklayalım.
Cebirsel Veri Tipleri
Ürün tipleri olarak adlandırılan perdelere rastlamış olabilirsiniz (eğer değilse, iki tipin kartezyen ürünü oldukları için ). Bunu tam anlamıyla alıp gösterimi kullanacağız:
a∗b
ab
a+b
aNabNba+bNa+Nb
Bu türler normal cebirsel ifadeler gibi görünür ve aslında onları bir noktaya kadar değiştirebiliriz.
Bir örnek
İşlevsel dillerde, bir listenin (burada Haskell'de verilen) ortak bir tanımı şöyledir:
data List a = Empty
| Cons a List
Bu, bir listenin ya boş ya da bir değerin bir demetinin ya da başka bir listenin olduğunu söylüyor. Bunu cebirsel notasyona dönüştürerek şunu elde ederiz:
L(a)=1+a∗L(a)
1L(a)
L(a)=1+a∗L(a)
L(a)=1+a∗(1+a∗L(a))
L(a)=1+a+a2∗(1+a∗L(a))
L(a)=1+a+a2+a3∗(1+a∗L(a))
L(a)=1+a+a2+a3+a4+a5...
xn
Bu tanım, o zaman bir listenin bir ünite veya bir öğenin bir demeti veya iki öğenin bir demeti olduğunu söyler; bu , bir listenin tanımıdır!
Tek delikli Bağlamlar
Şimdi tek delikli bağlamlarda: tek delikli içerik, bir ürün türünden 'değer aldığınızda' elde ettiğiniz şeydir. Bir örnek verelim:
a2aa+a2a
3 tupledan bir değer almak 2 tuple verir, ancak üç farklı değişken vardır:
(a,a,_)
(a,_,a)
(_,a,a)
3a2a3
Son örneğimizde, bir liste kullanalım:
Bir liste için orijinal ifademizi alırsak:
L(a)=1+a∗L(a)
Almak için yeniden düzenleyebiliriz:
L(a)=11−a
(Yüzeyde bu saçmalık gibi görünebilir, ancak bu sonucun taylor serisini alırsanız daha önce türetmiş olduğumuz tanımı alırsınız.)
Şimdi bunu ayırt edersek, ilginç bir sonuç elde ederiz:
∂L(a)∂a=(L(a))2
Böylece bir liste bir çift liste haline geldi. Bu aslında anlamlıdır: Üretilen iki liste, orijinal listedeki deliğin altındaki ve altındaki öğelere karşılık gelir!