Prolog 序言通配符

Prolog 序言通配符,prolog,Prolog,我想知道,如何使用下划线两次,但检查该下划线的两个实例是否统一 我基本上需要的是,如果在一个映射中存在两个相同值的元素,则返回true 即成员((u,u),[(a,a),(b,a),(c,a)]。 如果我使用一个变量,这会使它们统一吗 即成员((A,A),[(A,A),(b,A),(c,A)]。 但它返回的是变量而不是true 我需要一些启发 使用变量的解决方案是正确的 返回变量是返回true的一种方法。这真的意味着:当var=value时,这个目标是真的,而不是这个目标是真的 请注意,在不同谓

我想知道,如何使用下划线两次,但检查该下划线的两个实例是否统一

我基本上需要的是,如果在一个映射中存在两个相同值的元素,则返回true

成员((u,u),[(a,a),(b,a),(c,a)]。

如果我使用一个变量,这会使它们统一吗

成员((A,A),[(A,A),(b,A),(c,A)]。

但它返回的是变量而不是true


我需要一些启发

使用变量的解决方案是正确的

返回变量是返回true的一种方法。这真的意味着:当var=value时,这个目标是真的,而不是这个目标是真的

请注意,在不同谓词中将其用作子句将隐藏变量:

contains_identical_pair(List) :- member((A,A),List).

使用变量的解决方案是正确的

返回变量是返回true的一种方法。这真的意味着:当var=value时,这个目标是真的,而不是这个目标是真的

请注意,在不同谓词中将其用作子句将隐藏变量:

contains_identical_pair(List) :- member((A,A),List).

可以使用双重否定来避免变量绑定:

?- \+ \+ member((A,A),[(a,a),(b,a),(c,a)]).
true.

可以使用双重否定来避免变量绑定:

?- \+ \+ member((A,A),[(a,a),(b,a),(c,a)]).
true.

prolog屏幕上打印的变量绑定只是为了在交互式提示中简化操作,这样您就不必每次打印出您关心的变量。它们根本不会影响代码的逻辑

仅当在提示下输入变量时,才会打印它们。因此,如果您正在编写的谓词是一个较大程序的一部分,您可以忽略此输出,或者如果您希望它成为人们将从提示符调用的顶级谓词,而您不希望打印输出,那么只需将您的调用封装在一个没有参数或只有输入参数的谓词中即可。即:

wrapper :-  
    predicate(Out1,Out2).
或:


prolog屏幕上打印的变量绑定只是为了在交互式提示中简化操作,这样您就不必每次打印出您关心的变量。它们根本不会影响代码的逻辑

仅当在提示下输入变量时,才会打印它们。因此,如果您正在编写的谓词是一个较大程序的一部分,您可以忽略此输出,或者如果您希望它成为人们将从提示符调用的顶级谓词,而您不希望打印输出,那么只需将您的调用封装在一个没有参数或只有输入参数的谓词中即可。即:

wrapper :-  
    predicate(Out1,Out2).
或:


下划线不是通配符。它用来表示你根本不在乎它的价值。从约束满足的角度来看,您根本没有对该变量施加约束。这意味着两个不同的下划线可以采用不同的值。您可以很容易地检查:
?-member(,),[(b,c)])。>>正确。
下划线不是通配符。它用来表示你根本不在乎它的价值。从约束满足的角度来看,您根本没有对该变量施加约束。这意味着两个不同的下划线可以采用不同的值。您可以很容易地检查:
?-member(,),[(b,c)])。>>正确。