Sintaxis de formular una pregunta en prolog

I’m using: SWI-Prolog version 8.1.2

I want the code to:
ask a question, using this form

records®, R >:< pelicula{anio:2018,titulo:T}.

and I want to know what movies I have of stars wars.
and that I’m dying all the movies that I have in the base of knowledge, all the movies of stars wars

But what I’m getting is:

?- records®, R >:< pelicula{titulo:T[“Stars Wars”]}.
ERROR: Syntax error: Operator expected
ERROR: records®, R >:< pelicula{titulo:
ERROR: ** here **
ERROR: T[“Stars Wars”]} .
?- records®, R >:< pelicula{titulo:[“Stars Wars”]}.
false.

?- records®, R >:< pelicula{titulo:[(“Stars Wars”)]}.
false.

My code looks like this:

:- module('Base de conocimeintos',
  [records/1 % entradas reales de la base de datos
  ,schema/1  % Esquema de registros opcional: puede ser útil para el mantenimiento / documentación
  ,record/1  % validador simple

  ]).

% comprobar que el tipo de registro es conocido
%y tiene todos los campos definidos correctamente

record(R) :-
  records(R),
  dict_pairs(R,T,As),
  schema(S),
  dict_pairs(S,T,Bs),
  maplist([K-_,K-_]>>true,As,Bs).

schema(libro{
  titulo:string,
  categoria:string,
  autor:string,
  np:integer,
  anio:_,    % no importa el tipo (pero, por supuesto, debe definir su validador de año / 1 o de anio / 1)
  isbn:isbn, % tipo personalizado: implementar un isbn / 1 para validar (quizás un DCG[Gramatica de Cláusulas definidas])
  editorial:string
}).


records(pelicula{
  titulo:'Avengers: Infinity War',
  director:'Anthony Russo',
  escritor:'Christopher Markus,Stephen McFeely',
  produccion:'Kevin Feige',
  protagonistas:'Robert Downey Jr,Chris Evans,Chris Hemsworth,Mark Ruffalo,Scarlett Johansson,Jeremy Renner',
  genero:'Acción,Aventuras,Ciencia ficción',
  clasificacion:'Adolecentes,adultos',
  idioma:'Ingles',
  calidad:'Full HD',
  anio:2018,
  pais:'EEUU',
  duracion:'2 horas'
}).

records(pelicula{
  titulo:'Star Wars Episodio IV: Una nueva esperanza',
  director:'Mike Mitchell',
  escritor:'Phil Lord_Rosemery Louis',
  produccion:'Dan Lin,Phil Lord, Denik Pol',
  protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz',
  genero:'Accion,Aventura,Ciencia ficcion',
  clasificacion:'Adulto',
  idioma:'Ingles',
  calidad:'HD',
  anio:1977,
  pais:'EEUU',
  duracion:'160 minutos'
}).


records(pelicula{
  titulo:'Star Wars Episodio V: El Imperio contraataca',
  director:'Mike Mitchell, Paul G',
  escritor:'Phil Lord,Rosemery Louis',
  produccion:'Dan Lin,Phil Lord, Denik Pol',
  protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz',
  genero:'Accion,Aventura,Ciencia ficcion',
  clasificacion:'Adulto',
  idioma:'Ingles',
  calidad:'HD',
  anio:1980,
  pais:'EEUU',
  duracion:'150 minutos'
}).

records(pelicula{
  titulo:'Star Wars Episodio VI: El retorno del Jedi',
  director:'Mike Mitchell, Paul G',
  escritor:'Phil Lord,Rosemery Louis',
  produccion:'Dan Lin,Phil Lord, Denik Pol',
  protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz',
  genero:'Accion,Aventura,Ciencia ficcion',
  clasificacion:'Adulto',
  idioma:'Ingles',
  calidad:'HD',
  anio:1983,
  pais:'EEUU',
  duracion:'150 minutos'
}).

records(pelicula{
  titulo:'Star Wars Episodio I: La amenaza Fantasma',
  director:'Mike Mitchell, Paul G',
  escritor:'Phil Lord,Rosemery Louis',
  produccion:'Dan Lin,Phil Lord, Denik Pol',
  protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz',
  genero:'Accion,Aventura,Ciencia ficcion',
  clasificacion:'Adulto',
  idioma:'Ingles',
  calidad:'HD',
  anio:1997,
  pais:'EEUU', 
  duracion:'156 minutos'
}).

records(pelicula{
  titulo:'Star Wars Episodio II: El ataque de los clones',
  director:'Mike Mitchell, Paul G',
  escritor:'Phil Lord,Rosemery Louis',
  produccion:'Dan Lin,Phil Lord, Denik Pol',
  protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz',
  genero:'Accion,Aventura,Ciencia ficcion',
  clasificacion:'Adulto',
  idioma:'Ingles',
  calidad:'HD',
  anio:2002,
  pais:'EEUU',
  duracion:'345 minutos'

}).

This is cross posted at StackOverflow as Problem looking for coincidences in a text

Try

?- records(R), R.get(titulo,T), atom_concat('Star Wars',_,T).

Please study the SWISH tutorial on dicts, and then read about regular expressions, DCGs, etc…

1 Like

if that’s what I’m doing.

about your answer I get an error …

?- records®, R.get(titulo,T), atom_concat(‘Star Wars’,_,T).
ERROR: Undefined procedure: (’.’)/2
ERROR: However, there are definitions for:
ERROR: (’.’)/3
false.

Oops, sorry, I pasted the wrong line. This should work…

?- records(R), T=R.get(titulo), atom_concat('Star Wars',_,T).
R = pelicula{anio:1977, calidad:'HD', clasificacion:'Adulto', director:'Mike Mitchell', duracion:'160 minutos', escritor:'Phil Lord_Rosemery Louis', genero:'Accion,Aventura,Ciencia ficcion', idioma:'Ingles', pais:'EEUU', produccion:'Dan Lin,Phil Lord, Denik Pol', protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz', titulo:'Star Wars Episodio IV: Una nueva esperanza'},
T = 'Star Wars Episodio IV: Una nueva esperanza' ;
R = pelicula{anio:1980, calidad:'HD', clasificacion:'Adulto', director:'Mike Mitchell, Paul G', duracion:'150 minutos', escritor:'Phil Lord,Rosemery Louis', genero:'Accion,Aventura,Ciencia ficcion', idioma:'Ingles', pais:'EEUU', produccion:'Dan Lin,Phil Lord, Denik Pol', protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz', titulo:'Star Wars Episodio V: El Imperio contraataca'},
T = 'Star Wars Episodio V: El Imperio contraataca' 
...

Actually, there is a shorter idiom.

?- records(R), atom_concat('Star Wars',_,R.titulo).
R = pelicula{anio:1977, calidad:'HD', clasificacion:'Adulto', director:'Mike Mitchell', duracion:'160 minutos', escritor:'Phil Lord_Rosemery Louis', genero:'Accion,Aventura,Ciencia ficcion', idioma:'Ingles', pais:'EEUU', produccion:'Dan Lin,Phil Lord, Denik Pol', protagonistas:'Chris Pratt,Elizabeth Banks,Tiffany Haddish,Will Arnett,Stephanie Beatriz', titulo:'Star Wars Episodio IV: Una nueva esperanza'} .

Sorry for misguided help…