Вы можете сделать следующее:
car_company( 1, phone, person('Jujiro', 'Matsuda'), 'Mazda' ).
production( 1, cars, new, 'Mazda-3', info( gray, person1 ), 26/08/2016 ).
production( 1, cars, old, 'Cosmo', info( black, person2 ), 26/08/1927 ).
production( 1, cars, old, 'RX-7', info( black, person2 ), 26/08/1979 ).
% query:
q :-
findall(
new_car( ID, Model ),
(
car_company( ID, Phone, person('Jujiro', 'Matsuda'), 'Mazda' ),
production( ID, cars, new, Model, info( Color, _ ), _ )
),
Result1
),
writeq( Result1 )
),
findall(
old_car( ID, Model ),
(
car_company( ID, Phone, person('Jujiro', 'Matsuda'), 'Mazda' ),
production( ID, cars, old, Model, info( Color, _ ), _ )
),
Result2
),
writeq( Result2 ).