ฉันกำลังทำงานกับภาษาที่ใช้แสดงออกของลำดับวงศ์ตระกูล ML ดังนั้นจึงจำเป็นต้องมีการอนุมานแบบตามธรรมชาติ> :)
ตอนนี้ฉันกำลังพยายามที่จะขยายการแก้ปัญหาตามข้อ จำกัด ไปสู่ปัญหาประเภทอนุมานตามการใช้งานง่าย ๆ ใน EOPL (Friedman และ Wand) แต่พวกเขามีประเภทข้อมูลพีชคณิตขั้นตอนที่สวยงาม
สิ่งที่ฉันมีจนถึงตอนนี้ทำงานได้อย่างราบรื่น; ถ้าการแสดงออกe
คือa + b
, e : Int
, และa : Int
b : Int
ถ้าe
เป็นการแข่งขัน
match n with
| 0 -> 1
| n' -> n' * fac(n - 1)`,
ฉันถูกต้องสามารถอนุมานได้ว่าt(e) = t(the whole match expression)
, t(n) = t(0) = t(n')
, t(match) = t(1) = t(n' * fac(n - 1)
และอื่น ๆ ...
แต่ฉันไม่แน่ใจมากเมื่อมันมาถึงประเภทข้อมูลเกี่ยวกับพีชคณิต สมมติว่าฟังก์ชั่นเช่นตัวกรอง:
let filter pred list =
match list with
| Empty -> Empty
| Cons(e, ls') when pred e -> Cons (e, filter ls')
| Cons(_, ls') -> filter
สำหรับรายการประเภทที่จะยังคง polymorphic a * a list -> a list
จุดด้อยความต้องการที่จะเป็นชนิด ดังนั้นในการสร้างข้อ จำกัด เหล่านี้ฉันต้องหาตัวสร้างพีชคณิตประเภทนี้อย่างชัดเจน - ปัญหาที่ฉันมีตอนนี้คือ 'บริบทความอ่อนไหว' ของการใช้ประโยชน์หลายอย่างของตัวสร้างพีชคณิต - ฉันจะแสดงในสมการข้อ จำกัด ของฉันได้อย่างไรa
ใน แต่ละกรณีจะต้องเหมือนกันหรือไม่
ฉันมีปัญหาในการหาคำตอบทั่วไปเกี่ยวกับเรื่องนี้และฉันไม่สามารถหาวรรณกรรมจำนวนมากเกี่ยวกับเรื่องนี้ เมื่อใดก็ตามที่ฉันพบสิ่งที่คล้ายกัน - ภาษาที่ใช้แสดงออกซึ่งมีข้อสรุปตามประเภทของข้อ จำกัด - พวกเขาหยุดสั้น ๆ เพียงแค่ประเภทข้อมูลเกี่ยวกับพีชคณิตและ polymorphism
ข้อมูลใด ๆ ที่ชื่นชมมาก!