首页 > 解决方案 > 从 prolog 中的直接映射缓存中获取数据

问题描述

谓词 getDataFromCache(StringAddress,Cache,Data,HopsNum,directMap,BitsNum) 应该在成功从缓存中检索数据(缓存命中)时成功,并且 HopsNum 表示从缓存中访问数据所需的跳数可以不同根据直接映射缓存映射技术,例如: • StringAddress 是二进制数的字符串,表示您需要寻址的数据的地址,它是六个二进制位。• 缓存是使用前面讨论的表示的缓存。• 数据是发生缓存命中时从缓存中检索的数据。• HopsNum 从缓存中访问数据所需的跃点数。• BitsNum BitsNum 是索引需要的位数。

getDataFromCache 总是给我错误,尽管一切似乎都在工作,所以我希望有人修复它

convertAddress(Binary,N,Tag,Idx,directMap):-
                                            Idx is mod(Binary,10**N),                                            
                                            Tag is Binary // 10**N.

getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
                                         convertAddress(SA,BitsNum,Tag,Idx,directMap),
                                         number_string(Tag,Z),
                                         Z==T,
                                         V==1,
                                         Data is D.

getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
                                         convertAddress(SA,BitsNum,Tag,Idx,directMap),
                                         number_string(Tag,Z),
                                         (Z\=T;V==0),
                                         getDataFromCache(SA,T,Data,HopsNum,directMap,BitsNum).
                                          

标签: recursionprolog

解决方案


只是 hopsNumber 始终为零,您不必遍历,因为它是直接的,您可以使用 nth0 谓词访问它另外您使用 T 变量两次


推荐阅读