【发布时间】:2014-01-25 00:09:10
【问题描述】:
我有一个术语,我想从中获取一组变量名称。
例如。输入:my_m(aa,b,B,C,max(D,C),D) 输出:[B,C,D](无需按照输入中出现的顺序排序) (这会调用 set_variable_name(Input,Output)。)
我可以简单地从输入中获取 [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* 算法,这是制作搜索空间的一部分。
【问题讨论】: