2016-12-08 10 views
0

プロローグで引数として渡されるリストに値Xの要素がいくつあるか調べようとしています。私のコードはリスト内の特定の値を持つ要素の数

cetnost(x,[],0). 
cetnost(x,[X|T],C):- cetnost(X,T,C1),C is C1 + 1. 


?- cetnost(a,[a,b,a,a],C). 
     //false 

です。この再帰で何が問題になっていますか?空のリストが渡されたCは、タイプミスと思わアンダーxを使用して、ほかのヘルプ

+1

ようなものが必要。すべてをxに変更すると動作します。また、基本ケースでは、xは必要ありません.cetnost(_、[]、0)を書きます。 – coder

答えて

1
cetnost(_, [], 0). 
cetnost(X, [X|T], C) :- cetnost(X, T, C1), C is C1 + 1, !. 
cetnost(X, [_|T], C) :- cetnost(X, T, C), !. 
1

のために1

おかげで0と各bublingインクリメント値を持つ再帰バブリングアップに設定されている場合は、「ドンあなたが探している要素がではなく、あなたのリストの先頭である場合があります。

あなたは、問題は、あなたが入力としてのxを持っていて、リストと再帰に資本Xを使用することである

cetnost(X, [H|T], C) :- 
    dif(X, H), 
    cetnost(X, T, C). 
+0

X \ = Hの代わりにISO dif/2を使用する方が良いです。 – coder

+0

@coderがありがとう、ありがとう。 – SQB

関連する問題