บริบทคือแนวคิดเกี่ยวกับวากยสัมพันธ์ บริบทเป็นคำที่มีหนึ่งช่องในนั้น (บางครั้งมีบริบทหลายหลุมคำจำกัดความจะได้รับอย่างชัดเจนในกรณีนั้น) ไวยากรณ์ของบริบทถูกกำหนดโดยการใช้ไวยากรณ์ของคำศัพท์และอนุญาตให้หนึ่ง subterm เป็นรูแทนคำ ใน BNF (ฉันใช้แลมบ์ดาแคลคูลัสเป็นตัวอย่างโดยไม่มีบูลีนและถ้าข้อความที่ไม่นำสิ่งใดมาเป็นตัวอย่าง):
[]
C::=[]∣x∣tC∣Ct∣λx.C
เมื่อรวมกับนิยามของบริบทแล้วความหมายของการวางคำในบริบท ถ้าคือบริบทและเป็นคำที่แล้วเป็นคำที่ได้รับโดยการใส่ในต้นไม้ไวยากรณ์ที่หลุมอยู่ใน[t] นี่คือการทดแทนโดยที่ตัวแปรรับประกันว่าจะเกิดขึ้นเพียงครั้งเดียว (แต่โปรดทราบว่า "ตัวแปร" ที่ถูกแทนที่เป็นตัวแปรที่ระดับเมตาไม่ใช่ตัวแปรในแลมบ์ดา - แคลคูลัสหรือภาษาอื่น ๆ ของข้อกำหนด )C[]tC[t]t[]C[t][]t
บริบทใช้เพื่อกำหนดคำจำกัดความต่าง ๆ ในความหมาย ตัวอย่างทั่วไปคือแนวคิดของการประเมินส่วนใหญ่เกี่ยวข้องกับการกำหนดบริบทที่สามารถทำการประเมินได้ ตัวอย่างเช่นพิจารณา lambda-แคลคูลัส ความคิดพื้นฐานของการประเมินจะได้รับจากกฎการลดเบต้า:
โดยที่เป็นการทดแทนนำไปใช้กับM
(λx.M)N→βM{x←N}
M{x←N}x↦NM
นี่ไม่ใช่คำจำกัดความที่สมบูรณ์ของการลดเบต้า: เมื่อกำหนดแล้วสามารถลดเบต้าได้ถ้ามีเทอมและและตัวแปรเช่นนั้นที่ ; แต่โดยทั่วไปสามารถเบต้าลดถ้ามี subtermเช่นว่าN อีกวิธีหนึ่งในการแสดงสิ่งนี้คือสามารถลดเบต้าได้หากมีบริบทและคำบางคำและและตัวแปรเช่นนั้นtMNxt=(λx.M)Ntt′t′=(λx.M)NtCMNxt=C[(λx.M)N]. เมื่อมีการลดลงดังกล่าวด้านขวามือคือ\}] หากต้องการใช้สัญกรณ์อย่างเป็นทางการการลดเบต้าจะถูกกำหนดโดยกฎการหักเงินต่อไปนี้:
คำจำกัดความเดียวกันสามารถแสดงได้โดยทำให้บริบททุกชนิดชัดเจน:
C[M{x←N}]
(λx.M)N→βM{x←N}(β)M→βNC[M]→βC[N](γ)
(λx.M)N→βM{x←N}(β)M→βNλx.M→βλx.N(Cλ)M→βNMP→βNP(C@<)M→βNPM→βPN(C@>)
คำจำกัดความนี้ให้ผลการลดเบต้านั่นคือแนวคิดของการประเมินที่ช่วยให้ลดคำจำกัดความใด ๆ การคำนวณที่ดำเนินการในภาษาการเขียนโปรแกรมมักจะไม่อนุญาตให้มีการลดเทอมย่อยภายในฟังก์ชั่น: กฎการลดสามารถใช้ที่ระดับบนสุดหรือทางด้านซ้ายหรือด้านขวามือของแอปพลิเคชัน เราสามารถแสดงสิ่งนี้ได้โดยการกำหนดบริบทใหม่ซึ่งไม่อนุญาตให้มีรูปแบบประโยคทั้งหมด:
เราสามารถใช้ไวยากรณ์นี้เพื่อกำหนดความหมายทางความหมาย ของการประเมินที่ไม่ใช่บางส่วน:
นอกจากนี้เรายังสามารถแสดงคำจำกัดความนี้โดยการขยายคำนิยามดังที่เราได้ทำเพื่อลดเบต้าเต็มรูปแบบ:
D::=[]∣x∣tD∣Dt
(λx.M)N→npM{x←N}M→npND[M]→npD[N]
(λx.M)N→npM{x←N}(β)M→npNMP→npNP(C@<)M→npNPM→npPN(C@>)
Dจะถูกเรียกว่าบริบทการประเมินเพราะมันถูกใช้เพื่อกำหนดแนวคิดของการประเมิน บริบทการประเมินไม่ใช่บริบทชนิดพิเศษ ค่อนข้างจะเรียกมันว่าบริบทการประเมินผลเป็นเรื่องของสิ่งที่บริบทจะใช้สำหรับ
ฉันจะให้อีกตัวอย่างหนึ่งของบริบท ลองกำหนดค่าตามไวยากรณ์ต่อไปนี้:
ทีนี้เรามานิยามบริบทอีกประเภท:
เมื่อเทียบกับข้างต้นแล้วรูสามารถอยู่ด้านฟังก์ชันของแอปพลิเคชันได้ถ้าอาร์กิวเมนต์ของแอปพลิเคชันคือ ค่า กำหนดความคิดของการลดดังต่อไปนี้:
V
V::=xV1…Vn∣λx.M
E::=[]∣ME∣EV
D(λx.M)V→cbvaM{x←V}(βcbva)M→βNE[M]→cbvaE[N](γcbva)
ด้วยข้อ จำกัด ที่อาร์กิวเมนต์ของฟังก์ชันจะต้องเป็นค่าในกฎข้อแรกและนามธรรมแลมบ์ดานั้นไม่ใช่บริบทเราจึงกำหนดกลยุทธ์การประเมินผลการโทรตามมูลค่า ด้วยข้อ จำกัด เพิ่มเติมที่อาร์กิวเมนต์ถูกประเมินก่อนฟังก์ชันนี่คือการเรียกใช้คำสั่งตามค่า