我有一些事实。我想列出这些事实的成员并按功能显示这些成员。但我不知道该怎么做。我试试这段代码:
hasDiabet(mina).
hasvitaminD(milk).
hasvitaminD(eggs).
addto(X,L,[X|L]).
hasvitamin(L):-hasvitaminD(x),addto(X,L,L),hasvitamin(L).
eat(Y,X):-hasvitaminD(X).
在这里,我想列出一些有维生素D的信息 - >牛奶和鸡蛋。当我写下像吃饭(mina,X)这样的东西时显示出来。但是,当我测试我的代码时,输出是牛奶。请提前帮助
答案 0 :(得分:-1)
一些问题:
hasvitamin(L):-
hasvitaminD(x), % x must be uppercase for it to be a Variable
addto(X,L,L), % will never succeed, since Prolog variable are *immutable*
hasvitamin(L). % recursing with the same input would lead to infinite loop
从您的问题描述中,我认为您应该了解all solutions builtins。
尝试
?- findall(X, hasvitaminD(X), L).