Prologを初めて使っているのですが、意図する動作を作れなくて困っています。


ある数式がリストに含まれているか否かを調べたいのですが、組み込みのmemberだと単一化が起こってしまします。
リストの中身が変わると困るので、単一化されないほうが望ましいのですが、実装方法がわかりません。

A=[B/c],member(b/c,A).

組み込みmemberだと、

A = [b/c],
B = b .

となります。望む動作としては

A = [B/c].

つまり、「成功しても失敗してもリストの中身は変わらず、リストに含まれていれば成功する」、
このように動作するmemberの作り方をご存じの方がいらっしゃいましたら教えてください。

環境は以下のとおりです。
window,swi-prolog 5.6.59

回答の条件
  • 1人2回まで
  • 登録:2008/08/30 13:33:21
  • 終了:2008/08/31 02:30:43

ベストアンサー

id:wd0 No.1

wd0回答回数14ベストアンサー獲得回数22008/08/31 00:01:43

ポイント100pt

一般に、テストだけ行って具体化はしてほしくない場合は、二重否定をつかうのが定石です。

member(Elem, List)

のかわりに

\+ (\+ member(Elem, List))

でどうでしょう?

http://gollem.science.uva.nl/SWI-Prolog/Manual/control.html

id:tomity

なるほど!

これで、望む動作が実装できそうです

どうもありがとうございました

2008/08/31 02:30:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません