การเปรียบเทียบบริบทของภาษาที่มี `quote '-`eval` เป็นเรื่องไม่สำคัญหรือไม่?


13

ใน [1], มิทเชลล์ Wand แสดงให้เห็นว่าการเพิ่ม fexprs เพื่อแคลคูลัสแลมบ์ดาบริสุทธิ์ trivializes ทฤษฎีของความเท่าเทียมกันตามบริบทที่มีความหมายสองแง่เป็นบริบทเทียบเท่า IFF พวกเขาจะ -congruent เมื่อสำรวจที่เกี่ยวข้องกับงานเขาไป "ผลของเราขยายการสังเกตเก่าของอัลเบิร์เมเยอร์ [2] ที่และทำให้เท่าเทียมกันตามบริบทจิ๊บจ๊อย" แต่หมายถึง [2] สิ่งที่สามารถพบได้เป็นเพียงคำสั่งต่อไปนี้โดยเมเยอร์:αevalquote

ฉันคิดว่าในภาษาที่มีคุณสมบัติquote- evalเช่น LISP [3] ไม่มีความแตกต่างระหว่างวัตถุทางวากยสัมพันธ์และปฏิบัติการได้ ในความเป็นจริงquote- evalดูเหมือนจะปลอดภัยพอใน LISP เพราะแม้ว่าquotesyntactically ดูเหมือนตัวดำเนินการ bona fi de เช่นพูดว่าcondมันไม่ทำงานเหมือนอย่างใดอย่างหนึ่งquoteเป็นพารามิเตอร์ของโพรซีเดอร์) ถึงกระนั้นฉันยังไม่ได้เห็นตัวอย่างที่น่าเชื่อที่คุณสมบัติquote- evalคุ้มค่า

โดยไม่คำนึงถึงข้อบกพร่องเล็กน้อยหนึ่งข้อในความคิดเห็นเหล่านี้ที่อาจทำให้ผู้อ่านเข้าใจผิดเพื่ออนุมานว่าcondสามารถส่งผ่านเป็นพารามิเตอร์ไปยังกระบวนการ ถ้าฉันเข้าใจอย่างถูกต้องสิ่งที่เมเยอร์พูดว่า " quote- evalดูเหมือนปลอดภัยพอ" หมายความว่าquote- evalอาจไม่ทำให้ทฤษฎีสมการเป็นเรื่องเล็กน้อยแม้ว่าเขาจะไม่ได้พิสูจน์ก็ตาม

แก้ไข:

ตามที่ Martin แนะนำเนื่องจากเอกสารทั้งสามฉบับอ้างถึงการจัดการกับภาษาตระกูล LISP ให้ตั้งคำถามภายใต้การตั้งค่าเดียวกันนี้ การเทียบเคียงเชิงบริบทของภาษาที่มีquote- evalโดยเฉพาะ LISP บนโลกนั้นเล็กน้อยหรือไม่?

[1] มิทเชลล์ไม้กายสิทธิ์ทฤษฎี Fexprs Is น่ารำคาญ การคำนวณเสียงกระเพื่อมและสัญลักษณ์ 10 (3): 189-199 (1998)

[2] Albert Meyer, Puzzle ใน Programming Logic Workshop เรื่องการพัฒนาซอฟต์แวร์อย่างเป็นทางการ 1984

[3] จอห์นแมคคาร์ฟังก์ชั่นซ้ำของการแสดงออกเชิงสัญลักษณ์และการคำนวณของพวกเขาโดยเครื่อง Part I การสื่อสารของพลอากาศเอกในเดือนเมษายน 2503


1
ฉันขอแนะนำให้พิจารณาว่าคุณสามารถทำให้คำถามมีความเฉพาะเจาะจงมากขึ้นหรือไม่: มีวิธีการที่แตกต่างกันของการใช้ eval / quote เช่นการสร้างและตัวเลือกต่าง ๆ ในการออกแบบการเทียบบริบทสำหรับแคลคูลัสนั้น สิ่งตีพิมพ์ล่าสุดที่น่าสนใจคือการให้เหตุผลเกี่ยวกับโปรแกรมหลายขั้นตอนโดย Inoue, Taha
Martin Berger

1
ความแตกต่างที่สำคัญคือระหว่าง CTMP (การคอมไพล์เวลาเมตาการคอมไพล์ตามตัวอย่างโดย Template Haskell, Lisp / Scheme / Racket และConvergeและ RTMP (การเขียนโปรแกรมเมตาเวลาทำงานเช่น eval ของ Javascript หรือ MetaOCaml) พารามิเตอร์อื่นกำลังพิมพ์ . นี่คือการพูดคุยภาพรวมผมให้ไม่กี่เดือนหลังในเรื่องนี้ค่อนข้างตื้นฉันกลัวเกี่ยวกับ equivalences บริบทการทำงานเล็ก ๆ น้อย ๆ ได้รับการดำเนินการส่วนใหญ่เป็นเจ้าของรัฐของเหลวของโปรแกรมการสนับสนุนสำหรับการเขียนโปรแกรมเมตา..
มาร์ตินเบอร์เกอร์

1
@ plmday: BTW ภาษาการเขียนโปรแกรมในอุดมคติอุดมคติ Wand formalises ในThe Theory of Fexprs Is Trivialค่อนข้างแตกต่างจากการเขียนโปรแกรม meta-Lisp อดีตคือ RTMP, หลัง (ขึ้นอยู่กับการใช้งานที่เป็นรูปธรรม) ไม่ได้
Martin Berger

1
@MartinBerger: คุณสามารถโพสต์คำพูดของคุณเป็น pdf ได้หรือไม่?
Dave Clarke

1
@ Dave Clarke แน่นอนนี่ไง! ข้อเสนอแนะยินดีต้อนรับ
Martin Berger

คำตอบ:


2

ก่อนอื่นทั้งหมดขึ้นอยู่กับสิ่งที่คุณทำเพื่อเป็นบริบทของคุณ ถ้า(quote [])เป็นบริบทบริบทก็คือความเท่าเทียมกันทางไวยากรณ์

ตามเนื้อผ้าบริบทเพื่อความเท่าเทียมบริบทจะนำไปสู่บริบทที่ "การแสดงออก" ในสิ่งที่มีความหมายในภาษาสามารถปรากฏ กฎนี้ออกบริบทเช่น"[]"ที่บริบทวางอาร์กิวเมนต์ภายในสตริงตัวอักษร บริบทประเภทนี้ยัง IIRC ตัดออกโดย Quine เมื่อเขาอธิบายความโปร่งใสอ้างอิง

จากมุมมองนี้ฉันคิดว่า(quote [])มันไม่ใช่บริบท บริบทเป็นสถานที่ที่การประเมินผลการแสดงออกอาจเกิดขึ้นเช่นในร่างกายของฟังก์ชั่นหรือในการโต้แย้งของแอปพลิเคชัน

อาจเกิดปัญหาขึ้นซึ่งหมายความว่าในโปรแกรม Lisp ที่มีมาโคร (หรือโปรแกรม Racket หรือ Scheme) คุณไม่ทราบว่าบริบทคืออะไรจนกว่าคุณจะเรียกใช้กระบวนการขยายแมโครที่ไม่ทำลายเนื่องจากคุณไม่ทราบว่านิพจน์อยู่ที่ไหน เป็น ไม่ว่าคุณจะคิดว่านี่เป็นปัญหาหรือไม่ส่วนใหญ่เป็นคำถามเชิงปรัชญามากกว่าคำถามเชิงเทคนิค


ผมไม่คิดว่ามีวิธีหนึ่งที่จะไม่รวม(quote [])มากกว่าการคิดนึกอยากเป็นบริบท: ไล่ความคิดของการรักษา'datumเป็นน้ำตาลประโยคสำหรับ(quote datum)แล้ว'[]เป็น"[]"ไม่เป็นบริบท มาโครของโครงการถูกบดบังquoteอยู่แล้ว
วันที่

ฉันไม่เข้าใจความคิดเห็นของคุณ @day ทำไมความสัมพันธ์ระหว่าง'datumและ(quote datum)เปลี่ยนแปลงอะไร?
Sam Tobin-Hochstadt

หากquoteเป็นภาษาที่สร้างและ'datumdesugars ไป(quote datum)คนจะมีแนวโน้มที่จะโต้แย้งว่า(quote [])เป็นบริบท หากเราลบออกquoteจากภาษาหลัก แต่สนับสนุน'datumไวยากรณ์ตามตัวอักษรพวกเขาจะมีแนวโน้มที่จะโต้แย้งน้อยลงเพราะ"[]"เป็นที่รู้กันดีว่าไม่ใช่บริบท
วันที่

@day นี่เป็นความเข้าใจผิด ไม่มีคำจำกัดความที่ถูกต้องของ "บริบท" มันเป็นเพียงบริบทที่แตกต่างกันสนับสนุนแนวคิดที่แตกต่างของความเท่าเทียมกันทางบริบท ตัวอย่างเช่นช่องว่างมีความหมายอย่างมีนัยสำคัญใน"[]"บริบท แต่ไม่ได้อยู่ใน(quote [])บริบท สิ่งที่ "คน" อาจโต้เถียงไม่มีที่นี่และที่นั่น
Sam Tobin-Hochstadt

ฉันยอมรับว่าไม่มีคำจำกัดความที่ถูกต้องของบริบท แต่มีคำจำกัดความดั้งเดิมหนึ่งคำซึ่งยึดตามรูปแบบนามธรรมซึ่งเป็นคำที่ Wand ใช้ในบทความของเขาและ Meyer ใช้ในบทความของเขาเพื่อตั้งคำถามเกี่ยวกับสถานะของความเท่าเทียมบริบท สิ่งที่คุณแนะนำคือการแทนที่นิยามดั้งเดิมของบริบทด้วยบริบทการประเมิน สิ่งที่ฉันแนะนำคือการรักษาความหมายดั้งเดิมของบริบทเอาออกquoteจากไวยากรณ์ที่เป็นนามธรรม แต่สนับสนุนไวยากรณ์ที่แท้จริง (คอนกรีต) ของคำพูด (ช่องว่างที่ไม่สำคัญ) จากสิ่งที่ฉันเห็นทั้งสองวิธีนำไปสู่ ​​"ไม่" กับคำถามเดิม
วันที่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.