我有一个术语,我想从中获取一组变量名称。
例如。输入:my_m(aa,b,B,C,max(D,C),D) 输出:[B,C,D] (无需按照输入中出现的顺序排序)(这会调用 set_variable_name(输入输出)。)
我可以简单地从输入中获取 [B,C,D,C,D],但不知道如何实现 set(输出中只有一次出现)。我尝试过类似存储在 rbtrees 中的方法,但失败了,因为
only_one([],T,T) :- !.
only_one([X|XS],B,C) :- rb_in(X,X,B), !, only_one(XS,B,C).
only_one([X|XS],B,C) :- rb_insert(B,X,X,U), only_one(XS,U,C).
它返回只有一个节点和统一的树,如B=C, C=D...
. 我想我明白了 - 因为在质疑 rb_in(..) 时统一了 X。
那么,如何只存储一次该变量名呢?还是因为我们使用的是逻辑编程,所以这个想法根本上是错误的?如果你想知道我为什么需要这个,那是因为我们被要求在 Prolog 中实现 A* 算法,这是制作搜索空间的一部分。