2016-12-01 15 views
1

2つのリストを取るdoubleAll7/2と呼ばれるプロローグ用語を書く必要があります。プログラムは、最初のリストで発生する7つごとに、2つ目のリストに2つのセブンが並んでいる場合にtrueを返します。 例doubleAll7([1,7,1],[1,7,7,1])はtrueですが、doubleAll7([1,2,7],[1,2,7])はfalseです。2つのリストが同一であるかどうかを確認するプロローグ

double7/2は、リスト内の7つの出現を2倍にし、完全に機能します。

何らかの理由で、このプログラムは常にfalseを返します。

doubleAll7([H1|T1],[H2,T2]) :- 
    double7([H1|T1], L), 
     L == [H2|T2]. 

    double7([],[]). 
    double7([H|T], [H,H|Z]) :- 
    H is 7, 
    !, 
    double7(T,Z). 
    double7([H|T], [H|Z]) :- 
    double7(T,Z). 

答えて

0

明らかエラーがある:

doubleAll7([H1|T1],[H2,T2]) 

doubleAll7([H1|T1],[H2|T2]) 

なければならない最初の行私が意味:代わり|H2T2

間のセパレータとして,しかし、申し訳ありません:私はあなたがあまりにも複雑です。

あなたは(私は間違っていないよ場合、それは

doubleAll7(L1, L2) :- 
    double7(L1, L2). 

と同等だ、のでdouble7への通話がunusefullある)double7/2を避けることができ、あなたがis/2を避けることができ、あなたは!をavoiすることができますし、semplifyすることができますすべて

doubleAll7([], []). 

doubleAll7([7 | T1], [7, 7 | T2]) :- 
    doubleAll7(T1, T2). 

doubleAll7([H | T1], [H | T2]) :- 
    H \== 7, 
    doubleAll7(T1, T2). 
+0

これを固定したああ...そのエラーは数回前にしていましたが、固定しても機能しませんでした。私はそれをもう一度固定しなければならないし、私がそれを正しくしたときにはわからない。 – user237083

+0

@ user237083 - 私は知っている...私はこのタイプのエラーをやっている専門家だ。 – max66

関連する問題