пункты, не находящиеся вместе в предупреждении исходного файла - PullRequest
0 голосов
/ 11 апреля 2020

Так что в основном у меня есть эти утверждения и правила, и почему-то компилятор говорит, что предложения не находятся в исходном файле, и я не понимаю, почему, как мне кажется, программа хорошо написана?

Программа:

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

Если бы кто-то мог объяснить мне, что не так в этой программе, я был бы очень признателен.

1 Ответ

1 голос
/ 11 апреля 2020

Прологу не важно, являются ли эти предложения фактами или правилами - они все являются просто предложениями (факты просто не имеют части ": - ..."; но вы также можете думать о них как о :- true).

У вас есть правила для tipo_prod / 2 и og_prod / 3 отдельно от фактов для этих предикатов. Итак, вы получаете предупреждение, так как это часто указывает на опечатку.

Кстати, ваш код, вероятно, не будет делать то, что вы думаете, что он делает. Я предполагаю, что вы хотите использовать разные имена для правил tipo_prod / 2 и og_prod / 3, которые отличаются от имен для фактов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...