小编Sur*_*air的帖子

删除Prolog中的属性变量

我正在开发一个涉及图形的项目,我有一个属性变量列表,每个属性变量代表图中的一个节点.每个节点都有几个属性,例如相邻节点,起始节点的距离等.我想从列表中删除单个节点,但是当我使用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

3
推荐指数
1
解决办法
114
查看次数

标签 统计

prolog ×1