/*** queries ***/

/*
    a query is a goal to prove

    ?- Head.
*/

% include database
:- include('db.pl').

% green is a color
?- color(green).                                    % true.

% michael is male
?- male(michael).                                   % true.

% a query fails if goal is not provable
% even if true
?- color(boat).                                     % false. (this is correct)
?- color(black).                                    % false. (but should be true, description is incomplete)

% equality
?- =(a, b).                                         % false.
?- a = b.                                           % false.
?- a = a.                                           % true.

% note: atom = atom, but atom /= list
?- 'michael' = michael.                             % true.
?- "michael" = michael.                             % false.

% disequality
?- "michael" \= michael.                            % true.

% greater/ less than or equal
?- 5 >= 10.                                         % false.
?- 5 =< 10.                                         % true.

% assignment
?- X = 5.                                           % X = 5.

% assignment and conditional
?- X = 5, X =< 10.                                  % false.

% substitution
?- expression(10, Y) = expression(X, 2).            % Y = 2, X = 10.

% compound queries: all goals need to be true
?- male(michael), friend(michael, adam).            % true 

% queries using logical variables
?- color(X).                                        % X = red ; X = green ; X = blue ;
?- person(michael, nationality(X, Y)).              % X = sweden, Y = swedish.

% anonymous variables (ignoring values)
?- person(X, nationality(sweden, _)).               % X = michael

% conditional solutions
?- dif( f(g(X)), f(g(Y)) ).                         % dif(Y, X).

/*
    Michael Sjoeberg
    2019-09-01
    https://github.com/michaelsjoeberg/prolog-playground/blob/master/basics/queries.pl
*/