pieza_basica(llanta). pieza_basica(radios). pieza_basica(eje). pieza_basica(manillar). pieza_basica(sillín). pieza_basica(plato). pieza_basica(pedales). pieza_basica(cadena). pieza_basica(piñones).
ensamblaje(bicicleta, [rueda_delantera, cuadro, rueda_trasera]). ensamblaje(rueda_delantera, [llanta, radios, eje]). ensamblaje(cuadro, [manillar, sillín, tracción]). ensamblaje(rueda_trasera, [llanta, radios, eje, piñones]). ensamblaje(tracción, [eje, plato, pedales, cadena]).
piezasde(X, [X]) :- pieza_basica(X). piezasde(X, Y) :- ensamblaje(X, Subpiezas), listadepiezas(Subpiezas, Y).
listadepiezas([Cabeza|Cola], Total) :- piezasde(Cabeza, PiezasCabeza), listadepiezas(Cola, PiezasCola), append(PiezasCabeza, PiezasCola, Total).
listadepiezas([], []).