bugfix> prolog > 投稿

私はプロローグの初心者で、小さなベースウィット「車」ステートメントを作成します。

car(ford, mondeo, 125600, 31000).
car(ford, mondeo, 111232, 35000).
car(renault, megane, 82000, 28000).
car(renault, laguna, 102000, 35000).
car(renault, laguna, 82000, 42000).
car(www, pasat, 82000, 42000).
car(renault, aaa, 82000, 428900).

ですべての車を見つける方法>10000番目の引数?私はコンソールでルールを書いてみてください(ファイルではなく!) ?- car(Z,X,C > 10000,V). しかし、私は false のみを取得します(しかし、どのように?すべての車が一致するため、プロローグはすべての車を印刷する必要があります)。

回答 1 件
  • car(Z,X,C > 10000,V).  プロローグは各ルールの先頭を car(Z,X,C > 10000,V). と統合しようとするため、機能しません 、それらのすべてについて失敗します。

    より詳細:

    car(ford, mondeo, 125600, 31000)   car(Z,X,C > 10000,V) との統合に失敗します 、 125600   C > 10000 との統合に失敗する 。

    統合の仕組みを読んで理解してください。

    正しい戦略は、バックトラッキングを活用して結果をフィルタリングすることです。おそらく、クエリ car(Z,X,C,V) を入力することに気づいたでしょう。  すべての車のデータが返されます。

    さらに目標を追加すると、2番目の目標が失敗したときに戻って別の選択肢を試す必要があります。

    証明検索でも読み続けます。

    クエリに追加する2番目の目標は C>10000 です :

    car(Z,X,C,V), C > 10000
    
    

あなたの答え