รหัสทั้งหมดสามารถแสดงเป็นชุดของการดำเนินการแผนที่ / ตัวกรอง / ลดได้หรือไม่?


16

ฉันเพิ่งได้รับ refactoring ชิ้นรหัสขนาดใหญ่และแทนที่ด้วยคำสั่ง Linq

การลบอคติภาษา - Linq เป็นชุดของแผนที่ / ตัวกรองและลดการดำเนินการที่ทำงานตามลำดับของข้อมูล

สิ่งนี้ทำให้ฉันคิดได้ว่าในทางทฤษฎีฉันจะสามารถทำสิ่งนี้ได้มากแค่ไหน ฉันจะสามารถเขียนรหัสพื้นฐานทั้งหมดลงในซีรีส์ใหม่ (หรือแม้แต่ชุดเดียว) ของแผนที่ / ตัวกรองและลดการทำงานได้ไหม

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

มีอะไรที่ไม่สามารถเขียนใหม่ได้ (ในทางทฤษฎี) เป็นคำสั่ง Linq หรือไม่?


สำหรับต้นไม้ดูที่นี่: stackoverflow.com/questions/250377/…
blueberryfields

ฉันคิดเสมอว่า "ลด" เพียงพอที่จะรับประกันว่าการทำให้เสร็จสมบูรณ์ของทัวริง (แผนที่และตัวกรองสามารถนำไปใช้เป็นการลดการดำเนินการได้หรือไม่) อย่างน้อยภาษาการทำงานที่เทียบเท่ากับการลด ฉันไม่รู้เกี่ยวกับ Linq มากพอที่จะตรวจสอบให้แน่ใจว่าการติดตั้งใช้งานนั้นมีมากเพียงใดตามหน้าที่การใช้งาน
blueberryfields

1
ฉันไม่รู้ แต่กฎง่ายๆคือสิ่งที่ทุกคนจะพิจารณาการเขียนโค้ดทั้งหมดของพวกเขาจะกลายเป็นทัวริงสมบูรณ์ แต่ข้อพิสูจน์ของการทำทัวริงนั้นไม่น่าตื่นเต้นนัก
psr

1
ฉันเห็นด้วยกับ psr; ฉันคิดว่าคำตอบที่ถูกต้องสำหรับคำถามนี้ต้องตอบทัวริงครบถ้วน หลักฐานอาจพยายามใช้เครื่องทัวริงโดยใช้การดำเนินการเหล่านี้เท่านั้น
Rob

ความคิดที่ไม่ได้ใช้งาน: แม้ว่าเราจะยอมให้เรื่องไร้สาระเหมือนmy_list.map(_ignored => a copy of my_list)แต่ดูเหมือนว่าการใช้พื้นที่ของโปรแกรมดังกล่าวนั้น จำกัด ขอบเขตโดยพหุนามบางอย่าง (ขึ้นอยู่กับความยาวของโปรแกรม) ดังนั้นภาษาดังกล่าวจึงไม่สามารถคำนวณปัญหาที่ไม่ได้อยู่ใน PSPACE ได้อย่างแน่นอน อย่างไรก็ตามเนื่องจากปัญหาต่าง ๆ ใน PSPACE ถูกพิจารณาว่าเป็นสิ่งที่ขัดจังหวะไม่ได้ที่จะพูดอะไรกับคลาสที่ใหญ่กว่านี่อาจไม่ใช่ข้อ จำกัด ที่ร้ายแรงมาก

คำตอบ:


1

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


1
มีไกลมากขึ้นในการเขียนโปรแกรมการทำงานมากกว่าฟังก์ชั่นmap, filterและreduce(นี้ไปสามครั้งถ้าเราไม่สนใจทัวริงครบถ้วนและใช้ภาษา FP ปฏิบัติ) ในความเป็นจริงพวกเขาเพิ่งจะค่อนข้างทั่วไปและมีประโยชน์โดยทั่วไป แต่จริง ๆ แล้วเป็นโปรแกรมที่ง่ายมากของการเขียนโปรแกรมการทำงาน แคลคูลัสแลมบ์ดาขั้นต่ำที่ไม่เจาะจงสามารถกำหนดฟังก์ชั่นเหล่านั้นได้ในหมู่คนอื่น ๆ , ไม่ใช่วิธีอื่น ๆ

"นี่เป็นคำแนะนำที่ดีเกี่ยวกับ Joel On Software" - ซึ่งจัดการให้สับสนกับ Fortran กับ Basic ดังนั้นฉันจะไม่เชื่อมั่นในข้อเท็จจริงอื่น ๆ
quant_dev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.