プロが教える店舗&オフィスのセキュリティ対策術

like(人,動物)は「人」が好きな動物の対応を。
国(動物、数字)は「国」での「動物」の売価として、
like(taro,inu).
like(taro,neko).
like(taro,panda).
japan(inu,200000).
japan(neko,100000).
japan(panda,100000000).
america(inu,180000).
america(neko,110000).
america(panda,90000000).

という対応があった場合、

太郎が好きな動物で、日本かアメリカで190000以下で売られている動物名を知りたい。という場合はどう書けばいいでしょう。(この答えはinuとnekoになるはず・・・)

連言(AND)はカンマで区切ればいいのはわかるのですが、orの仕方がわかりません;;

「太郎が好きで、日本で190000以下で売られている動物」は
?-like(taro,A),japan(A,B),B<190000.
とやってみました。

A 回答 (1件)

prologを触ったのは随分昔なので自信なしですが、


?-line(taro,A),(japan(A,B);america(A,B)),B<190000.
と、; でorを使える処理系もあると思います。

別案としては、
like(taro,inu).
like(taro,neko).
like(taro,panda).
kakaku(japan,inu,20000).
...(中略)...
kakaku(america,panda,90000000).
にして、
?-like(taro,A),kakaku(B,A,C),C<190000.
という手もあると思います。

参考URL:http://www.geocities.co.jp/SiliconValley-Oakland …

この回答への補足

ごめんなさい、できました^^
打ち間違いでした。
ありがとうございます!

補足日時:2004/06/21 08:00
    • good
    • 0
この回答へのお礼

ありがとうございます。
処理系はSWI-Prologなのですが、notnotさんにアドバイス頂いた
?-line(taro,A),(japan(A,B);america(A,B)),B<190000.
とすると、
ERROR: Arguments are not sufficiently instantiated

と出てきてしまいます…ためしにc言語みたいに|をつかってみましたが、同じエラーがでました。
なるべく元の対応表を変更しないで問い合わせしたいのですが、後者の方法しか無いでしょうか^^;

お礼日時:2004/06/21 07:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!