กลับไปหน้าบทความ

อ่าน 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" จะจัดการกับกรณีต่างๆ เหล่านั้น

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Warren_Abstract_Machine&oldid=1305283144 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เครื่องจักรนามธรรมวอร์เรน

ในปี พ.ศ. 2526 David HD Warren ได้ออกแบบ เครื่องจักรนามธรรม สำหรับการดำเนินการ Prolog ซึ่งประกอบด้วย สถาปัตยกรรม หน่วยความจำ และ ชุด คำ สั่ง [ 1 ] [ 2 ] [ 3 ]...

วัตถุประสงค์

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