我写使用DCG为SPARQL解析器(语义Web查询语言)。我想,以取代Prolog的变量SPARQL变量名。我将如何去吗?
我可以用length([NewVar], 1)
产生新的变数,但我不能简单地使用名称变量对列表跟踪现有分配。列表上的member/2
操作会返回一个新的变量,而不是一个存储在列表中。
有没有命名的Prolog的变量一个简单的方法,例如,'$VAR(Name)'
?
member / 2可以做你想做的。下面是一个例子:
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.25)
Copyright (c) 1990-2016 University of Amsterdam, VU Amsterdam
L=[a-X,b-Y,c-Z], member(b-V,L).
L = [a-X, b-V, c-Z],
Y = V
但是,如果你写交织/ 1件/ 2,因为变量可能会改变其身份,即在下列情况下写的符号你可能会得到问题:
同样的问题(@ <)/ 2。一条出路是使用属性变量,其中至少杜绝了混淆,因为属性变量通常最后的统一,
因此,在上面的例子中,如果Y是一个属性可变,并且V是你再也看不到V的memloc主叫构件/ 2之后一个普通的变量。
此外,你还可以通过使用ISO标准的核心写variable_names/1选项,谱写出一段variablified长期缓解的问题。该variable_names / 1写入选项不受垃圾收集或走样。
再见