คำถามติดแท็ก continuation

2
Y combinator และการปรับหางเรียกให้เหมาะสม
คำจำกัดความของ Y combinator ใน F # คือ let rec y f x = f (y f) x f คาดว่าจะเป็นอาร์กิวเมนต์แรกที่มีความต่อเนื่องสำหรับปัญหาย่อยแบบเรียกซ้ำ การใช้ yf เป็นสิ่งต่อเนื่องเราจะเห็นว่า f จะถูกนำไปใช้กับการโทรติดต่ออย่างต่อเนื่องในขณะที่เราสามารถพัฒนาได้ let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... ปัญหาคือโครงร่างนี้ precludes โดยใช้การปรับ …

3
ทางเลือกใดในการใช้สแต็กเพื่อแสดงความหมายของการเรียกใช้ฟังก์ชัน?
เราทุกคนรู้และชื่นชอบที่การเรียกใช้ฟังก์ชันมักจะใช้งานโดยใช้ stack มีเฟรม, ที่อยู่ผู้ส่ง, พารามิเตอร์, ล็อตทั้งหมด อย่างไรก็ตามสแต็กเป็นรายละเอียดการใช้งาน: การเรียกประชุมอาจทำสิ่งต่าง ๆ (เช่น x86 fastcall ใช้ (ลงทะเบียน), MIPS และผู้ติดตามใช้หน้าต่างลงทะเบียนและอื่น ๆ ) และการเพิ่มประสิทธิภาพสามารถทำได้แม้กระทั่งสิ่งอื่น ๆ การเพิ่มประสิทธิภาพการโทรหาง .. ) แน่นอนว่าการมีคำสั่งกองซ้อนที่สะดวกในหลาย ๆ เครื่อง (VMs เช่น JVM และ CLR แต่ยังมีเครื่องจริงเช่น x86 ด้วย PUSH / POP เป็นต้น) ทำให้สะดวกในการใช้งานสำหรับการเรียกใช้ฟังก์ชั่น แต่ในบางกรณีก็เป็นไปได้ เพื่อตั้งโปรแกรมในลักษณะที่ไม่จำเป็นต้องใช้ call stack (ฉันกำลังคิดเกี่ยวกับสไตล์การส่งผ่านต่อเนื่องที่นี่หรือนักแสดงในระบบส่งข้อความ) ดังนั้นฉันเริ่มสงสัยว่า: เป็นไปได้หรือไม่ที่จะใช้ semantics call function โดยไม่มี …

2
ตัวอย่างของความต่อเนื่องที่ไม่ได้นำไปใช้เป็นขั้นตอนคืออะไร?
การสนทนาที่น่าสนใจเกี่ยวกับความแตกต่างระหว่างการเรียกกลับและการดำเนินการต่อบน SO ได้กระตุ้นคำถามนี้ ตามคำนิยามความต่อเนื่องเป็นตัวแทนของตรรกะที่จำเป็นในการคำนวณให้เสร็จสมบูรณ์ ในภาษาส่วนใหญ่สิ่งนี้แสดงให้เห็นว่าเป็นหนึ่งในขั้นตอนการโต้แย้งที่คุณผ่านสิ่งที่มีค่าต้องการการประมวลผลอย่างต่อเนื่อง ในภาษาที่ใช้งานได้อย่างหมดจด (ที่ทุกฟังก์ชั่นล้วน แต่เป็นพลเมืองชั้นหนึ่ง) ฉันคิดว่าความต่อเนื่องอาจเป็นรูปแบบที่สมบูรณ์ นี่คือท้ายที่สุดแล้วที่ฉันได้เข้าใจถึงการสืบเนื่องถึงจุดนี้มาก่อน อย่างไรก็ตามโลกที่เต็มไปด้วยรัฐ (ถอนหายใจ .. ) และดังนั้นคำจำกัดความทั่วไปไม่จำเป็นต้องให้สถานะโปรแกรมจับภาพต่อเนื่อง - มันต้องการเพียงความตั้งใจ เพื่อช่วยในการทำความเข้าใจฉันสามารถให้ตัวอย่างเป็นภาษาที่ใช้งานได้ซึ่งความต่อเนื่องถูกแสดงออกในรูปแบบที่เป็นนามธรรมมากกว่าฟังก์ชั่นหรือไม่? ฉันรู้ว่า Scheme ช่วยให้คุณสามารถคว้าความต่อเนื่องในปัจจุบันในรูปแบบของคลาส (call / cc) แต่ถึงกระนั้นดูเหมือนว่าขั้นตอนการโต้แย้งหนึ่งที่ส่งผ่านไปยัง call / cc นั้นจะได้รับความต่อเนื่องในปัจจุบันในรูปแบบของอีกแบบหนึ่ง ขั้นตอนการโต้แย้งที่ฟังก์ชั่นการโทร / cc'd สามารถใช้ผลของมัน

4
คุณเก็บรหัสด้วยการอ่าน / การเรียกกลับต่อเนื่องได้อย่างไร?
สรุป: มีรูปแบบการปฏิบัติที่ดีที่สุดบางอย่างที่ฉันสามารถติดตามเพื่อให้โค้ดของฉันสามารถอ่านได้แม้จะใช้รหัสอะซิงโครนัสและการโทรกลับหรือไม่ ฉันใช้ไลบรารี JavaScript ที่ทำสิ่งต่างๆมากมายแบบอะซิงโครนัสและอาศัยการโทรกลับอย่างหนัก ดูเหมือนว่าการเขียนวิธี "โหลด A, โหลด B, ... " ง่าย ๆ นั้นค่อนข้างซับซ้อนและยากที่จะติดตามโดยใช้รูปแบบนี้ ขอยกตัวอย่าง (contrived) สมมติว่าฉันต้องการโหลดรูปภาพจำนวนมาก (แบบอะซิงโครนัส) จากเว็บเซิร์ฟเวอร์ระยะไกล ใน C # / async ฉันจะเขียนสิ่งนี้: disableStartButton(); foreach (myData in myRepository) { var result = await LoadImageAsync("http://my/server/GetImage?" + myData.Id); if (result.Success) { myData.Image = result.Data; } else { write("error loading …

1
ความต่อเนื่องระดับเฟิร์สคลาสมีประโยชน์ในภาษาการเขียนโปรแกรมเชิงวัตถุสมัยใหม่หรือไม่?
การทำต่อเนื่องนั้นมีประโยชน์อย่างมากในภาษาโปรแกรมที่ใช้งานได้ (เช่นContmonad ใน Haskell) เพราะพวกมันยอมให้สัญกรณ์ง่ายและสม่ำเสมอสำหรับโค้ดสไตล์ที่จำเป็น นอกจากนี้ยังมีประโยชน์ในภาษาที่จำเป็นบางอย่างที่เก่ากว่าเพราะสามารถใช้ในการใช้คุณสมบัติภาษาที่ขาดหายไป (เช่นข้อยกเว้น coroutines, เธรดสีเขียว) แต่สำหรับภาษาเชิงวัตถุที่ทันสมัยด้วยการสนับสนุนในตัวสำหรับคุณลักษณะเหล่านี้สิ่งที่มีปากเสียงจะมีเป็นยังเพิ่มการสนับสนุนสำหรับตชั้นแรก (ไม่ว่าจะรูปแบบที่คั่นที่ทันสมัยมากขึ้นresetและshiftหรือโครงการเหมือนcall-with-current-continuation)? มีการขัดแย้งกับการเพิ่มการสนับสนุนอื่น ๆ นอกเหนือจากประสิทธิภาพการทำงานและความซับซ้อนของการดำเนินการ?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.