#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. У вас уже есть правило, которое гласит, что это организм, если это растение или животное (или человек), и другое, которое гласит, может ли он одновременно дышать и двигаться. Не зная ничего о том, как произошло это «исключение», это мало чем может помочь.