Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog匿名变量_Prolog_Prolog Toplevel_Prolog Anonymous Variable - Fatal编程技术网

Prolog匿名变量

Prolog匿名变量,prolog,prolog-toplevel,prolog-anonymous-variable,Prolog,Prolog Toplevel,Prolog Anonymous Variable,下面是我对Prolog变量的理解 一个下划线代表匿名变量,它类似于每次出现的新变量 以类似下划线的W开头的变量名不是匿名变量。或者,Prolog内部生成的变量名(如_G189)不被认为是匿名的: 你能帮我理解吗 顺便说一下,我从一些教程中获得了上面的示例,但是当我在SWI Prolog版本6中运行它时,我得到了以下结果: ?- append([1,2],X,Y). Y = [1, 2|X]. 谢谢。 匿名变量\uu是唯一一个不同事件代表不同变量的变量。以开头的其他变量不是匿名变量。不同的引用引

下面是我对Prolog变量的理解

  • 一个下划线代表匿名变量,它类似于每次出现的新变量

  • 以类似下划线的W开头的变量名不是匿名变量。或者,Prolog内部生成的变量名(如_G189)不被认为是匿名的:

  • 你能帮我理解吗

    顺便说一下,我从一些教程中获得了上面的示例,但是当我在SWI Prolog版本6中运行它时,我得到了以下结果:

    ?- append([1,2],X,Y).
    Y = [1, 2|X].
    
    谢谢。

    匿名变量
    \uu
    是唯一一个不同事件代表不同变量的变量。以
    开头的其他变量不是匿名变量。不同的引用引用同一变量(在同一范围内)。但是,许多序言(如SWI)都会警告您,如果变量不以下划线开头,则只会出现一次:

    ?- [user].
    a(V).
    Warning: user://1:9:
            Singleton variables: [V]
    
    您必须将该变量重命名为
    \u V
    ,以避免该警告。这有助于程序员更好地识别变量名中的拼写错误。在许多系统中还有一些这样的限制

    a(_V,_V).
    Warning: user://1:12:
            Singleton-marked variables appearing more than once: [_V]
    
    同样,这只是一个警告。如果希望以
    \uu
    开头的变量出现两次(无警告),请改为编写
    \u
    。但是最好不要用开头的
    \uu
    来命名更有意义的名字

    答案 您从Prolog的顶级循环中得到的是答案;特别是回答替换。它们用于表示解决方案(这是我们真正感兴趣的)。答案替换有几种表示方法。您正在使用的教程似乎引用了非常旧的SWI版本。我想说这个版本可能有15到20年的历史了

    ?- append([1,2],X,Y).
    X = _G189
    Y = [1, 2|_G189]
    
    然而,给出的答案并不错误:引入了一个新的辅助变量
    \u G189

    较新版本的SWI和许多其他系统试图最小化输出,避免使用辅助变量。所以

    ?- append([1,2],X,Y).
    Y = [1, 2|X].
    
    也一样好。这是一个“较新”版本(也有6年历史)的答案。注意,这个答案比第一个答案告诉你的要多得多:它不仅更简洁地向你展示了答案替换,而且还告诉你确实存在这个答案(没有更多)。请参见末尾的点
    ?这意味着:这里没有更多的答案。否则将出现一个
    获取下一个答案

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