แคลคูลัสแลมบ์ด้าและตรรกะการรวมกันเป็นแบบเดียวกันหรือไม่?


26

ฉันกำลังอ่าน " แลมบ์ดาแคลคูลัสและเครื่องผสม " โดย Hindley และ Seldin ฉันไม่ใช่ผู้เชี่ยวชาญ แต่ได้สนใจแคลคูลัสแลมบ์ดาเสมอเนื่องจากการมีส่วนร่วมกับการเขียนโปรแกรมการทำงาน (เริ่มจาก Lisp และ SICP และตอนนี้กับ R และ Haskell)

ใน " ไบนารีแลมบ์ดาแคลคูลัสและ Combinatory Logic" , John Trompกล่าวว่า:

CL อาจถูกมองว่าเป็นส่วนย่อยของแคลคูลัสแลมบ์ดา ... ทฤษฎีส่วนใหญ่เหมือนกันกลายเป็นสิ่งที่เท่าเทียมกันเมื่อมีกฎการขยาย

ภายใต้เงื่อนไขว่าใครจะใช้ตรรกะ combinatoryแทนแลมบ์ดาแคลคูลัส ?

การอ้างอิงใด ๆ จะได้รับการชื่นชม


ลองดูที่ "แคลคูลัสแลมบ์ดา: ไวยากรณ์และความหมาย" โดย HP Barendregt
Kaveh

คำตอบ:


15

สิ่งที่แตกต่างจากตรรกะเชิงการรวมตัวคือมันเป็นตัวแปรอิสระ บางครั้งสิ่งนี้มีประโยชน์ใน metamathematics และตรรกะเชิงปรัชญาซึ่งสถานะของตัวแปรนั้นยุ่งยาก

นอกจากนี้ยังอาจมีประโยชน์ในการใช้งานเนื่องจากการจัดการตัวแปรอาจปวดหัว Cf. เช่น Hughes, 1982, Super-combinators: วิธีการติดตั้งใหม่สำหรับภาษาที่ใช้งาน


3
ตรรกะเชิงการผสมไม่มีการพิจารณาว่ามีประโยชน์ในการใช้งานและไม่เคยใช้เพราะ "การจัดการตัวแปรสามารถทำให้ปวดหัว" Combinators และตัวแปรต่าง ๆ ถูกนำมาใช้ในการลดกราฟสำหรับภาษาที่ขี้เกียจ แต่ทุกวันนี้ Haskell (ภาษาสันหลังยาวที่โดดเด่นที่สุด) ใช้เทคนิคที่เหมาะสมกว่าในการลดกราฟ
Blaisorblade

ดูเช่น S. Peyton Jones, 1992, "การใช้งานฟังก์ชั่นขี้เกียจบนฮาร์ดแวร์หุ้น: เครื่อง
Spinless

2
@Blaisorblade: ผู้ผสมและตัวแปรถูกนำมาใช้ในการลดกราฟสำหรับภาษาที่ขี้เกียจ - ระวัง: Haskell และ ghc นั้นไม่เหมือนกันและวรรณกรรมนี้มี Haskells ที่ใช้ supercombinator หลายตัว แต่มันเป็นเรื่องจริงการเขียนโปรแกรมเชิงฟังก์ชั่นขั้นสูงได้ค้นพบข้อดีของประสิทธิภาพการจัดการสภาพแวดล้อมที่มีความซับซ้อนมากกว่า คุณยังคงเห็น supercombinators ที่ใช้เช่นในการเขียนโปรแกรมลอจิกลำดับสูงที่นี่ไม่เป็นความจริง Supercombinators ยังคงเป็นส่วนหนึ่งของสินค้าคงคลังของเทคนิคที่ใช้ในการดำเนินการเขียนโปรแกรมระดับสูง
Charles Stewart

Supercombinators หลีกเลี่ยงตัวแปรอิสระเท่านั้นไม่ จำกัด ขอบเขตดังนั้น IMHO จึงไม่สามารถใช้ตรรกะการรวมกันได้ ส่วนใหญ่เป็นคำแลมบ์ดาพิเศษ มีความแตกต่างที่น้อยกว่ามากระหว่างซุปเปอร์คอมบิวเตอร์, โปรแกรมแลมบ์ดาที่ยก (ถ้ามี, ไม่แน่ใจ) และการนำ GHC ไปใช้ (ที่ตัวชี้จากการปิดไปสู่ตัวแปรอิสระสามารถคัดลอกจากฟังก์ชันโฮสต์ได้ด้วยความบริสุทธิ์) ต้องบอกว่าฉันยังนึกถึง Utrecht Haskell Compiler ล่าสุดซึ่งคล้ายกับ GHC มาก แต่ IIRC ใช้แลมบ์ดาลิฟท์ ยังคงไม่ใช่ CL
Blaisorblade

ผมไม่ทราบว่าของโปรแกรมตรรกะขั้นสูง - ฉันพบกระดาษบนนี้: springerlink.com/content/t68777w270713p5n น่าเสียดายที่ฉันไม่มีเวลาอ่าน
Blaisorblade

4

อ้างอิงถึงความคิดเห็นของ John Tromp ฉันต้องการที่จะสังเกตว่าตรรกะ combinatory รู้สึกแตกต่างจากแคลคูลัสแลมบ์ดามาก เนื่องจากความสนใจของคุณเกิดจากการเขียนโปรแกรมที่ใช้งานได้คุณไม่ต้องการที่จะรู้ว่าตรรกะเชิงการรวม

บทช่วยสอนที่ฉันโปรดปรานเกี่ยวกับตรรกะเชิงผสมอยู่ในบันทึกการบรรยายเหล่านี้จากมหาวิทยาลัยเคมบริดจ์

อย่างไรก็ตามพวกเขาได้รับการแนะนำให้อธิบายการใช้ภาษาที่เรียกว่าขี้เกียจ (หรือการสมัคร); ตามที่ระบุไว้ในความคิดเห็นก่อนหน้าของฉันตอนนี้เทคนิคดังกล่าวล้าสมัยแล้ว


เนื่องจากภาษา combinatory ไม่ได้ถูกนำมาใช้ในการใช้ภาษาสันหลังยาว / การประยุกต์อีกต่อไปตอนนี้เทคนิคการทำอะไรที่ทันสมัย? และมีชื่อ / หมวดหมู่เพื่อจำแนกเทคนิคเหล่านี้หรือไม่
CMCDragonkai

@CMCDragonkai ดูความคิดเห็นที่cstheory.stackexchange.com/a/306/989เพื่อการสนทนา คำตอบที่สามารถนำไปใช้ได้จริงคือ "ดูเอกสารเกี่ยวกับสิ่งที่ GHC ทำ": มีเทคนิคที่แตกต่างหลากหลาย (รวมถึงเครื่อง STG และการเพิ่มประสิทธิภาพเช่นการวิเคราะห์ความเข้มงวด) ที่รวมเข้าด้วยกันเพื่อทำให้โปรแกรมขี้เกียจทำงานได้อย่างรวดเร็ว
Blaisorblade
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.