あけましておめでとうございます。2009年最初の記事です。たいそうなタイトルがついていますが、答えはいうまでもなく「使える」です。なんでもPrologのユーザ数はここ20年ほぼ横ばいとか。真偽は不明ですが、根強い人気があるのでしょう。ここでは、建築屋にも使う価値あるのか?という限定した話です。 さて、現在の研究室ではRDB(PostgreSQL)を積極的に使っていますが、かなり以前(本学に異動するずっと前のことです)には高速に動作するRDBとしてPrologを使っていました。懐かしい。SWI-Prologがいろんな意味ですごいという話をネットで見かけて、冬休みの頭の体操に現代のPrologをちょっと触ってみることにしました。 (全部読むには 全文表示 をクリックしてください。) Prolog言語は人工知能(AI)の分野でよく使われているそうです。どの教科書でも自然言語処理の簡単な例題に必ず
組み込み述語で「freeze(変数, 実行部分)」という述語があるらしい。この述語は遅延実行を実現してくれる。遅延実行とは、「変数の中身が決まるまで、実行部分の実行はお預け」という機能。 これを使うと何ができるかというと、例えば ?- Y is X*2, X=1. は、「*」の計算が実行できないので、SWI-PrologならExceptionを吐く。そこで ?- freeze(X,(Y is X*2)), X=1. とすると、Xの中身に1が入るまで、(Y is X*2)の実行がサスペンドされる。そしてX=1となった後に、サスペンド部分が実行され、Y=2になるというもの。これはいい。 なお、不定変数が2つ以上はどうすんの?とか思うかもしれないが、 ?- freeze(Z,freeze(X, (Y is X*Z))), Z=2, X=3. とすれば多分できるはず。 Constraint Log
PrologでModuleを使っていると、Namespaceの扱いがやや面倒になります。たとえば、「data/2」というファクトを処理する述語「process_data/1」というのを、「process」と云うModuleで定義したとします。 :-module(process,[process_data/1]). process(DataName):- data(DataName,Data), writeln(Data), true. こういったModuleは他のファイルから大抵Includeされて使用されます。こんな感じで。 :-use_module(process). data(room01,hanako). data(room02,tarou). test:- process_data(X), fail. dataをすべて表示する「つもりの」プログラムですが、これはうまくいきません。
そんなわけで (どんなわけで?),無事に写経を終えたわけなので,簡単にまとめを. まず,いい意味で一番衝撃だったのはこれ. delete(X, List1, List2) :- conc(L1, [X|L2], List1), conc(L1, L2, List2).リスト List1 から要素 X を削除するのですが,それをリストの連結でやってしまうというこの定義. 宣言的っていうのはこういうことか!? という衝撃を受けましたねぇ.うーん,これには本当にびっくりした. もう一つ挙げるなら,先日写経したばかりのこれ. :- op(900, fx, if). :- op(850, xfx, then). :- op(800, xfx, else). if P then Q :- if_then_else( Q = (R else S), if_then_else(P, R, S), if_t
今日の早耳ムスメはジュリアナちゃん,お題は「秋の人気アイテム!! 個性派ベスト」. うーみゅ... 初っぱな,珍しくピタッとしたパンツで登場してくれちゃってますが,モデルらしからぬそのスタイルはどうよ? ヒラヒラスカートや太めのパンツでごまかさないと. そんなわけで (どんなわけで?),またしてもスタジオへ. ジュリアナちゃんよりはアヤパンの方がスタイルいい (似合ってたとはいえないけど) とか思いながら見ていたわけですが... 大塚:いやー,着こなしは難しいもんですねぇー. アヤパン:どういう意味だろうなぁ〜.裏に隠された意味が気になります... こらこら,大塚さん.(^^; いいたくなる気持ちも分からなくはないけれど,それだったら占いに直行すればいいのに... 「ちょっとそこまで」でアヤパンが原宿を散策. 訪れた hhstyle.com では倉俣史朗さんデザインのキャビネットが!! テ
今日の早耳ムスメは JESSICA ちゃん&徳澤直子ちゃーん,お題は「この秋デビュー!! 注目のニューショップ」. 直ちん単独じゃなかったのか.残念!! し・か・し 内容はなかなかの充実ぶり. カーテンからひょこっと顔を出す直ちんラブリ〜. その後,ファーの付いたボレロを着て肩をキュッとした時の表情最高♪ さ・ら・に アクビちゃんニットに合わせた短いデニム... 鼻血でちゃいますよ.心より恥じる. そ・し・て 最後のコーディネートではカッコいい系らしい締まった表情まで見せてくれました. いやぁ,短い時間なのにすごい密度.素晴らしい. でもでも... 大塚さん,ちょっと黙っててよ.全てぶちこわすつもりですか? 黒いカシミアシルクのジャケット (JIL SANDER 02-03AW) グレイでカシミアのタートルネックニット (JIL SANDER 02-03AW) 黒いウールのパンツ (JIL
今日の早耳ムスメはみさきゆうさん,お題は「新作を GET!! 秋のブランドバッグ」. 大人っぽい雰囲気のみさきゆうさん,あまりアップになると大人っぽいを通り越してしまうのがアレなのですが,今日はバッグ特集ということで引き気味のカット中心で一安心. そうですか,トレンドはチャームですか. っていうか,チャームって聞くと Cartier とかのアレを想像してしまうのですが,こういうのもチャームと呼ぶんですね. ってことは,LOUIS VOUITTON のヌメ革パンダもチャームっていうの? ともあれ (JW),まさか早耳トレンド No.1 で FENDI のバッグが出てくるとは. Dior なんかのショップオープンを別とすれば,結構珍しい感じ. それにしても,二日連続ファッションネタでスタジオに行くとは. まさかまさか,落差を感じさせないように人選してるんじゃないか?? そんな余計なこと考えない
Prologの基本的なデータ構造としてリストが利用出来る、という話は間違ってはいないけれども美味しいところを取りこぼしているような気がしてしまう。何故ならPrologの強みは、自由な表記がそのままデータ構造(Structure)として利用可能な点にあるからである。そしてこのStructureは単一化の対象となる。だからマクロのような事も、インタプリタのような事も簡単に出来るわけである。という事を考えていると、リストを世間一般的な形だけで考えているそのこと自体がもったいないのではないかと思えてくる。 Prologのリストは標準的な書き方以外でも扱える。それが差分リストである。一般的な書き方をしたリストは、先頭の要素から順序的に要素を取り出す必要がある、と同時にそれがリストというStructureの定義であった。ところでリスト同士であればその前後を接続したとしてもリストである事は想像に難くある
とてもタイトルから見るとプログラミング言語の勉強会とは思えませんが、内容は非常に深い Prolog の勉強会でございました。 ATND のアジェンダはこちら。 スライドはこちらにて公開されております。 このエントリは私がついったのハッシュタグ CoP でメモった内容を、上記アジェンダに合わせてコピペしたものを元にしておりますが、なにせ2009.12.26の勉強会でございます故記憶が抜け落ちたり間違ってたりする可能性は何卒御容赦。 そもそもこの会って? 今年のGWにPPIMっていうPrologの勉強会(というかPrologを実装してみようって会)があって、そこで m0h1can さんが「The Craft of Prolog いいよ!」と言ってたら、「じゃあそれを元に勉強会しましょうよ!」みたいなことで始まった……らしいです。 意外や意外、精鋭7人も集まりかなり盛り上がりました。 オイラが一
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]
Creating the computing software, mathematical solutions and physics theories of the future The School of Physics, Mathematics and Computing gives you a broad education to develop skills to tackle the fast-paced changes in today's world. Our courses equip you with practical and theoretical expertise to develop effective and efficient analysis, visualisation, interpretation and technological skills.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く