我正在开发一个涉及图形的项目,我有一个属性变量列表,每个属性变量代表图中的一个节点.每个节点都有几个属性,例如相邻节点,起始节点的距离等.我想从列表中删除单个节点,但是当我使用delete时,我收到以下错误:
ERROR: uhook/3: Undefined procedure: adjs:attr_unify_hook/2
Run Code Online (Sandbox Code Playgroud)
例如,如果我包含delete(OldVertices, Node, NewVertices)在我的程序中,则会出现此错误.
如果我将顶点存储在二进制堆中,并尝试使用从堆中删除顶点,我也会得到完全相同的错误delete_from_heap.
我能够成功地使用删除和delete_from_heap节点,如果我第一次删除它的所有属性,但这会导致我的程序出现问题,因为我想稍后使用这些属性; 我只是不希望节点包含在列表或二进制堆中.
这是一个错误,还是我错误地处理属性变量?
谢谢!这适用于列表.现在我尝试做类似的事情从二进制堆中删除属性变量.我有一个规则
delheap(Heap, Key, NewHeap) :-
delete_from_heap(Heap, A1, A0, NewHeap),
get_attr(Key, dist, A1),
A0 == Key.
Run Code Online (Sandbox Code Playgroud)
但是,当我测试时,我得到以下结果:
?- TLO = [3-A, 4-B], put_attr(A, dist, 3), put_attr(B, dist, 4), list_to_heap(TLO, H), delheap(H, A, Hq).
Correct to: "dijkstra_av:delheap(H,A,Hq)"? yes
TLO = [3-A, 4-B], H = heap(t(A, 3, [t(B, 4, [])]), 2), Hq = heap(t(B, 4, []), 1), put_attr(A, dist, 3), put_attr(B, dist, 4). …Run Code Online (Sandbox Code Playgroud) prolog ×1