คำถามติดแท็ก functional-programming

1
ระบบประเภทที่ป้องกันการรั่วไหลของหน่วยความจำที่เกี่ยวข้องกับความขี้เกียจ?
บางทีแหล่งที่มาหลักของปัญหาประสิทธิภาพการทำงานใน Haskell คือเมื่อโปรแกรมสร้างความลึกที่ไม่ได้ จำกัด ซึ่งทำให้เกิดการรั่วไหลของหน่วยความจำและการล้นสแต็กที่อาจเกิดขึ้น ตัวอย่างคลาสสิกคือการกำหนดsum = foldr (+) 0ใน Haskell มีระบบประเภทใดบ้างที่มีการบังคับใช้การขาด thunks ดังกล่าวในโปรแกรมที่ใช้ภาษาสันหลังยาวหรือไม่? ดูเหมือนว่าสิ่งนี้ควรอยู่ในลำดับเดียวกันของความยากลำบากเช่นเดียวกับการพิสูจน์คุณสมบัติของโปรแกรมคงที่อื่น ๆ โดยใช้ส่วนขยายของระบบประเภทเช่นความปลอดภัยของเธรดบางส่วนหรือความปลอดภัยของหน่วยความจำ

1
อัลกอริทึมเพื่อกำหนดความเท่าเทียมกันของฟังก์ชั่นในแคลคูลัสแลมบ์ดาที่พิมพ์หรือไม่
เรารู้ว่าแลมบ์ดาที่พิมพ์ด้วยความเท่าเทียมกันนั้นสามารถตัดสินได้ เมื่อให้ M, N: σ→τมันจะตัดสินใจได้หรือไม่ว่าจะเป็น X: σ, MXหรือไม่≃β≃β≃_β

2
ฉันจะเลือกโครงสร้างข้อมูลพจนานุกรมที่ทำงานได้อย่างไร
ฉันได้อ่านเกี่ยวกับโครงสร้างข้อมูลต่อไปนี้: Ideal Hash พยายามของแบกเวล ตารางแฮชแบบไดนามิกของ Larson ต้นไม้สีแดง - ดำ ต้นไม้แพทริเซีย ... และฉันแน่ใจว่ามีเป็นจำนวนมากของคนอื่น ๆ ออกมี ฉันได้เห็นน้อยมากในแบบของสิ่งที่แต่ละคนเหมาะสมกว่าหรือทำไมฉันถึงเลือกอีกแบบหนึ่ง ดังนั้นนี่คือคำถามสองสามข้อตามบรรทัดเหล่านี้: โครงสร้างข้อมูลพจนานุกรมที่ใช้งานได้มีความสำคัญอะไรที่ต้องรู้ อะไรคือข้อดีข้อเสียของวิธีการเหล่านี้? เมื่อใดที่จะใช้โครงสร้างข้อมูลที่จำเป็นมากขึ้น หมายเลข 2 และ 3 เป็นสิ่งที่สำคัญกว่า :-)

1
ข้อ จำกัด ทางทฤษฎีของภาษาการเขียนโปรแกรม Stratego มีอะไรบ้าง
Strategoเป็นภาษาการแปลงการเขียนโปรแกรม / การเขียนใหม่ DSL แอนโธนีสโลนได้ทำผลงานบางส่วนทำการดำเนินงานที่รันบน Scala อะไรคือข้อ จำกัด ทางทฤษฎีของ Stratego ในฐานะภาษาที่ใช้งานได้? (ไม่คำนึงถึงการใช้งาน) เราสามารถเขียนคำสั่ง ycombinator เพื่อการสมัครใน Stratego ได้ไหม?

3
วิธีทำให้แลมบ์ดาแคลคูลัสแข็งแกร่งเป็นปกติโดยไม่มีระบบประเภท?
มีระบบใดบ้างที่คล้ายกับแคลคูลัสแลมบ์ดาที่มีความแข็งแกร่งในการทำให้กลับสู่สภาพปกติโดยไม่จำเป็นต้องเพิ่มระบบประเภทที่อยู่ด้านบนของมัน?

