How to eliminate the warning

I’m using: SWI-Prolog version 8.1.2

I want the code to: I’m doing a recommender of movies, music and books.

But what I’m getting is:

Warning: c:/users/gerso/desktop/proyectos de gerson en prolog/proyecto pml/proyecto-musicalp.pl:157:
Clauses of lautor/1 are not together in the source-file
Earlier definition at c:/users/ger/desktop/proyectos de gers en prolog/proyecto pml/proyecto-musicalp.pl:18
Current predicate: lcategoria/1
Use :- discontiguous lautor/1. to suppress this message

My code looks like this:


 Use :- discontiguous ltitulo/1.
 Use :- discontiguous lcategoria/1.
 Use :- discontiguous lautor/1.
 Use :- discontiguous lnp/1.
 Use :- discontiguous lanio/1.
 Use :- discontiguous lisbn/1.
 Use :- discontiguous leditorial/1.




	%Recomendador de libros
        %libro(titulo,categoria,autor,no.pag,año,isbn,editorial,idioma)

ltitulo('LOS CUENTOS DE BEEDLE EL BARDO').
lcategoria('Infantil').
lautor('J K ROWLING').
lnp(160).
lanio(2018).
lisbn(9788498388831).
leditorial('SALAMANDRA').

ltitulo('COMO EXPLICAR FISICA CUANTICA CON UN GATO ZOMBI').
lcategoria('Infantil').
lautor('BIG VAN').
lnp(200).
lanio(2018).
lisbn(9786073175852).
leditorial('ALFAGUARA INFANTIL').


ltitulo('50 COSAS LOQUISIMAS DE LOS ANIMALES').
lcategoria('Infantil').
lautor('TRICIA MARTINEAU WAGNER').
lnp(112).
lanio(2018).
lisbn(9786072120266).
leditorial('LAROUSSE EDICIONES').

ltitulo('ABAJO LOS MUROS').
lcategoria('Infantil').
lautor('ERIC BATTUT').
lnp(32).
lanio(2018).
lisbn(9788417492472).
leditorial('BLUME').

ltitulo('EL SECRETO DE XEIN').
lcategoria('Infantil').
lautor('LAURA GALLEGO').
lnp(448).
lanio(2018).
lisbn(9786073172912).
leditorial('MONTENA').

     %adolecentes

ltitulo('A TRAVES DEL ESPEJO Y LO QUE ALICIA ENCONTRO ALLI').
lcategoria('Adolecentes').
lautor('LEWIS CARROLL').
lnp(232).
lanio(2002).
lisbn(9786070755231).
leditorial('AUSTRAL').

ltitulo('LO QUE QUEDO DE TI').
lcategoria('Adolecentes').
lautor('SARAH EVERETT').
lnp(384).
lanio(2008).
lisbn(9788496886766).
leditorial('PUCK').

ltitulo('ZAC Y MIA').
lcategoria('Adolecentes').
lautor('A J Betts').
lnp(288).
lanio(2004).
lisbn(9788416555079).
leditorial('SALAMANDRA').

ltitulo('UN MONSTRUO VIENE A VERME').
lcategoria('Adolecentes').
lautor('PATRICK NESS').
lnp(208).
lanio(2016).
lisbn(9786073148108).
leditorial('NUBE DE TINTA').

ltitulo('LA REINA ROJA').
lcategoria('Adolecentes').
lautor('VICTORIA AVEYARD').
lnp(472).
lanio(2015).
lisbn(9786077357346).
leditorial('OCEANO GRAN TRAVESIA').


     %Adolecentes adultos

ltitulo('CIEN AÑOS DE SOLEDAD').
lcategoria('Adolecentes Adultos').
lautor('GABRIEL GARCIA MARQUEZ').
lnp(560).
lanio(2014).
lisbn(9788437604947).
leditorial('CATEDRA').

ltitulo('EL SEÑOR DE LAS MOSCAS').
lcategoria('Adolecentes Adultos').
lautor('WILLIAM GOLDING').
lnp(288).
lanio(2011).
lisbn(9788420674179).
leditorial('ALIANZA EDITORIAL').

ltitulo('EL DIARIO DE ANA FRANK').
lcategoria('Adolecentes Adultos').
lautor('ANA FRANK').
lnp(230).
lanio(2013).
lisbn(9786077581284).
leditorial('EDITORA Y DISTRIBUIDORA MULTILIBROS').

ltitulo('EL GRAN GATSBY').
lcategoria('Adolecentes Adultos').
lautor('F SCOTT FITZGERALD').
lnp(400).
lanio(2003).
lisbn(9788446041825).
leditorial('EDICIONES AKAL').



