Declarative programming: ข้อเท็จจริง กฎ และเป้าหมาย
แนะนำใหม่| English | ความหมาย |
|---|---|
| fact/fækt/ | ข้อเท็จจริง |
| declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ | การเขียนโปรแกรมแบบประกาศ |
| rule/ruːl/ | กฎ |
| goal/ɡəʊl/ | เป้าหมาย |
| backtrack/ˈbæktræk/ | การย้อนกลับ |
| unification/ˌjuːnɪfɪˈkeɪʃn/ | การทำให้เป็นหนึ่งเดียว |
询问谁可以借用相机
- คลับมัลติมีเดียเก็บข้อเท็จจริงเกี่ยวกับสมาชิกและการฝึกฝนที่เสร็จสิ้น ต้องการถามว่าใครยืมกล้องได้โดยไม่ต้องเขียนลูปใหม่สำหรับทุกคำถาม
- 声明式编程描述事实、规则和目标。逻辑引擎搜索使目标为真的值。程序员仍然需要编写正确的规则;引擎不会读取思想或俱乐部公告板。
事实陈述已知内容
- 事实是知识库中的断言。在
member(aya).中,谓词member将一个人与俱乐部会员资格联系起来。trained(aya, camera).将人与设备联系起来。 - บทเรียนนี้ใช้Programming notation แบบ Prolog: ชื่อตัวพิมพ์เล็กคือค่าคงที่หรือเพรดิเคต; ชื่อตัวพิมพ์ใหญ่คือตัวแปร จุดเต็มจบแต่ละข้อเท็จจริงหรือกฎ
member(aya).
member(ben).
member(chen).
trained(aya, camera).
trained(chen, camera).
trained(ben, audio).
จากข้อเท็จจริง member(ben). และ trained(ben, audio). คำ statement ด้านล่างใดคือข้อเท็จจริงที่ถูกกำหนดให้มา?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
member(ben). ถูกกำหนดให้โดยตรง ข้อมูลความรู้ไม่รวมการฝึกเสียงสำหรับ Ben
规则组合条件
- 规则说明何时结论成立。将
:-读作“如果”,逗号表示AND:一个人可以借用相机,前提是他是会员 并且 拥有相机培训。 Person在所有三个地方命名同一个变量。引擎必须找到一个同时满足两个条件的值,而不是一个会员和一个不同的受训人员。
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
ในกฎ can_borrow(Person, camera) :- member(Person), trained(Person, camera). เครื่องคั่นระหว่างเงื่อนไขทั้งสองมีความหมายว่า ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ทั้งการเป็นสมาชิกและการฝึกฝนการใช้กล้องต้องเกิดขึ้นสำหรับ Person คนเดียวกัน
目标提出问题
- เป้าหมาย
?- can_borrow(aya, camera).ขอผลลัพธ์ใช่/ไม่ใช่ เอนจิ้นจับคู่กับกฎและตรวจสอบmember(aya)และtrained(aya, camera): ทั้งสองข้อเท็จจริงมีอยู่ ดังนั้นเป้าหมายจึงสำเร็จ - เป้าหมาย
?- can_borrow(Person, camera).ขอการผูกตัวของตัวแปร ด้วยฐานความรู้นี้ คำตอบคือPerson = ayaและPerson = chenเหล่านี้เป็นเป้าหมายสำหรับการให้เหตุผล; บล็อกที่แสดงเป็นProgramming notation ไม่ใช่พื้นที่ทดสอบที่รันได้
สมาชิกคลับคือ aya, ben และ chen Aya และ Chen ฝึกใช้กล้อง; Ben ฝึกเสียงเท่านั้น กฎ can_borrow(Person, camera) ต้องการทั้งความเป็นสมาชิกและการฝึกใช้กล้อง ใครที่สอดคล้องกับ can_borrow(Person, camera)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Aya และ Chen มีข้อเท็จจริงที่จำเป็นครบถ้วน Ben มีเพียงการฝึกเสียงเท่านั้น
ตัวแปร Person ใน member(Person) อาจมีค่าต่างจาก Person ใน trained(Person, camera) ระหว่างการพิสูจน์หนึ่งครั้ง
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ทุกการปรากฏของตัวแปรเดียวกันต้องคงการจับคู่ (binding) เดียวกันในการพิสูจน์นั้น
工作示例:追踪失败的候选人
- เริ่มด้วย
Person = ben.member(ben)สำเร็จ.trained(ben, camera)ล้มเหลว: ข้อเท็จจริงการฝึกที่มีอยู่คือการฝึกเสียง ซึ่งไม่ตรงกับกล้อง - เครื่องยนต์ ย้อนกลับเพื่อลองใช้ตัวเลือกอื่น
Person = chenทั้งสองเงื่อนไขสำเร็จ หากต้องการคำตอบเพิ่มเติม จะดำเนินการค้นหาต่อไป; หากไม่มีตัวเลือกเหลืออยู่ ก็จะไม่มีการตอบคำถามอีก
ติดตามการค้นหาที่เหลือหลังจากได้ผลลัพธ์ของ Aya แล้ว
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Ben เป็นสมาชิกแต่ขาดข้อเท็จจริงเกี่ยวกับการฝึกใช้กล้องที่ตรงกัน ระบบจึงลองหา Chen
การจับคู่จะแบ่งปันค่าผ่านกฎ
- การจับคู่ (Unification) จับคู่เทอมwhileผูกตัวแปรอย่างสม่ำเสมอ การจับคู่
trained(Person, camera)กับtrained(chen, camera)ผูกPersonกับchen; การจับคู่กับtrained(ben, audio)ล้มเหลวเพราะอุปกรณ์แตกต่างกัน - เป้าหมายที่ล้มเหลวหมายความว่าไม่สามารถพิสูจน์ได้จากข้อเท็จจริงและกฎเหล่านี้ มันไม่ได้พิสูจน์ว่า Ben ไม่เคยใช้กล้องในชีวิตจริงเลย;ฐานความรู้อาจมีเพียงส่วนที่ไม่สมบูรณ์เท่านั้น
การจับคู่ trained(Person, camera) กับ trained(chen, camera) จะจับ Person ไว้ที่ ____
Difficulty 1/5 · 100 coins + a small bonus on first completion today
อุปกรณ์ตรงกันและอาร์กิวเมนต์แรกให้การจับคู่ chen
ตัวอย่างแสดงวิธีทำ: เขียนกฎใหม่
- ข้อกำหนด: เทรนเนอร์สามารถช่วยใครได้ก็ต่อเมื่อเทรนเนอร์มีประสบการณ์การใช้กล้องและผู้เรียนเป็นสมาชิก เพิ่มกฎด้านล่าง แล้วตั้ง
?- can_help(aya, ben). trained(aya, camera)และmember(ben)มีอยู่จริง ดังนั้นเป้าหมายจึงสำเร็จ กฎนี้ช่วยให้ Aya ช่วยตัวเองได้ด้วย หากต้องตัดการช่วยตัวเองออก ความต้องการต้องมีเงื่อนไขเพิ่มเติม;อย่าสร้างขึ้นมาโดยพลการ
can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).
กำหนดให้ trained(aya, camera). และ member(ben). และกฎ can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner). Does can_help(aya, ben) เป็นจริง?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Aya ฝึกใช้กล้องและ Ben เป็นสมาชิก; Ben ไม่จำเป็นต้องฝึกใช้กล้องเพื่อเป็นผู้เรียน
คะแนนที่หลุดหายไป
- ข้อเท็จจริงบอกสิ่งที่เป็นที่ทราบ; กฎสรุปผลเมื่อเงื่อนไขของตนเป็นจริง; เป้าหมายถามว่าสามารถสรุปผลได้หรือไม่หรือมีค่าใดทำให้มันเป็นจริง
- รักษาตัวแปรซ้ำให้สอดคล้องกัน
member(X), trained(Y, camera)อาจทำให้สมาชิกที่ไม่มีประสบการณ์ qualify ได้เพราะมีคนอื่นที่มีประสบการณ์ การเปลี่ยนชื่อตัวแปรสามารถเปลี่ยนความหมายของกฎได้
จากข้อกำหนดไปสู่การพิสูจน์
- เขียนข้อเท็จจริง แปลงแต่ละข้อกำหนดให้เป็นกฎ และตั้งเป้าหมาย ตรวจสอบการผูกตัวแปรผ่านทุกเงื่อนไขและลองทางเลือกเมื่อตัวเลือกล้มเหลว
- ที่นี่มีเพียง Aya และ Chen เท่านั้นที่กู้ยืมกล้องได้ การฝึกเสียงของ Ben ไม่ใช่การใช้กล้อง ผลลัพธ์มาจากการฐานความรู้ที่จัดเตรียมไว้ ไม่ใช่การเดาเกี่ยวกับบุคคลจริง
สมาชิกคลับคืออายา เบน และเชน อายาและเชนผ่านการฝึกฝนการใช้กล้อง; เบนผ่านการฝึกฝนด้านเสียงเท่านั้น กฎ can_borrow(Person, camera) ต้องการทั้งความเป็นสมาชิกและการฝึกฝนการใช้กล้อง มี多少人 satisfies can_borrow(Person, camera)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
อายาและเชนคือคำตอบทั้งสอง
เป้าหมายที่ล้มเหลวพิสูจน์ว่าเหตุการณ์ที่เกี่ยวข้องไม่เคยเกิดขึ้นนอกฐานข้อมูลนี้
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ความล้มเหลวหมายความว่าเป้าหมายไม่สามารถพิสูจน์ได้จากข้อเท็จจริงและกฎที่มีอยู่