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


3
อะไรคือความแตกต่างระหว่างการต่อเนื่องและการโทรกลับ?
ฉันท่องเว็บไปทั่วเพื่อค้นหาการรู้แจ้งเกี่ยวกับความต่อเนื่องและเป็นเรื่องที่น่าเหลือเชื่อว่าคำอธิบายที่ง่ายที่สุดสามารถสร้างความสับสนให้กับโปรแกรมเมอร์ JavaScript อย่างฉันได้อย่างไร โดยเฉพาะอย่างยิ่งเมื่อบทความส่วนใหญ่อธิบายความต่อเนื่องของโค้ดใน Scheme หรือใช้ monads ในที่สุดฉันก็คิดว่าฉันเข้าใจสาระสำคัญของความต่อเนื่องแล้วฉันอยากรู้ว่าสิ่งที่ฉันรู้นั้นเป็นความจริงหรือไม่ ถ้าสิ่งที่ฉันคิดว่าเป็นความจริงไม่เป็นความจริงก็เป็นความไม่รู้และไม่ใช่การรู้แจ้ง นี่คือสิ่งที่ฉันรู้: ในเกือบทุกภาษาฟังก์ชันจะส่งคืนค่า (และการควบคุม) ไปยังผู้โทรอย่างชัดเจน ตัวอย่างเช่น: var sum = add(2, 3); console.log(sum); function add(x, y) { return x + y; } เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายข้อมูลโค้ด ตอนนี้ในภาษาที่มีฟังก์ชันชั้นหนึ่งเราอาจส่งผ่านการควบคุมและส่งคืนค่าไปยังการเรียกกลับแทนที่จะส่งกลับไปยังผู้โทรอย่างชัดเจน: add(2, 3, function (sum) { console.log(sum); }); function add(x, y, cont) { cont(x + y); } เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายข้อมูลโค้ด ดังนั้นแทนที่จะส่งคืนค่าจากฟังก์ชันเรากำลังดำเนินการต่อด้วยฟังก์ชันอื่น ดังนั้นฟังก์ชันนี้จึงถูกเรียกว่าต่อเนื่องจากฟังก์ชันแรก …

7
ความต่อเนื่องของ Scala คืออะไรและเหตุใดจึงต้องใช้
ฉันเพิ่งเสร็จสิ้นการเขียนโปรแกรมใน Scalaและฉันได้ตรวจสอบการเปลี่ยนแปลงระหว่าง Scala 2.7 และ 2.8 สิ่งที่น่าจะสำคัญที่สุดคือปลั๊กอินความต่อเนื่อง แต่ฉันไม่เข้าใจว่ามันมีประโยชน์อะไรหรือทำงานอย่างไร ฉันเห็นว่ามันดีสำหรับ I / O แบบอะซิงโครนัส แต่ฉันไม่สามารถหาสาเหตุได้ แหล่งข้อมูลยอดนิยมบางส่วนในหัวข้อนี้ ได้แก่ : ความต่อเนื่องที่คั่นและ Scala ไปที่ Scala รสชาติของ 2.8: ความต่อเนื่อง อธิบายความต่อเนื่องแบบคั่น (ใน Scala) และคำถามนี้ใน Stack Overflow: อะไรคือความแตกต่างที่ใหญ่ที่สุดระหว่าง Scala 2.8 และ Scala 2.7? น่าเสียดายที่ไม่มีการอ้างอิงใด ๆ เหล่านี้ที่พยายามกำหนดว่าความต่อเนื่องมีไว้เพื่ออะไรหรือฟังก์ชัน shift / reset ควรทำอย่างไรและฉันไม่พบการอ้างอิงใด ๆ ที่ทำ ฉันไม่สามารถเดาได้ว่าตัวอย่างใดในบทความที่เชื่อมโยงนั้นทำงานอย่างไร (หรือสิ่งที่พวกเขาทำ) ดังนั้นวิธีหนึ่งที่จะช่วยฉันได้คือการไปทีละบรรทัดผ่านหนึ่งในตัวอย่างเหล่านั้น แม้แต่เรื่องง่ายๆจากบทความที่สาม: reset …

3
ทำไมต้องทำงานต่อเนื่องเมื่องานทั้งหมดถูกดำเนินการพร้อมกัน?
ฉันเพิ่งสังเกตข้อสงสัยเกี่ยวกับTask.WhenAllวิธีการเมื่อทำงานบน. NET Core 3.0 ฉันส่งTask.Delayงานง่าย ๆเป็นอาร์กิวเมนต์เดียวไปยังTask.WhenAllและฉันคาดว่างานที่ถูกห่อจะทำงานเหมือนกันกับงานต้นฉบับ แต่นี่ไม่ใช่กรณี ความต่อเนื่องของงานดั้งเดิมจะถูกดำเนินการแบบอะซิงโครนัส (ซึ่งเป็นที่ต้องการ) และความต่อเนื่องของหลาย ๆ ตัวTask.WhenAll(task)จะถูกดำเนินการแบบซิงโครนัสแบบหนึ่งหลังจากสิ่งอื่น ๆ นี่คือตัวอย่างของพฤติกรรมนี้ งานของผู้ปฏิบัติงานสี่คนกำลังรอTask.Delayงานเดียวกันให้เสร็จและดำเนินการคำนวณต่อไปอย่างหนัก (จำลองโดย a Thread.Sleep) var task = Task.Delay(500); var workers = Enumerable.Range(1, 4).Select(async x => { Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} before await"); await task; //await Task.WhenAll(task); Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} after await"); Thread.Sleep(1000); // …

1
วิธีแยกตัวประกอบความต่อเนื่อง Monad ให้เป็น Adjoints ด้านซ้ายและขวา
เนื่องจากสถานะ monad สามารถแยกเป็นผลิตภัณฑ์ (ซ้าย - Functor) และ Reader (ขวา - แทนได้) มีวิธีในการแยกแยะความต่อเนื่องของ Monad หรือไม่? รหัสด้านล่างคือความพยายามของฉันซึ่งจะไม่ตรวจสอบประเภท -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.