好吧,我有一些汽车的基本部件,例如:
elementary_part( spoke ).
elementary_part( rim ).
elementary_part( hub ).
和一些子组件,例如:
subcomponent( wheel, [quant( spoke, 5 ), quant( rim, 1 ), quant( hub, 1)] ).
我正在尝试编写一个“consists_of”程序来提供基本部分,例如
consists_of(wheel, P).
到目前为止,我已经完成了这一点:
consists_of(wheel, P):- parts(wheel, P).
quant(X,Y):- write(Y), write(' piece(s) of '), write(X), write('.'), nl.
parts(X,Y):- subcomponent(X, [H|T]), print_a_list([H|T]).
print_a_list([]).
print_a_list([H | T]) :- nl, write(H), print_a_list(T).
我得到的结果是:
?- consists_of(wheel,P).
quant(spoke,5)
quant(rim,1)
quant(hub,1)
true.
...这不是我想要的。我尝试时得到正确的结果
consists_of(wheel, P):- quant( spoke, 5 ), quant( rim, 1 ), quant( hub, 1).
但由于我正在为许多汽车零件这样做,我知道这不是解决方案。
我错过了什么吗?如何分别提取列表的元素,以便正确显示“quant(X,Y)”?或者至少只显示了元素,而不是带有函子的复合项。