Ini agak tidak jelas, tetapi kalkulus muncul dalam tipe data aljabar. Untuk setiap tipe yang diberikan, tipe konteks satu lubangnya adalah turunan dari tipe itu. Lihat pembicaraan luar biasa ini untuk tinjauan umum tentang keseluruhan subjek. Ini adalah terminologi yang sangat teknis, jadi mari kita jelaskan.
Tipe Data aljabar
Anda mungkin pernah menemukan tupel yang disebut sebagai jenis produk (jika tidak, itu karena mereka adalah produk kartesian dari dua jenis). Kami akan menerima ini secara harfiah dan menggunakan notasi:
a∗b
ab
a+b
aNabNba+bNa+Nb
Jenis-jenis ini terlihat seperti ekspresi aljabar normal dan kita dapat, pada kenyataannya, memanipulasi mereka seperti itu (to the point).
Sebuah contoh
Dalam bahasa fungsional definisi umum dari daftar (diberikan dalam Haskell di sini) adalah ini:
data List a = Empty
| Cons a List
Ini mengatakan bahwa daftar kosong atau tuple dari nilai dan daftar lain. Mengubah itu menjadi notasi aljabar, kita mendapatkan:
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
Definisi ini kemudian mengatakan bahwa daftar adalah salah satu unit, atau tupel dari satu item, atau tupel dari dua item, atau tiga dll, yang merupakan definisi dari daftar!
Konteks Satu Lubang
Sekarang ke konteks satu lubang: konteks satu lubang adalah apa yang Anda dapatkan ketika Anda 'mengambil nilai dari' jenis produk. Mari kita beri contoh:
a2aa+a2a
Mengambil nilai dari tuple 3 memberikan tuple 2, tetapi ada tiga varian yang berbeda:
(a,a,_)
(a,_,a)
(_,a,a)
3a2a3
Untuk contoh terakhir kami, mari gunakan daftar:
Jika kami mengambil ekspresi asli kami untuk daftar:
L(a)=1+a∗L(a)
Kami dapat mengatur ulang untuk mendapatkan:
L(a)=11−a
(Di permukaan ini mungkin tampak seperti omong kosong, tetapi jika Anda mengambil seri taylor dari hasil ini, Anda mendapatkan definisi yang kami peroleh sebelumnya.)
Sekarang jika kita membedakan ini, kita mendapatkan hasil yang menarik:
∂L(a)∂a=(L(a))2
Dengan demikian satu daftar telah menjadi sepasang daftar. Ini sebenarnya masuk akal: dua daftar yang dihasilkan sesuai dengan elemen di atas dan di bawah lubang di daftar asli!