- 【論理】Prolog【初心者】
765 :デフォルトの名無しさん[sage]:2014/09/19(金) 04:57:53.94 ID:fVs2kyBw - >>762
実際に使うのは、repeatを伴う入力処理の場合に限られると思うが 年齢(大田,33). 年齢(神戸,25). 年齢(下山,40). ・・・ で40歳が現れるまでの年齢リストを得たい場合も、 ?- findall(_名前,(年齢(_名前,_年齢),(_年齢=40,!,fail;true)),_年齢リスト). と書く。一般にこの問題が表面に出ないのは、普通は、 ?- findall((_名前,_年齢),年齢(_名前,_年齢),L), ・・・・ と一旦、全年齢データをリストに変換してから、処理をするから。
| - 【論理】Prolog【初心者】
766 :デフォルトの名無しさん[sage]:2014/09/19(金) 04:59:58.17 ID:fVs2kyBw - >>765
ごめんなさい。 _年齢リスト ではなく _40歳が現れるまでの名前リスト でした。
| - 【論理】Prolog【初心者】
767 :デフォルトの名無しさん[sage]:2014/09/19(金) 07:51:22.98 ID:fVs2kyBw - % カットの話題から逸れるが、設計が適切とは言い難いデータベースの集約問題。
% 駒場東大前から下北沢までの距離を求めなさい 井の頭線(渋谷,500). 井の頭線(神泉,900). 井の頭線(駒場東大前,1000). 井の頭線(池ノ上,600). 井の頭線(下北沢,500). 井の頭線(新代田,東松原,500). 駒場東大前から下北沢までの距離(_距離) :- findall((_駅,_次の駅までの距離),井の頭線(_駅,_次の駅までの距離),L), 駒場東大前までを読み飛ばす(L,L2), 駒場東大前から下北沢までの距離(L2,_距離). 駒場東大前までを読み飛ばす([(駒場東大前,_次の駅までの距離)|R],[(駒場東大前,_次の駅までの距離)|R]). 駒場東大前までを読み飛ばす([_|R1],R2) :- 駒場東大前までを読み飛ばす(R1,R2). 駒場東大前から下北沢までの距離([(下北沢,_)|_],0). 駒場東大前から下北沢までの距離([(_,_次の駅までの距離)|R],_下北沢までの距離) :- 駒場東大前から下北沢までの距離(R,_次の駅から下北沢までの距離), _下北沢までの距離 is _次の駅までの距離 + _次の駅から下北沢までの距離.
| - 【Python】スクリプト バトルロワイヤル46【pl,rb,php,js】
494 :デフォルトの名無しさん[sage]:2014/09/19(金) 08:01:50.12 ID:fVs2kyBw - >>493
出題文を命令形にするのは、ギリシャ時代からのならわしではないか。
| - 【論理】Prolog【初心者】
771 :デフォルトの名無しさん[sage]:2014/09/19(金) 22:53:53.05 ID:fVs2kyBw - 設計が適切とは言い難いデータベース。
リレーショナルデータベースをそのまま述語として写した場合にしばしば 現れる。あるいは何か示されたことをPrologデータベースとしてそのまま 写し取った場合。 以下のように書き換えられればもちろんよい。 井の頭線(渋谷,神泉,500). 井の頭線(神泉,駒場東大前,900). 井の頭線(駒場東大前,池ノ上,1000). 井の頭線(池ノ上,下北沢,600). 井の頭線(下北沢,新代田,500). 駒場東大前から下北沢までの距離(_距離) :- 駒場東大前から下北沢までの距離(駒場東大前,_距離). 駒場東大前から下北沢までの距離(下北沢,0). 駒場東大前から下北沢までの距離(_駅,_距離) :- 井の頭線(_駅,_次の駅,_次の駅までの距離), 駒場東大前から下北沢までの距離(_次の駅,_次の駅から下北沢までの距離), _距離 is _次の駅から下北沢までの距離 + _次の駅までの距離.
| - 【論理】Prolog【初心者】
773 :デフォルトの名無しさん[sage]:2014/09/19(金) 23:13:52.01 ID:fVs2kyBw - >>772
それは単に抽象プログラミングでしかない。
|
|