使用序言将一些成员添加到列表中
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).
我有一些 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).