使用数据库迭代关系 [英] Iteration over relations using a database
本文介绍了使用数据库迭代关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是 prolog 的新手.
I'm new to prolog.
考虑以下格式:
carsCompany(Tel_Number,
Manager,
Company_Name,
[new_cars(Car_Name,info(Color,Creator),Date_Creation)],
[old_cars(Car_Name,info(Color,Creator),Date_Creation)]
]).
我想创建一个两个参数的关系,它获取汽车名称和公司的列表并将它们添加到公司中.
I would like to create a two argument relation which gets a list of car names and a company and adds them to the company.
update_company([Mazda],Company).
我有以下数据库示例:
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),]
]).
我试图做的是使用 member
获取所有可能的汽车,以便我可以迭代信息.
What I tried to do is to get all the the possible cars using member
so I could iterate over the information.
member(X, [X|Xs]).
member(X, [Y|Ys]) :- member(X, Ys).
get_all(New,Old,carsCompany(_,_,_,New_Cars,Old_Cars)) :- member(New,New_Cars), member(Old, Old_Cars).
虽然它并没有真正起作用:
Although It doesn't really work:
New = [Lecture|_G750],
Old = [Tutorial|_G753] ;
New = [Lecture|_G750],
Old = [_G752, Tutorial|_G756] ;
实现此目的的最佳方法是什么?
What is the best way to implement this?
推荐答案
可能的解决方案:
car_company( 1, 1234, 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, Color ),
(
car_company( ID, _ , person('Jujiro', 'Matsuda'), 'Mazda' ),
production( ID, cars, new, Model, info( Color, _ ), _ )
),
Result1
),
writeq( Result1 ),
findall(
old_car( ID, Model, Color ),
(
car_company( ID, Phone, person('Jujiro', 'Matsuda'), 'Mazda' ),
production( ID, cars, old, Model, info( Color, _ ), _ )
),
Result2
),
writeq( Result2 ).
这篇关于使用数据库迭代关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文