3
คลาสของฟังก์ชันการเรียกซ้ำแบบดั้งเดิมเทียบเท่ากับคลาสของฟังก์ชันที่ทารกในครรภ์พิสูจน์ให้เห็นถึงการยุติหรือไม่?
ทารกในครรภ์ถ้าคุณยังไม่เคยได้ยินของมันสามารถอ่านข้อมูลเกี่ยวกับที่นี่ มันใช้ระบบของ 'เมทริกซ์การโทร' และ 'กราฟการโทร' เพื่อค้นหา 'พฤติกรรมการเรียกซ้ำ' ทั้งหมดของการโทรซ้ำในฟังก์ชั่น เพื่อแสดงให้เห็นว่าฟังก์ชั่นยุติมันแสดงให้เห็นว่าพฤติกรรมการเรียกซ้ำทั้งหมดของการโทรซ้ำที่เกิดขึ้นกับฟังก์ชั่นเชื่อฟัง 'การสั่งซื้อพจนานุกรม' บางอย่าง มันเป็นตัวตรวจสอบการยกเลิกช่วยให้ฟังก์ชั่นแบบเรียกซ้ำทั้งหมดและฟังก์ชั่นเช่นฟังก์ชั่น Ackermann โดยทั่วไปจะอนุญาตการเรียกซ้ำแบบดั้งเดิมหลายอาร์กิวเมนต์ นี่เป็นพื้นฐานของตัวตรวจสอบการยกเลิกของ Agda; ฉันเชื่อว่า Coq มีสิ่งอำนวยความสะดวกที่คล้ายกันเช่นกัน แต่อาจจะเป็นแบบทั่วไปมากกว่า จากการอ่านกระดาษ"รวมหน้าที่ Programming" โดย DA อร์เนอร์ เขาอธิบายว่าภาษาที่เสนอของเขาจะสามารถแสดง "ฟังก์ชันการเรียกซ้ำแบบดั้งเดิมทั้งหมด" ตามที่เห็นในระบบ T ที่ศึกษาโดย Godel เขากล่าวต่อไปว่าระบบนี้เป็นที่รู้จักกันว่ารวมฟังก์ชั่นวนซ้ำทั้งหมดซึ่งสามารถพิสูจน์ได้ทั้งหมดในตรรกะลำดับแรก Dose Fetus อนุญาตการทำงานแบบเรียกซ้ำทั้งหมดหรือไม่ ถ้าเป็นเช่นนั้นจะอนุญาตให้ใช้ฟังก์ชันที่ไม่ใช่ฟังก์ชันแบบเรียกซ้ำแบบดั้งเดิมได้หรือไม่? สามารถให้การอ้างอิงสำหรับคำตอบนี้ได้หรือไม่? (นี่ไม่จำเป็นจริง ๆ เพราะฉันแค่สนใจมันเป็นแค่การอ่านเรื่องสมรสบางเรื่องจะดี) คำถามโบนัส: ฟังก์ชั่นการเรียกซ้ำแบบดั้งเดิมมีคำจำกัดความที่รัดกุมมากในแง่ของ combinators: พิมพ์ S และ K (ที่ไม่สามารถแสดงจุดรวม combinators คงที่), …

1
การใช้งานที่เป็นไปได้ของคลาสประเภทของ Haskell คืออะไรและมีข้อได้เปรียบอะไรบ้าง
เท่าที่ฉันทราบฟังก์ชัน Haskell ที่มีข้อ จำกัด ประเภทคลาสจะถูกรวบรวมภายในฟังก์ชันด้วยอาร์กิวเมนต์เพิ่มเติมที่รับพจนานุกรมด้วยการใช้งานที่จำเป็นของคลาสประเภทเฉพาะแต่ละประเภท มีความเป็นไปได้อื่น ๆ อีกหรือไม่ว่าคอมไพล์คลาสชนิดไหน? ถ้าเป็นเช่นนั้นข้อดีของพวกเขาคืออะไร? และคอมไพเลอร์ตัวไหนที่ใช้มัน?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.