我想写一个函数(抱歉,这里可能没有使用正确的术语) wubble 这对于特定的常量是正确的,如果包装到另一个常量中,对于那些常量也是正确的,但只有一层深!例子:

% are supposed to be TRUE:
?- wubble(foo).
?- wubble(bar).
?- wubble(wrapper(foo)).
?- wubble(wrapper(bar)).

% are suppoed to be FALSE:
?- wubble(not_in_knowledge_base).
?- wubble(wrapper(wrapper(foo))).

天真的(至少在我的脑海中)实现看起来像这样:
wubble(foo).
wubble(bar).

wubble(wrapper(wrapper(_))) :- !, fail.
wubble(wrapper(X)) :- wubble(X).

这适用于上面的查询。但是,我无法使用此实现枚举 X 的所有有效 wubble:
?- wubble(X).
X = foo
X = bar

所以这缺少 X = wrapper(foo)X = wrapper(bar) 。是否有可能以某种方式修复我的实现?

最佳答案

您可以将事实与规则分开:

wubble_(foo).
wubble_(bar).

wubble(X) :- wubble_(X).
wubble(wrapper(X)) :- wubble_(X).

关于prolog - 编写一个接受包装常量的函数,但只有一层深,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44354599/

10-12 22:51