我想写一个函数(抱歉,这里可能没有使用正确的术语) 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/