Декларативное программирование: факты, правила и цели
| English | Русский |
|---|---|
| fact/fækt/ | факт |
| declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ | декларативное программирование |
| rule/ruːl/ | правило |
| goal/ɡəʊl/ | цель |
| backtrack/ˈbæktræk/ | обратный ход (backtrack) |
| unification/ˌjuːnɪfɪˈkeɪʃn/ | унификация |
Ask who can borrow a camera
- 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.
- Declarative programming 声明式编程 describes facts, rules and a goal 目标. A logic engine searches for values that make the goal true. The programmer still has to write correct rules; the engine does not read minds or club noticeboards.
Facts state what is known
- A fact 事实 is an assertion in the knowledge base. In
member(aya)., the predicatememberrelates one person to club membership.trained(aya, camera).relates a person to a piece of equipment. - 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)., какое из нижеперечисленных утверждений является предоставленным фактом?
member(ben). дано напрямую. База знаний не включает обучение Ben работе с камерой.
A rule combines conditions
- A rule 规则 states when a conclusion holds. Read
:-as “if” and the comma as AND: a person may borrow a camera if they are a member and have camera training. Personnames the same variable in all three places. The engine must find one value that satisfies both conditions, not one member and a different trained person.
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
В правиле can_borrow(Person, camera) :- member(Person), trained(Person, camera). запятая между двумя условиями означает ____.
Для одного и того же Person должны одновременно выполняться членство и обучение работе с камерой.
A goal asks a question
- 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) во время одного доказательства.
Все вхождения одной и той же переменной должны сохранять одинаковую привязку в этом доказательстве.
Worked example: trace a failed candidate
- Start with
Person = ben.member(ben)succeeds.trained(ben, camera)fails: the available training fact is for audio, which does not match camera. - The engine backtracks 回溯 to try another candidate,
Person = chen. Both conditions succeed. If more answers are requested, it continues searching; if no candidates remain, there are no more answers.
Отследите оставшийся поиск после того, как Aya уже была возвращена.
Ben является участником, но не имеет соответствующего факта обучения работе с камерой; затем движок пытается Chen.
Matching shares values across a rule
- 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. - A failed goal means it cannot be proved from these facts and rules. It does not prove that Ben has never used a camera in real life; the knowledge base may simply be incomplete.
Сопоставление trained(Person, camera) с trained(chen, camera) связывает Person со ____.
Оборудование совпадает, и первый аргумент обеспечивает привязку chen.
Worked example: write a new rule
- Requirement: a mentor can help someone only when the mentor has camera training and the learner is a member. Add the rule below, then ask
?- can_help(aya, ben).. trained(aya, camera)andmember(ben)both exist, so the goal succeeds. This rule allows Aya to help herself too. If self-help must be excluded, the requirement needs another condition; do not invent it silently.
can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).
Учитывая trained(aya, camera). и member(ben)., и правило can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner)., выполняется ли can_help(aya, ben)?
Aya прошла обучение работе с камерой, а Ben — участник; Ben не обязан пройти обучение работе с камерой, чтобы быть учеником.
Marks that slip away
- A fact states something known; a rule derives a conclusion when its conditions hold; a goal asks whether a conclusion can be proved or which values make it true.
- Keep repeated variables consistent.
member(X), trained(Y, camera)would let an untrained member qualify because someone else has training. Changing a variable name can change the rule's meaning.
From a requirement to a proof
- Write facts, translate each requirement into a rule, and pose a goal. Trace each variable binding through every condition and try alternatives when a candidate fails.
- Here only Aya and Chen may borrow a camera. Ben's audio training is not camera training. Results follow from the supplied knowledge base, not a guess about real people.
Члены клуба: aya, ben и chen. Aya и Chen прошли обучение работе с камерой; Ben прошел обучение только работе с аудио. Правило can_borrow(Person, camera) требует членства и обучения работе с камерой. Сколько человек удовлетворяют условию can_borrow(Person, camera)?
Айя и Чэнь — два решения.
Неудачная цель доказывает, что соответствующее событие никогда не происходило за пределами этой базы знаний.
Неудача означает, что цель не может быть выведена из имеющихся фактов и правил.