使用序言将一些成员添加到列表中

add some member to a list with prolog

我有一些 facts.I 想列出这个事实的成员并通过 function.but 显示这些成员 我不知道该怎么做。我试试这个代码:

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 -> 牛奶和鸡蛋的东西。并在我写像 eat(mina,X) 这样的东西时显示它。但是当我测试我的代码时,输​​出是牛奶。请帮忙
提前致谢

一些问题:

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).