- 【論理】Prolog【初心者】
768 :デフォルトの名無しさん[sage]:2014/09/19(金) 20:54:01.75 ID:ClkAEpx3 - >>765.766
やはり「論理プログラミングの持つ本質的な単純明快さを見失っている(>>762)」みたいだね Prolog だと述語定義の並びは論理和を意味する つまり、そのコードの意味は 年齢(大田,33) ∨ 年齢(神戸,25) ∨ 年齢(下山,40) になる そして論理式には交換律 A ∨ B ≡ B ∨ A があるから、述語定義の並びに論理的な意味は無い もし順序性を表現したいのであれば、以下のように順序性を明示的に書かなければならない 年齢(大田, 33). 年齢(神戸, 25). 年齢(下山, 40). 順序(大田, 神戸). 順序(神戸, 下山). あるいは述語「年齢」に「次の人物」または「順序番号」を付加してもかまわない 年齢(大田, 33, 神戸). 年齢(神戸, 25, 下山). 年齢(下山, 40, end_of_list). または 年齢(大田, 33, 1). 年齢(神戸, 25, 2). 年齢(下山, 40, 3). これら以外にも、人物リストであれば、人物名の「ふりがな」も順序性を表す情報となりえる また、人物リストそのものを表現することが目的であれば、直接それを述語として定義すればいい 人物リスト([年齢(大田, 33), 年齢(神戸, 25), 年齢(下山, 40)]). どれが適切かは、アプリケーションによりけり(=ケースバイケース)になる
| - 【論理】Prolog【初心者】
769 :デフォルトの名無しさん[sage]:2014/09/19(金) 21:33:32.57 ID:ClkAEpx3 - >>767
これもまた >>765 と同様に論理的ではないデータベース設計の例だね 駅間距離を「(ある駅と駅との間の)接続関係」および「関係に伴う属性」として 論理的にデータベースを設計すると、以下のようになる 井の頭線の駅(渋谷). 井の頭線の駅(神泉). 井の頭線の駅(駒場東大前). 井の頭線の駅(池ノ上). 井の頭線の駅(下北沢). 井の頭線の駅(新代田). 井の頭線の駅(東松原). 井の頭線の駅間距離(渋谷, 神泉, 500). 井の頭線の駅間距離(神泉, 駒場東大前 , 900). 井の頭線の駅間距離(駒場東大前, 池ノ上, 1000). 井の頭線の駅間距離(池ノ上, 下北沢 , 600). 井の頭線の駅間距離(下北沢, 新代田, 500). 井の頭線の駅間距離(新代田, 東松原, 500). ここで、鉄道路線が駅を頂点とする無向グラフとしてモデル化されることに気が付けば、 述語「井の頭線の駅」がグラフの頂点を、述語「井の頭線の駅間距離」がグラフの辺を 表していることが、直感として理解できるはずだ
| - 【論理】Prolog【初心者】
770 :769[sage]:2014/09/19(金) 22:28:08.91 ID:ClkAEpx3 - >>769を自己訂正
X: 駅間距離を「(ある駅と駅との間の)接続関係」 O: 駅間距離を「(ある駅と駅との間の)隣接関係」 ここで、「駒場東大前から下北沢までの距離(>>767)」のような間接的な隣接関係は、 推移律 ((P → Q) ∧ (Q → R)) → (P → R) から(再帰的な)演繹によって定義される
| - 【論理】Prolog【初心者】
772 :デフォルトの名無しさん[sage]:2014/09/19(金) 23:06:13.46 ID:ClkAEpx3 - >>771
採点すると50点だな まず、一般的な「ある2つの駅間の距離」を述語として定義し、 それを使って具体的な述語「駒場東大前から下北沢までの距離」を定義するという、 「構造化プログラミング」のアプローチが望ましい 駒場東大前から下北沢までの距離(_距離) :- ある2つの駅間の距離(駒場東大前, 下北沢, _距離). 判定:課題の再提出を要す
| - 【論理】Prolog【初心者】
775 :デフォルトの名無しさん[sage]:2014/09/19(金) 23:43:22.71 ID:ClkAEpx3 - >>773
用語が抽象プログラミングでも何でもかまわないが、 合格判定をあげられない点は変わらない 判定:課題の再提出を要す
|
|