2011-10-20 23 views
-1

私はリストG = [a、b、c、d、e、f、g、h、i、j]を持っています。ブドウ、a、梨、f、オレンジ、ドリアンなどの要素を持つTリストがあります。私はT - >要素のFirstElementのように、T -のG - > LastElementのように印刷したいと思います。リンゴ、a、f、ドリアン。私の問題はリンゴ - >ドリアンのみを表示できるようになりましたが、a、fは表示されませんでした。Prologは特定の要素をリストに表示します

G=[a,b,c,d,e,f,g,h,i,j]. 

in(a,'1'). 
in(b,'2'). 
in(c,'3'). 
........ 

printFormat(Prev,[H|T]) :- not(member(H,G)), printFormat(X,T). 
printFormat(Prev,[H|T]) :- member(H,G]), in(H,I) write(' -> {'), write(H), write(' -> '), write(I), write('}'), printFormat(X,T). 
printFormat(Prev,[Last]) :- write(' -> '), write(Last). 
+0

あなたがああ/ 5 – CapelliC

+0

を示すべきあなたがoh/5を削除したので、printFormatの最初の節にあるXやGのような変数は、どの値にも束縛されていないことがわかります。だから、Xがそこで想定できる価値は? – CapelliC

答えて

1

これは間違っている:

G=[a,b,c,d,e,f,g,h,i,j]. 

あなたは(少なくともこの構文で)Prologでグローバル変数を持っていないよう。あなたはとても書き換えることができます。

g(E) :- memberchk(E, [a,b,c,d,e,f,g,h,i,j]). 

してから使用を(printFormatためのあなたの最初の2節は線形テストを複製回避し、そうでないかのように書き換えることができる):

printFormat(Prev,[H|T]) :- 
    ( (oh(X,H,_,_,_), not(g(H)) % not should be \+ 
    -> true 
    ; in(H,I) 
    -> write(' -> {'), write(H), write(' -> '), write(I), write('}') 
    ; % this mismatch should never appear? not in(H,I) 
    throw(mismatch) 
), 
    printFormat(X,T). 
+0

ありがとう、今私はリンゴのみを印刷することができますし、falseを返します。 – user236501

関連する問題