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

9
ความฝันของการเขียนโปรแกรมที่เปิดเผย [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ทำไมความฝันของการเขียนโปรแกรมเชิงประกาศไม่ได้ถูกรับรู้? อะไรคืออุปสรรคคอนกรีตที่ขวางทาง? ยกตัวอย่างง่ายๆทำไมฉันพูดไม่ได้ sort(A) is defined by sort(A) in perm(A) && asc(sort(A)) และรับอัลกอริธึมการเรียงลำดับโดยอัตโนมัติ permหมายถึงการเรียงสับเปลี่ยนและascหมายถึงการเพิ่มขึ้น

2
SQL ประกาศหรือไม่
ฉันถามเพราะคำถามมากมายที่ฉันเห็นในจำนวน SQL ถึง: "นี่ช้าฉันจะเร่งความเร็วได้อย่างไร"? หรือแบบฝึกหัดที่ระบุว่า "ทำแบบนี้ไม่ใช่แบบนั้นเพราะมันเร็วกว่า" สำหรับฉันแล้วดูเหมือนว่าส่วนใหญ่ของ SQL จะรู้วิธีการแสดงออกและการแสดงออกของความรู้ที่เลือกสไตล์การแสดงออกที่ดีขึ้น สิ่งนี้ไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัสในแง่มุมหนึ่งของการเขียนโปรแกรมเชิงประกาศซึ่งเป็นการออกจากระบบเพื่อตัดสินใจว่าจะทำการคำนวณอย่างไรให้ดีที่สุดกับคุณเพียงแค่ระบุสิ่งที่การคำนวณควรสร้าง ไม่ควรเครื่องยนต์ SQL ไม่สนใจเกี่ยวกับถ้าคุณใช้in, existsหรือjoinถ้ามันเป็นจริงที่เปิดเผยไม่ควรมันก็ให้คำตอบที่ถูกต้องในเวลาที่เหมาะสมถ้าเป็นไปได้ใด ๆ ของทั้งสามวิธี? ตัวอย่างล่าสุดนี้ได้รับแจ้งจากโพสต์ล่าสุดนี้ซึ่งเป็นประเภทที่ระบุไว้ในย่อหน้าเปิดของฉัน ดัชนี ฉันเดาตัวอย่างที่ง่ายที่สุดที่ฉันสามารถใช้เกี่ยวข้องกับการสร้างดัชนีสำหรับตาราง ชัยชนะที่นี่บน w3schools.comแม้พยายามอธิบายว่าเป็นสิ่งที่ผู้ใช้มองไม่เห็นซึ่งมีเหตุผลด้านประสิทธิภาพ คำอธิบายของพวกเขาดูเหมือนจะใส่ดัชนี SQL ในค่ายที่ไม่ประกาศและพวกเขาจะถูกเพิ่มด้วยมือเป็นประจำด้วยเหตุผลด้านประสิทธิภาพอย่างหมดจด เป็นกรณีที่มี SQL DB ในอุดมคติที่เปิดเผยมากกว่าที่เหลือทั้งหมด แต่เพราะเป็นสิ่งที่ดีไม่ได้ยินหรือไม่

5
อะไรทำให้ภาษาโปรแกรมเชิงฟังก์ชั่นมีความหมายต่างกับความจำเป็น?
ในหลาย ๆ บทความที่อธิบายถึงประโยชน์ของการเขียนโปรแกรมเชิงปฏิบัติฉันได้เห็นภาษาโปรแกรมที่ใช้งานได้เช่น Haskell, ML, Scala หรือ Clojure เรียกว่า "ภาษาที่ประกาศ" ซึ่งแตกต่างจากภาษาที่จำเป็นเช่น C / C ++ / C # / Java คำถามของฉันคือสิ่งที่ทำให้ภาษาโปรแกรมการทำงานประกาศเมื่อเทียบกับความจำเป็น คำอธิบายที่พบบ่อยซึ่งอธิบายถึงความแตกต่างระหว่างการเขียนโปรแกรมเชิงประกาศและเชิงบังคับคือในการเขียนโปรแกรมเชิงบังคับคุณต้องบอกคอมพิวเตอร์ว่า "ทำอย่างไร" ซึ่งต่างจาก "สิ่งที่ต้องทำ" ในภาษาที่ประกาศ ปัญหาที่ฉันมีกับคำอธิบายนี้คือคุณกำลังทำทั้งสองอย่างในภาษาการเขียนโปรแกรมทั้งหมด แม้ว่าคุณจะลงไปที่แอสเซมบลีระดับต่ำสุดที่คุณยังบอกคอมพิวเตอร์ว่า "สิ่งที่ต้องทำ" คุณบอกซีพียูเพื่อเพิ่มตัวเลขสองตัวคุณไม่ได้บอกวิธีการเพิ่ม ถ้าเราไปที่ปลายอีกด้านหนึ่งของภาษาที่มีฟังก์ชั่นบริสุทธิ์ระดับสูงอย่าง Haskell คุณกำลังบอกคอมพิวเตอร์ว่าจะทำภารกิจเฉพาะอย่างได้อย่างไร นั่นคือสิ่งที่โปรแกรมของคุณเป็นลำดับของคำแนะนำเพื่อให้ได้งานเฉพาะซึ่งคอมพิวเตอร์ไม่ทราบว่าจะบรรลุผลได้อย่างไร ฉันเข้าใจว่าภาษาเช่น Haskell, Clojure ฯลฯ มีระดับที่สูงกว่า C / C ++ / C # / Java อย่างเห็นได้ชัดและมีคุณสมบัติเช่นการประเมินแบบขี้เกียจโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบฟังก์ชันที่ไม่ระบุชื่อการปิดบังโครงสร้างข้อมูลถาวร ฟังก์ชั่นการเขียนโปรแกรมเป็นไปได้และมีประสิทธิภาพ …

4
มีวิธีปฏิบัติที่ดีอะไรบ้างเมื่อพยายามสอนการเขียนโปรแกรมแบบเปิดเผยให้แก่โปรแกรมเมอร์ที่มีความจำเป็น
ฉันเสนอให้ทำการฝึกอบรมเล็กน้อยใน F # ที่ บริษัท ของฉันและพวกเขาดูเหมือนจะแสดงความสนใจ พวกเขามักจะเป็นโปรแกรมเมอร์ VB6 และ C # ที่ไม่ปฏิบัติตามการเขียนโปรแกรมด้วยความหลงใหลมากเกินไป ที่ถูกกล่าวว่าฉันรู้สึกว่ามันง่ายกว่าที่จะเขียนรหัสที่ถูกต้องเมื่อคุณคิดในเรื่องการทำงานเพื่อให้พวกเขาควรได้รับประโยชน์จากมันแน่นอน ใครบ้างที่สามารถให้คำแนะนำเกี่ยวกับวิธีที่ฉันควรเข้าหานี้ ไอเดีย อย่ามุ่งเน้นไปที่ไวยากรณ์แทนที่จะมุ่งเน้นไปที่วิธีการใช้ภาษานี้และสำนวนที่มันส่งเสริม ลองนึกถึงตัวอย่างที่เป็นความเจ็บปวดในการเขียนในรูปแบบที่จำเป็น แต่แปลเป็นรหัสที่สง่างามเมื่อเขียนในรูปแบบที่เปิดเผย

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