ทำไมการเขียนโปรแกรมแบบลอจิก (ไม่ใช่)


13

ฉันยังไม่เคยได้ยินเกี่ยวกับการใช้ภาษาการเขียนโปรแกรมเชิงตรรกะใด ๆ (เช่น Prolog) ในอุตสาหกรรมซอฟต์แวร์และฉันไม่รู้ถึงการใช้งานในการเขียนโปรแกรมงานอดิเรกหรือโครงการโอเพ่นซอร์ส มัน (อารัมภบท) ใช้เป็นภาษาวิชาการบางส่วนแม้ว่า (ทำไมมันถูกใช้ในสถาบันการศึกษา?)

นี่ทำให้ฉันสงสัยว่าทำไมคุณควรใช้การเขียนโปรแกรมเชิงตรรกะและทำไมไม่ เหตุใดจึงไม่ได้รับการใช้งานอุตสาหกรรมที่ตรวจพบได้?

คำตอบ:


8

ด้านนอกของสถาบันการศึกษา ... ฉันได้ยินมาว่ามันใช้งานใน AI มากกว่าบางครั้งในเกม (ฉันได้ยินว่ามันทำให้ AI ในซีรีย์ Black & White) ฉันเคยได้ยินเกี่ยวกับรูปแบบต่างๆที่ใช้เรียกเครื่องมือสร้างกฎเกณฑ์สำหรับธุรกิจและการจำลองทางเศรษฐกิจ

การคาดเดาของฉันสำหรับการขาดการนำไปใช้อย่างกว้างขวางคือ:

  • เป็นเรื่องแปลก - คนส่วนใหญ่ไม่คุ้นเคยกับการเขียนโปรแกรมและพวกเขาสามารถทำสิ่งที่พวกเขาต้องการในภาษาอื่น ๆ
  • การขาดการสนับสนุนผู้ขาย - ถ้า Microsoft เริ่มผลัก Prolog # (ด้วยน้ำหนักเต็มของ. NET ไลบรารีและชุดเครื่องมือและการสนับสนุนอย่างเป็นทางการที่อยู่เบื้องหลัง) เป็น The Big Big Thing - จากนั้น IBM และ Oracle ขึ้นมาพร้อมกับบางสิ่งบางอย่าง เห็นไหม!
  • ขาดการรวมเข้าด้วยกัน - ฉันไม่รู้ว่ามีไลบรารีใดบ้างที่ใช้ได้กับ Prolog - สุดท้ายฉันตรวจสอบว่ามีไลบรารีกราฟิกหรือเครือข่ายไม่มากซึ่งหมายความว่า Prolog "แอปพลิเคชัน" จะต้องถูกห่อในแอปพลิเคชันอื่น โลก.

แอปพลิเคชัน "a Prolog" "จะต้องอยู่ในแอปพลิเคชันอื่นที่โต้ตอบกับส่วนที่เหลือของโลก" นั่นเป็นคุณลักษณะสำหรับเรา เราสามารถแยกโพรไฟล์บิตได้ง่ายขึ้นเนื่องจากส่วนต่อประสานกับมันง่ายมาก
S.Lott

@ S.Lott: ตกลงฉันจะเห็นว่าอาจจะเป็นในเชิงบวกเช่นกัน แต่เมื่อผมอยู่ในโรงเรียนและอยากจะจริงจะทำให้การประยุกต์ใช้กับการเปิดฉากผมพบประปาและสายไฟระหว่างชิ้นส่วนที่เป็นความท้าทายที่สำคัญและอุปสรรค
FrustratedWithFormsDesigner

5

เราใช้มันเพื่อสร้างเครื่องมือแยกวิเคราะห์ การทำงานกับ lex / yacc ทำได้ง่ายกว่า

เหตุใดจึงไม่ได้รับการใช้งานอุตสาหกรรมที่ตรวจพบได้?

เรื่องนี้ไม่สามารถตอบได้ "ตรวจจับได้" หมายถึงอะไร ใครจำเป็นต้องได้รับบันทึกตรวจจับ?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

ถาม Meridian Software เกี่ยวกับการเปิดฉากของพวกเขาหากคุณต้องการข้อเท็จจริง

อย่างไรก็ตามมีอุปสรรคในการเข้าที่ฉันมีประสบการณ์

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

ประการที่สองอารัมภบทไม่ได้เป็นขั้นตอนหรือการทำงานโปรแกรมเมอร์จำนวนมากหยุดใช้งาน (ที่น่าสนใจคือโปรแกรมเมอร์บางคนใช้ SQL ด้วย) สำหรับเรื่องนั้นโปรแกรมเมอร์บางคนจะใช้ SQL อย่างไม่เต็มใจและทำสิ่งแปลก ๆ เช่นหลีกเลี่ยงการเข้าร่วมการดำเนินการหรืออ้างว่าCOUNT(*)ไม่มีประสิทธิภาพอย่างน่าอัศจรรย์)

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

ต่อไปนี้เป็นที่ยอมรับในแวดวงส่วนใหญ่

b = a + 1
if a > b: # always False

ความคิดที่มืดมนแบบนี้ทำให้คุณมีปัญหาในการเปิดฉาก


2

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

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

ดังนั้นการเขียนโปรแกรม Prolog ไม่ได้ขึ้นอยู่กับความถูกต้องเชิงตรรกะของภาษา Prolog มากนัก มันเป็นภาษาที่มีประโยชน์ในบางวิธี แต่ไม่มีที่ไหนใกล้กับกระแสหลักและไม่มีประโยชน์ต่อเครื่องมือและชุมชนของภาษาเช่น C ++

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