อ่าน 2 นาที
เครื่องจักรนามธรรมวอร์เรน
ในปี พ.ศ. 2526 David HD Warren ได้ออกแบบ เครื่องจักรนามธรรม สำหรับการดำเนินการ Prolog ซึ่งประกอบด้วย สถาปัตยกรรม หน่วยความจำ และ ชุด คำ สั่ง [ 1 ] [ 2 ] [ 3 ]...
เครื่องจักรนามธรรมวอร์เรน
ในปี พ.ศ. 2526 David HD Warrenได้ออกแบบเครื่องจักรนามธรรมสำหรับการดำเนินการPrologซึ่งประกอบด้วย สถาปัตยกรรม หน่วยความจำและ ชุด คำสั่ง[ 1 ] [ 2 ] [ 3 ]การออกแบบนี้กลายเป็นที่รู้จักในชื่อเครื่องจักรนามธรรมของ Warren ( WAM ) และได้กลายเป็น เป้าหมายมาตรฐาน โดยพฤตินัยสำหรับคอมไพเลอร์ Prolog
วัตถุประสงค์
จุดประสงค์ของการคอมไพล์โค้ด Prolog ไปเป็นโค้ด WAM ระดับต่ำกว่า คือเพื่อให้การตีความโปรแกรม Prolog ในภายหลังมีประสิทธิภาพมากขึ้น โค้ด Prolog แปลงเป็นคำสั่ง WAM ได้ค่อนข้างง่าย ซึ่งสามารถตีความได้อย่างมีประสิทธิภาพมากขึ้น นอกจากนี้ การปรับปรุงโค้ดและการคอมไพล์เป็นโค้ดเนทีฟในภายหลังมักทำได้ง่ายกว่าในรูปแบบการแสดงผลระดับต่ำกว่า
เพื่อให้เขียนโปรแกรม Prolog ได้อย่างมีประสิทธิภาพ ความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของ WAM (Write-Based Memory) จะเป็นประโยชน์อย่างมาก แนวคิดที่สำคัญที่สุดบางส่วนของ WAM ได้แก่ การกำหนดดัชนีอาร์กิวเมนต์ตัวแรกและความสัมพันธ์กับจุดเลือกการเพิ่มประสิทธิภาพการเรียกแบบ Tail Callและการเรียกคืนหน่วยความจำเมื่อเกิดข้อผิดพลาด
พื้นที่หน่วยความจำ
WAM มีพื้นที่หน่วยความจำดังต่อไปนี้:
- ส แต็ก หรือฮีปส่วนกลางใช้สำหรับจัดเก็บเทอมแบบผสม
- สแต็กภายในสำหรับเฟรมสภาพแวดล้อมและจุดเลือก
- เส้นทาง สำหรับบันทึก ว่าควรยกเลิกการผูกตัวแปรใดบ้างเมื่อย้อนกลับ
ตัวอย่าง
นี่คือตัวอย่างโค้ด Prolog:
เด็กหญิง( แซลลี่) เด็กหญิง( เจน)เด็กชาย( B ) :- \+ เด็กหญิง( B )คอมไพเลอร์ Prolog ที่ใช้ WAM จะแปลงสิ่งนี้เป็นคำสั่ง WAM ที่คล้ายกับต่อไปนี้:
เงื่อนไข( เด็กหญิง/ 1 ) : เปิดใช้งานเงื่อนไข( 2 , 1 , ล้มเหลว, ล้มเหลว, ล้มเหลว), ป้ายกำกับ( 1 ) : เปิดใช้งานอะตอม([( แซลลี่, 3 ),( เจน, 5 )]) ป้ายกำกับ( 2 ) : ลองฉันดูถ้าไม่ใช่( 4 ) ป้าย กำกับ ( 3 ) : รับอะตอม( แซลลี่, 0 ) ดำเนินการต่อป้ายกำกับ( 4 ) : เชื่อใจฉันถ้าไม่ใช่ล้มเหลวป้ายกำกับ( 5 ) : รับอะตอม( เจน, 0 ) ดำเนินการต่อpredicate ( boy / 1 ) : get_variable ( x ( 1 ), 0 ) put_structure ( girl / 1 , 0 ) unify_local_value ( x ( 1 )) execute (( \+ ) / 1 )])ลักษณะสำคัญอย่างหนึ่งของโค้ดนี้คือความสามารถในการรับมือกับโหมดต่างๆ ที่สามารถเรียกใช้述语ได้ กล่าวคือ อาร์กิวเมนต์ใดๆ ก็อาจเป็นตัวแปร เทอมพื้นฐานหรือเทอมที่กำหนดค่าไว้บางส่วน คำสั่ง "switch" จะจัดการกับกรณีต่างๆ เหล่านั้น
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เครื่องจักรนามธรรมวอร์เรน
ในปี พ.ศ. 2526 David HD Warren ได้ออกแบบ เครื่องจักรนามธรรม สำหรับการดำเนินการ Prolog ซึ่งประกอบด้วย สถาปัตยกรรม หน่วยความจำ และ ชุด คำ สั่ง [ 1 ] [ 2 ] [ 3 ]...
วัตถุประสงค์
จุดประสงค์ของการคอมไพล์โค้ด Prolog ไปเป็นโค้ด WAM ระดับต่ำกว่า คือเพื่อให้การตีความโปรแกรม Prolog ในภายหลังมีประสิทธิภาพมากขึ้น โค้ด Prolog แปลงเป็นคำสั่ง WAM ได้ค่อนข้างง่าย ซึ่งสามารถตีความได้อย่างมีประสิทธิภาพมากขึ้น นอกจากนี้...