โชคไม่ดีที่วรรณกรรมในเรื่องนี้มีเนื้อหาหนาแน่นมาก ฉันก็อยู่ในรองเท้าของคุณเช่นกัน ฉันได้รับการแนะนำครั้งแรกในหัวข้อนี้จาก Programming Languages: Applications and Interpretation
http://www.plai.org/
ฉันจะพยายามสรุปแนวคิดเชิงนามธรรมตามด้วยรายละเอียดที่ฉันไม่พบชัดเจนในทันที ประการแรกการอนุมานประเภทสามารถคิดได้จากการสร้างแล้วจึงแก้ข้อ จำกัด ในการสร้างข้อ จำกัด คุณเรียกคืนโครงสร้างไวยากรณ์และสร้างข้อ จำกัด อย่างน้อยหนึ่งข้อในแต่ละโหนด ตัวอย่างเช่นถ้าโหนดเป็นตัว+
ดำเนินการตัวถูกดำเนินการและผลลัพธ์ทั้งหมดจะต้องเป็นตัวเลข โหนดที่ใช้ฟังก์ชันมีประเภทเดียวกันกับผลลัพธ์ของฟังก์ชันและอื่น ๆ
สำหรับภาษาที่ไม่มีlet
คุณสามารถแก้ข้อ จำกัด ข้างต้นแบบสุ่มสี่สุ่มห้าได้โดยการแทนที่ ตัวอย่างเช่น:
(if (= 1 2)
1
2)
ในที่นี้เราสามารถพูดได้ว่าเงื่อนไขของคำสั่ง if ต้องเป็นบูลีนและประเภทของคำสั่ง if นั้นเหมือนกับประเภทของคำสั่งthen
และelse
ประโยค เนื่องจากเรารู้1
และ2
เป็นตัวเลขโดยการแทนที่เราจึงรู้ว่าif
คำสั่งคือตัวเลข
สิ่งที่น่ารังเกียจและสิ่งที่ฉันไม่เข้าใจมาระยะหนึ่งคือการจัดการกับให้:
(let ((id (lambda (x) x)))
(id id))
ที่นี่เราผูกไว้id
กับฟังก์ชันที่ส่งคืนสิ่งที่คุณส่งผ่านหรือที่เรียกว่าฟังก์ชันเอกลักษณ์ ปัญหาคือประเภทของพารามิเตอร์ของฟังก์ชันที่มีความแตกต่างกับการใช้งานของแต่ละx
id
ประการที่สองid
คือฟังก์ชันประเภทa -> a
ที่a
สามารถเป็นอะไรก็ได้ (a -> a) -> (a -> a)
ครั้งแรกเป็นประเภท สิ่งนี้เรียกว่า let-polymorphism กุญแจสำคัญคือการแก้ข้อ จำกัด ตามลำดับที่กำหนด: ก่อนอื่นให้แก้ข้อ จำกัด สำหรับคำจำกัดความของid
. a -> a
นี้จะเป็น จากนั้นสดสำเนาแยกต่างหากจากประเภทของid
สามารถทดแทนเข้าไปในข้อ จำกัด สำหรับแต่ละสถานที่id
จะใช้สำหรับตัวอย่างและa2 -> a2
a3 -> a3
สิ่งนี้ไม่สามารถอธิบายได้ในแหล่งข้อมูลออนไลน์ พวกเขาจะพูดถึงอัลกอริทึม W หรือ M แต่ไม่ใช่วิธีการทำงานในแง่ของการแก้ข้อ จำกัด หรือทำไมมันถึงไม่ barf เกี่ยวกับความหลากหลายของตัวอักษร: แต่ละอัลกอริทึมเหล่านั้นบังคับใช้คำสั่งในการแก้ข้อ จำกัด
ฉันพบว่าแหล่งข้อมูลนี้มีประโยชน์อย่างมากในการผูก Algorithm W, M และแนวคิดทั่วไปของการสร้างข้อ จำกัด และการแก้ปัญหาทั้งหมดเข้าด้วยกัน มีความหนาแน่นเล็กน้อย แต่ดีกว่ามาก:
http://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf
เอกสารอื่น ๆ อีกมากมายก็ดีเช่นกัน:
http://people.cs.uu.nl/bastiaan/papers.html
ฉันหวังว่าจะช่วยชี้แจงโลกที่ค่อนข้างมืดมน