recursion - 从 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 谓词访问它另外您使用 T 变量两次
推荐阅读
- google-bigquery - 如何在 GCP 上执行数据非规范化?
- kubernetes - 与服务器 xxx:6443 的连接被拒绝 - 您是否指定了正确的主机或端口?Kubernetes
- amazon-iam - EKS 集群身份验证问题:用于创建 EKS 集群的用户或角色已从 AWS IAM 中删除
- c++ - 如何使用 Visual Studio C/C++ 编译器 (cl.exe) 预处理我的 Objective-C 代码?
- python - DataFrame.plot() 错误地将东部时间转换为 UCT
- reactjs - 我正在尝试向我的反应客户端添加代理,但出现 404 错误
- android - 如何在高于默认的 BottomNavigationView 上添加指示器?
- excel - 如何改进我的当前区域选择器?
- ruby-on-rails - 在更改我的开发数据库之前我应该知道什么?
- angular - “如果没有描述,'@param' 在 TypeScript 代码中是多余的。” TSLint 错误?