首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回溯控制

回溯控制
EN

Stack Overflow用户
提问于 2012-06-03 19:35:31
回答 1查看 106关注 0票数 1

假设回溯已完成,如下所示。每个端点显示成功或失败。

代码语言:javascript
复制
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作为参数。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-03 19:45:48

您必须首先尝试所有端点,并将它们存储在一个列表中(假设使用findall(foo...) ),否则您不知道以后是否会出现非g。

然后试着做下一个函数,要求X不是g。如果失败了,还是使用g。

代码语言:javascript
复制
avoidg(X) :-
    member(A,X),
    A \= f,
    A \= g,
    write(A).

avoidg(X):-
    member(A,X),
    A \= f, 
    write(A).

示例:

代码语言:javascript
复制
?- avoidg([f,f,f,g,f,f,f]).
g
true 

 ?- avoidg([f,f,f,g,f,f,h]).
h
true 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10869974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档