TL; DR: нужна помощь, чтобы вызвать правило с фактом
Я начал с Пролога, пришел из Си и начал работать ... пока они, очевидно, не сломались.Я пишу небольшую программу по окраске автомобилей для себя, поскольку я изучаю этот новый язык
Я пытаюсь назвать правило с фактом (возможно ли это?), Что я хочу сделать, этоиспользуйте один факт «автомобили» и другой факт «краска», чтобы составить один большой список, состоящий из всех автомобилей всех разных красок.У меня проблемы с тем, чтобы заставить код работать так, как я хочу ... посмотрите
У меня есть факты:
cars([ferrari, bmw, ford, jaguar]).
paints([red, white, blue, yellow]).
/*Now I wanted to loop through each car, eachtime printing
out the different paint combinations of that car: */
start:- loop_cars(cars(C)). /*starts loop_cars with all the cars e.g [ferrari...]*/
/*but it false here, even if C = [ferrari...]*/
loop_cars([]).
loop_cars([Ca|Rest]):-
loop_paints(Ca,paints(P)), /*The car is sent off for a paint job,...*/
loop_cars(Rest). /*...(cont from above) same false here as before*/
loop_paints(_,[]).
loop_paints(Ca,[Pa|Rest]):- /*This works*/
write([Ca,Pa]), /*Writes it like "[ferrari, white] [ferrari, blue] ..."*/
loop_paints(Ca,Rest).
Так что я думаю, что мне нужна помощь в решении двух проблем:
- Как передать содержимое фактов машин и красок в две петли?
- «Гараж» для размещения всех комбинаций. Гараж - это большой список, состоящий из небольших списков из 2 предметов (машина и краска).