gpt4 book ai didi

Prolog 查询 - 试图理解这个结果是如何发生的

转载 作者:行者123 更新时间:2023-12-02 21:42:09 25 4
gpt4 key购买 nike

所以我试图从 Prolog 中找出一些东西,但我不确定为什么我会得到这样的结果。鉴于此定义:

families(_, Smith, lucy, _, jeff, Smith).

这个查询:

?- families(Ford, nancy, Ford, jeff, Smith, White).

为什么会是这样的结果?:

Ford = lucy,
Smith = jeff,
White = nancy.

谢谢!

最佳答案

(注意:在左括号之后和右括号之前不需要留空格。另外,如果这是家庭作业,你应该这么说。)

families/6 的定义,

families(_, Smith, lucy, _, jeff, Smith).

说:

  1. 忽略第一个参数和第四个参数(下划线);
  2. 统一第二个和最后一个参数(这两个参数由相同的变量名 Smith 引用);
  3. 将第三个参数与原子lucy统一;
  4. 将第五个参数与原子 jeff 统一。

现在您的查询,

?- families(Ford, nancy, Ford, jeff, Smith, White).

询问:

  • 你能否将第一个和第三个参数统一为同一个变量,Ford
    • 是的,您可以,现在Ford = lucy(来自定义中的 3.)。
  • 第二个参数可以是原子nancy吗?
    • 是,并且White = nancy(来自定义中的 2.)
  • 第四个参数可以是原子jeff吗?
    • 是的,但这没有任何效果(来自定义中的 1.)
  • 你能将第五个参数与变量Smith统一起来吗?
    • 是,Smith = jeff(来自定义中的 4.)。

假设您知道统一的工作原理,现在应该很清楚了。重要的是,定义和查询中的变量名称位于不同的上下文中,并且具有相同的名称没有任何意义(如定义中位置 2 和 6 中的 Smith 以及 Smith在查询中的位置 5)。

总而言之,这是一个令人费解的示例,它使用变量和原子名称来试图迷惑人类读者。但它会迫使您集中注意力,并且可以作为不良编程风格的示例。

关于Prolog 查询 - 试图理解这个结果是如何发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com