B :- A1, A2, A3, ...,An. /* 推論規則 */ C :- . /* 事実 */ :- A1, A2, A3, ..., An. /* 質問 */ 推論規則 B :- A1, A2, A3. 上記推論規則を第二形式の表現へ書き換える。 B ← A1∧A2∧A3 "←"を選言を用いて書き直すと B∨~A1∨~A2∨~A3 すなわち、典型的なホーン節である。 事実 C :- . 上記推論規則を第二形式の表現へ書き換える。 C ← "←"を選言を用いて書き直すと、 C すなわち、Cは事実である。 質問 :- A1, A2, A3. 上記質問を第二形式の表現へ書き換える ← A1∧A2∧A3 "←"を選言を用いて書き直すと、 ~A1∨~A2∨~A3 これは証明したいことの否定形であり、"質問"と呼ばれる。 クイックソート qsort([], []). qsort([X|Xs]
./index.html ../index.html Prologに挑戦した時の記録 Haskellのところで、世の中には逐次実行型以外の言語があるという話をしましたが、関数型と双璧を…成しているようにはどーも思えない論理記述型の代表Prologです。 最近は関数型言語の特徴が一部OOPLに導入されてきたりしてますが、今も昔も論理型言語はサッパリ目にしません。 いやま、素人の言うことなんか気にしないでくださいな。 実用レベルに習得するかどうかは別にして、一度は理解ぐらいはしたかった、つーことで、さわりだけやります。 処理系はここ。 教科書はここ。 インストールして、まず むう、拡張子が.plでPerlと被りますね。 でもまあ、関連付けはいじられないようなので(Perlのままになってます)、別にいいか。 コマンドラインからC:\xxx.plみたいな形でPrologのコードを実行するなんてこと
Prologのコードを美しく書くにはどうしたらいいか?。少々ボリュームがあるので、根気のある人だけ読んでくださいw。でもきっとためになります。 まずPrologを書くに当たって、重要なことは「引数の性質が何であるか」と言うことです。 Prologの引数には3つの性質があります。 定数としての引数。これはhoge(+bar)とSWI-Prologのhelpに書かれています。 処理した後に値を返すための引数。hoge(-bar)。 上記どちらでも良い引数。hoge(?bar)。 たとえば、times(X,Y,Z)という述語を考えてみます。これは「X*Y=Z」という意味としましょう。このコードは以下のようになります。 times(X,Y,Z):- Z is X * Y. あ、「`*’使ってたら意味ないじゃん」というつっこみは無しでw。例ですからw。このときもし ?- times(X,Y,3).
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く