代码之家  ›  专栏  ›  技术社区  ›  Shasocais

Prolog,基本情况失败的问题

  •  0
  • Shasocais  · 技术社区  · 6 年前

    我目前正在编写一个prolog a*搜索函数,在我的一个查询中遇到了一个问题。所以我决定手动测试基本情况,因为这就是跟踪失败的地方。

    addAChild([Child],[],[Child]):-
       write(woo empty).
    

    我手动运行:

    addAChild([c(1,1,p(1,2)),[]],[],A).
    

    但它只是失败了。 任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  0
  •   fferri    6 年前

    [Child] (1元素列表)不能与统一 [c(1,1,p(1,2)),[]] (2元素列表)。

    这就是它失败的原因。

    您可以在交互式解释器中手动测试这两个术语是否无法统一:

    ?- addAChild([Child],[],[Child]) = addAChild([c(1,1,p(1,2)),[]],[],A).
    false.
    

    然后可以递归地检查哪个部分出现故障。

    术语名称( addAChild )而arity(3)是相同的,所以我们可以排除这个问题。

    然后继续统一每个参数:

    ?- [Child] = A.
    A = [Child].
    
    ?- [] = [].
    true.
    
    ?- [Child] = [c(1,1,p(1,2)),[]].
    false.