Naqshli hisoblash - Pattern calculus

Naqshli hisoblash barcha hisob-kitoblarga asoslanadi naqshlarni moslashtirish juda umumiy turdagi. Yoqdi lambda hisobi, bu auniform davolashni qo'llab-quvvatlaydi funktsiyalarni baholash. Shuningdek, bu funktsiyalarni argument sifatida chetlab o'tishga va natijada qaytarishga imkon beradi. Bunga qo'shimcha ravishda, namunaviy hisob-kitoblar argumentlarning ichki tuzilishiga, ular juft bo'lib bo'ladigan yagona kirishni qo'llab-quvvatlaydi ro'yxatlar yoki daraxtlar. Bundan tashqari, bu naqshlarni argument sifatida o'tkazishga va natijalar sifatida qaytarishga imkon beradi. Yagona kirish apattern-ga mos keladigan funktsiya bilan tasvirlangan hajmi bu o'zboshimchalik hajmini hisoblaydi ma'lumotlar tuzilishi. Ning yozuvida dasturlash tilibondi, u tomonidan berilgan rekursiv funktsiya

ruxsat bering rec hajmi =  | x y -> (hajmi x) + (hajmi y)  | x -> 1

Ikkinchisi yoki sukut bo'yicha ish x -> 1 naqshga mos keladi xargumentga qarshi va qaytadi 1. Ushbu harf faqat birinchi holatda mos kelmasa ishlatiladi. Birinchidan, yoki maxsus ish har qanday biriga qarshi o'yinlar birikma, bo'sh bo'lmagan ro'yxat yoki juftlik. Mos keladigan bog'lamlar x chap komponentga va y to'g'ri komponentga. Keyin ishning asosiy qismi ushbu tarkibiy qismlarning o'lchamlarini birlashtiradi.

Shu kabi usullar qidirish va yangilash uchun umumiy so'rovlarni beradi. Rekursiya va dekompozitsiyani shu tarzda birlashtirish hosil beradi yo'l polimorfizmi.

Naqshlarni parametr sifatida o'tkazish qobiliyati (naqsh polimorfizmi) umumiy eliminatorni aniqlash orqali tasvirlangan. Berilgan konstruktorlar deylik Barg daraxt barglarini yaratish uchun va Graf o'zaro hisoblagichlarni konvertatsiya qilish uchun. Tegishli eliminatorlar keyin

elimLeaf  = |  Barg y -> y elimCount = | Graf y -> y

Masalan, elimLeaf (Leaf 3) ga baho beradi 3 kabi elimCount (3-son).

Ushbu misollarni umumiy eliminatorni qo'llash orqali ishlab chiqarish mumkinelim ushbu konstruktorlarga. U tomonidan belgilanadi

elim = | x -> | {y} x y -> y

Endi elim barg ga baho beradi | {y} Barg y -> y ga teng bo'lgan yo'q qilish. Shuningdek elim soni ga teng elimCount.

Umuman olganda, jingalak qavslar {} naqshning bog'langan o'zgaruvchilarini o'z ichiga oladi, shunday qilib x bepul va y bog'langan | {y} x y -> y.

Tashqi havolalar