私は以下の基礎知識を持っています: "少なくとも3つのNBA選手権を獲得した30歳以上のNBA選手はスーパースターです。 30歳以下のNBA選手は、ビデオゲームの表紙に表示される場合、またはTwitterに少なくとも5百万人の信者がいる場合にのみ、スーパースターです。 "学習プログラム(カット、リスト、否定)は、正しい方向に私をプッシュします
具体的な人物に適用すると、各クエリに1つの回答(真/偽)を与える単項述語スーパースターを定義します。スーパースター(ポーガソル)。ルールは一度だけファクトをチェックする必要があります(たとえば、クエリされた人の年齢を2回確認しないでください)。 ";"演算子は使用できません。
あなたは、あなたのテストで、これらのデータを使用することができます(これらの8人の選手の4が前の定義によれば、スーパースターです):
age(kobeBryant,37).
championships(kobeBryant,5).
millionsFollowers(kobeBryant,9).
age(pauGasol,35).
championships(pauGasol,2).
videogameCover(pauGasol).
millionsFollowers(pauGasol,3).
age(marcGasol,31).
videogameCover(marcGasol).
millionsFollowers(marcGasol,1).
age(stephenCurry,28).
championships(stephenCurry,1).
videogameCover(stephenCurry).
millionsFollowers(stephenCurry,5).
age(klayThompson,26).
championships(klayThompson,1).
age(kevinDurant,27).
millionsFollowers(kevinDurant,13).
age(russellWestbrook,27).
videogameCover(russellWestbrook).
millionsFollowers(russellWestbrook,3).
age(dwayneWade,29).
championships(dwayneWade,3).
millionsFollowers(dwayneWade,4).
だから何私がやったことは、このでした:我々
superstar(X):- age(X,Y), Y>=30, championships(X,Z), Z>=3,!.
superstar(X):- age(X,Y), Y=<30, videogameCover(X),!.
superstar(X):- millionsFollowers(X,Z), Z>=5.
学習されたリスト、カット、否定の最後のレッスンです。 誰かが私に何を正しい方向に押してもらえますか?そのため、年齢は一度しかチェックされません。もしそれが大きければ、30は片方向になり、30は他の方法になります。 私は解決策を求めていない、私はプッシュ、ヒントを求めています。
私はそれを理解するとき、解決策を自分自身でうまく投稿します。
すべての正直なところ、正しい方向はこの具体的なコースから離れています。ほんの少しのヒント:Prologは*宣言的な言語ですが、インストラクターはあなたに命令的な操作について考えるようになりました。与えられた事実は、 'unreadableNamesLikeInJava'ではなく' all_use_underscores'という他のすべてのProlog述語の命名規則に従いません。これらの問題に加えて、低レベルの算術、否定、 '!/ 0'を使用するように教えられています。私はこれまで、初心者には不適切で非宣言的な仕事が与えられたことはなかった。私のヒントは、より良いインストラクターを見つけることです。 – mat
:))ありがとう、ああ、ああ、ああ、ああ、ああああああ)私は期待した明日を書くだろう不幸の幸福のああ。 –
要件を満たすための簡単な解決策は、 'setof/3'を使って事実を収集することです(PA、年齢(P、A)、PA)。」のように、また他の事実と同様に、いくつかのリストが含まれています。 (この述語には 'person_age/2'がどのように*もっと*適切な名前になったのか注意してください!)その後、それ以上の制限が課されないので、任意の方法でリストを歩くことができます。完全に無意味で逆効果的な仕事に対する恐ろしい解決策。この意味で、良いフィット感...上記から判断すると、あなたのインストラクターはこの方法でもそれを解決することができるかもしれません。 – mat