คำถามติดแท็ก lambda-calculus

6
ส่วนใดของ Hindley-Milner ที่คุณไม่เข้าใจ
ฉันสาบานว่าเคยเป็นเสื้อยืดขายที่มีคำอมตะ: ส่วนไหนของ คุณไม่เข้าใจเหรอ ในกรณีของฉันคำตอบก็คือ ... ทั้งหมด! โดยเฉพาะอย่างยิ่งฉันมักเห็นสัญกรณ์แบบนี้ในเอกสาร Haskell แต่ฉันก็ไม่รู้ว่ามันหมายถึงอะไร ฉันไม่รู้ว่ามันควรจะเป็นสาขาวิชาคณิตศาสตร์ ฉันรู้จักตัวอักษรของตัวอักษรกรีกแน่นอนและสัญลักษณ์เช่น "∉" (ซึ่งโดยปกติจะหมายถึงสิ่งที่ไม่ใช่องค์ประกอบของชุด) ในทางกลับกันฉันไม่เคยเห็น "⊢" มาก่อน ( Wikipedia อ้างว่าอาจหมายถึง "พาร์ติชัน" ) ฉันไม่คุ้นเคยกับการใช้ vinculum ที่นี่ (มักจะหมายถึงส่วน แต่ที่ไม่ปรากฏจะเป็นกรณีที่นี่.) ถ้าอย่างน้อยก็มีคนบอกฉันได้ว่าจะเริ่มมองหาที่ใดเพื่อเข้าใจความหมายของสัญลักษณ์ทะเลนี้นั่นจะเป็นประโยชน์

4
ทำไม Haskell (GHC) ถึงเร็วขนาดนี้
Haskell (พร้อมGHCคอมไพเลอร์) นั้นเร็วกว่าที่คุณคาดไว้มาก ใช้อย่างถูกต้องสามารถใช้ภาษาใกล้เคียงกับภาษาระดับต่ำได้ (สิ่งที่ชื่นชอบสำหรับ Haskellers ที่ต้องทำคือพยายามและรับภายใน 5% ของ C (หรือแม้กระทั่งเอาชนะ แต่นั่นหมายความว่าคุณกำลังใช้โปรแกรม C ที่ไม่มีประสิทธิภาพเนื่องจาก GHC รวบรวม Haskell ถึง C) คำถามของฉันคือทำไม? Haskell เป็นการประกาศและขึ้นอยู่กับแคลคูลัสแลมบ์ดา สถาปัตยกรรมเครื่องจักรมีความจำเป็นอย่างชัดเจนโดยขึ้นอยู่กับเครื่องจักรทัวริง ที่จริง Haskell ไม่มีคำสั่งประเมินที่เฉพาะเจาะจง นอกจากนี้แทนที่จะจัดการกับชนิดข้อมูลเครื่องคุณทำประเภทข้อมูลพีชคณิตตลอดเวลา ที่แปลกประหลาดที่สุดคือฟังก์ชั่นการสั่งซื้อที่สูงขึ้น คุณอาจคิดว่าการสร้างฟังก์ชั่นได้ทันทีและการขว้างมันไปรอบ ๆ จะทำให้โปรแกรมช้าลง แต่การใช้ฟังก์ชันคำสั่งซื้อที่สูงกว่าทำให้ Haskell เร็วขึ้น ดูเหมือนว่าในการเพิ่มประสิทธิภาพรหัส Haskell คุณจะต้องทำให้มันดูสง่างามและเป็นนามธรรมมากกว่าการใช้เครื่องจักร ไม่มีคุณสมบัติขั้นสูงใด ๆ ของ Haskell ที่ดูเหมือนจะส่งผลกระทบต่อประสิทธิภาพการทำงานของมันหากไม่ได้ปรับปรุง ขออภัยถ้านี่คือเสียงที่ฟังดู แต่นี่คือคำถามของฉัน: ทำไม Haskell (เรียบเรียงกับ GHC) เร็วขนาดนี้โดยพิจารณาจากธรรมชาติที่เป็นนามธรรมและความแตกต่างจากเครื่องจักรทางกายภาพ? หมายเหตุ: …

2
เหตุใดผู้ประเมินที่เหมาะสม opt-calculus จึงสามารถคำนวณเลขชี้กำลังแบบโมดูลาร์ขนาดใหญ่โดยไม่ต้องใช้สูตรได้
หมายเลขคริสตจักรเป็นการเข้ารหัสตัวเลขธรรมชาติเป็นฟังก์ชัน (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 อย่างเรียบร้อยคุณสามารถยกกำลัง 2 หมายเลขคริสตจักรได้โดยใช้มัน นั่นคือถ้าคุณใช้ 4-2 คุณจะได้รับจำนวนคริสตจักรหรือ16 2^4เห็นได้ชัดว่านั่นเป็นเรื่องที่ไม่สามารถเกิดขึ้นได้จริง จำนวนคริสตจักรต้องการหน่วยความจำเชิงเส้นและช้ามากจริงๆ การประมวลผลสิ่ง10^10ที่ GHCI ตอบได้อย่างรวดเร็วจะใช้เวลานานและไม่สามารถใส่หน่วยความจำบนคอมพิวเตอร์ของคุณได้ ฉันได้ทำการทดลองกับผู้ประเมินที่เหมาะสมที่สุดเมื่อเร็ว ๆ นี้ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.