gpt4 book ai didi

序言匿名变量

转载 作者:行者123 更新时间:2023-12-03 23:32:26 25 4
gpt4 key购买 nike

这是我对 Prolog 变量的了解。

  • 单个下划线代表匿名变量,每次出现时就像一个新变量。
  • 像 _W 这样以下划线开头的变量名不是匿名变量。或者,在 Prolog 中生成的变量名,如 _G189,不被认为是匿名的:

  • ?- append([1,2],X,Y).
    X = _G189
    Y = [1, 2|_G189]

    你能帮我理解吗?

    顺便说一下,我从一些教程中得到了上面的例子,但是当我在 SWI-Prolog 版本 6 中运行它时,我得到以下内容:
    ?- append([1,2],X,Y).
    Y = [1, 2|X].

    谢谢你。

    最佳答案

    变量

    匿名变量 _是唯一一个不同的出现代表不同变量的变量。其他以 _ 开头的变量不是匿名的。不同的出现指的是同一个变量(在同一个范围内)。然而,许多像 SWI 这样的 Prolog 会警告你,如果一个不以下划线开头的变量只出现一次:

    ?- [user].
    a(V).
    Warning: user://1:9:
    Singleton variables: [V]

    您必须将该变量重命名为 _V以避免该警告。这有助于程序员更好地发现变量名称中的拼写错误。在许多系统中还有更多这样的限制。
    a(_V,_V).
    Warning: user://1:12:
    Singleton-marked variables appearing more than once: [_V]

    同样,这只是一个警告。如果你想要一个以 _ 开头的变量应该发生两次(没有警告),写 __相反。但最好坚持使用更有意义的名称,而不是开头 _ .

    答案

    你从 Prolog 的顶级循环中得到的是答案;尤其是答案替换。它们代表解决方案(这是我们真正感兴趣的)。有几种方法可以表示答案替换。您使用的教程似乎是指非常旧的 SWI 版本。我想说这个版本可能有 15 到 20 年的历史。
    ?- append([1,2],X,Y).
    X = _G189
    Y = [1, 2|_G189]

    然而,给出的答案并没有错:一个新的辅助变量 _G189介绍。

    较新版本的 SWI 和许多其他系统试图最小化输出,避免辅助变量。所以
    ?- append([1,2],X,Y).
    Y = [1, 2|X].

    一样好。这是“较新”版本(也有 6 年历史)的答案。请注意,此答案比第一个答案告诉您的内容要多得多:它不仅更简洁地向您展示了答案替换,而且还告诉您确实只有这个答案(并且仅此而已)。见点 .最后?这意味着:这里不再需要回答了。否则会有 ;下一个答案。

    关于序言匿名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238492/

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