0

さて、私は車のいくつかの基本的な部品を持っています。

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).

しかし、私は多くの自動車部品に対してこれを行っているので、これが解決策ではないことを知っています.

sthがありませんか?「quant(X,Y)」が正しく表示されるように、リストの要素を個別に抽出するにはどうすればよいですか? または、少なくとも要素のみが表示され、ファンクターとの複合項は表示されません。

4

1 に答える 1

2

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([]).
print_a_list([H | T]) :- nl, write_q(H), print_a_list(T).

write_q(H) :- H.

一部の人々は最後の解決策を嫌うかもしれないので、代替案は

write_q(quant(X,Y)):- write(Y), write(' piece(s) of '), write(X), write('.'), nl.
于 2013-01-21T07:56:04.060 に答える