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共著 中村克彦訳 マイクロソフトウェア
190:デフォルトの名無しさん
09/05/29 04:26:10
バラスの本は啓学出版ですね。
「食う派」は15本見つけました。
「知識・代数・データベース」 グレイ著 田中穂積・徳永健伸訳 産業図書
「人工知能の基礎理論」 赤間世紀著 電気書院
「法律家のためのコンピュータ利用法」 加賀山茂著 有斐閣
「Prologマシン」 金田悠紀夫著 森北出版
「Prolog ユーティリティライブラリ」 フィリピッチ著 中野誠・伊藤哲郎訳
「Prologのソフトウェア作法」 黒川利明著 岩波書店
「Prologプログラミング入門」 安倍憲広著 共立出版
「論理による問題の解法」 コワルスキ著 浦昭二監修 山田眞一・菊池光昭・桑野龍夫訳
「Prologで学ぶ AIプログラミング」 赤間世紀著 工学社
「PROLOG入門」 後藤滋樹著 サイエンス社
「Prologランニングブック上」 横井与次郎著 ラジオ出版社
「わかる:-Prolog」塚本龍男著 共立出版
「例題演習 Prolog入門」 細野充著 オーム社
「情報学概論 Prologプログラミング」 吉田要著 八千代出版
「TURBO PROLOG入門」Townsend著 倉谷直臣・酒見高広訳 オーム社
赤間氏は確信を持って「食う」のようです。
191:デフォルトの名無しさん
09/05/29 04:42:40
「論理プログラミングの基礎」 J.W.ロイド著 佐藤雅彦・森下真一訳 産業図書株式会社
では「空節」が「か」に分類されています。これはさすがに。
192:デフォルトの名無しさん
09/05/29 08:00:04
このような場合もっとも重んじられるProlog本と思われる
「Prolog入門」 古川康一著 オーム社
の索引には"空リスト"はなかった。
193:デフォルトの名無しさん
09/05/29 10:18:46
えっ
194:デフォルトの名無しさん
09/05/29 21:38:57
>>189-192
また一歩、人類の知識が深化したね
195:デフォルトの名無しさん
09/05/29 22:09:56
ソラ派の俺はどうしたら
196:デフォルトの名無しさん
09/05/29 23:17:18
この手の話で盛り上がるのは、廃れつつある言語の典型ですなあ
197:デフォルトの名無しさん
09/05/30 09:40:17
>>189
PROLOGデーベース・システム」はもちろん誤りで正しくは「PROLOGデータベースシステム」です。
>>190 出版社に漏れがありました。
「Prolog ユーティリティライブラリ」は海文堂、
「論理による問題の解法」は培風館です。
「Prolog ユーティリティライブラリ」の索引は独特で、これは確信を以っての「食う派」ですね。
198:デフォルトの名無しさん
09/05/30 12:08:44
さすがに「あ」とか「す」はなさそうだね
199:197
09/05/30 12:17:05
確信を以って -> 確信を持って ですね。
200:デフォルトの名無しさん
09/05/31 12:25:55
>>163
その質問は「下流」ならできるけど、という話に見えるのがひっかけかな
201:デフォルトの名無しさん
09/06/01 02:26:30
帰ってきたPrologトリビア探検隊FX
『Prologの冒険』(Dennis Merritt著)の「まえがき」の「訳注」より。
> [1] Programming in Prolog(W.F. Clocksin and C.S. Mellish/Springer-Verlag, 1981)
> =邦訳:『Prologプログラミング』(中村克彦訳/マイクロソフトウェア,1983)。
> 本書は1987年に第3版が出版されているが,その邦訳はまだ存在しない。
1987年 「プログラミング」原書第3版
1988年 「プログラミング」改訂第3版 ←持ってます
1990年 「冒険」原書初版
1992年 「冒険」初版 ←持ってます
202:デフォルトの名無しさん
09/06/04 22:07:06
>>133周辺で、第五世代で機械語がどうたらという話があったけど、
逐次型の方のシステムで使われたKL0というのは、インタプリタ(の実行部分)が
マイクロプログラム(マイクロコード)化されていたというんで「機械語」だったらしいね。
URLリンク(www.icot.or.jp)
URLリンク(www.icot.or.jp)
小ネタ:
site:icot.or.jp "No Next Page"
203:デフォルトの名無しさん
09/06/05 08:13:10
他に質問にするところがないので、ここでさせてください。
今、Visual Prologでこの
URLリンク(wiki.visual-prolog.com)
サイトの
A Beginners Guide to Visual Prolog (PDF format, English 275 pages).
というチュートリアルを読みながら勉強しています。
163ページから166ページまでの階乗の例がエラーのせいでビルドできません。
e631: The predicate 'factorial::fac/2 (i,o),
which is declared as 'procedure', is actually 'multi'
…というエラーで、helpには
compiler optionの/warning:procedure- or /warning:631-のオプションを外せ
と書いてあるんですけど、わざわざVisual Prologのbinまでこれらのファイルを移動して
コマンドラインからVIP7Compiler /warning:procedure- factorial.proとやったんですけど、
error c223: A class declaration is not found for the implementaion 'factorial'
と怒られました。
(自分以外でVisual Prologなんて使っている人いるのか不安ですが)
先輩方、どおぅにかしてビルドする方法はないですか?
204:デフォルトの名無しさん
09/06/05 15:13:12
似たような状況
URLリンク(discuss.visual-prolog.com)
> So, after unpacking family1.zip, you should use Build/Run in Window
よくわからないけど、classのdeclarationとimplementationが別のファイルにあって、
それらがプロジェクトの中で関連づけられたものだと認識されていないということでは。
たぶん、プロジェクトの設定がどこかにあるはずなのに、それがコンパイラに伝わっていないとか。
> implementaion
○implementation
手で打ちましたねへっへっへ
205:デフォルトの名無しさん
09/06/05 15:18:38
「別のファイルにあって」は
「別々のファイルにあって」ですねスミマセン
206:デフォルトの名無しさん
09/06/05 18:42:18
>>202
逐次型推論マシンPSIは論理型プログラムPrologを高速に実行するのに最適化して設計
された,ワーク・ステーションである。次のような特徴を持っている。
・タグの採用
・最大16Mワード(80Mバイト)の実メモリ
・8Kワード(40Kバイト)のキャッシュ・メモリ
・高水準ビット・マップ・ディスプレイとマウスを装備
・高水準機械命令(KL0)とファームウェアによりKL0インタプリタ
・メモリ管理,一部のプロセス管理のファームウェア化
・ガーベッジ・コレクション機能のファームウェア化
PSIの基本処理装置の実行制御は,マイクロプログラム制御で行われる。このファーム
ウェアシステムは,マイクロ・インタプリとも呼ばれるPSIの機械語KL0を直接解釈実行
する。またファームウェアは,割込み制御,プロセス管理,メモリ管理,入出力制御等の
システム制御の機能を持ち,オペレーティング・システムによる資源管理の効率化が計られ
ている。
-- KL0 システム制御説明書 1-1 -- より
207:デフォルトの名無しさん
09/06/06 02:37:48
>>203
おまけ
URLリンク(wiki.visual-prolog.com)
扱われるファイルの拡張子の概略
URLリンク(www.visual-prolog.com)
「.prj6」という拡張子のファイルをIDEにロードしてビルドしてくれという指示のある例
そもそもコマンドラインから簡単にビルドできるのか、と疑ってみたところ…
URLリンク(discuss.visual-prolog.com)
> In will suggest that you simply use vip6Builder.exe:
:
> Yes. vip6builder is included in Visual Prolog Commercial Edition only.
まあそんなところかとw(バージョン7ではどうか知らないけど)
208:デフォルトの名無しさん
09/06/06 03:36:04
>>203
ふと何か勘違いをしている気がしてきた。
これまでのプログラム例のビルドには当然IDEを使って来たけども、
今回はコンパイラオプションを変えなきゃいけないようなのでコマンドラインでやってみた、
ということでしょうか。そうすると、
URLリンク(wiki.visual-prolog.com)
IDEの「Build Options」か何かをいじることになるのかも。それができないといっとんのじゃ、
という場合は、スミマセンw
209:デフォルトの名無しさん
09/06/06 04:56:18
<PSI探方 KL0機械命令編> データ操作 命令コード 28
set_vector_element(H_V,Position,Element)
ヒープ・ベクタH_VのPosition番目(0オリジンで指示)にElementを上書きする。上書きされ
た結果は,バックトラックにより,undoされない。
[入力条件]
H_V : ヒープ・ベクタ
Position : 整数 (0≦Position≦ (H_Vの長さ-1) )
Element : 未定義とスタック・ベクタを除く任意のデータ型
[成功条件]
常に成功する。
[例外事項]
illegal input: (a) H_Vがヒープ・ベクタでない。
(b) Positionが整数でない。
(c) Elementが未定義またはスタック・ベクタである。
out of bounds: (a) 0≦Position< (H_Vの長さ-1) を満たさない。
(b) H_Vが空ベクタである。
210:203
09/06/07 05:48:53
>>204-205 ∧ >>207-208
レス、ありがとうございます。
Build Optionsはもういじりましたが何も起こりませんでした
(エラーは起こったかも…今は違うパソからなんで確認できませんが)。
そこまで「検索→推測」でレスしてくださるならいっそ、実際に
A Beginners Guide to Visual Prolog (PDF format, English 275 pages).
の163~166ページのfactorialの例を試してくださいませんか?
VIP6でも同じ症状が出るのではないでしょうか?
211:デフォルトの名無しさん
09/06/07 06:23:06
いや、単にエスパー能力試しなのでお気になさらず
「インストールしたくないオーラ」を感じていただければw
212:デフォルトの名無しさん
09/06/07 07:21:34
>>210
どうして深く追及したくないかというと…
URLリンク(discuss.visual-prolog.com)
> It seems that Visual Prolog changed since I wrote that chapter.
入門書の例が動かなくなった、という報告が他にもあるみたいなので
213:デフォルトの名無しさん
09/06/08 14:43:48
前スレで少しだけ話題になっていたと思うけど、
URLリンク(en.wikipedia.org)
URLリンク(ja.wikipedia.org)
この落差は一体なんなのだろう。
どちらかが間違っているという部分もあるし。
214:デフォルトの名無しさん
09/06/09 00:59:01
>>どちらかが間違っているという部分もあるし。
ってどこ?
215:デフォルトの名無しさん
09/06/09 02:47:08
>>214
The language was first conceived by a group around Alain Colmerauer in Marseille
, France, in the early 1970s. According to Robert Kowalski, the first Prolog sys
tem was developed in 1972 by Alain Colmerauer and Phillipe Roussel.[1]
1972年ごろにフランスのカルメラウアーとコワルスキーによって考案された。
216:215
09/06/09 04:34:16
ごめん。対応するのは、Historyの中にある以下の方かな。
It was created around 1972 by Alain Colmerauer with Philippe Roussel, based on Robert Kowalski's procedural interpretation of Horn clauses.
It was motivated in part by the desire to reconcile the use of logic as a declarative knowledge representation language with the procedural representation of knowledge that was popular in North America in the late 1960s and early 1970s.
これだと、jp.wikipedia の解釈も可能。
217:デフォルトの名無しさん
09/06/09 08:15:52
>>215
エッカート博士のストアード・プログラム方式の最初のアイデアに関する
裁判などを見ても、最初のアイデアを出したのが誰か、そして、本人がそれを
主張するか、などなかなか微妙。マルセイユグループとコワルスキとの間に
何かあるか、あるいは何もないのか、知らないが・・・
カルメラウア側の情報に終始するProlog生成の物語に、ある種の客観性を
与えるため、
According to Robert Kowalski,
以下があるのだと思う。カルメラウアが示唆を受けたと表明しているこの分野の
最高権威がお墨付きを与えているとして文献が示されている。
en.wikipedeaのここの部分の書き手とHistoryの書き手は異なるのかもしれない。
218:217
09/06/09 08:27:54
ついでに云ってしまうと、en.wikipedia は非常によく書けていると思う。
誰か翻訳して、jp.wikipediaを全面下記潰していただけないだろうか。
219:203
09/06/09 08:45:29
>>211-212
Visual Prologの元祖スレで質問して
カットを一つ入れたら治りました。
一応報告まで。
220:デフォルトの名無しさん
09/06/09 09:32:38
元祖スレというのが何を指しているかわかりませんが
よかったですね
221:デフォルトの名無しさん
09/06/09 09:35:48
>>218
手間と予想される悶着を考えると、とりあえずリンクを張って
あとは「独自研究」とか「雑多な内容」とかで
222:デフォルトの名無しさん
09/06/09 09:46:02
よく書けていると評価できる位なら独自に全部書けるだろwww
とか一瞬思ってしまった
223:デフォルトの名無しさん
09/06/09 09:48:12
>>222
まともな文章書いたことないだろw
224:デフォルトの名無しさん
09/06/09 14:23:43
>>222
プログラミングテクニックについてならいくらでも書けるけどね。
現在のWikipediaの構造を維持したら整合しない。だからといって、
Prologの歴史や述語論理との関係についてまで解説するのは、荷が
重い。
225:デフォルトの名無しさん
09/06/09 15:38:44
この項目はあまりよく書けていない可能性があります。
ノートでの議論と記事の発展への協力をお願いします(Template:よく書けていない)。
226:デフォルトの名無しさん
09/06/09 22:23:54
このスレで、記事をまとめて、
それを Wikipedia にアップさせれば良いのでは?
227:デフォルトの名無しさん
09/06/10 00:21:25
著作権が曖昧になると嫌がられるよ
228:デフォルトの名無しさん
09/06/10 07:48:04
翻訳はやりたいけど、今のjaのPrologの記事を書き潰すと一悶着ありそうだな…
229:デフォルトの名無しさん
09/06/10 08:13:58
匿名で書けるんだから面倒なことになったらトンズラすれば?
230:デフォルトの名無しさん
09/06/10 08:37:37
全部書き潰す必要はないし、ルールに従ってやればいいのだけれど、
Googleの検索でWikipediaが先頭にくるようになってからは、
大半のPrologのことを知りたい人がこのサイトを読んで引き返して
しまっていることは確かだ。しかも、そういう人のためのサイトに
全くなっていない。誰のために書いてあるのか分からないサイトと
言ってよいだろう。やはり、相当手を入れないといけない。
231:デフォルトの名無しさん
09/06/10 09:01:54
>Prologは、導出において節を以下に述べる頭部が一つの命題からのみなる
>ホーン節に限定したものととらえる事が出来る。
この文、変だよね。
232:デフォルトの名無しさん
09/06/10 09:06:20
"からのみなる" の検索結果 約 915 件中 1 - 10 件目 (0.21 秒)
233:デフォルトの名無しさん
09/06/10 09:38:12
"nominal horn clause"の検索結果 8 件中 1 - 8 件目 (0.28 秒)
234:デフォルトの名無しさん
09/06/10 09:42:59
>>231
確かに難解な文だな。
Prologでは導出される対象を頭部が一つの項に限定されたホーン節と
呼ばれる命題に限定している。
と言いたいのですか?
235:デフォルトの名無しさん
09/06/10 09:56:02
ちょっとかじった人なら読み飛ばして何事もなしだが……
詰め込みすぎたか、あとで書く予定が面倒になったか。
236:デフォルトの名無しさん
09/06/10 10:17:36
>>234
私も素人なのだが。
( P ∧ Q ) も一つの項でしょ。
そうすると (p1 ∧ p2) :- q1 ∧ q2 ∧ ....
も許される事になっちゃうんじゃないの。
237:デフォルトの名無しさん
09/06/10 10:43:16
Prolog的混乱が生じてるねへっへっへ
「原子論理式」という言葉があるよ
238:デフォルトの名無しさん
09/06/10 11:22:05
ものの本によると、アタマのないやつも「ホーン節」のうちみたいよ。
質問とか、計算中の目標(ゴール)として現れるやつ。
アタマのあるやつ(Q∧R⇒P、P∨¬Q∨¬R、{P,¬Q,R}、P:-Q,R.)は
「頭部つきのホーン節」とか「プログラム節」とかいうらしい。
239:デフォルトの名無しさん
09/06/10 11:22:56
やべ
× {P,¬Q,R}
○ {P,¬Q,¬R}
240:デフォルトの名無しさん
09/06/10 13:01:54
古川康一著の「Prolog入門」より。
# ホーン論理とは,一階述語論理の命題をA1 ∨ A2 ∨ ... ∨ An ← B1 ∧ B2 ∧ ... ∧ Bm の
# 形(節形式)であらわしたときに,左辺の句がたかだか一つしか現れないような命題のみ扱う論理
# である(ここで,A1,A2, ... ,An,B1,B2, ...,Bm は正の句である). すなわち,左辺に句が
# 一つ現れるのか定義節であり,そこが空になるのがゴール節である(ゴール節を":-"から始めても
# よいのは,そのためである).
241:デフォルトの名無しさん
09/06/10 13:05:44
>>240
句・・・か・・
242:デフォルトの名無しさん
09/06/10 13:19:13
原子論理式、基本論理式、リテラル、句
は微妙に違いがあるのかな。リテラルは否定形を含むとか。
243:デフォルトの名無しさん
09/06/10 21:23:51
リテラルはそうでしょう
244:デフォルトの名無しさん
09/06/10 21:24:50
「正の句」と言っているから
句=リテラル
なのか
245:デフォルトの名無しさん
09/06/10 22:59:16
そうか「頭部つき」=「確定節」(DCGのDC)ということか
246:デフォルトの名無しさん
09/06/10 23:17:58
definite(明確な、限定的な など)
definitive(確実な、限定的な、明確な、限定詞 など)
definitional(definitionの形容詞形)
definition(限定、明確化、定義、解像力 など)
ややこしい
247:デフォルトの名無しさん
09/06/11 00:40:12
第129回技術委員会議事録
URLリンク(www.itscj.ipsj.or.jp)
> 1) SC22/WG17 SC22N4049 (投票期限: 2006-07-26)
> (資料31)
> Programming Language Prolog -- Definite clause grammar rules
> 「プログラム言語Prologのための確定節文法規則」
> Q.1~Q.3にYES,Q.4~Q.6にNOとする回答案は,原案どおり承認された.(後藤SC22専門委員会幹事)
この場では「確定節」なんだね
248:デフォルトの名無しさん
09/06/11 01:02:05
小ネタ:
FGHC(Flat GHC)をGDC(Guarded Definite Clauses)と呼ぶことがあるらしい
249:デフォルトの名無しさん
09/06/11 01:33:11
Logic for applications
著者: Anil Nerode, Richard A. Shore
> (Ordered clauses are sometimes referred to as definite clauses, hence
んー?これはなんか集合論の用語みたいな…
250:デフォルトの名無しさん
09/06/11 09:03:10
Prologなら使用人口も少ないだろうし、
論文ネタがゴマンとあって書きやすいんじゃないかと思って手を出そうとしてるところ
実際、どう?
251:デフォルトの名無しさん
09/06/11 09:15:34
>>250
あくまでも、プログラム言語であるという視点で、
・ Prologのプログラムパターン
・ Prologのプログラミングスタイル
・ 得手とする領域とその典型的なプログラム
の記述を重視して。
お願いします!!
252:デフォルトの名無しさん
09/06/11 09:20:45
>>250
ごめん、間違えた。勉強しようという話ですね。
論文ネタなら、ICOTの検証だけで事実上無限にあります。
253:デフォルトの名無しさん
09/06/11 09:34:53
>>251-252
>論文ネタなら、ICOTの検証だけで事実上無限にあります。
ウホッ、予感的中!感謝感激雨霰!
マジで
人 生 賭 け て 研 究 す る 所 存 で あ り ま す
でも、その前に紙の上での記号論理学や形式言語をもっと勉強しなければ、と今勉強中です
254:デフォルトの名無しさん
09/06/11 11:40:45
DCGトリビア発見
URLリンク(www.cs.kuleuven.ac.be)
> The reasons we concocted the term "definite clause grammar" had to do with the fact that
(以下略)
255:デフォルトの名無しさん
09/06/12 04:00:35
URLリンク(www.hamid2.soft.iwate-pu.ac.jp)
> Prolog のプログラムは、確定節(Definite clause)と呼ばれる節形式で、すべて記述する。
:
> Prolog のなかで利用される確定節は、H とBiの数によって、ル-ル節、ファクト節、ゴ-ル節に分けられる。
> またル-ル節とファクト節をまとめて、定義節と呼ぶ。
ここでは確定節=ホーン節みたいに扱ってるね。
ただし一般論じゃなくてPrologに絞った話だからアレだけど。
256:デフォルトの名無しさん
09/06/12 07:37:38
>>215-217
何気にスルーしちゃったけど、「Colmerauer」はフランス語の発音の原則だと
「コルメロエ」みたいになると思うけど、そのへんどうなんだろう。
257:デフォルトの名無しさん
09/06/12 07:44:05
クルルァ
258:デフォルトの名無しさん
09/06/12 07:51:02
○○が近いが△△あるいは□□とも書かれてきた
259:デフォルトの名無しさん
09/06/12 07:53:17
ちなみにおなじみC&M邦訳では「コルメロエ」だった
260:デフォルトの名無しさん
09/06/12 09:59:40
>>258
カタカナ表記の揺れの問題じゃなくて、
フランス語読みと英語読みの違いでしょ。
261:デフォルトの名無しさん
09/06/12 10:29:21
仏語:コルムローエル
英語:コルマローアー
では?
262:デフォルトの名無しさん
09/06/12 11:12:07
URLリンク(blog.livedoor.jp)
URLリンク(blog.livedoor.jp)
> 1)「ə」の発音となる場合
> ①「e」の後ろに子音字が1つしか続かない場合(但し、単語末は除く)
> ex) demain [dəmɛ̃]
なるほど
語末rはきっと漏れには聞こえないのではないだろうか
263:デフォルトの名無しさん
09/06/12 11:27:20
URLリンク(blog.goo.ne.jp)
> 君のパリのアクセントが気に入らない! といいはるんですね。w
264:デフォルトの名無しさん
09/06/12 12:23:27
>>263
やっぱりコルメラウアじゃないか!
265:デフォルトの名無しさん
09/06/12 13:24:54
また新たな「確定節」解釈を発見。
『人工知能の基礎』(馬場口登・山田誠二共著)によると、
事実(fact)=単位節(unit clause)
ルール(rule)=確定節(definite clause)
質問(query)=ゴール節(goal clause)
らしい(p.75)。かなりパターンが揃ってきたねw
266:デフォルトの名無しさん
09/06/12 13:44:38
URLリンク(hagi.is.s.u-tokyo.ac.jp)
> 単位節(unit clause)
> 一つのリテラルから成る節
> 正単位節(unit clause)
> 一つの正リテラルから成る節
> 負単位節(unit clause)
> 一つの負リテラルから成る節
どうして全部unit clauseなんだろう
267:デフォルトの名無しさん
09/06/12 14:26:18
あそうか、コピペ駆動開発みたいな感じか
268:デフォルトの名無しさん
09/06/14 00:56:10
The Birth of Prolog
by Alain Colmerauer
URLリンク(citeseerx.ist.psu.edu)
269:デフォルトの名無しさん
09/06/14 05:26:20
>>268
「clause」だけ検索してみたら
・ここではdefinite clauseという言葉を使っていない
・たまに「program(の)clause」のような言い方をする程度
・そもそも、最初はホーン節という概念に着目していなかったらしい
という感触だった
270:デフォルトの名無しさん
09/06/14 08:29:53
URLリンク(alpha.c.oka-pu.ac.jp)
> 1973年エディンバラ大学のP. Hayesは,
(中略)
> 翌年さらにKowalskiは,Prologに代表される論理プログラミング一般の基礎づけをおこなった。
"Predicate logic as programming language"
URLリンク(www.doc.ic.ac.uk)
これの「6. HORN CLAUSES」のところでは、4種類のホーン節それぞれについて、
H ← B1, ..., Bn. を「procedure declaration」、
H ←. を「assertion of fact」、
← B1, ..., Bn. を「goal statement」、
←. を「halt statement」
と手続き的に解釈できるぜ、という言い方をしているね。
(下線付きなので読みやすい)
271:デフォルトの名無しさん
09/06/14 09:38:32
URLリンク(www.doc.ic.ac.uk)
site:www.doc.ic.ac.uk inurl:rak +definite
URLリンク(www.doc.ic.ac.uk)
THE BRITISH NATIONALITY ACT AS A LOGIC PROGRAM
May 1986
> (The terminology “Horn clauses” is used here to cover both
> definite Horn clauses and Horn clause queries.)
「definite Horn clause」がやっと出てきた。
けど、これ以外には見当たらない。Kowalskiの用語にはなさそう?
272:デフォルトの名無しさん
09/06/14 10:42:22
Programming in Prolog
著者: William F. Clocksin, Christopher S. Mellish
27 ページ
> Structures are called "compound terms" in Standard Prolog, but
> in this book we use the word "structure" because it is shorter and
> more easily distinguished ...
2003年版より。てっきりISOの用語に統一されたんだろうなと思っていたので意外だった。漢だ。
273:デフォルトの名無しさん
09/06/14 12:18:37
URLリンク(www.w3.org)
> "definite program" [1]
:
> SLD-resolution (Linear resolution with Selection function for Definite clauses [1])
:
> [1] J.W. Lloyd, Foundations of Logic Programming, Springer-Verlag, 1987.
うーんこのへんになにかありそうな…
URLリンク(foldoc.org)
> A definite clause is a Horn clause that has exactly one positive literal.
URLリンク(mathworld.wolfram.com)
> A definite clause is a Horn clause that has exactly one positive literal.
この2つのページ、かなり酷似した部分があるけど大丈夫なのかな
274:デフォルトの名無しさん
09/06/14 12:46:23
URLリンク(ale.cs.toronto.edu)
> A definite sentence has exactly one positive literal in each clause and
なるほど、導出計算方面でいうsentenceをprogramと読み替えるとdefinite program、
definite programに含まれるclauseだということでdefinite clauseなのかな
275:デフォルトの名無しさん
09/06/14 12:48:21
というかdefinite (program) clauseか
276:デフォルトの名無しさん
09/06/14 13:20:39
ともかくSLD導出のDだというのは真面目に調べればすぐ分かったはずだった気がする。
エスパー能力の限界か。。
URLリンク(en.wikipedia.org)
> The name "SLD resolution" was given by Maarten van Emden for the unnamed
> inference rule introduced by Robert Kowalski in [Kowalski 1973, 1974].
Kowalskiは名前をつけたりしないのかな
URLリンク(en.wikipedia.org)
URLリンク(en.wikipedia.org)
> A definite sentence is a Horn clause with exactly one positive literal.
これはまた違う定義というか、、
277:デフォルトの名無しさん
09/06/14 15:05:53
ついにCarl Hewitt(の恨み節みたいなの)が面白く読める程度まで予備知識がついた気がする
URLリンク(knol.google.com)
278:デフォルトの名無しさん
09/06/14 22:06:24
『Horn節は、ある条件の下で(あるいは無条件に)成り立つ事柄について、
B1”または”B2というような不確定な言い方を許さない。そこでHorn節は
確定節(definite clause)とも呼ばれる』
論理と意味 p105
直観主義論理の形式系LJの式は全部Horn節、というのもどこかで
関係するんじゃないですかね。
279:デフォルトの名無しさん
09/06/14 22:19:54
失礼。書き忘れました。B1,B2というのは
A1,A2,...An → B1,B2,...Bn
という右辺にあるそれぞれの式のことを指します。
280:デフォルトの名無しさん
09/06/15 05:15:56
LJを調べてみました。扱っている式の形はホーン節に似てはいますが、
それぞれの論理式は原子論理式である必要はないんですよね
281:デフォルトの名無しさん
09/06/15 05:18:56
>280の「式」は「→」や「,」を含む全体、「論理式」はそこで対象化されている部分です、念のため
282:デフォルトの名無しさん
09/06/15 10:41:13
>>それぞれの論理式は原子論理式である必要はないんですよね
確かにその通りです。
では、そもそもなぜHorn節(より一般に節)は、原子論理式及び原子論理式
の否定の選言で構成されないとならないのか?という疑問が湧いてきますね。
多分何かしらの変換において、要素が原子論理式でなければならないという
縛りが出てきそうです。そのラインから少し調べてみます。
283:デフォルトの名無しさん
09/06/16 08:18:09
Qualitative spatial reasoning with topological information
Jochen Renz著 - 2002
17 ページ
> A Horn clause without a positive literal is called
> indefinite Horn clause, otherwise it is a definite Horn clause.
mjd?
284:デフォルトの名無しさん
09/06/16 23:03:56
>>283
プログラミング言語の新潮流という本では、
正のリテラルが(”高々”はつかず)一つである節を確定節(definite clause)と呼ぶ。とある。
思うに証明戦略上区分けしていると思われる。
正の節、すなわち確定節の場合、
証明戦略:SPU(selective positive unit resolution)
負の節、すなわち不確定節の場合、
証明戦略:SNL(selective negative linear resolution)。
SLD = SPU + SNL?
SLD戦略を理解するに当たって、確定節、不確定節を区分したほうが
わかりやすいから区分しているように見える。
285:デフォルトの名無しさん
09/06/16 23:08:11
LJの式がHorn節になるというのはあまり関係ないようだ。
加えて、要素が複合論理式か、原子論理式かはあまり関係なかった。
SPUなりSNLの証明戦略を用いたとすると、結局原子論理式しか出てこない。
わかりにくい言い方だが、つまり、何かしら自動証明することを考えると、
複合論理式であるかどうか、ということは特に問題ならなくなる。
286:デフォルトの名無しさん
09/06/16 23:09:53
付け加えて、SPU,SNLについては『論理と意味』に解説がある。
287:デフォルトの名無しさん
09/06/16 23:14:46
改めて読み返すと>>285の内容がおかしい。とりあえず、保留。
288:デフォルトの名無しさん
09/06/19 00:06:52
質問です
prologで
?- divide([a,b,c,d,e],L1, L2).
L1 = [a,c,e]
L2 = [b,d]
とするにはどうしたらよいのでしょうか?
289:デフォルトの名無しさん
09/06/19 00:20:52
divide([],[],[]).
divide([X|Xs],[X|Ys],Zs) :- divide(Xs,Zs,Ys).
290:デフォルトの名無しさん
09/06/19 00:39:39
>>289さん
ありがとうございます
ちなみにこれの停止条件は空リストは空リスト二つに分けろってことですか?
何で最小単位が空リストになってしまうのでしょうか? a,b見たいな感じにはならないのですか?
後再帰条件はヘッドのXをXsとYsに分けてZsが残っているか判定する、でいいのでしょうか?
prologよくわからないので日本語がおかしいかもしれないですが回答お願いします
291:デフォルトの名無しさん
09/06/19 11:02:21
divide([],[],[])
divide([a],[a],[])
divide([a,b],[a],[b])
divide([a,b,c],[a,c],[b])
divide([],[],[])
divide([1],[1],[])
divide([2,1],[2],[1])
divide([3,2,1],[3,1],[2])
292:デフォルトの名無しさん
09/06/19 20:46:00
うぅむ・・・。
Xというリストを分けてXsとし、残ったリストXをまた分けてYzとし、
最終的に分割できるものがなくなったら残った物をZsとして
停止条件に行き着くみたいな感じでしょうか・・・?
293:デフォルトの名無しさん
09/06/19 21:34:39
divide([A,B|Xs],[A|Ys],[B|Zs]) :- divide(Xs,Ys,Zs).
divide([A|[B|Xs]],[A|Ys],[B|Zs]) :- divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Ys],Zs0) :- [Xs0,Zs0] = [[B|Xs],[B|Zs]], divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Ys0],Zs0) :- [Xs0,Ys0,Zs0] = [[B|Xs],Ys,[B|Zs]], divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Ys0],Zs0) :- [Xs0,Zs0,Ys0] = [[B|Xs],[B|Zs],Ys], divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Ys0],Zs0) :- divide(Xs0,Zs0,Ys0) = divide([B|Xs],[B|Zs],Ys), divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Zs0],Ys0) :- divide(Xs0,Ys0,Zs0) = divide([B|Xs],[B|Zs],Ys), divide(Xs,Ys,Zs).
divide([A|Xs0],[A|Zs0],Ys0) :- divide(Xs0,Ys0,Zs0).
divide([B|Xs],[B|Zs],Ys) :- divide(Xs,Ys,Zs).
ほら、簡単でしょう(ボブ)
294:デフォルトの名無しさん
09/06/19 21:44:32
ひとつ削ると奇数偶数が反対になる、というふうに考えればいいかも
295:デフォルトの名無しさん
09/06/19 22:16:47
>>293さんもといボブさん
divide([A,B|Xs],[A|Ys],[B|Zs]) は リストをAとBに分けてそれをまたそれぞれYsとZsに分けるんですよね?
divide([A|[B|Xs]],[A|Ys],[B|Zs])はAを抜き出して次に[Bという先頭を抜き出し余ったものをXsとしてるんですよね?
>>294さん
[a,b,c,d,e].だったらaをとったらL1に行き
次のbはL2に行きっていうのを繰り返すんですよね?
これがaを奇数とすると奇数を取ったら次は偶数ってことですか?
疑問詞ばかりで申し訳ないです
頭がおかしくなって死にそうです・・・。
296:デフォルトの名無しさん
09/06/19 22:25:56
>>295
> リストをAとBに分けて
ちょっとまった
[A,B|Xs]
[A|[B|Xs]]
この2つが同じものだと思っていないということ?それとも直感的な解釈の違いのことを言ってるのかな
297:デフォルトの名無しさん
09/06/19 22:30:04
このスレは一体何が起きているんだ・・・。
なぜか体が震えてくる。俺だけ?
298:デフォルトの名無しさん
09/06/19 22:35:57
>>295
[10,9,8,7,...] から [10,8,...], [9,7,...] を取るとき、
[10,8,...]がほしい立場からすれば、次の9は飛ばして8を取りたい。
[9,7,...]がほしい立場からすれば、今回の10は見送って次の9を取りたい。
ちょうどニーズが交代しているという感じで捉えているけど、もうひとつ明確じゃないねこりゃ。
299:デフォルトの名無しさん
09/06/19 23:00:46
>>296さん
あ、勘違いしてました・・・。
>>297さん
僕も自分の理解力がなさ過ぎて手が震えてきました
>>298さん
おぉ!なんとなくわかってきました!
[X|Ys]ここはどうしてこうなるのでしょうか?Xを排除したものをYsとしてるんですよね?
([X|Xs],[X|Ys],Zs)ここの部分を今みたいな日本語に直すとどんな感じなのでしょうか?
頓珍漢な事ばかり書いて皆さんを惑わせてしまって申し訳ないです。もう少し付き合って下さい><
300:デフォルトの名無しさん
09/06/20 12:15:56
> [X|Ys]ここはどうしてこうなるのでしょうか?Xを排除したものをYsとしてるんですよね?
XとYsから[X|Ys]を作っている、と読むのが自然じゃないかな
divide([A,B|Xs],[A|Ys],[B|Zs]) :- divide(Xs,Ys,Zs).
divide([A,B|CDEF…],[A|CE…],[B|DF…]) :- divide(CDEF…,CE…,DF…).
divide([X|Xs],[X|Ys],Zs) :- divide(Xs,Zs,Ys).
divide([A|BCDE…],[A|CE…],BD…) :- divide(BCDE…,BD…,CE…).
こう書き直せばわかる気がする
301:デフォルトの名無しさん
09/06/20 12:50:30
>>299
[X|Ys] Prologでは(注1)これは二通りの意味に解釈します。
1)・・Xはリストの最初の要素である。ただしリストとは [X|Ys] のことです。
2)・・リストYsに最初の要素としてXを付加する。できたリストは [X|Ys] です。
[X|Ys] の表現は99% 1) か 2) の意味で使われていますから、
どちらの意味であるか読み抜きましょう。
注1)・・Ysがリストでない例えば X=3,Ys=5, で [3|5] というものもあり得るのですが、
Prologではほとんど使うことがないのでこの際無視しましょう。
302:デフォルトの名無しさん
09/06/20 13:57:34
URLリンク(kti.mff.cuni.cz)
ここだとまず、元のリストが奇数番目から始まるか偶数番目から始まるかを
ずっと保存しながら扱っているね。
> even_odd(L,E,O):-odd(L,E,O).
最初は1番、つまり奇数番と考えてodd/3を呼ぶ、と。
> odd([],[],[]).
> odd([H|T],E,[H|O]):-even(T,E,O).
>
> even([],[],[]).
> even([H|T],[H|E],O):-odd(T,E,O).
303:デフォルトの名無しさん
09/06/20 14:07:07
つまり、偶数番どうし、奇数番どうしの対応に注目するなら…
divide([A|BCDE…],[A|CE…],BD…) :- divide(BCDE…,BD…,CE…).
divide([A|BABA…],[A|AA…],BB…) :- divide(BABA…,BB…,AA…).
304:デフォルトの名無しさん
09/06/20 22:13:33
>>300さん
なるほど([A,B|Xs]でリストXsをつくり次に
[A|Ys]Xsを踏まえたうえでで奇数番をつくり
[B|Zs])で偶数番を作るんですね!?
>>301さん
[X|Ys] に二種類の解釈があるということをうまく理解できていませんでした。ありがとうございます
>>302さん >>303さん
貴重な書き込みありがとうございます
divide([A|BABA…],[A|AA…],BB…) :- divide(BABA…,BB…,AA…).
は偶数と奇数に分けている事を強調して書いてあるんですね?
305:デフォルトの名無しさん
09/06/20 22:53:16
ちょっとまだ言葉遣いが混乱していると思うけど、
(「[A|Ys]Xsを踏まえたうえでで」とか)
大体わかったみたいでよかったね
306:デフォルトの名無しさん
09/06/20 23:02:46
500億かけただけあってGHCは全容が見えなさ過ぎる。
調べれば調べるだけ話題が出てくる。なんなんだ、この言語。
307:デフォルトの名無しさん
09/06/20 23:11:19
皆さん、本当にありがとうございました
まだ完全ではないですが理解できました
なんだか軽く荒らし兼、笑いものになってた気がしますが寛大な心で
許してください><
308:デフォルトの名無しさん
09/06/24 10:56:16
?-g1.
input=taro.
input=jiro.
input=2
input=..
.
input=end.
yes
endが入力されるまで繰り返し、入力をしるg1を作りたいんですけど、全くわかりません。知恵を貸して下さい。
309:デフォルトの名無しさん
09/06/24 12:13:56
>>308
g1 :- repeat,write('input='),read(X),(X=end;assertz(tmp(X)),fail).
repeat.
repeat :- repeat.
310:デフォルトの名無しさん
09/06/24 12:15:59
>>308
g1(L) :- findall(X,(repeat,write('input='),read(X),(X=end,!,fail;true)),L).
311:デフォルトの名無しさん
09/06/24 12:18:38
>>308
g1(L) :- g1_prompt,read(X),g1_2(X,L).
g1_2(end,[]).
g1_2(A,[A|R]) :- g1_prompt,read(B),g1_2(B,R).
g1_prompt :- write('input=').
312:311
09/06/24 12:23:19
>>308 この方が自然かな。
g1(L) :- g1_read(X),g1_2(X,L).
g1_2(end,[]).
g1_2(A,[A|R]) :- g1_read(B),g1_2(B,R).
g1_read(X) :- write('input='),read(X).
313:デフォルトの名無しさん
09/06/24 17:42:30
>>308
g1 :- repeat, write('input='), read(X), X = end, !.
終わったらrepeatへの後戻りをカットしないとまずいかもしれないよ。
g1 :- write('input='), read(X), X \= end, g1.
g1.
おまけの再帰版。
314:デフォルトの名無しさん
09/06/24 17:50:28
おっと「知恵を貸して」か。なら…
>>308
g1 :- repeat, write('input='), read(X), fail.
g1 :- write('input='), read(X), g1.
こうすると止まらない。そこで…
・X=endのとき止めるには、条件をどこにどのように課せばいいか。
・止まったとき成功するようにするには、どうすればいいか。
・?- g1, fail.と呼び出したとき困ることはないか、困るならどう回避するか。
(もう遅いってw)
315:デフォルトの名無しさん
09/06/24 20:04:27
X \= end や X = end は、
X \== end や X == end としたほうがいいかもしれない。
read/1だと変数も入力できてしまうし。
316:デフォルトの名無しさん
09/06/24 20:27:03
ごめん、>>313の再帰版にもカットが必要だった。
?- g1, X=X.などとすると余計な成功が生じているのがわかると思う。
うーん勉強になるw
317:デフォルトの名無しさん
09/06/25 04:36:56
>>316
g1 :- write('input='),read(X),X==end,!.
g1 :- g1.
がスマートで推奨版なのかな。インタプリタのトップからの使いやすさから、
repeat/0を利用してしまうが。
318:デフォルトの名無しさん
09/06/25 07:01:43
失敗駆動ループを使うならrepeatのほうがいいかと
319:デフォルトの名無しさん
09/06/25 07:03:29
えーっとつまり、値を蓄積したいなら再帰で、という
320:デフォルトの名無しさん
09/06/25 07:48:54
>>319
こういうのはあるか。
g1(X) :- write('input='),read(X).
g1(_) :- g1(_).
?- g1(X), ... ,X==end.
最後に ... の中でendが消費されてしまうのが難。
321:デフォルトの名無しさん
09/06/25 07:52:29
匿名変数だとダメなのかな。
g1(X) :- write('input='),read(X).
g1(X) :- g1(X).
でないと。
322:デフォルトの名無しさん
09/06/25 20:06:07
repeatから一歩も出てないねw
323:デフォルトの名無しさん
09/06/25 20:24:52
表面上カットを使わない方法を挙げると、
g1 :- once(( repeat, write('input='), read(X), X == end )).
あるいは
g1 :- \+ \+ ( repeat, write('input='), read(X), X == end ).
いわゆる「生成検査戦略」の枠組み
\+ ( 生成(X), \+ ( 検査(X) ) )
で考えてもおもしろいのでは。
g1 :- \+ \+ ( repeat, write('input='), read(X), \+ ( X \== end ) ).
(証明終了までに入力されるXはすべて X \== end を満たす、わけでもない、ということを証明する)
324:デフォルトの名無しさん
09/06/25 20:30:01
なんか「生成検査」という言葉の使い方を間違えた気がするw
325:デフォルトの名無しさん
09/06/25 20:49:31
<実行結果>
split(5, [3,7,2,6,5,8], Before, After).
Before = [3,2,5] (5と同じか、小さい数のリスト)
After = [7,6,8] (5より大きい数のリスト)
となるのを作りたいのですがどうしたら良いのでしょうか?
326:デフォルトの名無しさん
09/06/25 20:50:19
/*停止条件*/
split([],[],[]).
split([A],[A],[]).
/*再帰条件*/
/*入力した変数Nより小さい場合 */
split([A,B|R],[A|T1],[B|T2]) :-
A >= B,
split(R,[A|T1],T2).
/* 入力した変数Nより大きい場合 */
split([A,B|R],[A|T1],[B|T2]) :-
A < B,
split(R,T1,[B|T2]). と作ってみたのですが・・・・。だめでした
327:デフォルトの名無しさん
09/06/25 21:05:00
引数の数が違うようですが
328:デフォルトの名無しさん
09/06/25 21:10:09
>>325-326
swi-prologで作ってみました。
参考にしてみてください。
split(_, [], [], []).
split(X, [H|L], [H|B], A) :-
H =< X,
!,
split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
329:デフォルトの名無しさん
09/06/25 21:11:22
すみません。見づらいので、張りなおします。
split(X, [], [], []).
split(X, [H|L], [H|B], A) :-
H =< X,
!,
split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
330:デフォルトの名無しさん
09/06/25 21:11:46
split(5,[3, ...
この辺を見て「3 =< 5」、つまり3は小さい側だな、と判断
split(5,[3, ...],[3, ...],[...])
ここまで決まる
split(N,[H|L1],[H|Before1],After) :- H =< N, ...
変数に置き換えて考える
こんな感じでは
331:デフォルトの名無しさん
09/06/25 23:36:42
>>327さん
ご指摘ありがとうございます
>>328-330さん
split(X, [], [], []).
split(X, [H|L], [H|B], A) :-
H =< X,
!,
split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
と入れたら
* [X] - singleton variables in user:split/4
* Approximate lines: 1-2, file: 'と出てしまったのですがどうすればいいのでしょうか?
332:デフォルトの名無しさん
09/06/25 23:38:11
split(X, [], [], []).ではXを空リスト3つに分けているのですか?
否定(?)を利用してますがなくても問題ないですよね?
連レスすいません
333:328
09/06/26 00:27:34
>>331-332
ちょうど書き込み時間が重なったので、勘違いされたと思いますが、
>>328-329は私ですが、>>330は別の方の書き込みです。
splitの仕様は、>>325に合わせました。
* [X] - singleton variablesの警告は、1行目のsplitにおいて、左辺にあるXが
右辺で使われていませんよ、という意味です。
split(_, [], [], [])と書き直せば、この警告は消えると思います。
カットは必須ではありませんが、カットを使わない場合、
>>326のA>=B、A<Bのように背反となる条件を各々splitの定義に含める
必要があります。
334:デフォルトの名無しさん
09/06/26 01:22:10
>>332
まだ問題の理解が十分ではないようですね。その段階で>>325のように、
「~というものを作りたいのですが」という言い方をするのはよくないと思います。
335:デフォルトの名無しさん
09/06/26 01:26:37
スミマセン、なんか言い過ぎましたw
そんなによくなくもないかもしれません
336:デフォルトの名無しさん
09/06/26 04:52:07
>>332
なかなか、よい発想をされますね。[]の分割問題ですね。これは、
あなたが、「 []を分割してBefore=[] After=[] なんて許さん。偽だ。」と
考えるなら、この述語は
split(X,[H],[H],[]) :- H=<X,!.
split(X,[H],[],[H]) :- H>X,!.
split(X,[H|L],[H|A],B) :- H=<X,split(X,L,A,B).
split(X,[H|L],A,[H|B]) :- H>X,split(X,L,A,B).
となります。普通私たちは、
?- split(5,[],A,B).
A = [],
B = []
が好ましい仕様だと思い込んでいるのですが、
少々Prolog呆けしているのかも知れません。
337:デフォルトの名無しさん
09/06/26 05:09:00
私たちって言うな
338:デフォルトの名無しさん
09/06/26 05:23:14
>>337
リストの再帰で、
[]になった場合の検証から入るプログラマって
そんなにいるかな。まあ、時間的には一瞬だけど。
もし、変数が来たらは、常に注意を張りながらだと思うけど。
339:デフォルトの名無しさん
09/06/26 05:37:18
>>338
宣言的でありたいというのがある。
できることなら停止節なんて省略したい。
こういう姿勢だから、考えないね。
340:デフォルトの名無しさん
09/06/26 05:47:30
微妙すぎる。>>332は明確に否定するのが親切だと思うけど、
そもそもどこかの宿題を乱暴に投げているだけような気配がするw
341:デフォルトの名無しさん
09/06/26 06:01:59
>>339
それだ! 停止節省略指示子の導入。
帰納論理がそこそこ行けるんだったら、
それくらい処理系にやらせたっていいじゃないか。
342:デフォルトの名無しさん
09/06/26 18:33:08
途中まで作って、トレースモードにして、正解を問い合わせればいい
| ?-split(5,[3,7,2,6,5,8],[3,2,5],[7,6,8]).
+ (1) 1 Call: split(5,[3,7,2,6,5,8],[3,2,5],[7,6,8]) ?l
+ (4) 2 Call: split(5,[7,2,6,5,8],[2,5],[7,6,8]) ?l
+ (5) 3 Call: split(5,[2,6,5,8],[2,5],[6,8]) ?l
+ (8) 4 Call: split(5,[6,5,8],[5],[6,8]) ?l
+ (9) 5 Call: split(5,[5,8],[5],[8]) ?l
+ (12) 6 Call: split(5,[8],[],[8]) ?l
+ (13) 7 Call: split(5,[],[],[]) ?l
+ (13) 7 Fail: split(5,[],[],[]) ?l
+ (12) 6 Fail: split(5,[8],[],[8]) ?l