ltitulo('LADRONA DE LIBROS').
lcategoria('Adolecentes Adultos').
lautor('MARKUS ZUSAK').
lnp(544).
lanio(2013).
lisbn(9786073120319).
leditorial('DEBOLSILLO').


   %academico

ltitulo('EDUCACION PARA LA SALUD').
lcategoria('Academico').
lautor('MARGARITA ROSAS MUNIVE').
lnp(272).
lanio(2018).
lisbn(9786073244237).
leditorial('PEARSON EDUCACION').

ltitulo('The Pragmatic Programmer From Journeyman to Master').
lcategoria('Academico').
lautor('Andrew Hunt David Thomas').
lnp(352).
lanio(1999).
lisbn(9780132119177).
leditorial('Addison Wesley Professional').

ltitulo('CODE The Hidden Language').
lcategoria('Academico').
lautor('Microsoft Press').
lnp(400).
lanio(2000).
lisbn(9780735611313).
leditorial('Microsoft Press').

ltitulo('PRINCIPIOS DE MEDICINA INTERNA').
lcategoria('Academico').
lautor('CHARLES WIENER').
lnp(3000).
lanio(2015).
lisbn(978-6071513359).
leditorial('McGraw Hill').

ltitulo('LA SORPRENDENTE VERDAD SOBRE QUE NOS MOTIVA').
lcategoria('Academico').
lautor('Daniel H Pink').
lnp('240').
lanio('2010').
lisbn('8498750784').
leditorial('Gestión_2000').


      %separaciones y clasificacion
      %libro(titulo,categoria,autor,no.pag,año,isbn,editorial,idioma).

titulo_libro('LA SORPRENDENTE VERDAD SOBRE QUE NOS MOTIVA').

categoria_libro('Academico').

autor_libro('Daniel H Pink').


  %Reglas

titulos_de_libro(X):-ltitulo(X).

genero_libro(X):-lcategoria(X).

autores_libros(X):-lautor(X).
numero_paguinas(X):-lnp(X).
anio_libro(X):-lanio(X).
isbn_libro(X):-lisbn(X).
editorial_libro(X):-leditorial(X).


Remove “Use” before the directives:

 Use :- discontiguous ltitulo/1.
 Use :- discontiguous lcategoria/1.
 Use :- discontiguous lautor/1.
 Use :- discontiguous lnp/1.
 Use :- discontiguous lanio/1.
 Use :- discontiguous lisbn/1.
 Use :- discontiguous leditorial/1.
1 Like

Which of course comes from the last line of this message.

$ swipl x.pl 
Warning: /ufs/wielemak/src/swipl-devel/linux/x.pl:3:
	Clauses of a/0 are not together in the source-file
	  Earlier definition at /ufs/wielemak/src/swipl-devel/linux/x.pl:1
	  Current predicate: b/0
	  Use :- discontiguous a/0. to suppress this message

Should we write that as below?

Use ":- discontiguous a/0." to suppress this message

Difficult question. In my experience, such messages may lead the user also writting the double quotes in his program. Adding a clarification might be too verbose, as in:

Use ":- discontiguous a/0." (without the double quotes) to suppress this message 

That is also my worry. Overly long messages with lots of mostly trivial comments doesn’t improve the situation either though :frowning: What about using colour for code?

Yes, I think colouring would help (at least for those non-visually impaired).

What about something like

Add the following line(s) to your code
   :- discontiguous a/0. 
to suppress this message
1 Like

Promising! All in all, I think the message infrastructure should be generalized to provide classifications for pieces of text. Examples are example code, predicate identifiers, modules, source locations, etc. If we have that we can, depending on device and personal preferences, render the result appropriately. This only means a lot of editing in boot/messages.pl :frowning:

Using a still too direct approach I now get this:

1 Like

Great! :+1:

I presume you’re writing a small database of books? If so, you might want to think about how you would connect the titulo_libro, categoria_libro, auto_libro, etc. for the same book. What you’ve written lets you know that ‘LA SORPRENDENTE VERDAD SOBRE QUE NOS MOTIVA’ is the title of a book, and that ‘Daniel H Pink’ is the author of a book; but you don’t have a way of saying that the author of ‘LA SORPRENDENTE VERDAD SOBRE QUE NOS MOTIVA’ is ‘Daniel H Pink’.

(Whenever you see a message about distinguous predicates, you should consider if you just want to get rid of an annoying message, or whether there’s something deeper to consider.)