prolog - 子句不在源文件警告中
问题描述
所以基本上我有这个确认和规则,不知何故编译器说这些子句不在源文件中,我不明白为什么,就像我认为程序写得很好?
程序:
forne(f001,zé_dos_parafusos,fabricante,carregado).
forne(f002,branquinho,fabricante,lisboa).
forne(f003,lar_ideal,fabricante,lisboa).
tipo_prod(p001,parafuso).
tipo_prod(p002,broca).
tipo_prod(p003,lavatório).
tipo_prod(p004,sabonete).
tipo_prod(p005,detergente).
og_prod(f001,p001,30000).
og_prod(f001,p002,500).
og_prod(f002,p003,25).
og_prod(f002,p004,50000).
og_prod(f002,p005,50000).
og_prod(f003,p001,1000).
og_prod(f003,p002,50).
og_prod(f003,p003,5).
og_prod(f003,p005,500).
tipo_prod(X, _) :- og_prod(X, _, _).
og_prod(X, Y, _) :- tipo_prod(Y, _), forne(X, _, _, _).
警告:
Clauses of tipo_prod/2 are not together in the source-file
Clauses of og_prod/3 are not together in the source-file
Earlier definition at ex1 cap7.pl:11
Current predicate: tipo_prod/2
Use :- discontiguous og_prod/3. to suppress this message
如果有人可以向我解释这个程序有什么问题,我将不胜感激。
解决方案
Prolog 不关心子句是事实还是规则——它们都只是子句(事实根本没有 ":- ..." 部分;但您也可以将它们视为具有:- true
)。
您有与这些谓词的事实分开的 tipo_prod/2 和 og_prod/3 规则。因此,您会收到警告,因为这通常表示拼写错误。
顺便说一句,您的代码可能不会做您认为它正在做的事情。我的猜测是,您想为规则tipo_prod/2 和 og_prod/3 使用不同的名称,这与事实的名称不同。
推荐阅读
- react-native - 更新 RN 和 Expo 版本后,React Native 和 Expo Bare 应用程序在 iOS 上启动时崩溃
- matrix - 在 Windows 上使用 Pardiso 求解器时 Julia 退出
- css - CSS中有没有办法通过触发动作将句子变成首字母缩写词?
- c# - 如何在运行时选择 DllImport 的路径?
- python - 使用 urllib 和身份验证 PUT
- c# - try-catch 块中的 if 语句返回“Infinite”
- bash - 在继续之前检查文件是否在具有特定名称的文件夹中
- reactjs - 未捕获的错误:useNavigate() 只能在 a 的上下文中使用
cypress 单元测试用例中的组件 - python - Qt.AlignHCenter 不工作,标签不显示文本
- reactjs - 在 React Js V17.0 中使用 props 导航