从序言中的直接映射缓存获取数据

Getting data from a direct mapped cache in 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).
                                          

只是 hopsNumber 始终为零 而且你不必遍历,因为它是直接的 您可以使用 nth0 perdicate 访问它 您还两次使用 T 变量