- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:prologでorみたいなことをするには・・)
prologでorみたいなことをするには・・
このQ&Aのポイント
- prologでorみたいなことをするには
- 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.とやってみました。
- みんなの回答 (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. という手もあると思います。
お礼
ありがとうございます。 処理系はSWI-Prologなのですが、notnotさんにアドバイス頂いた ?-line(taro,A),(japan(A,B);america(A,B)),B<190000. とすると、 ERROR: Arguments are not sufficiently instantiated と出てきてしまいます…ためしにc言語みたいに|をつかってみましたが、同じエラーがでました。 なるべく元の対応表を変更しないで問い合わせしたいのですが、後者の方法しか無いでしょうか^^;
補足
ごめんなさい、できました^^ 打ち間違いでした。 ありがとうございます!