Sen programla! Kilise kodlamalarına bir göz atın . Muhtemelen son derece güçlü olduğuna ikna etmesi gereken tüm aritmetik işlemlerinin ne kadar yapılabileceğini görebilirsiniz. Ancak listelerdeki operasyonlara bakmayı seviyorum. Herhangi bir veri yapısının çoğunu, üzerinde en önemli işlemi yapan bir işlev olarak tanımlayabilirsiniz.
Örneğin, bir listenin kodlaması, üzerinde katlanan katlama işlevidir. Bu Kilise'nin kodlaması değil, Percie'nin türlerinden ve programlama dillerinden aldığım bir kod olduğuna dikkat edin. Kilisenin çift kodlamaları bize özyineleme sağlamaz, bunu bir tür özyineleme birleştiricisi ile kendimize eklemek zorundayız.
böylece bir liste iki argüman alır, katlama yapmak için bir işlev ve bir noktada katlamaya eklenecek başlangıç değeri.
cons x xs = lam f. lam a. f x (xs f a)
nil = lam f. lam a. a
şimdi bir toplama fonksiyonu verilen bir toplamı tanımlayabiliriz (yukarıdan kilise kodlarına bakınız)
sum xs = xs add 0
daha fazlasını yapabilir ve bir harita fonksiyonu tanımlayabiliriz
consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil
Hala burada bir hesaplama olduğu konusunda ikna olmadıysanız ve herhangi bir hesaplama yapabildiğinizden emin olmak istiyorsanız , sabit nokta birleştiricisine bakın . Bazen kafamı düşünmek biraz ağrıyor, bu yüzden sezgisel diyeceğimden emin değilim, ancak bazı argümanlarla manuel olarak değerlendirirseniz neler olduğunu görebilirsiniz.