- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个涉及图形的项目,我有一个属性变量列表,每个属性变量代表图形中的一个节点。每个节点都有几个属性,例如相邻节点、到起始节点的距离等。我想从列表中删除单个节点,但是当我使用 delete 时,出现以下错误:
ERROR: uhook/3: Undefined procedure: adjs:attr_unify_hook/2
例如,如果我在我的程序中包含 delete(OldVertices, Node, NewVertices)
,我会收到此错误。
如果我将我的顶点存储在二进制堆中,并尝试使用 delete_from_heap
从堆中删除一个顶点,我也会得到完全相同的错误。
如果我首先删除它的所有属性,我能够在节点上成功地使用 delete 和 delete_from_heap
,但这会给我的程序带来问题,因为我想稍后使用这些属性;我只是不希望节点包含在列表或二进制堆中。
这是一个错误,还是我对属性变量的处理不正确?
谢谢!这适用于列表。现在我正在尝试做一些类似的事情来从二进制堆中删除属性变量。我有一个规则
delheap(Heap, Key, NewHeap) :-
delete_from_heap(Heap, A1, A0, NewHeap),
get_attr(Key, dist, A1),
A0 == Key.
然而,当我进行测试时,我得到以下结果:
?- 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).
效果很好,但是当我尝试使用 B 时:
?- TLO = [3-A, 4-B], put_attr(A, dist, 3), put_attr(B, dist, 4), list_to_heap(TLO, H), delheap(H, B, Hq).
Correct to: "dijkstra_av:delheap(H,A,Hq)"? yes
TLO = [3-A, 4-B], false.
我能够通过使用优先级而不是键调用 delete_from_heap 来使其工作,但是,如果两个项目具有相同的优先级并且它选择了错误的项目,这确实会导致问题。在我的应用程序中,这个问题并不经常出现,但似乎通常应该有更好的方法来使用现有规则的属性变量。
最佳答案
您不小心统一了一个变量,该变量的属性附加了另一个术语。涉及属性变量的统一会触发相应模块中的 attr_unify_hook/2
,并且您没有定义此类 Hook ,因为您仅将属性用作访问数据的快速方式,并且可能对之间的任何统一不感兴趣这些变量。
要从列表中删除变量,请使用例如 (==)/2
:
list0_var_list(Ls0, V, Ls) :-
select(V0, Ls0, Ls),
V0 == V.
示例查询:
?- list0_var_list([A,B,C,D], B, Ls).
Ls = [A, C, D] ;
false.
请注意,这仍然留下一个选择点。您可以使用 once/1
提交第一个也是唯一的解决方案,因为您已经知道列表中的每个节点都是唯一的:
?- once(list0_var_list([A,B,C,D], B, Ls)).
Ls = [A, C, D].
使用这样的谓词而不是 delete/3
可以让您安全地检测变量的相等性并从列表中删除给定的变量,而不会触发任何统一 Hook 。
另请注意 delete/3
已被弃用(请参阅文档),并考虑以下情况:
?- delete([A,B,C], A, Cs).
Cs = [].
这表明当涉及变量时,您不能安全地使用 delete/3
。
关于prolog - Prolog中属性变量的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386030/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!