如果我的任何术语被关闭,我会提前道歉,自从我接触 Prolog 已经有几年了,我决定尝试去除我的 prolog 帽并再次探索它。
我将直接深入研究代码,然后通过问题描述偶然发现。此代码不是我的情况的确切主题。
mammal :- true.
reptile :- true.
animals_that_are(_,_) :-
write('Not found!'),
nl,
false.
animals_that_are(mammal, L) :-
L = [lion, elephant, dog].
animals_that_are(reptile, L) :-
L = [lizard, turtle].
does_animal_belong_to_group(Species, Group) :-
animals_that_are(Group, Animals),
member(Species, Animals).
所以基本的问题是,调用时does_animal_belong_to_group(lion, mammal)
,文本未找到!显示并失败,向我暗示,原子哺乳动物和狮子正在被转换为术语,因此与它们各自的规则无关。
当我直接调用这两个规则时,我确实得到了预期的结果
animals_that_are(reptile, L).
L = [lizard, turtle].
有没有一种方法可以让原子通过一个术语,然后在这种情况下重新提取原子,还是我以错误的方式解决这个问题?