1. ホーム
  2. list

[解決済み] リストに指定されたメンバが含まれているかどうかを判断するルールを定義する

2022-02-09 09:46:10

質問

私は最近Prologを学び始めたのですが、この問題で問題に直面しています。

リストに与えられたメンバーが含まれているかどうかを判断するためのルールを定義してください。

この問題をよりよく理解し、解決策を書くためのリンクを得るためにスタックオーバーフローをくまなく探しましたが、何も見つかりませんでした。どなたかこの問題を解決するためのアドバイスをしていただけませんか?

私のアプローチ

Iterative over the list and see if your member matches with head:

on(Item,[Item|Rest]).  /* is my target item on the list */

on(Item,[DisregardHead|Tail]):-


          on(Item,Tail).

私のやり方は正しいと思いますか?

どのように解決するのですか?

はい、あなたのソリューションは正しく、すべての方向で動作します。ナイス!です。

注意事項

  1. あなたの解決策は、実はタスクが要求しているものよりも一般的なものです。これは良いことです。このタスクは、私の見解では、表現が悪いと思います。まず第一に、最初の節は ルール である。 事実 . タスクは次のように定式化するのがよいでしょう: "真であるPrologプログラムを書きなさい。 もし この場合、良い解決策であれば、他のユースケースも可能である。 また を自動的に解決します。 生成 のソリューションを提供します。
  2. この共通述語は、広く知られているように member/2 . あなたの解決策と同じように、これもまたあらゆる方向で機能します。例えば ?- member(E, Ls).
  3. 述語の名前は、もっと良いものがあるはずです。Prologの良い命名規則は、各引数が何を意味するかを明確にします。例えば、考えてみてください。 element_list/2 と、そこからスタートします。