Prologでまったり Part4
at TECH
1:デフォルトの名無しさん
09/02/25 20:23:54
過去スレ
Prologでまったり Part3
スレリンク(tech板)
PrologでまったりPart 2
スレリンク(tech板)
Prolog でまったり
スレリンク(tech板)
リンク集
URLリンク(www.summa.jp)
URLリンク(bach.istc.kobe-u.ac.jp)
チュートリアル
URLリンク(www.amzi.com)
URLリンク(computing.unn.ac.uk)
URLリンク(www.intranet.csupomona.edu)
URLリンク(bach.istc.kobe-u.ac.jp)
URLリンク(www.geocities.jp)
URLリンク(www.asahi-net.or.jp)
2:デフォルトの名無しさん
09/02/25 20:27:17
P-99: Ninety-Nine Prolog Problems
URLリンク(prof.ti.bfh.ch)
3:デフォルトの名無しさん
09/02/25 20:32:21
新スレおめでとうございます。
4:デフォルトの名無しさん
09/02/25 22:16:07
404 Not Found
URLリンク(www.summa.jp)
URLリンク(www.asahi-net.or.jp)
5:デフォルトの名無しさん
09/02/26 00:35:26
乙( >>1 ).
6:デフォルトの名無しさん
09/02/26 01:30:05
>>4
URLリンク(lang.x0.com)
URLリンク(light21.s26.xrea.com)
ほい移転先
7:デフォルトの名無しさん
09/03/05 07:55:28
まったりしてきた
8:デフォルトの名無しさん
09/03/07 11:57:29
以下の住所に関する事実
address([bitdiddle, ben], [slumerville, [ridge, road], 10]).
address([hacker, alyssa, p], [cambridge, [mass, ave], 78]).
address([fect, cy, d], [cambridge, [ames, street], 3]).
address([tweakit, lem, e], [boston, [bay, state, road], 22]).
address([reasoner, louis], [slumerville, [pine, tree, road], 80]).
address([warbucks, oliver], [swellesley, [top, heap, road]]).
address([scrooge, eben], [weston, [shady, lane], 10]).
address([cratchet, robert], [allston, [n, harvard, street], 16]).
address([aull, dewitt], [slumerville, [onion, square], 5]).
から、各々近場にいる人について述べる述語livesNearを作りたいのですが、
livesNear(Person1, Person2) :- address(Person1, [Town|Rest1]),
address(Person2, [Town|Rest2]),
not(same(Person1, Person2)).
こう作ってしまう場合、livesNear(P,Q)と問い合わせをすると(Aさん,Bさん)
という組み合わせと、(Bさん、Aさん)という入れ替えたものの2つが重複
して出てくることになります。
重複しないようにするにはどうすればいいでしょうか。
9:デフォルトの名無しさん
09/03/07 12:00:16
sameという述語の定義は
same(X,X).
です。
10:デフォルトの名無しさん
09/03/07 17:50:00
>>8
p(a).
p(b).
の述語定義がされているとします。
?- p(X),p(Y),not(X=Y).
X = a,
Y = b;
X = b,
Y = a;
no
の重複を回避する方法はありません。重複を回避するには、最初から、
p/1でなく、p/2を
p(1,a).
p(2,b).
のように定義して、
?- p(N1,X),p(N2,Y),N1<N2.
N1 = 1,
X = a,
N2 = 2,
Y = b;
no とするのが一案。
述語p/1のままだと、
組合せ(X,1,[A]) :- member(A,X).
組合せ([A|Y],N,[A|X]) :- N > 1,M is N - 1,組合せ(Y,M,X).
組合せ([_|Y],N,A) :- N > 1,組合せ(Y,N,A).
?- findall(U,p(U),L),組合せ(L,2,[X,Y]).
が考えられます。
11:デフォルトの名無しさん
09/03/08 02:43:41
「重複しない」という事の意味が漏れには分からない。というか課題の定義が曖昧だと思う。
述語livesNear/2の意味は「Person1の近場にPerson2が住んでいる」だよね?
もしそうなら「Aさんの近場にBさんが...」と「Bさんの近場にAさんが...」という
「重複した」結果こそ正しいと思う。両者の間には双方向な関連があるのだから。
もし問い合わせが livesNear('Aさん', P) あるいは livesNear('Bさん', P) だとしたら、
「重複しない」という述語定義に対して、>>8 はどんな結果を期待するのだろうか。
12:デフォルトの名無しさん
09/03/08 16:24:31
>>10
どうもありがとうございます。数字と対応づけしないといけないんですか。
>>11
主として、これは疑問文として使用します。
叙述としては、確かに(Aさん、Bさん)、(Bさん、Aさん)とは
同格として扱うべきですが、疑問文として、
「この住所録の中の人物の中で、お互いに近くに住んでいる人たちは、
誰と誰ですか?」
という問の回答として、「AさんとBさん、あと、BさんとAさんです。」は、
不自然です。
13:デフォルトの名無しさん
09/03/08 17:55:27
なんとかできました。
map([bitdiddle, ben], 0).
map([hacker, alyssa, p], 1).
map([fect, cy, d], 2).
map([tweakit, lem, e], 3).
map([reasoner, louis], 4).
map([warbucks, oliver], 5).
map([scrooge, eben], 6).
map([cratchet, robert], 7).
map([aull, dewitt], 8).
と対応をつけた上で、
livesNear(Person1, Person2) :- address(Person1, [Town|Rest1]),
address(Person2, [Town|Rest2]),
map(Person1,Number1),
map(Person2,Number2),
Number1 < Number2.
としました。
14:デフォルトの名無しさん
09/03/08 18:47:19
>>11 です。
では、質問の意図は「(近場に住む人同士における)関連の存在」を質問しているのではなく、
「(近場に住む人々を)列挙する」ことにあると考えていいのかな?(回りくどくてゴメソ)
もしそうであれば、近場に3人以上の人が住んでいるケースでは、リストを使わないと
列挙できないから、問い合わせは livesNear(P,Q) ではなく、以下のようなコードになる。
findAllLivesNear(People) :-
!,
findall(Town, address(_, [Town|_]), Towns),
reject_duplicates(Towns,T), % 重複している要素を取り除く
findAllLivesNear(T, People).
findAllLivesNear([], []) :- !.
findAllLivesNear([T|Town], [P|People]) :-
findall(Person, address(Person, [T|_]), P),
length(P, Length),
Length >= 2,
!,
findAllLivesNear(Town, People).
findAllLivesNear([_|Town], People) :-
!,
findAllLivesNear(Town, People).
15:デフォルトの名無しさん
09/03/08 18:49:36
% リロードするんだった.....orz
>>14 実行結果は以下のとおり。ご参考まで。
?- findAllLivesNear(P).
P = [
[[hacker, alyssa, p], [fect, cy, d]],
[[bitdiddle, ben], [reasoner, louis], [aull, dewitt]]
].
回答は「hackerとfect、あと、bitdiddleとreasonerとaullです」となって不自然さは無い。
16:デフォルトの名無しさん
09/03/09 14:40:11
この問題は?
例 2.2 7つの部屋がある。その内の4つの部屋を4人のプログラマの事務
室として割当て、残りの3つの部屋をコンピュータ端末機器を設置する
部屋としたい。このような割当て方は7×6×5×4=840通りある。
『組合せ構造とグラフ理論入門』C.L.リュー著 成瀬弘、秋山仁共訳 マグロウヒル好学社 p42
より、
さて、この840通りをすべて数え上げる非決定性述語を定義せよ。
17:デフォルトの名無しさん
09/03/09 18:05:15
処理系に依存する問題をひとつ。
「千人万首 ―よよのうたびと―」という高名な和歌サイト
URLリンク(www.asahi-net.or.jp)
から情報を引き出し、
第一引数に作者名を与えると、第二引数にその作者の歌が
一首づつとりだせる述語 千人万首/2 を定義しなさい。
ただし、取り出すのは歌本体のみで題や解説、類歌、本歌などは
削ぎ落としてください。
18:デフォルトの名無しさん
09/03/09 19:10:48
まあ、こんな感じで「Prolog述語 1000Tips」を目指します。
19:デフォルトの名無しさん
09/03/09 20:16:58
>>18
1000分野、10000Tips行きましょう。
20:デフォルトの名無しさん
09/03/10 05:42:50
1/10000Tips
どんな情報源でもよいから、そらで覚えていれば勿論それでよいから、
和暦、西暦変換述語を作れ。
21:デフォルトの名無しさん
09/03/10 05:45:04
1/10000Tips
22:デフォルトの名無しさん
09/03/10 05:48:32
1/10000Tips
ジョギングシュミレーター(サイト)を参考にして、
体重、走行距離、タイムから、消費エネルギーと脂肪燃焼量を得る述語を
定義せよ。
23:デフォルトの名無しさん
09/03/10 06:00:11
>>18->>22
出典の記載ルール等を決めておかないといけない。
オブジェクト指向的な枠組みがないから、
述語で定義するとして、標準的な述語構成例が欲しい。
24:デフォルトの名無しさん
09/03/10 06:10:29
それから、問題を出すときは、
1/10000Tips (解答準備済み/解答準備未了)
等のコメントを入れて、未解決問題がスレに大量に残ることを避けよう。
解答準備済みで出題した人は様子を見て、良いタイミングで模範?解答を
載せるべし。
25:デフォルトの名無しさん
09/03/10 07:28:55
>>23
述語定義して公開するなると、著作権の問題が出てきます。
Prologの書籍50冊分の巻末参考文献を全部sortして述語として
公開するとする。私はその文献の内2%くらいしか目を通した
ことがない。それでも誰も文句をいわないだろう。ところが、
古川康一著「Prolog入門」の参考文献だけを述語定義して載せた
場合はどうなのか?これは問題になるかな。
26:デフォルトの名無しさん
09/03/11 06:49:31
httpd_status_code(100,'Continue','この応答はクライアントへの仮の応答です。多くの
場合、プロキシーやサーバーは、最終的な応答を返すまでにはまだ時間がかかる場合にこ
のコードを使います。'
httpd_status_code(101,'Switching Protocols','HTTP/1.1では現在は使われていません
が、準拠しているアプリケーションがUpgradeヘッダーに示される、より有利なプロトコ
ルや効果的なプロトコルに切り替えようとしていることを示します。').
httpd_status_code(200,'OK','全般的に成功したことを示します。').
httpd_status_code(201,'Created','このコードは、PUTリクエストへのレスポンスで用い
ることができるコードで、新しいリソースが作成されて利用可能であることを示します')
.
<以下略>
この述語の場合は、URLリンク(www.amazon.co.jp) からの
全コピーであることは明らかです。実際、Prolog述語はこういうのだらけ。
前スレにちょっとだけ著作権の話がでたと思うけど書物を写し取った述語の
公開できるのはどの範囲か。Webサイトの場合はどうか。
27:デフォルトの名無しさん
09/03/11 07:14:52
ちょっと話が逸れますが、>>26の場合は10年近く前に本を傍らに置いて
タイプした。ところが今はこのくらいの情報はWebから入手できる。
そういう変化は、Prolog言語の意味をも決定的に変えたと思う。以前は
単位節データベースとルール節はある程度バランスを保っていたが、
現在では、99%以上が単位節、しかも>>26に見られるように、将来の利用に
含みを残して、原文そのままを引数に取り込む。Prologの解説書で示される
開発手法やプログラミング事例とは全く違う。10000Tipsの狙いは、そういう
ことをはっきり示すことでもあります。
28:デフォルトの名無しさん
09/03/11 08:00:34
>>27
10000Tipsにしても、ここよりも日本Prolog協会のメーリングリストで提起する方が
相応しい課題ではないかな。
29:デフォルトの名無しさん
09/03/11 17:35:35
>>27
徹底して非形式的なデータ蒐集に努めるというのは面白いかも。
例えば、述語名が衝突したらその時点で何か解決策を捜す。
30:デフォルトの名無しさん
09/03/13 11:16:14
>>27
以前はPrologプログラムの開発時間はプログラマのタイプ時間に
近似していたのだが、最近は検索ルールを書く時間に近くなった
ことは確かだな。
31:デフォルトの名無しさん
09/03/13 11:34:02
Prologって結局、「とまり木言語」なのかも知れない。
最終的にはデータベースやXMLファイルとして振り分けられるでしょ。
考えてみればAI言語を標榜していた頃からずっとそうじゃないか。
32:デフォルトの名無しさん
09/03/14 05:55:59
>>27
ルール節って書かない?
33:デフォルトの名無しさん
09/03/15 06:04:24
>>32
書かない。負節は書くw
このスレでも強調されているように、結局Prologプログラミングは
member/2,append/3,findall/3の繰り返し。少し前に出てきた組合せ系
の述語などがライブラリ化していると、もうほとんどルールを書く
必要はない。負節のログに頭部を付加してライブラリに加えることは
ある。
以前は**コードなどの処理も書いたから、1342という口座番号を
'0001342'にするヘッドゼロサプライ処理などが文字列からparse_atom
する度に発生した。それで手続的決まり文句も随分と書いたが、10年
くらいまえに書き尽くした。
34:デフォルトの名無しさん
09/03/15 06:46:09
自動仕訳ルールの追加というようなことは日常的に発生するが、それも
銀行口座の明細から取得するような場合は、すでに形式化しているから、
単位節一節の追加だし、摘要的な記述からの場合もS,V,Oが確定すれば
ほぼ決定的になる。この場合、本体に2副目標を持つルール節を一つ追加。
35:デフォルトの名無しさん
09/03/15 07:15:04
ごめん。本体に1副目標を持つルール節一つを追加。でした。
36:デフォルトの名無しさん
09/03/15 17:48:02
>>33
むかしエキスパートシステムに書いたような簡単なif-thenルールなら、
今でも書くと思うけど。subgoalが1-3個くらいのやつ。
37:35
09/03/16 04:15:51
Oが複数でてくることもあり、やはり本体1副目標では決まらず
2~3副目標になることも多いようです。
38:デフォルトの名無しさん
09/03/17 07:43:36
頭痛がしてきた
39:デフォルトの名無しさん
09/03/17 07:45:42
1/10000Tips
40:デフォルトの名無しさん
09/03/17 08:57:53
一向に中身のあるTipは現れないw
初心者のための言語スレに誤爆してしまった
41:デフォルトの名無しさん
09/03/22 05:44:26
本でも読めば。
42:デフォルトの名無しさん
09/03/22 10:10:04
入門者です。前スレにでていたPrologで学ぶAIプログラミングを買ってみました。
二章のLHKあたりで既に挫折しそう…
43:デフォルトの名無しさん
09/03/27 08:10:39
うおー規制解除
URLリンク(kimiyasu-arai.at.webry.info)
> 下記はLispによるProlog処理系の例である。
動かしてないけど、なんか変数の扱いがすごくあやしい。。
44:デフォルトの名無しさん
09/03/27 08:15:04
>>8
> 重複しないようにするにはどうすればいいでしょうか。
最初見たとき
livesNear(P,Q), P @< Q
と書いて「いや、それはちょっと…」という反応を見たいと思ったのに規制のせいで
45:デフォルトの名無しさん
09/03/27 09:56:29
>>44
ならほど。考えも及ばなかったwww
46:デフォルトの名無しさん
09/03/27 10:02:19
なるほど。でした・・・
47:デフォルトの名無しさん
09/03/28 14:11:05
>>44 この話題から外れるけれど・・
アトム(文字列)の大小比較は、集約(鍵)問題を扱ったとき場合を以外には、
実務的にあまり使う機会はなかったのですが、最近、古庄普二著 東大総研刊
「汎用超高速データベース処理技術 多様なデータ構造と超並列への普遍的アプローチ RealTimeVIDP」
を読んでPrologのデータ構造の中に値の順序性をもう少し取り入れる余地は
ないかなど気になっていた。
48:デフォルトの名無しさん
09/03/28 14:16:39
>>43
どんな感じであやしい?
49:47
09/03/28 14:59:44
古庄晋二著でした
50:デフォルトの名無しさん
09/03/28 18:23:58
>>48
はっきり変だと思えるのは?_の扱い。関数ab、fb(束縛の追加と検索?)あたりでは
無名変数もどきというか、単一化されない扱いになってるんだけど、
実際には、?xなどのローカルな変数名をgensymで作ったグローバルな名前に
書き換えるとき、何も特別扱いされていないから、意味がないんじゃないかっていう。
51:デフォルトの名無しさん
09/04/21 10:14:03
そろそろSWI-Prolog Reference Manual の邦訳が欲しくなってきた。
SWI-Prologの動きが活発になってきて、参照機会が急に増えた。
こうなってくると、常に楽に参照できる「ベース」が欲しい。
52:デフォルトの名無しさん
09/05/01 01:39:45
精神力が異常。
53:デフォルトの名無しさん
09/05/07 08:08:13
prologで同じ解を出さないようにするにはどうするの?誰か教えて><
54:デフォルトの名無しさん
09/05/07 08:14:00
>>53
>>8 以下を読んでみてください。
55:デフォルトの名無しさん
09/05/08 00:05:44
Prolog用語を整理しかけたら、変なことに気づいた。
ISO、JISではどうやら、
'' は null atom(空アトム)
[] は empty list(空リスト)
らしい。
null と empty の使い分けもまあ微妙だけど、もし
URLリンク(www.weblio.jp)
が五十音順だとすると、ひょっとして
空(から)アトム
空(くう)リスト
と読み分けるんだろうか、という疑問が湧いたw
56:デフォルトの名無しさん
09/05/08 12:05:58
ISLISP (JIS X 3012) の訳語対照表では
「く」の位置に
空リスト empty list
空リスト null
とあるな。
ISLISP では null と empty list が同一視されるから、このような訳しかたを
選んだようだが。
57:デフォルトの名無しさん
09/05/09 10:54:13
prologでちょっと複雑なことさせようとするとプログラミングするのがかなり難しい><
これも慣れると簡単になるのだろうか
58:デフォルトの名無しさん
09/05/10 08:23:49
>>57
どのような部分で難しいと感じるか、教えてください。
できればソースプログラムを見せてください。
59:デフォルトの名無しさん
09/05/10 10:10:05
>>58
ソートの処理をさせるときとか
60:デフォルトの名無しさん
09/05/10 13:26:44
>>59
ソートはちょっと違うかも知れないけど・・・。
Prologのプログラミングはただひたすら、appendだけで
プログラムを書くつもりで行けばよい。
61:デフォルトの名無しさん
09/05/11 05:22:09
>>60
repeat.
repeat :- repeat. は
append([],X,X).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
実は同一パターン。
member(A,[A|_]).
member(A,[_|R]) :- member(A,R). は
?- ..., repeat, ... は ?- ..., append(_,_,_), ... でいけそうだが、
スタックオーバーフローを起こすだろうから実用にはならない。
member(A,L) :- append(L1,[A|L2],L). だから、
?- ... ,member(A,L), は ?- ... , append(_,[A|_],L), でよい。
member/2を使っていると、member/3
member(A,[A|R],R).
member(A,[_|R1],R) :- member(A,R1,R). や member/4が欲しくなる。
member(A,[],[A|R],R).
member(A,[B|R1],[B|R2],R) :- member(A,R1,R2,R). ここまでくると
引数の位置が違うだけでappend/3と同じ述語と考えてよい。つまり、
Prologプログラムの大半にmember/2が絡んでくるがこれは全部append/3でよい。
62:60
09/05/11 05:51:47
すみません。ちょっと編集をまちがえた。
repeat.
repeat :- repeat. は
append([],X,X).
append([U|X],Y,[U|Z]) :- append(X,Y,Z). と
実は同一パターン。
?- ..., repeat, ... は ?- ..., append(_,_,_), ... でいけそうだが、
スタックオーバーフローを起こすだろうから実用にはならない。
member(A,[A|_]).
member(A,[_|R]) :- member(A,R). は
... <以下略>
が正しい順序でした。
63:60
09/05/11 05:55:25
>>62さん 60は私ですw
64:60
09/05/11 06:09:03
どこまで、副目標としてappend/3を使うか、それとも
別述語を定義して使うのかは指針があるわけでもなく、
迷うけどね。
65:デフォルトの名無しさん
09/05/11 22:12:02
>>57
なんでappendの話に飛ばしたかというと、Prologプログラムは8割方が
簡易オンメモリデータベース。残りの2割の内、7割くらいが
findall/3 と append/3 (member/2) の組み合わせ。(fail;trueもありますね)。
残りの6%くらいが入出力とかsplit,atom_codesのような文字列処理。
こんな配分です。つまり、"データこそすべて"プログラミングに
findall append を粘り強く積み重ねるだけで、ほとんどの難しい
ところはなくなってしまいます。
あなたが指摘した"複雑なこと"のプログラミングは極めて例外的な
部分ではないかと思います。
66:デフォルトの名無しさん
09/05/12 02:51:24
ロジック プログラミング言語「デカルト言語」の開発者に聞く - SourceForge.JP Magazine
URLリンク(sourceforge.jp)
さあ聞こうじゃないか
もちろんまだ読んでないがw
67:デフォルトの名無しさん
09/05/12 11:57:07
>>66
Kbuntu 7.1 でコンパイルしてみたら、
syserr.c:31:21: error: ncurses.h: No such file or directory
syserr.c: In function 'void syserr(char*, ...)':
syserr.c:59: error: 'endwin' was not declared in this scope
make: *** [syserr.o] エラー 1
となりうまくいかない。どうすればいいの?
68:デフォルトの名無しさん
09/05/12 15:33:37
>>67
URLリンク(svn.sourceforge.jp)
> 14 : dnl Checks for libraries.
> 15 : dnl Replace `main' with a function in -lncurses:
> 16 : AC_CHECK_LIB(ncurses, main)
> 17 : dnl Replace `main' with a function in -lreadline:
> 18 : AC_CHECK_LIB(readline, main)
よくわからんけど、どうやらここの「main」というのはテンプレ通りで、
本当は「各ライブラリに含まれるはずの関数」を指定しなければライブラリの存在チェックにならないんじゃないかな
69:デフォルトの名無しさん
09/05/12 15:34:48
と、思わず一つ勉強になっちゃったぜ
えへへ
70:デフォルトの名無しさん
09/05/12 15:58:20
これこれ
URLリンク(www.gnu.org)
> Test whether the library library is available
> by trying to link a test program
> that calls function function with the library.
71:デフォルトの名無しさん
09/05/12 16:03:55
>>67
結論としては、作者にこのスレを教えてあげるとかw
72:デフォルトの名無しさん
09/05/12 18:27:23
>>67
ちょっとソース見たけど、ncursesがなかった場合に対応できるような感じではなかったから、
どのみちncursesを入れなきゃダメなんだろうね
73:デフォルトの名無しさん
09/05/13 10:25:12
>>72
ncurses.hは Kbuntu Ubuntu にはなくて、私がすぐ手に入るのは、
FC5のncurses.hディレクトリなんだけど、これをコピーすれぱいいのかな?
やってみよう。
74:デフォルトの名無しさん
09/05/13 14:17:57
ディレクトリはncurses.h ではなくてncursesだった。続いて、
readlineディレクトリが無いときた。これもコピーと・・・
75:デフォルトの名無しさん
09/05/13 14:29:17
c++ -g -O2 -o descartes pl.o pllex.o unify.o bin_node.o gc.o var.o \
pred.o syserr.o builtin.o expression.o context.o module.o let.o regex.o \
token.o func.o timeout.o utf8.o euc.o sjis.o code.o help.o mkstemp.o \
cwd.o sysmodule.o format.o sleep.o complx.o lisp.o compiler.o matrix.o \
ncurlib.o lib_include.o opcall.o
syserr.o: In function `syserr(char*, ...)':
/home/k1/descartes/syserr.c:59: undefined reference to `endwin'
sysmodule.o: In function `GetlineEval()':
/home/k1/descartes/sysmodule.c:2409: undefined reference to `readline'
/home/k1/descartes/sysmodule.c:2411: undefined reference to `add_history'
sysmodule.o: In function `GetLine(Context*, Node*, List*)':
以下、大量にエラーがでて撃沈。
76:デフォルトの名無しさん
09/05/13 14:47:45
何か無茶苦茶やってませんかw
とりあえず綴りは「Kbuntu」じゃなくて「Kubuntu」みたいですね
使ったことないけど
URLリンク(ubuntuforums.org)
> Re: install curses/ncurses
> sudo apt-get install build-essentials
> sudo apt-get install libncurses5-dev
こんな情報が
77:デフォルトの名無しさん
09/05/13 14:49:52
てゆーかもうさすがにスレ違いかと
78:デフォルトの名無しさん
09/05/13 16:01:17
>>77
デカルトさんまたねw
79:デフォルトの名無しさん
09/05/13 16:32:46
URLリンク(slashdot.jp)
こっちのページの方が面白そうだよ
作者も降臨してるし
80:デフォルトの名無しさん
09/05/13 17:19:06
デカルト言語のキーワードの一つは「オレオレ」かな
81:デフォルトの名無しさん
09/05/13 17:20:16
オレ惟ふ故にオレオレ
82:デフォルトの名無しさん
09/05/14 20:15:19
URLリンク(lists.sourceforge.jp)
> 次のPrologのプログラムはDecartes
> ではどのように書けばよいのでしょうか。
>
> factorial(0,1).
(以下略)
URLリンク(sourceforge.jp)
ここによると、
・is/2にあたるのは、<let #変数名 = 式>、<#変数名 = 式>など
・(<)/2など、数値の関係を与える式の評価は、<compare 式>など
・ただし、扱う数値の型によって述語を使い分ける必要がある(letf、letc、comparef)
みたいな感じ?要はLispで適当にマクロを組んだ感じかな
83:デフォルトの名無しさん
09/05/14 20:23:39
しばらく読んでみたけど、結局、
URLリンク(sourceforge.jp)
X+b = a+Y
という単純なマッチングを普通に書く方法が見つからないww
84:デフォルトの名無しさん
09/05/17 08:29:52
:- op(850,xfx,>>).
?- もう少し本格的な生成文法でなんとかならないの >>76.
85:84
09/05/17 08:31:59
誤爆です。こっちへ書くつもりだった。
スレリンク(tech板)
86:デフォルトの名無しさん
09/05/17 09:13:13
>>85
閑してますねw
87:デフォルトの名無しさん
09/05/18 19:50:12
学生さん!
どなたかこの本、邦訳してくださらないか。
"Building Expert Systems in Prolog" Dennis Merritt著
1989年 Springer-Verlag ISBN 0-387-97016-9
88:デフォルトの名無しさん
09/05/19 00:11:34
>>87
エキスパートシステムって、実用化までたどり着けなかったシステムと
聞いてますけど、いまさら翻訳する意味あるんですか。
89:デフォルトの名無しさん
09/05/19 02:38:11
駅スパアトなら使ってるけど?
90:デフォルトの名無しさん
09/05/19 04:35:33
>>88
金字塔的な書籍は何でも読みたい。
ロジカルアプローチは世界的に再評価の時期に入っているから、
読み直しの要求は出てくるよ。
91:デフォルトの名無しさん
09/05/19 05:19:32
>>88
エキスパートシステムは漸く事業化の時期に来たのではないか。
20年(一世代)待ったということになる。
エージェントアプローチ + エキスパートシステムでリプレース
できるアプリケーションは無限にあるよ。
92:デフォルトの名無しさん
09/05/19 06:59:08
比較的最近"眺めた"本で翻訳して欲しいなぁと思った本を列挙。
"Towards Putting Abstract Interpretation of Prolog into Practice"
F.Gobert著 2008 年 VDM Verlag ISDN:978-3-8364-8858-7
"Clause and Effect" --Prolog Programming for the Working Programmer--
William F.Clocksin著 1997年 Springer Verlag ISBN:3-540-62971-8
"Intelligent Image Processing in Prolog" Bruce Batchelor著
1991年 Springer-Verlag ISBN:3-540-19647-1 (この本は初心者言語スレで
紹介したところ何故か罵倒された)
"AI Algorithms, Data Structures, and Idioms in Prolog,Lisp, and Java"
George F.Luger William A.Stubblefield共著 2009年 Addison Wesley
ISBN-13:978-0-13-607047-4 (この本はAI携帯スレで紹介した)
93:デフォルトの名無しさん
09/05/19 09:32:23
三重野博司著の「人事情報エキスパートシステム」という本に210くらいの
質問事例が載っています。ほとんど揺らぎとでも表現したいくらいの微妙な
差異のif-thenルールを積み重ねているのですが大変参考になりました。
それで感じたのはエキスパートシステムを能率よく構築するためには
質問文やif-thenルールの自動生成が欠かせないのではないか、という
ことでした。
94:93
09/05/19 09:49:21
210くらいのif-thenルールが載っています。 でした・・
95:デフォルトの名無しさん
09/05/19 09:51:34
オントロジーは?
96:デフォルトの名無しさん
09/05/19 10:17:05
オントロロロギッタンディスカー
97:デフォルトの名無しさん
09/05/19 23:45:46
URLリンク(blog.livedoor.jp)
> もともと大学で Lisp を少しやっていたので、() をカッコ、コッカと読む習慣は持っているのだが、
> [] をギッコン、ガッコンと読まれて面喰らった。そーか、そう読むのか。
mjd?
98:デフォルトの名無しさん
09/05/20 01:04:31
URLリンク(www-ksl.stanford.edu)
99:デフォルトの名無しさん
09/05/20 05:01:56
>>93
最初に言語のクラスを定義しておいて、組み合わせで
文を生成していくというようなことかな。
エキスパートシステムにそういう部分が必須であると
いう意味ですか?
言語クラスの定義、辞書の定義まで、すべてのアプリ
ケーションのリプレースに必要とまでの主張だとすると
多少はオントロジーとも無関係ではないかもしれないw
100:デフォルトの名無しさん
09/05/20 05:29:18
Prologって今から思えても意味ありますか?
特技みたいに思ってもらえたりするでしょうか?
101:デフォルトの名無しさん
09/05/20 05:40:22
>>100
思えても→覚えても
でした
102:デフォルトの名無しさん
09/05/20 07:14:59
>>100
これからがPrologの時代です。
103:デフォルトの名無しさん
09/05/20 07:23:08
>>100
私がPrologを使うのは生産性が高いからですよ。
それ以外のことは、まあどうでもいいです。
104:デフォルトの名無しさん
09/05/20 09:09:18
>>100
あなたが、今プログラミングをしたことのない60才だとします。
"Prolog以外"のプログラム言語をこれから覚えて使いこなすのは
不可能といっていいでしょう。これが答えです。
105:デフォルトの名無しさん
09/05/20 09:47:05
Prolog始まっ・・・そんなものはとっくに始まってるさ
106:デフォルトの名無しさん
09/05/20 10:02:14
企業経営という観点からいうと、
反射的にコストを考えてしまう社員は要らない。反利速的な経営の
基礎となる情報システムは記号処理言語を基礎に上層を築き直さな
くてはならない。Prologをアセンブラとして使う。
is/2には死んでもらうw
107:デフォルトの名無しさん
09/05/20 10:22:46
>>106
経路問題だけで業務ソフト作るのは難しいよw
108:デフォルトの名無しさん
09/05/20 10:23:52
URLリンク(www.cyc.com)
109:デフォルトの名無しさん
09/05/20 10:28:06
リンクだけ張っても仕方ない。
110:デフォルトの名無しさん
09/05/20 14:21:04
SWI-PrologでIF/Prologのparse_atom/2のような事を行いたいのですが、
どのようにすれば良いかご存知の方いらっしゃいませんか。
111:110
09/05/20 14:29:57
補足です。
やろうとしている(というか移植しようとしている)内容を簡単に書くと
do_all:-
(rule->
112:デフォルトの名無しさん
09/05/20 14:30:21
>>110
?- atom_to_term('append([1],[2],L).',X,Y).
X = append([1], [2], _G261)
Y = ['L'=_G261]
113:110
09/05/20 14:35:42
途中で送信してしまいました、すいません。
do_all:-
data(D),
(
rule(D)->
true;
create_rule(D,R_str),
parse_atom(R_str,R),
assertz((R))
),
fail;true.
あるデータセットを処理可能なルールが既にあれば良し、
なければ新しいルールを作って追加、
という内容です。
何卒よろしくお願いします。
114:デフォルトの名無しさん
09/05/20 14:44:17
>>113
create_rule/2 でなぜ直接Rを生成しないのか疑問ですが。
115:110
09/05/20 14:45:05
>>112さま
できました! ありがとうございます!
116:110
09/05/20 14:54:25
>>114さま
すいません、直接ルールを生成するというのはどのようなことなのでしょうか。
今のところは文字列処理でルール文を生成しています。
ほとんど独学なのでPrologの事は知っているようでよくわからなかったりします・・
117:デフォルトの名無しさん
09/05/20 15:36:16
data(筋肉は使い過ぎると傷害を起こす) だとします。
この文を解析して 筋肉,使い過ぎ,傷害を起こす という要素を得て、
?- ... create_rule(_文,'筋肉(使い過ぎ,障害を起こす)'), ...
生成できたのだとすると,
?- ... create_rule(_文,筋肉(使い過ぎ,障害を起こす)), ...
を直接生成できるのではないか。
118:110
09/05/20 17:51:16
>>117さま
string(atom)で返しているのは、assert以外に、ルール文をファイル保存等、
テキスト処理を行いたいため、そのようになっています。
※
parse_atom/2には直接関係無いため、記述を省略しておりました。
わかりにくくて申し訳ありません。
ruleの直接生成については、ご指摘の通りだと思います。
ただ、create_ruleでは複雑な処理を行っているのので、
今回は無理をせずにatom_to_termで行きたいと思います。
ご指摘ありがとうございました。
119:デフォルトの名無しさん
09/05/20 18:02:30
>>118
そうでしょうね。項とともにテキストの生成を意識することは
よい設計だと思います。あなたはご存知だと思いますが、
ruleの生成で私が書いた述語らしからぬ筋肉という関数の部分に
変数がくる、つまりその文によってここを変化させたい場合は、
functor/3,arg/3 または (=..)/2 を使います。メタ述語ですね。
120:デフォルトの名無しさん
09/05/20 18:43:14
>>106
反利速的な経営ってどういう意味?
121:デフォルトの名無しさん
09/05/20 19:45:17
>>120
利速的とは、売上、利益の伸び率などが今どういう傾向に
微分的に変化しつつあるかについて、もっとも注視すること。
反利速的ですから、計量的微分的な量りから遠ざかる、
そういうことに囚われない経営態度。
122:デフォルトの名無しさん
09/05/21 00:59:44
初心者のプログラミング言語ガイドスレで見て来ました。
ーー文化と実践ーーっていう本が薦められていて探してみようと思います。
処理系はSWI-Prologで良いですか?
というか、処理系によって言語仕様(でいいのかな)とかが違ったりするのでしょうか?
123:デフォルトの名無しさん
09/05/21 01:08:27
URLリンク(www.geocities.jp)
ここやってるんですけど、
?- like(taro, coffee).
YES
ってなるはずが自分の場合は
?- like(taro, coffee).
true.
と表示されるんですけど何ででしょうか?
SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.64)使用しています。
初心者質問申し訳ないです。
124:デフォルトの名無しさん
09/05/21 04:02:55
>>122
すみません。--文化とその実践-- でした。あちらのスレでも訂正をしておきました。
処理系はSWI-Prologで十分でしょう。Prologは残念ながら、処理系によっての差が
かなりあります。しかし、1995年にISO規格が制定されて、少なくとも各処理系が
この述語群は共通にサポートする方向ですから、できるだけこの規格に沿った述語を
選択して利用する方がよいでしょう。
125:デフォルトの名無しさん
09/05/21 04:11:05
>>123
ここの前スレで紹介があったのですが、
SWI-Prologは比較的最近のバージョンからYES ではなく true. と
表示されるようになりました。trueの後のピリオドにも注目です。
これで、実行ログが完全に項としてreadできるようになりました。
一時的な思いつきなのか永久にこの仕様になったのか分からない
のですが、多くのPrologプログラマは好意的に受け止めています。
126:デフォルトの名無しさん
09/05/21 11:54:03
この言語将来性なさそう・・・大丈夫か?
127:デフォルトの名無しさん
09/05/21 12:06:15
>>126
どういう理由で?
128:デフォルトの名無しさん
09/05/21 12:14:26
>>126ほとんどのプログラム言語が死に絶えた時に最期まで生き残っているのが論理型言語なのさ。Prologであるとは言わないけど。
129:デフォルトの名無しさん
09/05/21 12:28:22
>>128
平行論理型。それが機械語。
130:デフォルトの名無しさん
09/05/21 12:32:58
機械語なんていわれるとピンとこないなぁ。
131:デフォルトの名無しさん
09/05/21 14:21:54
James L. Hein;Prolog Experiments in Discrete Mathematics,Logic, and Computability
が公開されてるのをみつけた。
132:デフォルトの名無しさん
09/05/21 16:11:33
>>129
何を言いたいのかよくわからないけどせめて「並行」と書いてくれ。
133:デフォルトの名無しさん
09/05/21 16:21:10
第五世代ではKL1が機械語という位置づけだったんだっけ?
134:デフォルトの名無しさん
09/05/21 17:29:47
このスレってさ、まったりとか描いてる割には内容が高度すぎて読む気に慣れねーわ。
つーか、読んでも意味ワカンネーし。
やる気無くなるし。
135:デフォルトの名無しさん
09/05/21 17:37:06
狙いとしてはどうかしらないけど、プロトタイプシステムとやらではちゃんとコンパイルしてるみたいよ
URLリンク(www.icot.or.jp)
PrologのWAMにあたるKL1-Bといったものもあるらしい
136:デフォルトの名無しさん
09/05/21 17:40:21
>>134
すまん、漏れが親しみやすいトリビア集めをさぼっているばかりに…
137:デフォルトの名無しさん
09/05/21 17:48:51
「WAMにあたる」じゃないな
WAMコード、WAMの機械語にあたる、か
138:デフォルトの名無しさん
09/05/21 18:11:16
平行論理世界へようこそ
139:デフォルトの名無しさん
09/05/21 18:12:05
つーことは>>129の「それが機械語」は言い過ぎかな
WAMの命令セットが論理型言語と言えるならKL1-Bも並行論理型言語で
それが(仮想機械の)機械語と言えるかもしれんが
140:デフォルトの名無しさん
09/05/21 19:47:50
将来ロボットが出現するだろうから、それらをプログラムする言語はPrologになるってことか。
それなら納得した。
141:デフォルトの名無しさん
09/05/21 20:52:38
>>140
20世紀は石油。
21世紀はロボットの世紀だからね。
142:デフォルトの名無しさん
09/05/21 20:55:43
当面、情報家電のUIはPrologインタプリタでなくちゃいけないのだが・・・
143:デフォルトの名無しさん
09/05/21 21:01:04
>>142
JAVAでもしょうがないとは思うがPrologの項をparse_atomできる
関数をライブラリに持っていて欲しい。
144:デフォルトの名無しさん
09/05/21 21:52:21
>>134
だから第五世代計画は失敗した、という面もある。
145:デフォルトの名無しさん
09/05/21 22:12:17
この言語でプログラミングやるんだったらPython始めた方が良いよ
146:デフォルトの名無しさん
09/05/21 22:17:40
じゃあ君はPythonやればいい。
147:デフォルトの名無しさん
09/05/21 23:34:31
僕は、 KL-1 が素晴らしいと思ったので、今、勉強中です。
148:デフォルトの名無しさん
09/05/22 00:55:07
PythonとPrologって、主にどうちがうんですか?
149:デフォルトの名無しさん
09/05/22 01:36:28
>>148
Pで始まるところ以外全部
150:デフォルトの名無しさん
09/05/22 02:39:04
Pythonってjavaの代わりって感じ?
151:Prolog工作員
09/05/22 06:57:46
>>148
スレリンク(tech板:3番)
Pythonの解答と見較べれば、まったく違うことがわかる。
152:デフォルトの名無しさん
09/05/23 00:02:52
>>124
その本、あちらのスレでは在庫無しと書いてらっしゃいましたが、
まだ流通あるようですよ。ヤフオクの7アンドYでポチりました。
153:デフォルトの名無しさん
09/05/23 11:39:14
>>152
ありがとう。まだ大丈夫でしたか。
私は用心に去年二冊目を買いました。人に貸せるように。
Prologの本は昨年の赤間さんの本以外はいつ絶版になっても
しかたがないというのが多くて・・・
154:デフォルトの名無しさん
09/05/24 09:40:24
>>95
突然、ミケランジェロがでてきたような感じなんだよね。
155:デフォルトの名無しさん
09/05/24 21:14:18
最初に読んだPrologの本が中島秀之先生の本だった影響で
今でもProlog/KRに愛着があります。GCLで動かしています。
S式が扱えるPrologが好きです。
156:デフォルトの名無しさん
09/05/24 22:28:37
>>147
正式には"KL1"なんじゃないかな。
URLリンク(www.icot.or.jp)
URLリンク(www.icot.or.jp)
157:デフォルトの名無しさん
09/05/24 23:02:41
>>153
今日届きました。最初の連言標準形・・・あたりから既に付いていけてない・・・T_T
158:デフォルトの名無しさん
09/05/25 11:41:23
prologで微分する述語を作ったんだが x^(-1) を微分すると -1*x^ -2*1 と括弧が外れてしまう
せめて -1*x^(-2)*1 くらいは括弧が欲しい
どうやら x^ -1 と単一化されるのが原因らしい 微分述語を定義するときに括弧をつけても外されてしまう
これって回避する方法って無いの?
159:デフォルトの名無しさん
09/05/25 15:50:50
>>158
> どうやら x^ -1 と単一化されるのが原因らしい
このへんがちょっとよくわからない
160:デフォルトの名無しさん
09/05/25 18:26:57
>>159
例えば test((A),((A))). という述語を定義しても listing. すると test(A,A). になります
括弧を記号と考えて処理する方法は無いの?
161:デフォルトの名無しさん
09/05/25 20:13:31
>>160
なるほど。それは実は面白いかも。
もし仮に「冗長な括弧は、主関数子を'()'/1とする複合項を構成する」みたいなルールを決めるなら…
1 + (2 + 3) = +(1, +(2, 3))
1 + 2 + 3 = +(+(1, 2), 3)
1 + ((2 + 3)) = +(1, ()(+(2, 3)))
(1 + 2) + 3 = +(()(+(1, 2)), 3)
こんな楽しいPrologが…!たぶん使うのが難しいと思うけどw
162:デフォルトの名無しさん
09/05/25 20:17:18
>>160
えーとつまり、括弧をデータとして扱うことの問題点は感じてもらえるのでは
163:デフォルトの名無しさん
09/05/25 22:06:50
再起処理で一番上流だけを求めるってできる?
164:デフォルトの名無しさん
09/05/26 07:41:44
>>163
一番上流というと?
165:デフォルトの名無しさん
09/05/26 07:59:25
>>164
up(a,b).up(b,c),up(c,d).up(d,e).のとき
top(X,e).と聞くとX=aだけを返すようなプログラムができる?
166:デフォルトの名無しさん
09/05/26 08:28:35
後戻りを再起処理と言っていたのかw
エスパーの勉強になった
167:166
09/05/26 08:31:58
おっとすまん、勘違いだったようだ
168:166
09/05/26 08:37:29
>>165
aの特徴は、\+ up(_,a)というところだよね
そのへんが切り口なのでは
169:デフォルトの名無しさん
09/05/26 08:48:17
>>165
top(Top,End) :- up(A,End),top(Top,A).
top(Top,Top) :- up(Top,_).
170:169
09/05/26 08:51:19
なるほど、これだとだめなのか。
171:169
09/05/26 08:53:18
top(Top,End) :- up(A,End),top(Top,A),!.
top(Top,Top) :- up(Top,_).
かな。
172:169
09/05/26 09:14:07
top(Top,Top) :- up(Top,_),not(up(_,Top)).
top(Top,End) :- up(A,End),top(Top,A).
確かにこの方がよい。
173:デフォルトの名無しさん
09/05/26 12:09:09
これは2段階の手続きにしたほうが自然なのでは
top(Top,X) :- upper(Top,X), \+ up(_,Top).
upper(X,X).
upper(X,X0) :- up(X1,X0), upper(X,X1).
ところで、探索の向きがちょっと…w
174:デフォルトの名無しさん
09/05/26 12:18:46
>>173だとあれか、top(z,z)とかもあれしちゃうか
175:デフォルトの名無しさん
09/05/26 12:36:56
そのケースが閃くかどうかだ。Prologの弱点も垣間見える。
「いい問題」だね。
176:デフォルトの名無しさん
09/05/26 12:41:46
でも実際には孤立した点を含む集合を考えているかも知れないけどね
177:デフォルトの名無しさん
09/05/26 13:28:55
順序集合の概念を知ってるかどうかで
178:デフォルトの名無しさん
09/05/27 08:57:39
top(X,X0) :- \+ up(_,X0), !, X=X0.
top(X,X0) :- up(X1,X0), top(X,X1).
こんな形を考えたよ。意味的には>>173系。
最初
top(X,X) :- \+ up(_,X), !.
というふうに考えてしまったのが反省点。
179:デフォルトの名無しさん
09/05/27 10:28:08
>>178
やっぱりまずいんではないか。
up(a,b).
up(b,c).
up(c,d).
top(X,X0) :- \+ up(_,X0), !, X=X0.
top(X,X0) :- up(X1,X0), top(X,X1).
?- top(X,z).
X = z;
no
180:デフォルトの名無しさん
09/05/27 10:47:37
>>179
まずくない
181:デフォルトの名無しさん
09/05/27 10:48:25
というよりも、up(X,_)を満たすものだけを対象にすべきかどうかはっきりしない
182:デフォルトの名無しさん
09/05/27 10:50:57
もっと言えば、up/2で言及されない元がないとはいえない
183:デフォルトの名無しさん
09/05/27 11:07:00
うーん、つくづく、いい問題、いい仕様(>>165)、だな。
184:デフォルトの名無しさん
09/05/27 11:14:40
よく読んでみると、一番上流と言う言葉の解説として、
>>165 が呈示されているので、やはり少し無理があるか。
185:デフォルトの名無しさん
09/05/27 14:10:47
なんかSWIのマニュアルが動的になって、静的な索引が見当たらなくなった。
くそーそんなにキーワードを入力させたいのか
186:185
09/05/27 20:38:25
バージョン5.6までの古いのがまだ別サイトに残っていた。情弱でごめん
URLリンク(gollem.science.uva.nl)
しかしリリース日がよくわからなくなってる感じがする
URLリンク(www.swi-prolog.org)
> This page isn't maintained very well. If you want know whether this project is active (very much), checkout the GIT history.
187:デフォルトの名無しさん
09/05/28 23:32:50
<超>Prologトリビア探検隊
中村克彦訳『Prologプログラミング』(いわゆるClocksin & Mellish)の
索引の「く〜け」の所ではなく「か」の所に、「空リスト」を発見…!
さあ、お手持ちの本の情報もぜひw
188:デフォルトの名無しさん
09/05/28 23:52:27
なにそれこわい
189:デフォルトの名無しさん
09/05/29 03:37:09
>>187 劣勢でないかと予想した「唐派」も健闘しています。
「述語論理と論理プログラミング」 有川節夫・原口誠共著 オーム社
「MICRO-PROGRAM」 サラム著 山田和美訳 啓学出版
「体験学習 ビジネスマンのための Prologプログラミング入門」 高橋三雄著 オーム社
「Prolog入門」 太細孝・鈴木克志・伊藤ひとみ・佐藤祐幸共著 啓学出版
「はじめてのProlog」 舟本奨著 ナツメ社
「RUN/Prologとその応用」 杉原敏夫著 工学図書株式会社
「RUN/PROLOG入門」 小島政行著 アムコインターナショナル
「PROLOGデーベース・システム」 リー著 安倍憲広訳 近代科学社
「RUN/Arity Prologプログラミング入門」 大原茂之著 オーム社
「RUN/Prologを用いた Prologプログラミング入門」 鑰山徹著 工学図書株式会社
「Prolog詳説」 バラス著 斎藤重光・舟本奨訳
「楽しいプログラミングII 記号の世界」 中島秀之・上田和紀共著 岩波書店
「Prologプログラミング」 Clocksin・Mellish共著 中村克彦訳 マイクロソフトウェア
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4807日前に更新/227 KB
担当:undef