在源文件中没有一起出现警告

问题描述 投票:0回答:1

所以,基本上,我有这个确认和规则,并且编译器以某种方式说这些子句不在源文件中,我不明白为什么,就像我认为程序编写得很好一样?

程序:

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 compiler-warnings
1个回答
0
投票

Prolog不在乎这些子句是事实还是规则-它们全都只是子句(事实只是没有“:-...”部分;但是您也可以将它们视为具有[C0 ])。

您有关于tipo_prod / 2和og_prod / 3的规则,与那些谓词的事实分开。因此,您会收到警告,因为这通常是错字的征兆。

BTW,您的代码可能不会执行您认为正在做的事情。我的猜测是,您要为rules tipo_prod / 2和og_prod / 3使用不同的名称,而与事实的名称不同。

© www.soinside.com 2019 - 2024. All rights reserved.