Получение всех фактов, которые известны прологу (в специальном формате) - PullRequest
0 голосов
/ 27 июня 2018

Пролог вопрос:

Рассмотрим следующий формат:

 carsCompany(Tel_Number,
   Manager,
   Company_Name,
   [new_cars(Car_Name,info(Color,Creator),Date_Creation)],
   [old_cars(Car_Name,info(Color,Creator),Date_Creation)]
   ]).

Я хотел бы получить всю информацию о данных, которые известны для этой реальности.

Пример:

 carsCompany(1234,
   Jujiro Matsuda,
   Mazda,
   [new_cars(mazda_3,info(Grey,Person1),26082016)],
   [old_cars(Cosmo,info(Black,Person2),26081927),
   [old_cars(RX-7,info(Black,Person2),26081979),]
   ]).

Даст мне:

 New = new_cars(mazda_3,info(Grey,Person1),26082016)
 Old = old_cars(Cosmo,info(Black,Person2),26081927)
 New = new_cars(mazda_3,info(Grey,Person1),26082016)
 Old = old_cars(RX-7,info(Black,Person2),26081979)

Я бы хотел включить всех возможных членов в New и Old, чтобы я мог их перебирать. Я знаю, что мне нужно использовать member prediec. Как я могу это сделать?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете сделать следующее:

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 ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...