假设回溯已完成,如下所示。每个端点显示成功或失败。
Ex:
foo(X, search_key).
Backtracking :
Root
/ | \
/ | \
/ | \
/|\ | \
/ | \ | /|\
/ f f | / | \
/ | f | f
f g f
Abbreviation f : fail
g show first character of name除非找不到其他方法,否则我不会倾向于在我的下一个function.However中使用g作为参数,在这个例子中,由于没有找到其他方法,我必须在我的下一个函数中使用g作为参数。
我该怎么做呢?
发布于 2012-06-03 19:45:48
您必须首先尝试所有端点,并将它们存储在一个列表中(假设使用findall(foo...) ),否则您不知道以后是否会出现非g。
然后试着做下一个函数,要求X不是g。如果失败了,还是使用g。
avoidg(X) :-
member(A,X),
A \= f,
A \= g,
write(A).
avoidg(X):-
member(A,X),
A \= f,
write(A).示例:
?- avoidg([f,f,f,g,f,f,f]).
g
true
?- avoidg([f,f,f,g,f,f,h]).
h
true https://stackoverflow.com/questions/10869974
复制相似问题