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

时间:2015-05-15 05:00:09

标签: list prolog

我有一些事实。我想列出这些事实的成员并按功能显示这些成员。但我不知道该怎么做。我试试这段代码:

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)这样的东西时显示出来。但是,当我测试我的代码时,输​​出是牛奶。请提前帮助

1 个答案:

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