Prolog-生成唯一符号

Prolog-生成唯一符号,prolog,unique,symbols,Prolog,Unique,Symbols,在Prolog中,我知道gensym谓词: gensym(g, X). X = g1. gensym(g, X). X = g2. gensym(g, X). X = g3. 但文件明确指出: “请注意,这并不能保证原子在系统中是唯一的。” 我正在寻找一个谓词来精确地实现这一点,因此,如果我对一个新符号进行gensymming,它将与以前在同一程序中使用的符号不匹配。您想对这些原子做什么?你打算采取什么行动?只是测试平等性,或者完全不同的东西?:),可能?按照@repeat的要求描述一个用例。

在Prolog中,我知道
gensym
谓词:

gensym(g, X).
X = g1.
gensym(g, X).
X = g2.
gensym(g, X).
X = g3.
但文件明确指出: “请注意,这并不能保证原子在系统中是唯一的。”


我正在寻找一个谓词来精确地实现这一点,因此,如果我对一个新符号进行gensymming,它将与以前在同一程序中使用的符号不匹配。

您想对这些原子做什么?你打算采取什么行动?只是测试平等性,或者完全不同的东西?:),可能?按照@repeat的要求描述一个用例。很可能您不需要“在系统中唯一”的原子,而是需要在某个有限范围内唯一的标识符,例如谓词的所有子句?只要你不使用全局变量
gensym/2
,就应该足够好了,即使这样,只要你不做一些疯狂的元解释器,它也应该足够好。@Boris。用一个新变量代替gensym,用
(==)/2
测试相等性,怎么样?这不会给您提供可读的名称,但唯一性保证是成立的。(只要这些变量中的两个或两个以上不被统一所混淆。)@重复一遍,我想使用原子背后的原理是,这种“唯一键”通常用于某种查找,而Prolog系统是为以这种方式使用原子而优化的。我相信你的建议也有它的用处。你想用这些原子做什么?你打算采取什么行动?只是测试平等性,或者完全不同的东西?:),可能?按照@repeat的要求描述一个用例。很可能您不需要“在系统中唯一”的原子,而是需要在某个有限范围内唯一的标识符,例如谓词的所有子句?只要你不使用全局变量
gensym/2
,就应该足够好了,即使这样,只要你不做一些疯狂的元解释器,它也应该足够好。@Boris。用一个新变量代替gensym,用
(==)/2
测试相等性,怎么样?这不会给您提供可读的名称,但唯一性保证是成立的。(只要这些变量中的两个或两个以上不被统一所混淆。)@重复一遍,我想使用原子背后的原理是,这种“唯一键”通常用于某种查找,而Prolog系统是为以这种方式使用原子而优化的。我相信你的建议也有用处。