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/ | การรวมกัน |
询问谁可以借用相机
- A media club keeps facts about its members and completed training. It wants to ask who can borrow a camera without writing a new loop for every question.
- 声明式编程描述事实、规则和目标。逻辑引擎搜索使目标为真的值。程序员仍然需要编写正确的规则;引擎不会读取思想或俱乐部公告板。
事实陈述已知内容
- 事实是知识库中的断言。在
member(aya).中,谓词member将一个人与俱乐部会员资格联系起来。trained(aya, camera).将人与设备联系起来。 - This lesson uses Prolog-style notation: lowercase names are constants or predicates; uppercase names are variables. A full stop ends each fact or rule.
member(aya).
member(ben).
member(chen).
trained(aya, camera).
trained(chen, camera).
trained(ben, audio).
จากข้อเท็จจริง member(ben). และ trained(ben, audio). คำ statement ด้านล่างใดคือข้อเท็จจริงที่ถูกกำหนดให้มา?
member(ben). ถูกกำหนดให้โดยตรง ข้อมูลความรู้ไม่รวมการฝึกเสียงสำหรับ Ben
规则组合条件
- 规则说明何时结论成立。将
:-读作“如果”,逗号表示AND:一个人可以借用相机,前提是他是会员 并且 拥有相机培训。 Person在所有三个地方命名同一个变量。引擎必须找到一个同时满足两个条件的值,而不是一个会员和一个不同的受训人员。
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
ในกฎ can_borrow(Person, camera) :- member(Person), trained(Person, camera). เครื่องคั่นระหว่างเงื่อนไขทั้งสองมีความหมายว่า ____.
ทั้งการเป็นสมาชิกและการฝึกฝนการใช้กล้องต้องเกิดขึ้นสำหรับ Person คนเดียวกัน
目标提出问题
- The goal
?- can_borrow(aya, camera).asks for a yes/no result. The engine matches the rule and checksmember(aya)andtrained(aya, camera): both facts exist, so the goal succeeds. - The goal
?- can_borrow(Person, camera).asks for bindings of the variable. With this knowledge base, the answers arePerson = ayaandPerson = chen. These are goals to reason about; the displayed blocks are notation, not a runnable playground.
สมาชิกคลับคือ aya, ben และ chen Aya และ Chen ฝึกใช้กล้อง; Ben ฝึกเสียงเท่านั้น กฎ can_borrow(Person, camera) ต้องการทั้งความเป็นสมาชิกและการฝึกใช้กล้อง ใครที่สอดคล้องกับ can_borrow(Person, camera)?
Aya และ Chen มีข้อเท็จจริงที่จำเป็นครบถ้วน Ben มีเพียงการฝึกเสียงเท่านั้น
ตัวแปร Person ใน member(Person) อาจมีค่าต่างจาก Person ใน trained(Person, camera) ระหว่างการพิสูจน์หนึ่งครั้ง
ทุกการปรากฏของตัวแปรเดียวกันต้องคงการจับคู่ (binding) เดียวกันในการพิสูจน์นั้น
工作示例:追踪失败的候选人
- Start with
Person = ben.member(ben)succeeds.trained(ben, camera)fails: the available training fact is for audio, which does not match camera. - เครื่องยนต์ ย้อนกลับเพื่อลองใช้ตัวเลือกอื่น
Person = chenทั้งสองเงื่อนไขสำเร็จ หากต้องการคำตอบเพิ่มเติม จะดำเนินการค้นหาต่อไป; หากไม่มีตัวเลือกเหลืออยู่ ก็จะไม่มีการตอบคำถามอีก
ติดตามการค้นหาที่เหลือหลังจากได้ผลลัพธ์ของ Aya แล้ว
Ben เป็นสมาชิกแต่ขาดข้อเท็จจริงเกี่ยวกับการฝึกใช้กล้องที่ตรงกัน ระบบจึงลองหา Chen
การจับคู่จะแบ่งปันค่าผ่านกฎ
- Unification matches terms while consistently binding variables. Matching
trained(Person, camera)withtrained(chen, camera)bindsPersontochen; matching it withtrained(ben, audio)fails because the equipment differs. - เป้าหมายที่ล้มเหลวหมายความว่าไม่สามารถพิสูจน์ได้จากข้อเท็จจริงและกฎเหล่านี้ มันไม่ได้พิสูจน์ว่า Ben ไม่เคยใช้กล้องในชีวิตจริงเลย;ฐานความรู้อาจมีเพียงส่วนที่ไม่สมบูรณ์เท่านั้น
การจับคู่ trained(Person, camera) กับ trained(chen, camera) จะจับ Person ไว้ที่ ____
อุปกรณ์ตรงกันและอาร์กิวเมนต์แรกให้การจับคู่ 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) เป็นจริง?
Aya ฝึกใช้กล้องและ Ben เป็นสมาชิก; Ben ไม่จำเป็นต้องฝึกใช้กล้องเพื่อเป็นผู้เรียน
คะแนนที่หลุดหายไป
- ข้อเท็จจริงบอกสิ่งที่เป็นที่ทราบ; กฎสรุปผลเมื่อเงื่อนไขของตนเป็นจริง; เป้าหมายถามว่าสามารถสรุปผลได้หรือไม่หรือมีค่าใดทำให้มันเป็นจริง
- รักษาตัวแปรซ้ำให้สอดคล้องกัน
member(X), trained(Y, camera)อาจทำให้สมาชิกที่ไม่มีประสบการณ์ qualify ได้เพราะมีคนอื่นที่มีประสบการณ์ การเปลี่ยนชื่อตัวแปรสามารถเปลี่ยนความหมายของกฎได้
จากข้อกำหนดไปสู่การพิสูจน์
- เขียนข้อเท็จจริง แปลงแต่ละข้อกำหนดให้เป็นกฎ และตั้งเป้าหมาย ตรวจสอบการผูกตัวแปรผ่านทุกเงื่อนไขและลองทางเลือกเมื่อตัวเลือกล้มเหลว
- ที่นี่มีเพียง Aya และ Chen เท่านั้นที่กู้ยืมกล้องได้ การฝึกเสียงของ Ben ไม่ใช่การใช้กล้อง ผลลัพธ์มาจากการฐานความรู้ที่จัดเตรียมไว้ ไม่ใช่การเดาเกี่ยวกับบุคคลจริง
สมาชิกคลับคืออายา เบน และเชน อายาและเชนผ่านการฝึกฝนการใช้กล้อง; เบนผ่านการฝึกฝนด้านเสียงเท่านั้น กฎ can_borrow(Person, camera) ต้องการทั้งความเป็นสมาชิกและการฝึกฝนการใช้กล้อง มี多少人 satisfies can_borrow(Person, camera)?
อายาและเชนคือคำตอบทั้งสอง
เป้าหมายที่ล้มเหลวพิสูจน์ว่าเหตุการณ์ที่เกี่ยวข้องไม่เคยเกิดขึ้นนอกฐานข้อมูลนี้
ความล้มเหลวหมายความว่าเป้าหมายไม่สามารถพิสูจน์ได้จากข้อเท็จจริงและกฎที่มีอยู่