Как создать представление знаний в прологе

#prolog

#пролог

Вопрос:

У меня есть кое-какая информация:

  • X-это организм, если X-человек, животное или растение.
  • X — это организм, если X может дышать и двигаться.
  • Млекопитающие, рептилии, амфибии, рыбы и птицы-это животные.
  • Рыбы дышат жабрами, имеют чешую, яйцекладущие и плавники.
  • Птица дышит легкими, яйцекладущая, и у нее есть крылья.
  • Млекопитающие дышат легкими и живородящими.
  • Рептилия дышит легкими, имеет чешую и яйцекладущую.
  • Земноводные дышат легкими и живородящими.
  • Растение может вырабатывать кислород.
  • Человек и животное не могут производить кислород.

Я установил правила, основываясь на этой информации:

 organism :- human; animal; plant organism :- can_breathe, can_move.  animal :- mammal. animal :- fish. animal :- reptile. animal :- amphibian. animal :- bird.  fish :- breathe_with_gills, have_scales, oviparous, have_fin. bird :- breathe_with_lungs, oviparous, have_wings. mammal :- breathe_with_lungs, viviparous. reptile :- breathe_with_lungs, have_scales, ovoviviparous. amphibian :- breathe_with_lungs, viviparous.  plant :- produce_oxygen. human :- not(produce_oxygen). animal :- not(produce_oxygen).  

Затем я попытался использовать его в прологе и использовать assert для добавления фактов в базу знаний. Я хочу, чтобы результат был таким:

 ?- assert(animal). true. ?- organism. true.  

Но у меня есть такой вывод:

 ?- assert(animal). ERROR: No permission to modify static procedure `animal/0' ERROR: Defined at c:/users/user/documents/prolog/file.pl:4 ERROR: In: ERROR: [10] assert(animal) ERROR: [9] lt;usergt;  

Как я мог это исправить?

Комментарии:

1. Как ты думаешь assert , что делает?

2. он используется для ручного добавления фактов в базу знаний, не так ли?

3. Да, но у вас уже есть определение того, как доказать animal в вашем коде, которое вы assert (по сути) пытаетесь изменить. Точно так же, если вы можете доказать animal , вам не нужно утверждать organism .

Ответ №1:

Вы не должны assert делать то, что вы указали, как доказать в своем коде (и в этом нет необходимости); вы должны assert делать то, что нельзя доказать никаким другим способом ( produce_oxygen например).

Комментарии:

1. Спасибо, что помогли мне. Но у меня есть вопрос, как доказать существование организма, просто доказав, что это растение или животное? У меня есть некоторые исключения, которые хотят, чтобы я ответил, например, breathe_with_lungs или иначе

2. У вас уже есть правило, которое гласит, что это организм, если это растение или животное (или человек), и другое, которое гласит, может ли он одновременно дышать и двигаться. Не зная ничего о том, как произошло это «исключение», это мало чем может помочь.