当从高速缓存(高速缓存命中)成功检索数据时,谓词getDataFromCache(StringAddress、高速缓存、数据、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).
发布于 2021-06-13 03:01:43
简单地说,hopsNumber始终为零,您不必遍历它,因为它是直接的,您可以使用nth0 perdicate访问它,还可以使用T变量两次
https://stackoverflow.com/questions/67828632
复制相似问题