List prolog-从列表中提取术语
我有一些汽车的基本部件,例如:List prolog-从列表中提取术语,list,prolog,List,Prolog,我有一些汽车的基本部件,例如: elementary_part( spoke ). elementary_part( rim ). elementary_part( hub ). 以及一些子组件,例如: subcomponent( wheel, [quant( spoke, 5 ), quant( rim, 1 ), quant( hub, 1)] ). 我正试图编写一个“包含”程序,给出基本部分,例如 consists_of(wheel, P). 到目前为止,我已经完成了这一点: con
elementary_part( spoke ).
elementary_part( rim ).
elementary_part( hub ).
以及一些子组件,例如:
subcomponent( wheel, [quant( spoke, 5 ), quant( rim, 1 ), quant( hub, 1)] ).
我正试图编写一个“包含”程序,给出基本部分,例如
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)”?或者至少只显示元素,而不显示带有函子的复合项。您只需要将对
write(H)
的调用替换为对quant
的调用:
print_a_list([]).
print_a_list([quant(X,Y) | T]) :- nl, quant(X,Y), print_a_list(T).
如果您仍然希望保持您的打印列表
尽可能通用,请执行以下操作:
print_a_list([]).
print_a_list([H | T]) :- nl, write_q(H), print_a_list(T).
及
有些人可能不喜欢最后一种解决方案,因此另一种选择是
write_q(quant(X,Y)):- write(Y), write(' piece(s) of '), write(X), write('.'), nl.
非常感谢,最后两个解决方案都有效,第一个解决方案有一些错误,但我很满意,无法指出问题所在,最后看起来很简单,谢谢!
write_q(quant(X,Y)):- write(Y), write(' piece(s) of '), write(X), write('.'), nl.