เหตุใดจึงไม่เขียนกฎของโปรแกรมลงใน Prolog [ปิด]


16

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


7
บันได (เกือบ) ไม่มีใครรู้ถึงการเปิดฉากและนักพัฒนาจำนวนมากไม่ต้องการรู้อะไรเลยที่ไม่ได้ทำงานประจำวันเพื่อที่พวกเขาจะได้กลับบ้าน น่าเสียดายที่ Prolog ค่อนข้างเท่ห์
จิมมี่ฮอฟฟา

3
Prolog ทำให้ edsl ยอดเยี่ยมแม้ว่า เปิดฉากฝังในภาษาเช่น Haskell หรือ Scheme เป็นวิธีที่ฉันมักจะใช้
Daniel Gratzer

3
@JimmyHoffa นั่นกำลังน้อยลง ชาวบ้านบางคนเรียนรู้การเปิดฉากจากนั้นพยายามลืมเรื่องเชิงรุกไปตลอดชีวิตการทำงาน
ZJR

5
ฉันเห็น 3 คะแนนปิด - ทุกคนสนใจที่จะบอกฉันว่ามีอะไรผิดปกติกับคำถามดังนั้นฉันอาจแก้ไขหรือถอนได้?
Onorio Catenacci

2
ฉันลงคะแนนให้ปิดเป็น "อิงตามความคิดเห็นเป็นหลัก" หากคุณสามารถโน้มน้าวให้ฉันเป็นอย่างอื่นฉันจะถอนการโหวตอย่างใกล้ชิดของฉัน โดยส่วนตัวแล้วฉันพบว่าอารัมภบทเป็นทึบ ฉันคาดหวังว่าเอ็นจิ้นกฎจะมีไวยากรณ์ที่ใช้งานง่ายกว่าสำหรับการกำหนดกฎ และเป็นภาษาโปรแกรมไม่ใช่ต้นแบบของไวยากรณ์สำหรับเอ็นจินกฎต่อ se
Robert Harvey

คำตอบ:


14

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

การพัฒนาอัลกอริธึม RETE และผู้สืบทอดนั้นอนุญาตให้มีวิธีที่มีประสิทธิภาพมากขึ้นในการประมวลผลกฎจำนวนมากและรับช่วงต่อไป

บางทีอารัมภบทสมัยใหม่อาจมีประสิทธิภาพมากกว่ายุค 80 เมื่องานส่วนใหญ่เสร็จสิ้น


ดูเพิ่มเติมที่: stackoverflow.com/questions/3364191/…
Matthew Flynn

1
บทความอื่นที่เกี่ยวข้องกับเรื่องนี้: haleyai.com/wordpress/2013/06/22/ …
Matthew Flynn

คำถามบ้า ผู้คนไม่ใช้ RETE ในภาษาอารัมภบท (มีหลายอย่างที่ RETE ไม่ทำตามที่กล่าวไว้)
user48956

14

คำตอบแบบ Tongue-in-cheek: เพราะหากผู้สร้างกฎของเครื่องมือรู้เกี่ยวกับ Prolog (หรือ Mercury หรือ PLANNER หรือ ... ) พวกเขาจะไม่เขียนเครื่องมือของกฎพวกเขาจะใช้ Prolog


5

โดยทั่วไปจุดของเอ็นจินกฎคือมันเป็นส่วนหนึ่งของแอปพลิเคชันอื่น ค่อนข้างยากที่จะเห็นแอปพลิเคชันที่เขียนใน Prolog และไม่มีอินเทอร์เฟซที่ใช้งานทั่วไปเพื่อเชื่อมต่อ Prolog กับแอปพลิเคชันที่เขียนในภาษาอื่น

One เครื่องมือตามกฎสำหรับเครื่องยนต์กฎที่เขียนที่จะเพิ่มการใช้งานอื่น ๆ ที่เป็นคลิป CLIPS ใช้OPS5และใช้อัลกอริธึม Reteสำหรับกฎการตัดแต่งกิ่ง


ไม่เป็นความจริงอย่างสิ้นเชิงมีบางอินเทอร์เฟซจากโปรแกรมภายนอกไปยังรหัส Prolog SWI-Prolog มีอินเตอร์เฟส C ++ และวิธีการเชื่อมต่อกับ R.
Rudolf Olah

3
จริง ๆ แล้วโปรแกรม prolog ทั้งหมดที่ฉันเคยเห็นทำงานกับ C หรือ C ++ เป็น "ไม่มีใคร" ใช้ Proolog สำหรับแอพที่สมบูรณ์ แต่ "ทุกคน" เป็นวิธีเรียกใช้ฟังก์ชัน C เพื่อเรียกใช้ libs แบบพิเศษ เช่น GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes

ขอบคุณสำหรับตัวชี้ @johannes ฉันไม่รู้ GNU Prolog เลย; ความจริงน้อยกว่ามากที่สามารถเรียกได้จาก C.
Onorio Catenacci

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