Prologでまったり Part4

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2009/02/25(水) 20:27:17
P-99: Ninety-Nine Prolog Problems
https://prof.ti.bfh.ch/hew1/informatik3/prolog/p-99/
3デフォルトの名無しさん:2009/02/25(水) 20:32:21
新スレおめでとうございます。
4デフォルトの名無しさん:2009/02/25(水) 22:16:07
5デフォルトの名無しさん:2009/02/26(木) 00:35:26
乙( >>1 ).
6デフォルトの名無しさん:2009/02/26(木) 01:30:05
7デフォルトの名無しさん:2009/03/05(木) 07:55:28
まったりしてきた
8デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/03/07(土) 12:00:16
sameという述語の定義は
same(X,X).
です。
10デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/03/08(日) 02:43:41
「重複しない」という事の意味が漏れには分からない。というか課題の定義が曖昧だと思う。

述語livesNear/2の意味は「Person1の近場にPerson2が住んでいる」だよね?
もしそうなら「Aさんの近場にBさんが...」と「Bさんの近場にAさんが...」という
「重複した」結果こそ正しいと思う。両者の間には双方向な関連があるのだから。
もし問い合わせが livesNear('Aさん', P) あるいは livesNear('Bさん', P) だとしたら、
「重複しない」という述語定義に対して、>>8 はどんな結果を期待するのだろうか。
12デフォルトの名無しさん:2009/03/08(日) 16:24:31
>>10
どうもありがとうございます。数字と対応づけしないといけないんですか。

>>11
主として、これは疑問文として使用します。
叙述としては、確かに(Aさん、Bさん)、(Bさん、Aさん)とは
同格として扱うべきですが、疑問文として、
「この住所録の中の人物の中で、お互いに近くに住んでいる人たちは、
誰と誰ですか?」
という問の回答として、「AさんとBさん、あと、BさんとAさんです。」は、
不自然です。
13デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/03/09(月) 14:40:11
この問題は?
例 2.2 7つの部屋がある。その内の4つの部屋を4人のプログラマの事務
室として割当て、残りの3つの部屋をコンピュータ端末機器を設置する
部屋としたい。このような割当て方は7×6×5×4=840通りある。
『組合せ構造とグラフ理論入門』C.L.リュー著 成瀬弘、秋山仁共訳 マグロウヒル好学社 p42
より、
さて、この840通りをすべて数え上げる非決定性述語を定義せよ。
17デフォルトの名無しさん:2009/03/09(月) 18:05:15
処理系に依存する問題をひとつ。
「千人万首 ―よよのうたびと―」という高名な和歌サイト
http://www.asahi-net.or.jp/~SG2H-YMST/yamatouta/sennin.html
から情報を引き出し、
第一引数に作者名を与えると、第二引数にその作者の歌が
一首づつとりだせる述語 千人万首/2 を定義しなさい。
ただし、取り出すのは歌本体のみで題や解説、類歌、本歌などは
削ぎ落としてください。
18デフォルトの名無しさん:2009/03/09(月) 19:10:48
まあ、こんな感じで「Prolog述語 1000Tips」を目指します。
19デフォルトの名無しさん:2009/03/09(月) 20:16:58
>>18
1000分野、10000Tips行きましょう。
20デフォルトの名無しさん:2009/03/10(火) 05:42:50
1/10000Tips
どんな情報源でもよいから、そらで覚えていれば勿論それでよいから、
和暦、西暦変換述語を作れ。
21デフォルトの名無しさん:2009/03/10(火) 05:45:04
1/10000Tips
22デフォルトの名無しさん:2009/03/10(火) 05:48:32
1/10000Tips
ジョギングシュミレーター(サイト)を参考にして、
体重、走行距離、タイムから、消費エネルギーと脂肪燃焼量を得る述語を
定義せよ。
23デフォルトの名無しさん:2009/03/10(火) 06:00:11
>>18->>22
出典の記載ルール等を決めておかないといけない。
オブジェクト指向的な枠組みがないから、
述語で定義するとして、標準的な述語構成例が欲しい。
24デフォルトの名無しさん:2009/03/10(火) 06:10:29
それから、問題を出すときは、
1/10000Tips (解答準備済み/解答準備未了)
等のコメントを入れて、未解決問題がスレに大量に残ることを避けよう。
解答準備済みで出題した人は様子を見て、良いタイミングで模範?解答を
載せるべし。
25デフォルトの名無しさん:2009/03/10(火) 07:28:55
>>23
述語定義して公開するなると、著作権の問題が出てきます。
Prologの書籍50冊分の巻末参考文献を全部sortして述語として
公開するとする。私はその文献の内2%くらいしか目を通した
ことがない。それでも誰も文句をいわないだろう。ところが、
古川康一著「Prolog入門」の参考文献だけを述語定義して載せた
場合はどうなのか?これは問題になるかな。
26デフォルトの名無しさん:2009/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リクエストへのレスポンスで用い
ることができるコードで、新しいリソースが作成されて利用可能であることを示します')
.
<以下略>
この述語の場合は、http://www.amazon.co.jp/dp/4894710412/ からの
全コピーであることは明らかです。実際、Prolog述語はこういうのだらけ。
前スレにちょっとだけ著作権の話がでたと思うけど書物を写し取った述語の
公開できるのはどの範囲か。Webサイトの場合はどうか。
27デフォルトの名無しさん:2009/03/11(水) 07:14:52
ちょっと話が逸れますが、>>26の場合は10年近く前に本を傍らに置いて
タイプした。ところが今はこのくらいの情報はWebから入手できる。
そういう変化は、Prolog言語の意味をも決定的に変えたと思う。以前は
単位節データベースとルール節はある程度バランスを保っていたが、
現在では、99%以上が単位節、しかも>>26に見られるように、将来の利用に
含みを残して、原文そのままを引数に取り込む。Prologの解説書で示される
開発手法やプログラミング事例とは全く違う。10000Tipsの狙いは、そういう
ことをはっきり示すことでもあります。
28デフォルトの名無しさん:2009/03/11(水) 08:00:34
>>27
10000Tipsにしても、ここよりも日本Prolog協会のメーリングリストで提起する方が
相応しい課題ではないかな。
29デフォルトの名無しさん:2009/03/11(水) 17:35:35
>>27
徹底して非形式的なデータ蒐集に努めるというのは面白いかも。
例えば、述語名が衝突したらその時点で何か解決策を捜す。
30デフォルトの名無しさん:2009/03/13(金) 11:16:14
>>27
以前はPrologプログラムの開発時間はプログラマのタイプ時間に
近似していたのだが、最近は検索ルールを書く時間に近くなった
ことは確かだな。
31デフォルトの名無しさん:2009/03/13(金) 11:34:02
Prologって結局、「とまり木言語」なのかも知れない。
最終的にはデータベースやXMLファイルとして振り分けられるでしょ。
考えてみればAI言語を標榜していた頃からずっとそうじゃないか。
32デフォルトの名無しさん:2009/03/14(土) 05:55:59
>>27
ルール節って書かない?
33デフォルトの名無しさん:2009/03/15(日) 06:04:24
>>32
書かない。負節は書くw
このスレでも強調されているように、結局Prologプログラミングは
member/2,append/3,findall/3の繰り返し。少し前に出てきた組合せ系
の述語などがライブラリ化していると、もうほとんどルールを書く
必要はない。負節のログに頭部を付加してライブラリに加えることは
ある。
以前は**コードなどの処理も書いたから、1342という口座番号を
'0001342'にするヘッドゼロサプライ処理などが文字列からparse_atom
する度に発生した。それで手続的決まり文句も随分と書いたが、10年
くらいまえに書き尽くした。
34デフォルトの名無しさん:2009/03/15(日) 06:46:09
自動仕訳ルールの追加というようなことは日常的に発生するが、それも
銀行口座の明細から取得するような場合は、すでに形式化しているから、
単位節一節の追加だし、摘要的な記述からの場合もS,V,Oが確定すれば
ほぼ決定的になる。この場合、本体に2副目標を持つルール節を一つ追加。
35デフォルトの名無しさん:2009/03/15(日) 07:15:04
ごめん。本体に1副目標を持つルール節一つを追加。でした。
36デフォルトの名無しさん:2009/03/15(日) 17:48:02
>>33
むかしエキスパートシステムに書いたような簡単なif-thenルールなら、
今でも書くと思うけど。subgoalが1-3個くらいのやつ。
3735:2009/03/16(月) 04:15:51
Oが複数でてくることもあり、やはり本体1副目標では決まらず
2~3副目標になることも多いようです。
38デフォルトの名無しさん:2009/03/17(火) 07:43:36
頭痛がしてきた
39デフォルトの名無しさん:2009/03/17(火) 07:45:42
1/10000Tips

40デフォルトの名無しさん:2009/03/17(火) 08:57:53
一向に中身のあるTipは現れないw
初心者のための言語スレに誤爆してしまった
41デフォルトの名無しさん:2009/03/22(日) 05:44:26
本でも読めば。
42デフォルトの名無しさん:2009/03/22(日) 10:10:04
入門者です。前スレにでていたPrologで学ぶAIプログラミングを買ってみました。
二章のLHKあたりで既に挫折しそう…
43デフォルトの名無しさん:2009/03/27(金) 08:10:39
うおー規制解除

http://kimiyasu-arai.at.webry.info/200801/article_1.html
> 下記はLispによるProlog処理系の例である。

動かしてないけど、なんか変数の扱いがすごくあやしい。。
44デフォルトの名無しさん:2009/03/27(金) 08:15:04
>>8
> 重複しないようにするにはどうすればいいでしょうか。

最初見たとき
livesNear(P,Q), P @< Q
と書いて「いや、それはちょっと…」という反応を見たいと思ったのに規制のせいで
45デフォルトの名無しさん:2009/03/27(金) 09:56:29
>>44
ならほど。考えも及ばなかったwww
46デフォルトの名無しさん:2009/03/27(金) 10:02:19
なるほど。でした・・・
47デフォルトの名無しさん:2009/03/28(土) 14:11:05
>>44 この話題から外れるけれど・・
アトム(文字列)の大小比較は、集約(鍵)問題を扱ったとき場合を以外には、
実務的にあまり使う機会はなかったのですが、最近、古庄普二著 東大総研刊
「汎用超高速データベース処理技術 多様なデータ構造と超並列への普遍的アプローチ RealTimeVIDP」
を読んでPrologのデータ構造の中に値の順序性をもう少し取り入れる余地は
ないかなど気になっていた。
48デフォルトの名無しさん:2009/03/28(土) 14:16:39
>>43
どんな感じであやしい?
4947:2009/03/28(土) 14:59:44
古庄晋二著でした
50デフォルトの名無しさん:2009/03/28(土) 18:23:58
>>48
はっきり変だと思えるのは?_の扱い。関数ab、fb(束縛の追加と検索?)あたりでは
無名変数もどきというか、単一化されない扱いになってるんだけど、
実際には、?xなどのローカルな変数名をgensymで作ったグローバルな名前に
書き換えるとき、何も特別扱いされていないから、意味がないんじゃないかっていう。
51デフォルトの名無しさん:2009/04/21(火) 10:14:03
そろそろSWI-Prolog Reference Manual の邦訳が欲しくなってきた。
SWI-Prologの動きが活発になってきて、参照機会が急に増えた。
こうなってくると、常に楽に参照できる「ベース」が欲しい。
52デフォルトの名無しさん:2009/05/01(金) 01:39:45
精神力が異常。
53デフォルトの名無しさん:2009/05/07(木) 08:08:13
prologで同じ解を出さないようにするにはどうするの?誰か教えて><
54デフォルトの名無しさん:2009/05/07(木) 08:14:00
>>53
>>8 以下を読んでみてください。
55デフォルトの名無しさん:2009/05/08(金) 00:05:44
Prolog用語を整理しかけたら、変なことに気づいた。

ISO、JISではどうやら、
'' は null atom(空アトム)
[] は empty list(空リスト)
らしい。

null と empty の使い分けもまあ微妙だけど、もし
http://www.weblio.jp/category/computer/prolg
が五十音順だとすると、ひょっとして
空(から)アトム
空(くう)リスト
と読み分けるんだろうか、という疑問が湧いたw
56デフォルトの名無しさん:2009/05/08(金) 12:05:58
ISLISP (JIS X 3012) の訳語対照表では
「く」の位置に
空リスト empty list
空リスト null
とあるな。

ISLISP では null と empty list が同一視されるから、このような訳しかたを
選んだようだが。
57デフォルトの名無しさん:2009/05/09(土) 10:54:13
prologでちょっと複雑なことさせようとするとプログラミングするのがかなり難しい><
これも慣れると簡単になるのだろうか
58デフォルトの名無しさん:2009/05/10(日) 08:23:49
>>57
どのような部分で難しいと感じるか、教えてください。
できればソースプログラムを見せてください。
59デフォルトの名無しさん:2009/05/10(日) 10:10:05
>>58
ソートの処理をさせるときとか
60デフォルトの名無しさん:2009/05/10(日) 13:26:44
>>59
ソートはちょっと違うかも知れないけど・・・。
Prologのプログラミングはただひたすら、appendだけで
プログラムを書くつもりで行けばよい。
61デフォルトの名無しさん:2009/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でよい。
6260:2009/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). は
... <以下略>
が正しい順序でした。
6360:2009/05/11(月) 05:55:25
>>62さん 60は私ですw
6460:2009/05/11(月) 06:09:03
どこまで、副目標としてappend/3を使うか、それとも
別述語を定義して使うのかは指針があるわけでもなく、
迷うけどね。
65デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/12(火) 02:51:24
ロジック プログラミング言語「デカルト言語」の開発者に聞く - SourceForge.JP Magazine
http://sourceforge.jp/magazine/09/05/11/0417217

さあ聞こうじゃないか
もちろんまだ読んでないがw
67デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/12(火) 15:33:37
>>67
http://svn.sourceforge.jp/view/trunk/descartes/configure.in?view=log&root=descartes
> 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デフォルトの名無しさん:2009/05/12(火) 15:34:48
と、思わず一つ勉強になっちゃったぜ
えへへ
70デフォルトの名無しさん:2009/05/12(火) 15:58:20
これこれ
http://www.gnu.org/software/hello/manual/autoconf/Libraries.html
> Test whether the library library is available
> by trying to link a test program
> that calls function function with the library.
71デフォルトの名無しさん:2009/05/12(火) 16:03:55
>>67
結論としては、作者にこのスレを教えてあげるとかw
72デフォルトの名無しさん:2009/05/12(火) 18:27:23
>>67
ちょっとソース見たけど、ncursesがなかった場合に対応できるような感じではなかったから、
どのみちncursesを入れなきゃダメなんだろうね
73デフォルトの名無しさん:2009/05/13(水) 10:25:12
>>72
ncurses.hは Kbuntu Ubuntu にはなくて、私がすぐ手に入るのは、
FC5のncurses.hディレクトリなんだけど、これをコピーすれぱいいのかな?
やってみよう。
74デフォルトの名無しさん:2009/05/13(水) 14:17:57
ディレクトリはncurses.h ではなくてncursesだった。続いて、
readlineディレクトリが無いときた。これもコピーと・・・
75デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/13(水) 14:47:45
何か無茶苦茶やってませんかw
とりあえず綴りは「Kbuntu」じゃなくて「Kubuntu」みたいですね
使ったことないけど
http://ubuntuforums.org/showthread.php?t=296224
> Re: install curses/ncurses
> sudo apt-get install build-essentials
> sudo apt-get install libncurses5-dev
こんな情報が
77デフォルトの名無しさん:2009/05/13(水) 14:49:52
てゆーかもうさすがにスレ違いかと
78デフォルトの名無しさん:2009/05/13(水) 16:01:17
>>77
デカルトさんまたねw
79デフォルトの名無しさん:2009/05/13(水) 16:32:46
http://slashdot.jp/interview/09/05/11/0445205.shtml
こっちのページの方が面白そうだよ
作者も降臨してるし
80デフォルトの名無しさん:2009/05/13(水) 17:19:06
デカルト言語のキーワードの一つは「オレオレ」かな
81デフォルトの名無しさん:2009/05/13(水) 17:20:16
オレ惟ふ故にオレオレ
82デフォルトの名無しさん:2009/05/14(木) 20:15:19
ttp://lists.sourceforge.jp/mailman/archives/descartes-developer/2009-May/000012.html
> 次のPrologのプログラムはDecartes
> ではどのように書けばよいのでしょうか。
>
> factorial(0,1).
(以下略)

http://sourceforge.jp/projects/descartes/wiki/ManGrammar
ここによると、
・is/2にあたるのは、<let #変数名 = 式>、<#変数名 = 式>など
・(<)/2など、数値の関係を与える式の評価は、<compare 式>など
・ただし、扱う数値の型によって述語を使い分ける必要がある(letf、letc、comparef)
みたいな感じ?要はLispで適当にマクロを組んだ感じかな
83デフォルトの名無しさん:2009/05/14(木) 20:23:39
しばらく読んでみたけど、結局、
http://sourceforge.jp/projects/descartes/wiki/ManBuiltin
X+b = a+Y
という単純なマッチングを普通に書く方法が見つからないww
84デフォルトの名無しさん:2009/05/17(日) 08:29:52
:- op(850,xfx,>>).

?- もう少し本格的な生成文法でなんとかならないの >>76.
8584:2009/05/17(日) 08:31:59
誤爆です。こっちへ書くつもりだった。
http://pc12.2ch.net/test/read.cgi/tech/1179157784/
86デフォルトの名無しさん:2009/05/17(日) 09:13:13
>>85
閑してますねw
87デフォルトの名無しさん:2009/05/18(月) 19:50:12
学生さん!
どなたかこの本、邦訳してくださらないか。
"Building Expert Systems in Prolog" Dennis Merritt著
1989年 Springer-Verlag ISBN 0-387-97016-9
88デフォルトの名無しさん:2009/05/19(火) 00:11:34
>>87
エキスパートシステムって、実用化までたどり着けなかったシステムと
聞いてますけど、いまさら翻訳する意味あるんですか。
89デフォルトの名無しさん:2009/05/19(火) 02:38:11
駅スパアトなら使ってるけど?
90デフォルトの名無しさん:2009/05/19(火) 04:35:33
>>88
金字塔的な書籍は何でも読みたい。
ロジカルアプローチは世界的に再評価の時期に入っているから、
読み直しの要求は出てくるよ。
91デフォルトの名無しさん:2009/05/19(火) 05:19:32
>>88
エキスパートシステムは漸く事業化の時期に来たのではないか。
20年(一世代)待ったということになる。
エージェントアプローチ + エキスパートシステムでリプレース
できるアプリケーションは無限にあるよ。
92デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/19(火) 09:32:23
三重野博司著の「人事情報エキスパートシステム」という本に210くらいの
質問事例が載っています。ほとんど揺らぎとでも表現したいくらいの微妙な
差異のif-thenルールを積み重ねているのですが大変参考になりました。
それで感じたのはエキスパートシステムを能率よく構築するためには
質問文やif-thenルールの自動生成が欠かせないのではないか、という
ことでした。
9493:2009/05/19(火) 09:49:21
210くらいのif-thenルールが載っています。 でした・・
95デフォルトの名無しさん:2009/05/19(火) 09:51:34
オントロジーは?
96デフォルトの名無しさん:2009/05/19(火) 10:17:05
オントロロロギッタンディスカー
97デフォルトの名無しさん:2009/05/19(火) 23:45:46
http://blog.livedoor.jp/heitatta/archives/65113337.html
> もともと大学で Lisp を少しやっていたので、() をカッコ、コッカと読む習慣は持っているのだが、
> [] をギッコン、ガッコンと読まれて面喰らった。そーか、そう読むのか。

mjd?
98デフォルトの名無しさん:2009/05/20(水) 01:04:31
99デフォルトの名無しさん:2009/05/20(水) 05:01:56
>>93
最初に言語のクラスを定義しておいて、組み合わせで
文を生成していくというようなことかな。
エキスパートシステムにそういう部分が必須であると
いう意味ですか?
言語クラスの定義、辞書の定義まで、すべてのアプリ
ケーションのリプレースに必要とまでの主張だとすると
多少はオントロジーとも無関係ではないかもしれないw
100デフォルトの名無しさん:2009/05/20(水) 05:29:18
Prologって今から思えても意味ありますか?
特技みたいに思ってもらえたりするでしょうか?
101デフォルトの名無しさん:2009/05/20(水) 05:40:22
>>100
思えても→覚えても
でした
102デフォルトの名無しさん:2009/05/20(水) 07:14:59
>>100
これからがPrologの時代です。
103デフォルトの名無しさん:2009/05/20(水) 07:23:08
>>100
私がPrologを使うのは生産性が高いからですよ。
それ以外のことは、まあどうでもいいです。
104デフォルトの名無しさん:2009/05/20(水) 09:09:18
>>100
あなたが、今プログラミングをしたことのない60才だとします。
"Prolog以外"のプログラム言語をこれから覚えて使いこなすのは
不可能といっていいでしょう。これが答えです。
105デフォルトの名無しさん:2009/05/20(水) 09:47:05
Prolog始まっ・・・そんなものはとっくに始まってるさ
106デフォルトの名無しさん:2009/05/20(水) 10:02:14
企業経営という観点からいうと、
反射的にコストを考えてしまう社員は要らない。反利速的な経営の
基礎となる情報システムは記号処理言語を基礎に上層を築き直さな
くてはならない。Prologをアセンブラとして使う。
is/2には死んでもらうw
107デフォルトの名無しさん:2009/05/20(水) 10:22:46
>>106
経路問題だけで業務ソフト作るのは難しいよw
108デフォルトの名無しさん:2009/05/20(水) 10:23:52
109デフォルトの名無しさん:2009/05/20(水) 10:28:06
リンクだけ張っても仕方ない。
110デフォルトの名無しさん:2009/05/20(水) 14:21:04
SWI-PrologでIF/Prologのparse_atom/2のような事を行いたいのですが、
どのようにすれば良いかご存知の方いらっしゃいませんか。
111110:2009/05/20(水) 14:29:57
補足です。
やろうとしている(というか移植しようとしている)内容を簡単に書くと
do_all:-
(rule->
112デフォルトの名無しさん:2009/05/20(水) 14:30:21
>>110
?- atom_to_term('append([1],[2],L).',X,Y).

X = append([1], [2], _G261)
Y = ['L'=_G261]
113110:2009/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デフォルトの名無しさん:2009/05/20(水) 14:44:17
>>113
create_rule/2 でなぜ直接Rを生成しないのか疑問ですが。
115110:2009/05/20(水) 14:45:05
>>112さま
できました! ありがとうございます!
116110:2009/05/20(水) 14:54:25
>>114さま
すいません、直接ルールを生成するというのはどのようなことなのでしょうか。
今のところは文字列処理でルール文を生成しています。
ほとんど独学なのでPrologの事は知っているようでよくわからなかったりします・・
117デフォルトの名無しさん:2009/05/20(水) 15:36:16
data(筋肉は使い過ぎると傷害を起こす) だとします。
この文を解析して 筋肉,使い過ぎ,傷害を起こす という要素を得て、
?- ... create_rule(_文,'筋肉(使い過ぎ,障害を起こす)'), ...
生成できたのだとすると,
?- ... create_rule(_文,筋肉(使い過ぎ,障害を起こす)), ...
を直接生成できるのではないか。
118110:2009/05/20(水) 17:51:16
>>117さま
string(atom)で返しているのは、assert以外に、ルール文をファイル保存等、
テキスト処理を行いたいため、そのようになっています。

parse_atom/2には直接関係無いため、記述を省略しておりました。
わかりにくくて申し訳ありません。

ruleの直接生成については、ご指摘の通りだと思います。
ただ、create_ruleでは複雑な処理を行っているのので、
今回は無理をせずにatom_to_termで行きたいと思います。

ご指摘ありがとうございました。
119デフォルトの名無しさん:2009/05/20(水) 18:02:30
>>118
そうでしょうね。項とともにテキストの生成を意識することは
よい設計だと思います。あなたはご存知だと思いますが、
ruleの生成で私が書いた述語らしからぬ筋肉という関数の部分に
変数がくる、つまりその文によってここを変化させたい場合は、
functor/3,arg/3 または (=..)/2 を使います。メタ述語ですね。
120デフォルトの名無しさん:2009/05/20(水) 18:43:14
>>106
反利速的な経営ってどういう意味?
121デフォルトの名無しさん:2009/05/20(水) 19:45:17
>>120
利速的とは、売上、利益の伸び率などが今どういう傾向に
微分的に変化しつつあるかについて、もっとも注視すること。
反利速的ですから、計量的微分的な量りから遠ざかる、
そういうことに囚われない経営態度。
122デフォルトの名無しさん:2009/05/21(木) 00:59:44
初心者のプログラミング言語ガイドスレで見て来ました。
ーー文化と実践ーーっていう本が薦められていて探してみようと思います。
処理系はSWI-Prologで良いですか?
というか、処理系によって言語仕様(でいいのかな)とかが違ったりするのでしょうか?
123デフォルトの名無しさん:2009/05/21(木) 01:08:27
ttp://www.geocities.jp/m_hiroi/prolog/prolog01.html
ここやってるんですけど、
?- like(taro, coffee).
YES
ってなるはずが自分の場合は
?- like(taro, coffee).
true.
と表示されるんですけど何ででしょうか?
SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.64)使用しています。
初心者質問申し訳ないです。
124デフォルトの名無しさん:2009/05/21(木) 04:02:55
>>122
すみません。--文化とその実践-- でした。あちらのスレでも訂正をしておきました。
処理系はSWI-Prologで十分でしょう。Prologは残念ながら、処理系によっての差が
かなりあります。しかし、1995年にISO規格が制定されて、少なくとも各処理系が
この述語群は共通にサポートする方向ですから、できるだけこの規格に沿った述語を
選択して利用する方がよいでしょう。
125デフォルトの名無しさん:2009/05/21(木) 04:11:05
>>123
ここの前スレで紹介があったのですが、
SWI-Prologは比較的最近のバージョンからYES ではなく true. と
表示されるようになりました。trueの後のピリオドにも注目です。
これで、実行ログが完全に項としてreadできるようになりました。
一時的な思いつきなのか永久にこの仕様になったのか分からない
のですが、多くのPrologプログラマは好意的に受け止めています。
126デフォルトの名無しさん:2009/05/21(木) 11:54:03
この言語将来性なさそう・・・大丈夫か?
127デフォルトの名無しさん:2009/05/21(木) 12:06:15
>>126
どういう理由で?
128デフォルトの名無しさん:2009/05/21(木) 12:14:26
>>126ほとんどのプログラム言語が死に絶えた時に最期まで生き残っているのが論理型言語なのさ。Prologであるとは言わないけど。
129デフォルトの名無しさん:2009/05/21(木) 12:28:22
>>128
平行論理型。それが機械語。
130デフォルトの名無しさん:2009/05/21(木) 12:32:58
機械語なんていわれるとピンとこないなぁ。
131デフォルトの名無しさん:2009/05/21(木) 14:21:54
James L. Hein;Prolog Experiments in Discrete Mathematics,Logic, and Computability

が公開されてるのをみつけた。
132デフォルトの名無しさん:2009/05/21(木) 16:11:33
>>129
何を言いたいのかよくわからないけどせめて「並行」と書いてくれ。
133デフォルトの名無しさん:2009/05/21(木) 16:21:10
第五世代ではKL1が機械語という位置づけだったんだっけ?
134デフォルトの名無しさん:2009/05/21(木) 17:29:47
このスレってさ、まったりとか描いてる割には内容が高度すぎて読む気に慣れねーわ。
つーか、読んでも意味ワカンネーし。
やる気無くなるし。
135デフォルトの名無しさん:2009/05/21(木) 17:37:06
狙いとしてはどうかしらないけど、プロトタイプシステムとやらではちゃんとコンパイルしてるみたいよ
http://www.icot.or.jp/AITEC/Publications/TRTM/2/tm0875/003.html
PrologのWAMにあたるKL1-Bといったものもあるらしい
136デフォルトの名無しさん:2009/05/21(木) 17:40:21
>>134
すまん、漏れが親しみやすいトリビア集めをさぼっているばかりに…
137デフォルトの名無しさん:2009/05/21(木) 17:48:51
「WAMにあたる」じゃないな
WAMコード、WAMの機械語にあたる、か
138デフォルトの名無しさん:2009/05/21(木) 18:11:16
平行論理世界へようこそ
139デフォルトの名無しさん:2009/05/21(木) 18:12:05
つーことは>>129の「それが機械語」は言い過ぎかな
WAMの命令セットが論理型言語と言えるならKL1-Bも並行論理型言語で
それが(仮想機械の)機械語と言えるかもしれんが
140デフォルトの名無しさん:2009/05/21(木) 19:47:50
将来ロボットが出現するだろうから、それらをプログラムする言語はPrologになるってことか。
それなら納得した。
141デフォルトの名無しさん:2009/05/21(木) 20:52:38
>>140
20世紀は石油。
21世紀はロボットの世紀だからね。
142デフォルトの名無しさん:2009/05/21(木) 20:55:43
当面、情報家電のUIはPrologインタプリタでなくちゃいけないのだが・・・
143デフォルトの名無しさん:2009/05/21(木) 21:01:04
>>142
JAVAでもしょうがないとは思うがPrologの項をparse_atomできる
関数をライブラリに持っていて欲しい。
144デフォルトの名無しさん:2009/05/21(木) 21:52:21
>>134
だから第五世代計画は失敗した、という面もある。
145デフォルトの名無しさん:2009/05/21(木) 22:12:17
この言語でプログラミングやるんだったらPython始めた方が良いよ
146デフォルトの名無しさん:2009/05/21(木) 22:17:40
じゃあ君はPythonやればいい。
147デフォルトの名無しさん:2009/05/21(木) 23:34:31
僕は、 KL-1 が素晴らしいと思ったので、今、勉強中です。

148デフォルトの名無しさん:2009/05/22(金) 00:55:07
PythonとPrologって、主にどうちがうんですか?
149デフォルトの名無しさん:2009/05/22(金) 01:36:28
>>148
Pで始まるところ以外全部
150デフォルトの名無しさん:2009/05/22(金) 02:39:04
Pythonってjavaの代わりって感じ?
151Prolog工作員:2009/05/22(金) 06:57:46
>>148
http://pc12.2ch.net/test/read.cgi/tech/1242876647/3

Pythonの解答と見較べれば、まったく違うことがわかる。
152デフォルトの名無しさん:2009/05/23(土) 00:02:52
>>124
その本、あちらのスレでは在庫無しと書いてらっしゃいましたが、
まだ流通あるようですよ。ヤフオクの7アンドYでポチりました。
153デフォルトの名無しさん:2009/05/23(土) 11:39:14
>>152
ありがとう。まだ大丈夫でしたか。
私は用心に去年二冊目を買いました。人に貸せるように。
Prologの本は昨年の赤間さんの本以外はいつ絶版になっても
しかたがないというのが多くて・・・
154デフォルトの名無しさん:2009/05/24(日) 09:40:24
>>95
突然、ミケランジェロがでてきたような感じなんだよね。
155デフォルトの名無しさん:2009/05/24(日) 21:14:18
最初に読んだPrologの本が中島秀之先生の本だった影響で
今でもProlog/KRに愛着があります。GCLで動かしています。
S式が扱えるPrologが好きです。
156デフォルトの名無しさん:2009/05/24(日) 22:28:37
157デフォルトの名無しさん:2009/05/24(日) 23:02:41
>>153
今日届きました。最初の連言標準形・・・あたりから既に付いていけてない・・・T_T
158デフォルトの名無しさん:2009/05/25(月) 11:41:23
prologで微分する述語を作ったんだが x^(-1) を微分すると -1*x^ -2*1 と括弧が外れてしまう
せめて -1*x^(-2)*1 くらいは括弧が欲しい
どうやら x^ -1 と単一化されるのが原因らしい 微分述語を定義するときに括弧をつけても外されてしまう
これって回避する方法って無いの?
159デフォルトの名無しさん:2009/05/25(月) 15:50:50
>>158
> どうやら x^ -1 と単一化されるのが原因らしい

このへんがちょっとよくわからない
160デフォルトの名無しさん:2009/05/25(月) 18:26:57
>>159
例えば test((A),((A))). という述語を定義しても listing. すると test(A,A). になります
括弧を記号と考えて処理する方法は無いの?
161デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/25(月) 20:17:18
>>160
えーとつまり、括弧をデータとして扱うことの問題点は感じてもらえるのでは
163デフォルトの名無しさん:2009/05/25(月) 22:06:50
再起処理で一番上流だけを求めるってできる?
164デフォルトの名無しさん:2009/05/26(火) 07:41:44
>>163
一番上流というと?
165デフォルトの名無しさん:2009/05/26(火) 07:59:25
>>164
up(a,b).up(b,c),up(c,d).up(d,e).のとき
top(X,e).と聞くとX=aだけを返すようなプログラムができる?
166デフォルトの名無しさん:2009/05/26(火) 08:28:35
後戻りを再起処理と言っていたのかw
エスパーの勉強になった
167166:2009/05/26(火) 08:31:58
おっとすまん、勘違いだったようだ
168166:2009/05/26(火) 08:37:29
>>165
aの特徴は、\+ up(_,a)というところだよね
そのへんが切り口なのでは
169デフォルトの名無しさん:2009/05/26(火) 08:48:17
>>165
top(Top,End) :- up(A,End),top(Top,A).
top(Top,Top) :- up(Top,_).
170169:2009/05/26(火) 08:51:19
なるほど、これだとだめなのか。
171169:2009/05/26(火) 08:53:18
top(Top,End) :- up(A,End),top(Top,A),!.
top(Top,Top) :- up(Top,_).
かな。
172169:2009/05/26(火) 09:14:07
top(Top,Top) :- up(Top,_),not(up(_,Top)).
top(Top,End) :- up(A,End),top(Top,A).
確かにこの方がよい。
173デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/26(火) 12:18:46
>>173だとあれか、top(z,z)とかもあれしちゃうか
175デフォルトの名無しさん:2009/05/26(火) 12:36:56
そのケースが閃くかどうかだ。Prologの弱点も垣間見える。
「いい問題」だね。
176デフォルトの名無しさん:2009/05/26(火) 12:41:46
でも実際には孤立した点を含む集合を考えているかも知れないけどね
177デフォルトの名無しさん:2009/05/26(火) 13:28:55
順序集合の概念を知ってるかどうかで
178デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/27(水) 10:47:37
>>179
まずくない
181デフォルトの名無しさん:2009/05/27(水) 10:48:25
というよりも、up(X,_)を満たすものだけを対象にすべきかどうかはっきりしない
182デフォルトの名無しさん:2009/05/27(水) 10:50:57
もっと言えば、up/2で言及されない元がないとはいえない
183デフォルトの名無しさん:2009/05/27(水) 11:07:00
うーん、つくづく、いい問題、いい仕様(>>165)、だな。
184デフォルトの名無しさん:2009/05/27(水) 11:14:40
よく読んでみると、一番上流と言う言葉の解説として、
>>165 が呈示されているので、やはり少し無理があるか。
185デフォルトの名無しさん:2009/05/27(水) 14:10:47
なんかSWIのマニュアルが動的になって、静的な索引が見当たらなくなった。
くそーそんなにキーワードを入力させたいのか
186185:2009/05/27(水) 20:38:25
バージョン5.6までの古いのがまだ別サイトに残っていた。情弱でごめん
http://gollem.science.uva.nl/SWI-Prolog/Manual/

しかしリリース日がよくわからなくなってる感じがする
http://www.swi-prolog.org/News.html
> This page isn't maintained very well. If you want know whether this project is active (very much), checkout the GIT history.
187デフォルトの名無しさん:2009/05/28(木) 23:32:50
<超>Prologトリビア探検隊

中村克彦訳『Prologプログラミング』(いわゆるClocksin & Mellish)の
索引の「く〜け」の所ではなく「か」の所に、「空リスト」を発見…!
さあ、お手持ちの本の情報もぜひw
188デフォルトの名無しさん:2009/05/28(木) 23:52:27
なにそれこわい
189デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/05/29(金) 04:26:10
バラスの本は啓学出版ですね。
「食う派」は15本見つけました。
「知識・代数・データベース」 グレイ著 田中穂積・徳永健伸訳 産業図書
「人工知能の基礎理論」 赤間世紀著 電気書院
「法律家のためのコンピュータ利用法」 加賀山茂著 有斐閣
「Prologマシン」 金田悠紀夫著 森北出版
「Prolog ユーティリティライブラリ」 フィリピッチ著 中野誠・伊藤哲郎訳
「Prologのソフトウェア作法」 黒川利明著 岩波書店
「Prologプログラミング入門」 安倍憲広著 共立出版
「論理による問題の解法」 コワルスキ著 浦昭二監修 山田眞一・菊池光昭・桑野龍夫訳
「Prologで学ぶ AIプログラミング」 赤間世紀著 工学社
「PROLOG入門」 後藤滋樹著 サイエンス社
「Prologランニングブック上」 横井与次郎著 ラジオ出版社
「わかる:-Prolog」塚本龍男著 共立出版
「例題演習 Prolog入門」 細野充著 オーム社
「情報学概論 Prologプログラミング」 吉田要著 八千代出版
「TURBO PROLOG入門」Townsend著 倉谷直臣・酒見高広訳 オーム社
赤間氏は確信を持って「食う」のようです。
191デフォルトの名無しさん:2009/05/29(金) 04:42:40
「論理プログラミングの基礎」 J.W.ロイド著 佐藤雅彦・森下真一訳 産業図書株式会社
では「空節」が「か」に分類されています。これはさすがに。
192デフォルトの名無しさん:2009/05/29(金) 08:00:04
このような場合もっとも重んじられるProlog本と思われる
「Prolog入門」 古川康一著 オーム社
の索引には"空リスト"はなかった。
193デフォルトの名無しさん:2009/05/29(金) 10:18:46
えっ
194デフォルトの名無しさん:2009/05/29(金) 21:38:57
>>189-192
また一歩、人類の知識が深化したね
195デフォルトの名無しさん:2009/05/29(金) 22:09:56
ソラ派の俺はどうしたら
196デフォルトの名無しさん:2009/05/29(金) 23:17:18
この手の話で盛り上がるのは、廃れつつある言語の典型ですなあ
197デフォルトの名無しさん:2009/05/30(土) 09:40:17
>>189
PROLOGデーベース・システム」はもちろん誤りで正しくは「PROLOGデータベースシステム」です。
>>190 出版社に漏れがありました。
「Prolog ユーティリティライブラリ」は海文堂、
「論理による問題の解法」は培風館です。
「Prolog ユーティリティライブラリ」の索引は独特で、これは確信を以っての「食う派」ですね。
198デフォルトの名無しさん:2009/05/30(土) 12:08:44
さすがに「あ」とか「す」はなさそうだね
199197:2009/05/30(土) 12:17:05
確信を以って -> 確信を持って ですね。
200デフォルトの名無しさん:2009/05/31(日) 12:25:55
>>163
その質問は「下流」ならできるけど、という話に見えるのがひっかけかな
201デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/04(木) 22:07:06
>>133周辺で、第五世代で機械語がどうたらという話があったけど、
逐次型の方のシステムで使われたKL0というのは、インタプリタ(の実行部分)が
マイクロプログラム(マイクロコード)化されていたというんで「機械語」だったらしいね。
http://www.icot.or.jp/ARCHIVE/Museum/TRTM/tr0079.htm
http://www.icot.or.jp/AITEC/Publications/TRTM/1/tr0079/002.html


小ネタ:
site:icot.or.jp "No Next Page"
203デフォルトの名無しさん:2009/06/05(金) 08:13:10
他に質問にするところがないので、ここでさせてください。

今、Visual Prologでこの
ttp://wiki.visual-prolog.com/index.php?title=A_Beginners_Guide_to_Visual_Prolog
サイトの
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デフォルトの名無しさん:2009/06/05(金) 15:13:12
似たような状況
http://discuss.visual-prolog.com/viewtopic.php?t=7806
> So, after unpacking family1.zip, you should use Build/Run in Window

よくわからないけど、classのdeclarationとimplementationが別のファイルにあって、
それらがプロジェクトの中で関連づけられたものだと認識されていないということでは。
たぶん、プロジェクトの設定がどこかにあるはずなのに、それがコンパイラに伝わっていないとか。

> implementaion

○implementation
手で打ちましたねへっへっへ
205デフォルトの名無しさん:2009/06/05(金) 15:18:38
「別のファイルにあって」は
「別々のファイルにあって」ですねスミマセン
206デフォルトの名無しさん:2009/06/05(金) 18:42:18
>>202
逐次型推論マシンPSIは論理型プログラムPrologを高速に実行するのに最適化して設計
された,ワーク・ステーションである。次のような特徴を持っている。

・タグの採用
・最大16Mワード(80Mバイト)の実メモリ
・8Kワード(40Kバイト)のキャッシュ・メモリ
・高水準ビット・マップ・ディスプレイとマウスを装備
・高水準機械命令(KL0)とファームウェアによりKL0インタプリタ
・メモリ管理,一部のプロセス管理のファームウェア化
・ガーベッジ・コレクション機能のファームウェア化

PSIの基本処理装置の実行制御は,マイクロプログラム制御で行われる。このファーム
ウェアシステムは,マイクロ・インタプリとも呼ばれるPSIの機械語KL0を直接解釈実行
する。またファームウェアは,割込み制御,プロセス管理,メモリ管理,入出力制御等の
システム制御の機能を持ち,オペレーティング・システムによる資源管理の効率化が計られ
ている。

-- KL0 システム制御説明書 1-1 -- より
207デフォルトの名無しさん:2009/06/06(土) 02:37:48
>>203
おまけ
http://wiki.visual-prolog.com/index.php?title=Environment_Overview#Browsing
扱われるファイルの拡張子の概略
http://www.visual-prolog.com/vip/example/userExample/calendar/calendar.htm
「.prj6」という拡張子のファイルをIDEにロードしてビルドしてくれという指示のある例

そもそもコマンドラインから簡単にビルドできるのか、と疑ってみたところ…
http://discuss.visual-prolog.com/viewtopic.php?t=6445
> In will suggest that you simply use vip6Builder.exe:

> Yes. vip6builder is included in Visual Prolog Commercial Edition only.

まあそんなところかとw(バージョン7ではどうか知らないけど)
208デフォルトの名無しさん:2009/06/06(土) 03:36:04
>>203
ふと何か勘違いをしている気がしてきた。
これまでのプログラム例のビルドには当然IDEを使って来たけども、
今回はコンパイラオプションを変えなきゃいけないようなのでコマンドラインでやってみた、
ということでしょうか。そうすると、
http://wiki.visual-prolog.com/index.php?title=Environment_Overview#Creation
IDEの「Build Options」か何かをいじることになるのかも。それができないといっとんのじゃ、
という場合は、スミマセンw
209デフォルトの名無しさん:2009/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が空ベクタである。
210203:2009/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デフォルトの名無しさん:2009/06/07(日) 06:23:06
いや、単にエスパー能力試しなのでお気になさらず
「インストールしたくないオーラ」を感じていただければw
212デフォルトの名無しさん:2009/06/07(日) 07:21:34
>>210
どうして深く追及したくないかというと…
http://discuss.visual-prolog.com/viewtopic.php?t=7838
> It seems that Visual Prolog changed since I wrote that chapter.

入門書の例が動かなくなった、という報告が他にもあるみたいなので
213デフォルトの名無しさん:2009/06/08(月) 14:43:48
前スレで少しだけ話題になっていたと思うけど、
http://en.wikipedia.org/wiki/Prolog
http://ja.wikipedia.org/wiki/Prolog
この落差は一体なんなのだろう。
どちらかが間違っているという部分もあるし。
214デフォルトの名無しさん:2009/06/09(火) 00:59:01
>>どちらかが間違っているという部分もあるし。
ってどこ?
215デフォルトの名無しさん:2009/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年ごろにフランスのカルメラウアーとコワルスキーによって考案された。
216215:2009/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デフォルトの名無しさん:2009/06/09(火) 08:15:52
>>215
エッカート博士のストアード・プログラム方式の最初のアイデアに関する
裁判などを見ても、最初のアイデアを出したのが誰か、そして、本人がそれを
主張するか、などなかなか微妙。マルセイユグループとコワルスキとの間に
何かあるか、あるいは何もないのか、知らないが・・・
カルメラウア側の情報に終始するProlog生成の物語に、ある種の客観性を
与えるため、
According to Robert Kowalski,
以下があるのだと思う。カルメラウアが示唆を受けたと表明しているこの分野の
最高権威がお墨付きを与えているとして文献が示されている。
en.wikipedeaのここの部分の書き手とHistoryの書き手は異なるのかもしれない。

218217:2009/06/09(火) 08:27:54
ついでに云ってしまうと、en.wikipedia は非常によく書けていると思う。
誰か翻訳して、jp.wikipediaを全面下記潰していただけないだろうか。
219203:2009/06/09(火) 08:45:29
>>211-212
Visual Prologの元祖スレで質問して
カットを一つ入れたら治りました。
一応報告まで。
220デフォルトの名無しさん:2009/06/09(火) 09:32:38
元祖スレというのが何を指しているかわかりませんが
よかったですね
221デフォルトの名無しさん:2009/06/09(火) 09:35:48
>>218
手間と予想される悶着を考えると、とりあえずリンクを張って
あとは「独自研究」とか「雑多な内容」とかで
222デフォルトの名無しさん:2009/06/09(火) 09:46:02
よく書けていると評価できる位なら独自に全部書けるだろwww
とか一瞬思ってしまった
223デフォルトの名無しさん:2009/06/09(火) 09:48:12
>>222
まともな文章書いたことないだろw
224デフォルトの名無しさん:2009/06/09(火) 14:23:43
>>222
プログラミングテクニックについてならいくらでも書けるけどね。
現在のWikipediaの構造を維持したら整合しない。だからといって、
Prologの歴史や述語論理との関係についてまで解説するのは、荷が
重い。
225デフォルトの名無しさん:2009/06/09(火) 15:38:44
この項目はあまりよく書けていない可能性があります。
ノートでの議論と記事の発展への協力をお願いします(Template:よく書けていない)。
226デフォルトの名無しさん:2009/06/09(火) 22:23:54
このスレで、記事をまとめて、
それを Wikipedia にアップさせれば良いのでは?
227デフォルトの名無しさん:2009/06/10(水) 00:21:25
著作権が曖昧になると嫌がられるよ
228デフォルトの名無しさん:2009/06/10(水) 07:48:04
翻訳はやりたいけど、今のjaのPrologの記事を書き潰すと一悶着ありそうだな…
229デフォルトの名無しさん:2009/06/10(水) 08:13:58
匿名で書けるんだから面倒なことになったらトンズラすれば?
230デフォルトの名無しさん:2009/06/10(水) 08:37:37
全部書き潰す必要はないし、ルールに従ってやればいいのだけれど、
Googleの検索でWikipediaが先頭にくるようになってからは、
大半のPrologのことを知りたい人がこのサイトを読んで引き返して
しまっていることは確かだ。しかも、そういう人のためのサイトに
全くなっていない。誰のために書いてあるのか分からないサイトと
言ってよいだろう。やはり、相当手を入れないといけない。
231デフォルトの名無しさん:2009/06/10(水) 09:01:54
>Prologは、導出において節を以下に述べる頭部が一つの命題からのみなる
>ホーン節に限定したものととらえる事が出来る。 

この文、変だよね。
232デフォルトの名無しさん:2009/06/10(水) 09:06:20
"からのみなる" の検索結果 約 915 件中 1 - 10 件目 (0.21 秒)
233デフォルトの名無しさん:2009/06/10(水) 09:38:12
"nominal horn clause"の検索結果 8 件中 1 - 8 件目 (0.28 秒)
234デフォルトの名無しさん:2009/06/10(水) 09:42:59
>>231
確かに難解な文だな。

Prologでは導出される対象を頭部が一つの項に限定されたホーン節と
呼ばれる命題に限定している。

と言いたいのですか?
235デフォルトの名無しさん:2009/06/10(水) 09:56:02
ちょっとかじった人なら読み飛ばして何事もなしだが……
詰め込みすぎたか、あとで書く予定が面倒になったか。
236デフォルトの名無しさん:2009/06/10(水) 10:17:36
>>234
私も素人なのだが。
( P ∧ Q ) も一つの項でしょ。
そうすると (p1 ∧ p2) :- q1 ∧ q2 ∧ ....
も許される事になっちゃうんじゃないの。
237デフォルトの名無しさん:2009/06/10(水) 10:43:16
Prolog的混乱が生じてるねへっへっへ
「原子論理式」という言葉があるよ
238デフォルトの名無しさん:2009/06/10(水) 11:22:05
ものの本によると、アタマのないやつも「ホーン節」のうちみたいよ。
質問とか、計算中の目標(ゴール)として現れるやつ。

アタマのあるやつ(Q∧R⇒P、P∨¬Q∨¬R、{P,¬Q,R}、P:-Q,R.)は
「頭部つきのホーン節」とか「プログラム節」とかいうらしい。
239デフォルトの名無しさん:2009/06/10(水) 11:22:56
やべ
× {P,¬Q,R}
○ {P,¬Q,¬R}
240デフォルトの名無しさん:2009/06/10(水) 13:01:54
古川康一著の「Prolog入門」より。
# ホーン論理とは,一階述語論理の命題をA1 ∨ A2 ∨ ... ∨ An ← B1 ∧ B2 ∧ ... ∧ Bm の
# 形(節形式)であらわしたときに,左辺の句がたかだか一つしか現れないような命題のみ扱う論理
# である(ここで,A1,A2, ... ,An,B1,B2, ...,Bm は正の句である). すなわち,左辺に句が
# 一つ現れるのか定義節であり,そこが空になるのがゴール節である(ゴール節を":-"から始めても
# よいのは,そのためである).
241デフォルトの名無しさん:2009/06/10(水) 13:05:44
>>240
句・・・か・・
242デフォルトの名無しさん:2009/06/10(水) 13:19:13
原子論理式、基本論理式、リテラル、句

は微妙に違いがあるのかな。リテラルは否定形を含むとか。
243デフォルトの名無しさん:2009/06/10(水) 21:23:51
リテラルはそうでしょう
244デフォルトの名無しさん:2009/06/10(水) 21:24:50
「正の句」と言っているから
句=リテラル
なのか
245デフォルトの名無しさん:2009/06/10(水) 22:59:16
そうか「頭部つき」=「確定節」(DCGのDC)ということか
246デフォルトの名無しさん:2009/06/10(水) 23:17:58
definite(明確な、限定的な など)
definitive(確実な、限定的な、明確な、限定詞 など)
definitional(definitionの形容詞形)
definition(限定、明確化、定義、解像力 など)
ややこしい
247デフォルトの名無しさん:2009/06/11(木) 00:40:12
第129回技術委員会議事録
http://www.itscj.ipsj.or.jp/protect/gijutsu/0606rpt.html
> 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デフォルトの名無しさん:2009/06/11(木) 01:02:05
小ネタ:
FGHC(Flat GHC)をGDC(Guarded Definite Clauses)と呼ぶことがあるらしい
249デフォルトの名無しさん:2009/06/11(木) 01:33:11
Logic for applications
著者: Anil Nerode, Richard A. Shore
> (Ordered clauses are sometimes referred to as definite clauses, hence
んー?これはなんか集合論の用語みたいな…
250デフォルトの名無しさん:2009/06/11(木) 09:03:10
Prologなら使用人口も少ないだろうし、
論文ネタがゴマンとあって書きやすいんじゃないかと思って手を出そうとしてるところ

実際、どう?
251デフォルトの名無しさん:2009/06/11(木) 09:15:34
>>250
あくまでも、プログラム言語であるという視点で、
・ Prologのプログラムパターン
・ Prologのプログラミングスタイル
・ 得手とする領域とその典型的なプログラム
の記述を重視して。
お願いします!!
252デフォルトの名無しさん:2009/06/11(木) 09:20:45
>>250
ごめん、間違えた。勉強しようという話ですね。
論文ネタなら、ICOTの検証だけで事実上無限にあります。
253デフォルトの名無しさん:2009/06/11(木) 09:34:53
>>251-252
>論文ネタなら、ICOTの検証だけで事実上無限にあります。

ウホッ、予感的中!感謝感激雨霰!
マジで

     人 生 賭 け て 研 究 す る 所 存 で あ り ま す


でも、その前に紙の上での記号論理学や形式言語をもっと勉強しなければ、と今勉強中です
254デフォルトの名無しさん:2009/06/11(木) 11:40:45
DCGトリビア発見
http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/newsletter/may01/nav/nettalk.html
> The reasons we concocted the term "definite clause grammar" had to do with the fact that
(以下略)
255デフォルトの名無しさん:2009/06/12(金) 04:00:35
ttp://www.hamid2.soft.iwate-pu.ac.jp/hamid1/professor/kure/Lecture/Prolog.pdf
> Prolog のプログラムは、確定節(Definite clause)と呼ばれる節形式で、すべて記述する。
:
> Prolog のなかで利用される確定節は、H とBiの数によって、ル−ル節、ファクト節、ゴ−ル節に分けられる。
> またル−ル節とファクト節をまとめて、定義節と呼ぶ。

ここでは確定節=ホーン節みたいに扱ってるね。
ただし一般論じゃなくてPrologに絞った話だからアレだけど。
256デフォルトの名無しさん:2009/06/12(金) 07:37:38
>>215-217
何気にスルーしちゃったけど、「Colmerauer」はフランス語の発音の原則だと
「コルメロエ」みたいになると思うけど、そのへんどうなんだろう。
257デフォルトの名無しさん:2009/06/12(金) 07:44:05
クルルァ
258デフォルトの名無しさん:2009/06/12(金) 07:51:02
○○が近いが△△あるいは□□とも書かれてきた
259デフォルトの名無しさん:2009/06/12(金) 07:53:17
ちなみにおなじみC&M邦訳では「コルメロエ」だった
260デフォルトの名無しさん:2009/06/12(金) 09:59:40
>>258
カタカナ表記の揺れの問題じゃなくて、
フランス語読みと英語読みの違いでしょ。
261デフォルトの名無しさん:2009/06/12(金) 10:29:21
仏語:コルムローエル
英語:コルマローアー
では?
262デフォルトの名無しさん:2009/06/12(金) 11:12:07
ttp://blog.livedoor.jp/drlingua_fr/archives/51177902.html
ttp://blog.livedoor.jp/drlingua_fr/archives/51190690.html
> 1)「ə」の発音となる場合
>   @「e」の後ろに子音字が1つしか続かない場合(但し、単語末は除く)
>     ex) demain [dəmɛ̃]
なるほど
語末rはきっと漏れには聞こえないのではないだろうか
263デフォルトの名無しさん:2009/06/12(金) 11:27:20
http://blog.goo.ne.jp/lumieremondiale/e/e5b1b21b53807b0763ea239ffad4fc45
> 君のパリのアクセントが気に入らない! といいはるんですね。w
264デフォルトの名無しさん:2009/06/12(金) 12:23:27
>>263
やっぱりコルメラウアじゃないか!
265デフォルトの名無しさん:2009/06/12(金) 13:24:54
また新たな「確定節」解釈を発見。
『人工知能の基礎』(馬場口登・山田誠二共著)によると、

事実(fact)=単位節(unit clause)
ルール(rule)=確定節(definite clause)
質問(query)=ゴール節(goal clause)

らしい(p.75)。かなりパターンが揃ってきたねw
266デフォルトの名無しさん:2009/06/12(金) 13:44:38
http://hagi.is.s.u-tokyo.ac.jp/pub/staff/hagiya/kougiroku/ronri/4.txt
> 単位節(unit clause)
> 一つのリテラルから成る節
> 正単位節(unit clause)
> 一つの正リテラルから成る節
> 負単位節(unit clause)
> 一つの負リテラルから成る節
どうして全部unit clauseなんだろう
267デフォルトの名無しさん:2009/06/12(金) 14:26:18
あそうか、コピペ駆動開発みたいな感じか
268デフォルトの名無しさん:2009/06/14(日) 00:56:10
The Birth of Prolog
by Alain Colmerauer
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.85.7438
269デフォルトの名無しさん:2009/06/14(日) 05:26:20
>>268
「clause」だけ検索してみたら
・ここではdefinite clauseという言葉を使っていない
・たまに「program(の)clause」のような言い方をする程度
・そもそも、最初はホーン節という概念に着目していなかったらしい
という感触だった
270デフォルトの名無しさん:2009/06/14(日) 08:29:53
http://alpha.c.oka-pu.ac.jp/~yokota/paper/godel_jrnl0
> 1973年エディンバラ大学のP. Hayesは,
(中略)
> 翌年さらにKowalskiは,Prologに代表される論理プログラミング一般の基礎づけをおこなった。

"Predicate logic as programming language"
ttp://www.doc.ic.ac.uk/~rak/papers/IFIP%2074.pdf
これの「6. HORN CLAUSES」のところでは、4種類のホーン節それぞれについて、
H ← B1, ..., Bn. を「procedure declaration」、
H ←. を「assertion of fact」、
← B1, ..., Bn. を「goal statement」、
←. を「halt statement」
と手続き的に解釈できるぜ、という言い方をしているね。
(下線付きなので読みやすい)
271デフォルトの名無しさん:2009/06/14(日) 09:38:32
http://www.doc.ic.ac.uk/~rak/
site:www.doc.ic.ac.uk inurl:rak +definite

ttp://www.doc.ic.ac.uk/~rak/papers/British%20Nationality%20Act.pdf
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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/14(日) 12:18:37
http://www.w3.org/2005/rules/wg/wiki/Horn_Logic
> "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.

うーんこのへんになにかありそうな…

http://foldoc.org/Horn+clause
> A definite clause is a Horn clause that has exactly one positive literal.
http://mathworld.wolfram.com/HornClause.html
> A definite clause is a Horn clause that has exactly one positive literal.

この2つのページ、かなり酷似した部分があるけど大丈夫なのかな
274デフォルトの名無しさん:2009/06/14(日) 12:46:23
http://ale.cs.toronto.edu/docs/ref/ale_trale_ref/ale_trale_ref-node44.html
> A definite sentence has exactly one positive literal in each clause and

なるほど、導出計算方面でいうsentenceをprogramと読み替えるとdefinite program、
definite programに含まれるclauseだということでdefinite clauseなのかな
275デフォルトの名無しさん:2009/06/14(日) 12:48:21
というかdefinite (program) clauseか
276デフォルトの名無しさん:2009/06/14(日) 13:20:39
ともかくSLD導出のDだというのは真面目に調べればすぐ分かったはずだった気がする。
エスパー能力の限界か。。

http://en.wikipedia.org/wiki/SLD_resolution
> The name "SLD resolution" was given by Maarten van Emden for the unnamed
> inference rule introduced by Robert Kowalski in [Kowalski 1973, 1974].

Kowalskiは名前をつけたりしないのかな

http://en.wikipedia.org/w/index.php?title=SLD_resolution&oldid=135876212
http://en.wikipedia.org/w/index.php?title=SLD_resolution&diff=156253104&oldid=152306415
> A definite sentence is a Horn clause with exactly one positive literal.

これはまた違う定義というか、、
277デフォルトの名無しさん:2009/06/14(日) 15:05:53
ついにCarl Hewitt(の恨み節みたいなの)が面白く読める程度まで予備知識がついた気がする
http://knol.google.com/k/carl-hewitt-see-httpcarlhewittinfo/middle-history-of-logic-programming/pcxtp4rx7g1t/3?domain=knol.google.com&locale=ja#
278デフォルトの名無しさん:2009/06/14(日) 22:06:24
『Horn節は、ある条件の下で(あるいは無条件に)成り立つ事柄について、
B1”または”B2というような不確定な言い方を許さない。そこでHorn節は
確定節(definite clause)とも呼ばれる』
論理と意味 p105

直観主義論理の形式系LJの式は全部Horn節、というのもどこかで
関係するんじゃないですかね。
279デフォルトの名無しさん:2009/06/14(日) 22:19:54
失礼。書き忘れました。B1,B2というのは
A1,A2,...An → B1,B2,...Bn
という右辺にあるそれぞれの式のことを指します。
280デフォルトの名無しさん:2009/06/15(月) 05:15:56
LJを調べてみました。扱っている式の形はホーン節に似てはいますが、
それぞれの論理式は原子論理式である必要はないんですよね
281デフォルトの名無しさん:2009/06/15(月) 05:18:56
>280の「式」は「→」や「,」を含む全体、「論理式」はそこで対象化されている部分です、念のため
282デフォルトの名無しさん:2009/06/15(月) 10:41:13
>>それぞれの論理式は原子論理式である必要はないんですよね
確かにその通りです。

では、そもそもなぜHorn節(より一般に節)は、原子論理式及び原子論理式
の否定の選言で構成されないとならないのか?という疑問が湧いてきますね。

多分何かしらの変換において、要素が原子論理式でなければならないという
縛りが出てきそうです。そのラインから少し調べてみます。
283デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/16(火) 23:03:56
>>283
プログラミング言語の新潮流という本では、
正のリテラルが(”高々”はつかず)一つである節を確定節(definite clause)と呼ぶ。とある。

思うに証明戦略上区分けしていると思われる。
正の節、すなわち確定節の場合、
   証明戦略:SPU(selective positive unit resolution)
負の節、すなわち不確定節の場合、
   証明戦略:SNL(selective negative linear resolution)。

SLD = SPU + SNL?
SLD戦略を理解するに当たって、確定節、不確定節を区分したほうが
わかりやすいから区分しているように見える。

285デフォルトの名無しさん:2009/06/16(火) 23:08:11
LJの式がHorn節になるというのはあまり関係ないようだ。
加えて、要素が複合論理式か、原子論理式かはあまり関係なかった。
SPUなりSNLの証明戦略を用いたとすると、結局原子論理式しか出てこない。

わかりにくい言い方だが、つまり、何かしら自動証明することを考えると、
複合論理式であるかどうか、ということは特に問題ならなくなる。
286デフォルトの名無しさん:2009/06/16(火) 23:09:53
付け加えて、SPU,SNLについては『論理と意味』に解説がある。
287デフォルトの名無しさん:2009/06/16(火) 23:14:46
改めて読み返すと>>285の内容がおかしい。とりあえず、保留。
288デフォルトの名無しさん:2009/06/19(金) 00:06:52
質問です
prologで
?- divide([a,b,c,d,e],L1, L2).
L1 = [a,c,e]
L2 = [b,d]
とするにはどうしたらよいのでしょうか?
289デフォルトの名無しさん:2009/06/19(金) 00:20:52
divide([],[],[]).
divide([X|Xs],[X|Ys],Zs) :- divide(Xs,Zs,Ys).
290デフォルトの名無しさん:2009/06/19(金) 00:39:39
>>289さん
ありがとうございます
ちなみにこれの停止条件は空リストは空リスト二つに分けろってことですか?
何で最小単位が空リストになってしまうのでしょうか? a,b見たいな感じにはならないのですか?

後再帰条件はヘッドのXをXsとYsに分けてZsが残っているか判定する、でいいのでしょうか?

prologよくわからないので日本語がおかしいかもしれないですが回答お願いします
291デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/19(金) 20:46:00
うぅむ・・・。
Xというリストを分けてXsとし、残ったリストXをまた分けてYzとし、
最終的に分割できるものがなくなったら残った物をZsとして
停止条件に行き着くみたいな感じでしょうか・・・?

293デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/19(金) 21:44:32
ひとつ削ると奇数偶数が反対になる、というふうに考えればいいかも
295デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/19(金) 22:25:56
>>295
> リストをAとBに分けて
ちょっとまった
[A,B|Xs]
[A|[B|Xs]]
この2つが同じものだと思っていないということ?それとも直感的な解釈の違いのことを言ってるのかな
297デフォルトの名無しさん:2009/06/19(金) 22:30:04
このスレは一体何が起きているんだ・・・。
なぜか体が震えてくる。俺だけ?
298デフォルトの名無しさん:2009/06/19(金) 22:35:57
>>295
[10,9,8,7,...] から [10,8,...], [9,7,...] を取るとき、
[10,8,...]がほしい立場からすれば、次の9は飛ばして8を取りたい。
[9,7,...]がほしい立場からすれば、今回の10は見送って次の9を取りたい。
ちょうどニーズが交代しているという感じで捉えているけど、もうひとつ明確じゃないねこりゃ。
299デフォルトの名無しさん:2009/06/19(金) 23:00:46
>>296さん
あ、勘違いしてました・・・。
>>297さん
僕も自分の理解力がなさ過ぎて手が震えてきました
>>298さん
おぉ!なんとなくわかってきました!
[X|Ys]ここはどうしてこうなるのでしょうか?Xを排除したものをYsとしてるんですよね?
([X|Xs],[X|Ys],Zs)ここの部分を今みたいな日本語に直すとどんな感じなのでしょうか?

頓珍漢な事ばかり書いて皆さんを惑わせてしまって申し訳ないです。もう少し付き合って下さい><
300デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/20(土) 13:57:34
http://kti.mff.cuni.cz/~bartak/prolog/recursion.html
ここだとまず、元のリストが奇数番目から始まるか偶数番目から始まるかを
ずっと保存しながら扱っているね。
> 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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/20(土) 22:53:16
ちょっとまだ言葉遣いが混乱していると思うけど、
(「[A|Ys]Xsを踏まえたうえでで」とか)
大体わかったみたいでよかったね
306デフォルトの名無しさん:2009/06/20(土) 23:02:46
500億かけただけあってGHCは全容が見えなさ過ぎる。
調べれば調べるだけ話題が出てくる。なんなんだ、この言語。
307デフォルトの名無しさん:2009/06/20(土) 23:11:19
皆さん、本当にありがとうございました
まだ完全ではないですが理解できました

なんだか軽く荒らし兼、笑いものになってた気がしますが寛大な心で
許してください><
308デフォルトの名無しさん:2009/06/24(水) 10:56:16
?-g1.
input=taro.
input=jiro.
input=2
input=..
.
input=end.
yes
endが入力されるまで繰り返し、入力をしるg1を作りたいんですけど、全くわかりません。知恵を貸して下さい。
309デフォルトの名無しさん:2009/06/24(水) 12:13:56
>>308
g1 :- repeat,write('input='),read(X),(X=end;assertz(tmp(X)),fail).

repeat.
repeat :- repeat.
310デフォルトの名無しさん:2009/06/24(水) 12:15:59
>>308
g1(L) :- findall(X,(repeat,write('input='),read(X),(X=end,!,fail;true)),L).
311デフォルトの名無しさん:2009/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=').
312311:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/24(水) 20:04:27
X \= end や X = end は、
X \== end や X == end としたほうがいいかもしれない。
read/1だと変数も入力できてしまうし。
316デフォルトの名無しさん:2009/06/24(水) 20:27:03
ごめん、>>313の再帰版にもカットが必要だった。
?- g1, X=X.などとすると余計な成功が生じているのがわかると思う。
うーん勉強になるw
317デフォルトの名無しさん:2009/06/25(木) 04:36:56
>>316
g1 :- write('input='),read(X),X==end,!.
g1 :- g1.

がスマートで推奨版なのかな。インタプリタのトップからの使いやすさから、
repeat/0を利用してしまうが。
318デフォルトの名無しさん:2009/06/25(木) 07:01:43
失敗駆動ループを使うならrepeatのほうがいいかと
319デフォルトの名無しさん:2009/06/25(木) 07:03:29
えーっとつまり、値を蓄積したいなら再帰で、という
320デフォルトの名無しさん:2009/06/25(木) 07:48:54
>>319
こういうのはあるか。
g1(X) :- write('input='),read(X).
g1(_) :- g1(_).

?- g1(X), ... ,X==end.

最後に ... の中でendが消費されてしまうのが難。
321デフォルトの名無しさん:2009/06/25(木) 07:52:29
匿名変数だとダメなのかな。

g1(X) :- write('input='),read(X).
g1(X) :- g1(X).

でないと。
322デフォルトの名無しさん:2009/06/25(木) 20:06:07
repeatから一歩も出てないねw
323デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/25(木) 20:30:01
なんか「生成検査」という言葉の使い方を間違えた気がするw
325デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/25(木) 21:05:00
引数の数が違うようですが
328デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/25(木) 23:38:11
split(X, [], [], []).ではXを空リスト3つに分けているのですか?
否定(?)を利用してますがなくても問題ないですよね?

連レスすいません
333328:2009/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デフォルトの名無しさん:2009/06/26(金) 01:22:10
>>332
まだ問題の理解が十分ではないようですね。その段階で>>325のように、
「〜というものを作りたいのですが」という言い方をするのはよくないと思います。
335デフォルトの名無しさん:2009/06/26(金) 01:26:37
スミマセン、なんか言い過ぎましたw
そんなによくなくもないかもしれません
336デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/06/26(金) 05:09:00
私たちって言うな
338デフォルトの名無しさん:2009/06/26(金) 05:23:14
>>337
リストの再帰で、
[]になった場合の検証から入るプログラマって
そんなにいるかな。まあ、時間的には一瞬だけど。
もし、変数が来たらは、常に注意を張りながらだと思うけど。
339デフォルトの名無しさん:2009/06/26(金) 05:37:18
>>338
宣言的でありたいというのがある。
できることなら停止節なんて省略したい。
こういう姿勢だから、考えないね。
340デフォルトの名無しさん:2009/06/26(金) 05:47:30
微妙すぎる。>>332は明確に否定するのが親切だと思うけど、
そもそもどこかの宿題を乱暴に投げているだけような気配がするw
341デフォルトの名無しさん:2009/06/26(金) 06:01:59
>>339
それだ! 停止節省略指示子の導入。
帰納論理がそこそこ行けるんだったら、
それくらい処理系にやらせたっていいじゃないか。
342デフォルトの名無しさん:2009/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
343デフォルトの名無しさん:2009/06/26(金) 18:35:25
「トレースモードにして」じゃなくて「スパイ点を設定して」か
344デフォルトの名無しさん:2009/06/26(金) 21:10:24
>>333さん
すいませんでした。
なるほど、カットするとそこで探索を停止するからですね?
>>334-335さん
おっしゃるとおりです・・・。prolog理解するのとても難しいです
>>336さん
空リストを停止条件に持っていく場合とそうでない場合の見極めが難しいです
>>337さん
落ち着いてください
>>339さん
て、停止節ですか?
>>340さん
丸投げではないです・・・。
>>342さん
すいません。僕の使ってるprologは未完成での実行はできないです
345デフォルトの名無しさん:2009/06/26(金) 21:13:40
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
でH =< Xではない時をマッチングさせるんでよね?
346デフォルトの名無しさん:2009/06/26(金) 21:44:57
カット(!)はまだ勉強していない、という前提で進めた方がいいんでしょうか
347デフォルトの名無しさん:2009/06/26(金) 21:47:54
>>332
> 否定(?)を利用してますがなくても問題ないですよね?

これはなぜそう思ったんですか
348デフォルトの名無しさん:2009/06/26(金) 21:56:13
>>326
> /*入力した変数Nより小さい場合 */
> split([A,B|R],[A|T1],[B|T2]) :-
> A >= B,
> split(R,[A|T1],T2).

この「変数N」というようなコメントは、問題についていたヒントか何かですか
349デフォルトの名無しさん:2009/06/26(金) 22:31:18
Prologって面白すぎ。もっと流行ればよいのに。
350デフォルトの名無しさん:2009/06/27(土) 01:46:01
>>346さん
軽く説明された程度です
>>347さん
授業の説明だと余分なところまでマッチングしないようにするためだと聞いたので
なくてもいいのかなぁと
>>348さん
そこは自分でプログラムするときわかりやすいように書いてみただけです
>>349さん
面白いですけど難しくて頭が痛くなりますw
351デフォルトの名無しさん:2009/06/27(土) 02:26:10
>>344
> すいません。僕の使ってるprologは未完成での実行はできないです

デバッグ機能がないというのはちょっと考えにくいので、
差し支えなければ処理系の名前を、参考までに。
一つ一つの確認を細かくしないと、Prologのプログラムはなかなか組めないんじゃないかと思います。
352デフォルトの名無しさん:2009/06/27(土) 02:43:19
>>325 >>344
リストがそれぞれ何らかの「集合」を表していると解釈すれば自明ではないでしょうか。
・空集合の部分集合は(どんな条件がついても)空集合だけ
・空集合を表すリストは空リストだけ
353デフォルトの名無しさん:2009/06/27(土) 06:05:07
>>350
いろんな言語で宿題スレ
http://pc12.2ch.net/test/read.cgi/tech/1242876647/
にPrologのプログラムが沢山載っています。
間違ってるところや、それを逐次修正していく過程が晒されている部分。
処理系依存(あるPrologでは動くが別のPrologでは述語未定義となり動かない)の
ところも多いから、いろいろな意味で勉強になると思います。
354デフォルトの名無しさん:2009/06/27(土) 08:44:23
自演乙
355デフォルトの名無しさん:2009/06/27(土) 11:22:10
>>351さん
terateamを使ってLinuxにアクセスしてemacsやらsicstusを入力してやってます
>>352さん
貴重なご意見感謝します
うまく見分けれるように頑張ります
>>353さん
prologの宿題スレになってますねw
こっちのスレを回ってみようと思います。情報ありがとうございました
>>354さん
いったい何と戦っているんですか?ここで自演して自分に有益になるとは到底思えませんが?
とりあえず落ち着いてください
356353:2009/06/27(土) 16:39:14
>>354
いろんな言語で宿題スレに大量に書き込んでいるのは私ですが、
それがなにか?
これは前スレで、よそのスレに載っているプログラムや課題を
このスレでPrologに書き直そうという提唱や、
Prolog10000Tipsを目指す活動の手始めです。
357デフォルトの名無しさん:2009/06/27(土) 23:09:40
prologプログラムの無限ループバグを防ぐtipsを教えてください。

C以上に暴走しやすい危険な言語ですね。
358デフォルトの名無しさん:2009/06/27(土) 23:31:14
>>356
>>338-339>>341もあなたではないかと思っているのですが、ひょっとして…?w
359デフォルトの名無しさん:2009/06/27(土) 23:35:50
>>357
> 暴走しやすい

これはいつだか、大学の先生がPrologで作ったCGIが無限ループしてひどいことになっていたのを見て思った
360デフォルトの名無しさん:2009/06/27(土) 23:48:12
>>356
これまでの観察によれば
・動作確認をしないことが多い。
・ISOから外れた述語を断りなく多用する。not/1など。
・勘違いを書いても明確に訂正しない。
このへんはちょっとどうかと思っています。
2ちゃんねるだからアリ、という考えなのかもしれませんが。
361デフォルトの名無しさん:2009/06/27(土) 23:55:39
オウフ語
・”F”は、太ったものに当てはまる。
・”G”は、貪欲なものに当てはまる。
・”a”は、アルバートを表示する。
・”b”は、ベティを表示する。
・主語述語形式の文”Pn”が新であるのが、”n”が表示するものが、
 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。
・”¬A”という形式の文が新であるのは、文Aが真で無いとき、
 かつ、そのときに限る。
・”A&B”という形式の文が新であるのは、文Aと文Bがともに新であるとき、
 かつ、そのときに限る。
362デフォルトの名無しさん:2009/06/27(土) 23:57:11
誤字多すぎた。も一回。
オウフ語
・”F”は、太ったものに当てはまる。
・”G”は、貪欲なものに当てはまる。
・”a”は、アルバートを表示する。
・”b”は、ベティを表示する。
・主語述語形式の文”Pn”が真であるのは、”n”が表示するものが、
 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。
・”¬A”という形式の文が真であるのは、文Aが真で無いとき、
 かつ、そのときに限る。
・”A&B”という形式の文が真であるのは、文Aと文Bがともに真であるとき、
 かつ、そのときに限る。
363デフォルトの名無しさん:2009/06/28(日) 00:06:31
>>359で言ったCGIですが、今探してみたら、ちょっと様子が違いました。
ttp://web.sfc.keio.ac.jp/~mukai/2004-LP/cgi-in-prolog/index.html
> # 卓上計算機の実行
> # 卓上計算機 Prolog CGI ソース (calculator.cgi)

・「実行」のリンクが切れている。
・「CGI ソース」のリンク先は無限ループになるが、本来実行されないもののように見える。
364デフォルトの名無しさん:2009/06/28(日) 00:10:06
表示的意味論付き単純言語オウフ。
例えば、アルバートを表示する、というのはアルバートという人がそこにいる
事態を指す/結びつける。
365デフォルトの名無しさん:2009/06/28(日) 00:50:38
参考文献も表示したほうがいいのではw
366デフォルトの名無しさん:2009/06/28(日) 01:02:45
>>363
つまりこういうことかも。
・POSTなりGETなりの方式で入力が与えられることを前提にしている。
・無入力の場合に暴走するように書いてしまっている。
・読ませるためのソースに実行可能フラグをつけてしまった。
367デフォルトの名無しさん:2009/06/28(日) 02:35:52
用語が変だった
"実行可能フラグ" の検索結果 約 291 件中 1 - 10 件目 (0.19 秒)
> 真ということ は、実行可能フラグが立っていることを表すに過ぎません
> True indicates only that the execute flag is on.
"execute flag" -"No Execute flag" の検索結果 約 963 件中 1 - 10 件目 (0.13 秒)

「実行許可(ビット)」あたりかな
368デフォルトの名無しさん:2009/06/28(日) 04:42:04
>>360
しっかりと、観察して下さったようで、ありがとうございます。
すでに利用していて、それを多少読みやすく書き換えたものも
ありますが、Firefoxの六行の小さな窓の中で上から書きながしたものが
ほとんどで実際動作実行をしたものはあまりありません。
Upしたものを読み返して、間違ってるなと気がついた時は訂正して
いると思いますが。C/C++の宿題スレの更新速度が急でコーヒー休憩に
少しづつ課題をUpして次の休憩にコードを書きなぐるという書き込みな
ので、実行確認は今後もしないと思います。間違いは指摘してください。
標準の組み込み述語に限定すると、2chの1レス枠に入らなくなる
課題が多いため、繰り返し使われるものについてはライブラリに
あるものとして、いちいちの定義を省略しています。
get_line/1または2、get_lines/2、split/3、concat_atom/3、append/4、
などがそれです。他の言語との比較と言う観点からはフェアでないとも
言えますが、書き込みの目的がチュートリアルの草稿としてこれを公開
することにあるのであまりその点は気にしていません。not/1は\+より
こちらの方が誰にでも意味がわかるいう理由でこれで通しています。
369368:2009/06/28(日) 05:01:05
>>358
>>336>>338>>340は私だが、>>339は違うよ。この時間帯に
読んでくれているのが誰だかは知っているがw
370デフォルトの名無しさん:2009/06/28(日) 05:08:06
と、いう人がいるので注意してください。
371368:2009/06/28(日) 05:13:09
10000Tipsについては、著作権の問題が出てくるようで
弁護士に相談中。いちいち著作者に了解をとることは
コスト的に無理なようなので。
試しにスポーツルールの述語化をしてみようと思ったの
ですが、ただただベースボールマガジン社が発行している
著作物を編集し直した物になってしまいました。
372デフォルトの名無しさん:2009/06/28(日) 05:15:58
>>368
>>309-312はまだちゃんと訂正していないような気が
373デフォルトの名無しさん:2009/06/28(日) 05:30:15
>>370
ところであなたも早朝派ですか?
私は早朝ジョギング派なので3時半起きで、2chの書き込みも
その後1-2時間の間にしますが、それに関してのメールが6時前に
到着しているので驚くのですが。結構多いんですね。
374デフォルトの名無しさん:2009/06/28(日) 05:43:54
>>311 サービスで仕様を拡張していますが、そこはそのままにすると、
g1(L) :- g1_prompt,read(X),g1_2(X,L).

g1_2(end,[]).
g1_2(A,[A|R]) :- \+(A==end),g1_prompt,read(B),g1_2(B,R).

g1_prompt :- write('input=').

ですか。
375デフォルトの名無しさん:2009/06/28(日) 05:44:31
早朝派じゃないのに書き込んでみるテスト

Prologって研究には良さそうでも就職にはヤヴァそう
C, C++, Java辺りを必須という求人は何度も見たことはあるが
Prolog必須という求人は見たことがない
376デフォルトの名無しさん:2009/06/28(日) 05:52:09
なぜか日本では皆無ですね。
うちがそのうちのせますが。いまはきゅうじんのよゆうなし。
377374:2009/06/28(日) 06:15:11
何の話か明確にすると、
?- ... , g1(L), ... ,fail.

のように、一度end入力で終了したg1がバックトラックによって、
再び実行の可能性が生まれた場合に、意図通りの結果になるかと
いうことです。
378デフォルトの名無しさん:2009/06/28(日) 07:47:04
それから、いろんな言語で宿題スレですが、私のPrologコードは
課題を示したレス番号の頭にtをつけたHTMLファイルを
nojiriko.asia/prolog/ というディレクトリに全部コピーすることに
しています。メールなどで間違っているんじゃないかと指摘を受けた
場合は、このサイトの方はできるだけ速やかに訂正しますが、宿題スレ
の方にはその旨の書き込みはしません。いつの間にか書き換わって
いることも多いのでちょっと覗いてみてください。
379デフォルトの名無しさん:2009/06/28(日) 08:03:33
>>375
いまやビジネスの世界はひたすら論理。今まで日本は会社規則があっても
無視してたり。契約書作成しようと思うと取引先から敬遠されたりと、
論理的なことを何かと回避できる環境にあった。
んでまぁそういう時代は終わりを迎えている。

今や本屋の自己啓発本コーナに行けば論理が大事だ、という本が置かれ、
論理に対する需要と言うのはかなり上がっている。

確かに一般に普及する可能性は低いけど、上記の論理的な力を必要とする層
(金融とかコンサルとか上流の方々ね)には教育用ツールとして需要がある
可能性はある。例えば、『〜論理トレーニング』という本の内容として
prologによる論理トレーニングとか。
あとは、企業の訴訟リスクが上がっているとかなんとか理由つけて法律の
エキスパートシステム作ってみるとか。
裁判所の判例はもはや膨大で、弁護士費用は高い。とりあえず、抱えている案件に
合致する判例があるかどうか探索するシステムとか作れば結構いけるんじゃない。
法律家の助けが必要だけど。差別化は結構できるんじゃないかね。
380デフォルトの名無しさん:2009/06/28(日) 08:08:52
あと、心理学の人と、認知科学の人、哲学の人も必須だな。
普通にやると第五世代と同じ末路になる。

あと問題は日本語文のパターンマッチかな。
381デフォルトの名無しさん:2009/06/28(日) 08:12:55
うーん。微妙な日本語だ。
382デフォルトの名無しさん:2009/06/28(日) 08:30:47
あと20年前と違うのはWebの発展なんだから、セマンティックウェブ関連で
なんか出来そう。
500億かけた研究結果がそのまんま公開されてて、しかもどうやらあんまり
中身を見られていないみたいなんだし、意外と宝の山かもしれないよ。
(評価計算の方法がわからないし、現在価値としては下がっているけど
少なくとも数千万ぐらいの資本価値はあると考えてもいいはず。いきなり
数千万資本をゲットできるというのはそれなりにお得な気はする。)

見直す価値がある可能性はある。
383デフォルトの名無しさん:2009/06/28(日) 14:59:53
「いろんな言語で宿題スレ」の中で
http://pc12.2ch.net/test/read.cgi/tech/1242876647/168
http://pc12.2ch.net/test/read.cgi/tech/1242876647/225
といったProlog向き問題が未回答となっています。
どなたか、よろしくお願いします。
384デフォルトの名無しさん:2009/06/30(火) 05:45:20
前に10000Tipsは著作権の問題が出てくるということを書いたのですが、
意味がわからんとのご意見メールをいただきました。
私の「Tip」のイメージを示します。これで2Tips。

燃ゆる頬(ラグビーの頬傷ほてる海見ては).
燃ゆる頬(車輪繕う地のたんぽゝに頬つけて).
燃ゆる頬(目つむりていても吾を統ぶ五月の鷹).
燃ゆる頬(沖もわが故郷ぞ小鳥湧き立つは).
<以下略>

句集(燃ゆる頬,寺山修司,ラグビーの頬傷ほてる海見ては).
句集(燃ゆる頬,寺山修司,車輪繕う地のたんぽゝに頬つけて).
句集(燃ゆる頬,寺山修司,目つむりていても吾を統ぶ五月の鷹).
句集(燃ゆる頬,寺山修司,沖もわが故郷ぞ小鳥湧き立つは).
<以下略>
385デフォルトの名無しさん:2009/06/30(火) 07:48:21
----- ここまで役に立つTipなし
386デフォルトの名無しさん:2009/06/30(火) 15:44:51
Tips というより、データベースでは?
387デフォルトの名無しさん:2009/06/30(火) 17:06:38
>>386
Prologですからデータベースですが、それをTipという感覚でやろうということです。
福島さんが100mの日本記録出した時、何歩で走ったか。これをビデオで確認したから
述語としておこう。これでひとつ。
Googleで検索できない対象というのがありますね。一つには過去の文献や文学作品の
内容に関する部分。無尽蔵にあります。これはTipとして復活するだけで価値がある。
構造のしっかりしたデータベースである必要もないし、述語として十分に機能する
必要さえない。気楽に日常的に拾い上げられることだけが大事です。
388デフォルトの名無しさん:2009/06/30(火) 18:55:33
天気(神奈川,20090630,晴れ).
389デフォルトの名無しさん:2009/06/30(火) 18:58:04
好き(イチノ,理美).
390デフォルトの名無しさん:2009/06/30(火) 21:26:12
% p(原因, 結果)
?- p(X, 俺に彼女ができる).
false
391デフォルトの名無しさん:2009/07/01(水) 02:15:02
マル得Prologトリビア探検隊
http://gollem.science.uva.nl/SWI-Prolog/Manual/DocIndex.html
SWI-Prolog 5.6.60 Reference Manual
> \
> +/1
> /2
> 1
> =/2
> ==/2
> =@=/2

http://www.ic.unicamp.br/~meidanis/courses/mc600/200002/Manual-Prolog/Index.html
SWI-Prolog 3.2.9 Reference Manual
> \
> /1
> /2
> 1
> /2
> =/2
> @=/2

\+と\=の消え方が変化している
392387:2009/07/01(水) 05:32:35
気楽にと書きましたが、逆に徹底してとか、偏執狂的にというのも
あるでしょう。ある書物を徹底的に述語化してしまうとなどがこれ
です。古典的なものはもちろん現代の例えば白書的なものでも、
表、グラフの述語化は十分に有用で希少価値を持ちます。社会的に
文章、表、グラフなどの中立をする形式は未開拓であり、未完成に
放置しても、後に利用、発展が自然に可能なProlog述語への書き換
えは有力なものではないでしょうか。
393デフォルトの名無しさん:2009/07/01(水) 05:59:28
>>391
わからないです(><;)
394デフォルトの名無しさん:2009/07/01(水) 06:13:14
前スレに書いたことですが、私のインタプリタ環境で
?- 相模(X).
と質問すると答えが返ってきます。相模/1は未定義ですが。
未定義の質問が(導出の最中でも)現れると、その述語名の
性質を調べて、関係ありそうな分野からの検索します。分野には
古典文学->歴史文献->地名等 の優先順位がつけられているため
?- 相模(X).
X = 花ならぬなぐさめもなき山里に桜はしばし散らずもあらなむ;
X = なにか思ふなにをか嘆く春の野に君よりほかに菫つませじ;
X = 見わたせば波のしがらみかけてけり卯の花さける玉川の里
no という具合になります。この歌並びからこれは千人万首を
検索してるだけだなとわかってしまいますw
セマンティックウェブの話もありましたが、ウェブに頼らずこういった
情報発信を自らPrologサーバからやろうではないかということです。
多くのボランティア的献身によって(千人万首もそうだ)我々のウェブ
環境は豊かになりましたが、的確に得られる情報は未だ極々僅かです。
負担にならない蒐集・表示形式としてPrologが活躍する余地は大きい
ように思いますが如何でしょうか?
395デフォルトの名無しさん:2009/07/01(水) 06:38:23
http://www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-58.html
> Tabbing commands
> * \= (set tab)
:
> * \+ (indent; move margin right)

http://www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-164.html
> Exceptions to this rule:
> * \ itself because \\ has its own special meaning. Use $\backslash$.

このへんだな
396デフォルトの名無しさん:2009/07/01(水) 10:04:07
やばい>>395のLaTeX説は眉唾だった。\/が消える説明がつかない。
http://prolog.cs.vu.nl/git/pl.git?a=tree;f=man;hb=HEAD
Perlでひたすらs/.../.../g;していたとは。。
397デフォルトの名無しさん:2009/07/01(水) 12:16:39

split(5, [3,7,2,6,5,8], Before, After).

Before = [3,2,5] (5と同じか、小さい数のリスト)
After = [7,6,8] (5より大きい数のリスト)
このようにリストの中を与えた数より大きいか小さいかで分けたいのですが
どうすればよいのでしょうか?
398デフォルトの名無しさん:2009/07/01(水) 12:24:08
>>325以降をどうぞ
399デフォルトの名無しさん:2009/07/02(木) 00:01:03
>>387
opencycとかWordnetの日本版ってこと?
400デフォルトの名無しさん:2009/07/02(木) 06:39:12
>>399
そうですねとは、さすがにいえないw まだ何も始まってないから。
ライブラリを目指すのではなく、
断簡、反古として知識、ルールの切れっ端を
可能な限り隙間なく集める。述語とする。
ありとあらゆる分野に於いて。
使い手は適宜、論理変数を補充して、自分にふさわしい
使い方を見つける。
10000Tipsとは極度に控えめに言っている。
10000があっという間ではないかと予感させる一例を。

典拠不詳(古墳多くは少年の人).
/* でも、 */
古墳多くは少年の人(求塚,世阿弥,典拠不詳).
/* でも */
述語にしておこうと思い立った人が閃いた形式で登録すればよい。
典拠不詳であることが大事なのか、世阿弥の求塚という作品に
「古墳多くは少年の人」という一節があることを伝えたいのか、
そんなことはどうでもよい。心にとまったことを書き付ける形式が
ひとつあるということだけが大事なのだ。
401デフォルトの名無しさん:2009/07/02(木) 15:48:03
Prologトリビア探検隊・予感編
ttp://dspace.wul.waseda.ac.jp/dspace/bitstream/2065/772/1/3603u104.pdf
> 充足する必要のある 2 つの別の目標 (goal) からなる質問の組み合わせは、
:
> ゴールの充足が試みられたとき、箱の中にある節と適合してその節の
:
> 1. クエリーとして、hoge(F, name5)が入力されたとき、

C&M邦訳を要約したと思われる部分だけカタカナ語が少ない。
402デフォルトの名無しさん:2009/07/03(金) 00:28:35
>>400
意図としては大体了解できたと思う。ただ、

>>ありとあらゆる分野に於いて。

というのは、気を悪くして欲しくないけど、それは危険フラグだ。
辞書爆発が問題で使い物にならないといわれているのに、
改めてそれに無策で挑むというのは、人を説得しきれない。

むしろ分野を限りなく限定させてしまったほうが面白い結果が
得られるかもしれない、と無責任に思う。
403デフォルトの名無しさん:2009/07/03(金) 01:01:58
404デフォルトの名無しさん:2009/07/03(金) 02:44:42
言語哲学にどう接続させるか。
405デフォルトの名無しさん:2009/07/03(金) 10:01:55
http://sourceforge.jp/projects/prologpedia/
> あらゆる情報を Prolog のプログラムとして蓄積する為の基盤作りをしようと思います。

> 登録日: 2009-07-01 08:05

またそういう
406デフォルトの名無しさん:2009/07/03(金) 20:10:06
人は壁にぶつかって成長していく。静かに見守ろう。
407デフォルトの名無しさん:2009/07/03(金) 21:01:35
切れっ端ならtipsじゃなくてchipsだね
408デフォルトの名無しさん:2009/07/03(金) 21:06:53
辞書でchipを引くとひどい意味ばかりあるw
409デフォルトの名無しさん:2009/07/04(土) 02:33:05
最近まったりが足りない。
410デフォルトの名無しさん:2009/07/07(火) 03:34:34
Prologではったり
411デフォルトの名無しさん:2009/07/08(水) 22:33:31
この言語極めたらガンダムのハロとかオートマトン作れんの?
412デフォルトの名無しさん:2009/07/08(水) 23:36:30
うん
413デフォルトの名無しさん:2009/07/11(土) 09:55:54
失礼します初心者です。

Prologで(C言語的な意味で)普通の計算式ってどういう風に書くのですか。
x=50
y=100
z=x^2+2*y+5
print(z)

みたいなかんじのことをProlog風に書くとどうなるのでしょうか。




414デフォルトの名無しさん:2009/07/11(土) 11:26:30
>>413 Prolog風かどうかは疑問ですが。どこが違うかよく見てください。
?-
X=50,
Y=100,
Z is X^2+2*Y+5,
write(Z).
415デフォルトの名無しさん:2009/07/11(土) 16:27:01
416413:2009/07/18(土) 06:57:50
遅くなりました。プロバイダがアク禁だったので。
おかげさまで計算することができました。ありがとうございました。

417デフォルトの名無しさん:2009/07/20(月) 23:29:08
他スレで質問したのですが流れてしまったのでこちらで質問させてください
?- con2(2, [1,3]).
no
?- con2(1, [2,3]).
yes
と答えるようにしたいのですがどうしたらよいのでしょうか?
418デフォルトの名無しさん:2009/07/21(火) 00:06:42
con2(1, [2,3])だけをyesとしたいのであれば、

con2(1, [2,3]).

と定義するだけでOK。
419デフォルトの名無しさん:2009/07/21(火) 00:08:42
>>417
con2(X,Y) :- X = 1, Y = [2,3].
420デフォルトの名無しさん:2009/07/21(火) 00:29:14
>>418さん>>419さん
言葉が足りていませんでした・・・。
今、ハノイの塔の問題を作っていて
ペグの上に載るディスクは常にそのペグの最小ではならないと
移動先でもディスクは最小でないとならないって言う制約の判定をする部分を
作っていてそこに当たる部分なんですが・・・。

途中までは作って制約の部分の製作がわからなかったのでこちらで質問させて
いただきました

未完成のプログラム乗せたほうがいいですか?
421デフォルトの名無しさん:2009/07/21(火) 02:35:46
>>420
一番上の円盤(B)がAより大きい
con2(A,[B|R]) :- A < B.
422デフォルトの名無しさん:2009/07/21(火) 02:54:44
>>420

'Aの一番上の円盤がBの一番上の円盤より小さい'(A,B) :- A=[A1|_],B=[B1|_],A1 < B1.

'Aには現在載せられない'(A,B,C) :- A=[A1|_],B=[B1|_],C=[C1|_],A1 < B1,A1 < C1.
423デフォルトの名無しさん:2009/07/21(火) 06:21:32
>>420
本当に必要な述語はどんなものかという分析ができているのかどうか
ちょっと不安
424デフォルトの名無しさん:2009/07/21(火) 07:05:40
>>417
?- con2(1,[]).

これは?
425デフォルトの名無しさん:2009/07/21(火) 23:35:36
>>421さん
そのままのせてみたらエラーが出たのでcon2(A,[B|R]) :- A < B.
をcon2(A,[B|_]) :- A < B.としたらソースの読み込みはできたのですが
エラーが出てしまいました

>>422さん
それをいれて実行してみたら
Permission error: cannot redefine built_in ','とでてしまいました
(A,B) :- A=[A1|_],B=[B1|_],A1 < B1.の部分はまとめると
con2(A,[B|R]) :- A < B. となるのかなぁと思ったのですがどうでしょう?

>>423さん
なんかその通りなきがしてきました・・・。

>>424さん
申し訳ないです。そこまでは書いてなかったです
426デフォルトの名無しさん:2009/07/21(火) 23:40:33
>>425です連レスすいません
:- [search].

initial_state(hanoi, [[1,2,3],[],[]]).
goal_state(hanoi, [[],[],[1,2,3]]).

operator(hanoi, left_to_right(Disk), [[Disk|RestA], B, C], [RestA, B, [Disk|C]]) :-
con2(Disk, C).
operator(hanoi, left_to_center(Disk), [[Disk|RestA], B, C], [RestA, [Disk|B], C]) :-
con2(Disk, B). % 移動先で制約2を満たしていることをチェック
operator(hanoi,center_to_left(Disk), [A, [Disk|RestB], C], [[Disk|A], RestB, C]) :-
con2(Disk, A).
operator(hanoi, center_to_right(Disk), [A, [Disk|RestB], C], [A, RestB, [Disk|C]]) :-
con2(Disk, C).
operator(hanoi, center_to_center(Disk), [A, B,[Disk|RestC]], [A, [Disk|B], RestC]) :-
con2(Disk, B).
operator(hanoi, center_to_left(Disk), [A, B,[Disk|RestC]], [[Disk|A], B, RestC]) :-
con2(Disk, A).

%-- 制約2
% 一番上にあるディスクよりも、小さいことを検査
/* ?- con2(2, [1,3]).
?- con2(1, [2,3]).

ここまでは作ったんです制約のところは
con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが
| ?- search(hanoi,S,G,P,A). と聞いてもnoと答えられたので詰まってしまいました・・・。
427デフォルトの名無しさん:2009/07/22(水) 08:25:39
突っ込みどころに目移りしますが、とりあえず…
>>426
> con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが

その定義では
?- con2(1, [2,3]).
としたとき、1 > [2,3] という(規格上は)意味のない目標が実行されますよね。
Yとしてリスト(のみ)が与えられることを意識していないように見えます。

そもそも「一番上にあるディスクよりも、小さいことを検査」するのに、
なぜ再帰的定義を使おうと思ったのでしょうか。
428デフォルトの名無しさん:2009/07/22(水) 10:20:15
質問です
学校の宿題でナンプレ(数独)を解かないといけないんですが
この言語肌似合わなくて今だにさっぱりです
できれば答、ダメなら方向性だけでも教えてください
429デフォルトの名無しさん:2009/07/22(水) 10:53:02
>>428
肌に合わないなら無理してPrologで解く必要は無いよ。
自分に合った言語を使えばいいんだから。

Prologを使う事も宿題の前提の一つならあきらめなさい。
神様や天才じゃないんだからあきらめることを学ぶのも勉強。
だまには宿題ができず先生に怒られるのもいいでしょ。

それが嫌なら、まずは自分でできるところまでPrologで挑戦して、
できなかったところを具体的に自分の言葉で表現してみて。
そうすればスレの住人も返事のしようがある。
430デフォルトの名無しさん:2009/07/22(水) 11:43:31
prolog使うのも条件なんです
最終レポートなんで出さないのはちょっと…
c系列なら二次元配列で表して左上はじから数字を当て嵌めてダメならバックトラックで出来ると思うんですがprologでそれをどうやっていいのか見当がつきません。
ヒントだけでもお願いできませんか?
431デフォルトの名無しさん:2009/07/22(水) 11:58:02
あきらめなさい
432デフォルトの名無しさん:2009/07/22(水) 12:01:51
理解してないくせに単位だけ取ろうなんて図々しいよな。
433デフォルトの名無しさん:2009/07/22(水) 12:02:16
434デフォルトの名無しさん:2009/07/22(水) 12:17:12
すみませんご迷惑かけました
>>433
ありがとうございます。みてみます。
435デフォルトの名無しさん:2009/07/22(水) 12:22:10
まあまあ、俺も学生時代そんなんだったし興味ない言語に縛られるのもやでしょ。
特にCとかになれた人ならprologちょっとつらいしね。
この辺みれば良いんじゃないかな
http://kaz.cyteen.nagoya-bunri.ac.jp/advprog2/prolog.html
436429:2009/07/22(水) 12:57:12
>>430
「Nクィーン問題」というパズルは知っているかい?
数独と同様、マス目にクイーンを「あるルールのもとで配置する」というもの。
非決定性プログラミングとか全解探索問題の定番といっていいほど有名なパズルだから、
Prologの教科書を何冊かあされば(あるいはググれば)コード付きで解説されてるはず。
まずは、このパズルの解法を完璧に習得してください。
これまでの講義をまじめに受けていれば理解できるはず。
もし理解できなかったらあきらめなさい。最終レポートにもなってあわてても遅すぎる。

次に、数独はNクイーンの応用問題だから、応用するうえでのヒントを。
まず最初の数字の配置を exist(Y,X,N) で表現する。YとXはマスの行番号と列番号、
Nは置かれている数。Wikipediaの例であれば、以下のようになる。(一部だけ)

exist(1,1,5). /*「1行目の1列目には5が置かれている」という事実 */
exist(1,2,3).
exist(1,5,7).
exist(2,1,6).
exist(2,4,1). /* 以下、省略 */

あとは、
(1) <1,1>から<9,9>までの範囲内で、上記の事前配置に含まれない(つまり空のマス目の)
 対(つい)を「生成」する述語
(2) 配置したい1から9の数を「生成」する述語
(3) 事前配置(制約)のもとで生成した空きマス(1)に生成した数(2)が配置可能であることを
 「判定」する述語 --> これが数独のルールの実装になる
を定義していく。
437デフォルトの名無しさん:2009/07/22(水) 19:46:57
>>426
> %-- 制約2
> % 一番上にあるディスクよりも、小さいことを検査

「一番上に今置こうとするディスクXよりも、その下にあるディスクYがすべて小さいことを検査」
と、強引に変形してみると、心なしか

> con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが

これに近くなる。なんていうエスパー解釈はダメでしょうか…
(Yを半ば集合的にとらえるところがミソ。[Y|_]がどこか投げやりであることにも符合)
438デフォルトの名無しさん:2009/07/22(水) 19:48:35
>>427さん
再帰のプログラムばかり作っていたのでつい・・・。
initial_state(hanoi, [[1,2,3],[],[]]).
goal_state(hanoi, [[],[],[1,2,3]]).の部分の数が4,5,6・・・と増えても使えるようにしないとなーとなんとなく
考えてたので再帰的に作っていました・・・。

自分の中の考えとしてはXという値とリストの先頭にあるYを比べて
って・・・・書いてる途中で気づいたんですがX > YではなくてX < Yでした・・・。

しかしそうすると>>421さんの作ってくれたプログラムを当てはめれば動くはずなのに
エラーが出てしまうのはなぜなんでしょう?
Rが定義されていないみたいなエラーだったのでBの後ろは_として実行もしてみたんですが・・・。
理解力いまいちですいません

439デフォルトの名無しさん:2009/07/22(水) 20:18:55
>>438
> Rが定義されていないみたいなエラーだったのでBの後ろは_として

この行動の説明ができれば疑問はないような気が。

これはこれでいいとして、問題は「エラー」(ではなくて警告だと思いますが)なのか、
期待通り動かないことなのか、なんだかよくわかりません。
440デフォルトの名無しさん:2009/07/22(水) 21:19:40
一応紹介
http://www.sken.biz/~tsuchiya/prolog/text/sicstus.html
> 節内で他に共有されていない変数について、Prologが気をきかせて知らせてきています。
>
> 無名変数(_で始まる変数)にした方がよい場合もあるし、「変数名を書き間違えていた」という場合もあるでしょう。

ただし「(_で始まる変数)」は余計ですね
441デフォルトの名無しさん:2009/07/22(水) 21:21:53
いや、余計ではなくて「(または_で始まる(無名でない)変数)」と言い換えるべきなのかも
442デフォルトの名無しさん:2009/07/23(木) 00:29:35
>>440さん
[R] - singleton variables in user:con2/2
と出ているのでRは定義されてないよ〜って言ってるんだと思うんですが
どうなんでしょう?
443デフォルトの名無しさん:2009/07/23(木) 00:46:54
>>441
_X でも警告されるんじゃ婦負の? SICStus のことはよくわからんが。
444デフォルトの名無しさん:2009/07/23(木) 05:59:29
>>442
R のように節のなかで一回しか使われていない変数は虚変数といって、
実効がありません。実は変数名の付け間違いという可能性が高いため
処理系からWarningがでますが、Prologの仕様としては、エラーでは
ありませんし、Prologのプログラムの中ではそんなに珍しいものでも
ありません。全く気にすることのないものです。
445デフォルトの名無しさん:2009/07/23(木) 06:07:46
実効がないと書きましたが論理的に実効がないと言う意味であって、
[A|R] ではなく [_一番上の円盤|_それより下の円盤の重なり] だったら、
ドキュメントとしての実効はあります。こんなアクの強い事例は少ないで
しょうが、多少のニュアンスを残すために虚変数はよく使われます。
446デフォルトの名無しさん:2009/07/23(木) 06:21:26
>>443
single_var_warningsというPrologフラグの説明によれば
> variables not beginning with `_' occurring once only
というのが警告対象なので、_から始まるものは除外されているね。
確かに昔SICStusを使ったときそんなで、利用した覚えがある。

「don't care variable」という言い方があるらしい
447デフォルトの名無しさん:2009/07/23(木) 06:22:54
>>442
違います
448デフォルトの名無しさん:2009/07/23(木) 06:54:42
>>442
初心者はその警告を無視しないほうが無難だと思います。
449デフォルトの名無しさん:2009/07/23(木) 07:01:39
>>442
つまりまとめると、>>421を書いた人は「一度しか現れない変数は間違いの兆候とみなされる」という原則を
意図的に無視したか、単に動作確認せずに書いて自己弁護しているかw、
ということでしょう
450デフォルトの名無しさん:2009/07/23(木) 07:35:56
>>449
なんでそんなことが長々話題になってるのか解りません。
私の処理系ではWarningも出ないだけです。
451デフォルトの名無しさん:2009/07/23(木) 07:57:19
それはなおさら興味深いじゃないですかw
452デフォルトの名無しさん:2009/07/23(木) 08:10:09
>>448に補足すると、
「一度しか使っていないことに気づかなかった」こと自体はどうでもよく、
単に「意図せず食い違いが生じた」ことを浮き彫りにするための手段になるということです。
453デフォルトの名無しさん:2009/07/23(木) 08:11:09
>>451
ごめん。IF/Prolog自体はconsult時にWarningを出してました。
私のはもう一層上にインタプリタが被っているので。
というより、ご指摘どおり、今やってみただけで、処理系での動作確認などは
確かにしていません。
ただ、この話は私の書いた >>444->>445 に尽きると思いますが。
454444 445 453:2009/07/23(木) 08:39:20
済みません。間違ってたかな・・・
虚変数というのはトップレベルになくてはいけないという定義だったかも。
cons3(A,B,C) :- A < B. の場合の C は虚変数だが、
cons3(A,[B|C]) :- A < B. の C は虚変数ではない、かな。
トップレベルってそういう解釈でいいのだろうか。
455デフォルトの名無しさん:2009/07/23(木) 14:58:39
虚変数という言葉は初耳ですが、要するに、
名前をつけただけで呼ばれることがない変数(の実体)は、
実行中に名前を覚えておく必要がない(「環境」から除外できる)ということでしょう。
456デフォルトの名無しさん:2009/07/23(木) 15:04:39
いや、「名前」の問題だけではないか。
とにかく一定の処理を省略できるという特質があるということでは。
457デフォルトの名無しさん:2009/07/23(木) 15:16:38
anonymous variable(「無名変数」、まれに「匿名変数」)の別名として、
void variableという、「虚変数」に近い言い方があるみたいですね。
458デフォルトの名無しさん:2009/07/23(木) 15:31:17
>>454
なるほど、複合項の一部に持たせるときはその記憶領域が必要ですね。
某処理系のあのバグの本質はそういうことだったのか。。
勉強になりましたw
459デフォルトの名無しさん:2009/07/23(木) 15:53:48
p(X) :- Y = [H|T].
460デフォルトの名無しさん:2009/07/23(木) 23:55:54
>>446
ども、ありがとうです。>>445 みたいに使うのかな。

コメントでもいいような気もするけど。
461デフォルトの名無しさん:2009/07/24(金) 09:06:42
よく考えると、自分が利用したのは、
?- findall(_X,( _X = a ),L).
のように問合せの中に使って、成功時に値を見なくていい変数であることを示す、
という効果だったような…。それは別の処理系だったかな…。
462デフォルトの名無しさん:2009/07/24(金) 23:42:30
亀レスすいません>>438です
>>437さん
レスがかなり遅れて申し訳ないです
ちょっと違いますがそういう解釈してました

>>442で質問した[R] - singleton variables in user:con2/2
は皆さんが教えてくださったとおりwarningメッセージで実行には問題なかったです
それとnoと出ていた件についてなんですが
どうやら>>424さんが質問してきた部分が上手くいっていなかったので
noといわれていたみたいです
con2(A,[B|_]) :- A < B.
con2(A,[]).
としたら一応は解は出たのですがなんだかループしている気がします・・・。
バックトラックを何回やってもnoにならない・・・。
ハノイの塔の3つのとき方ってそんなにあるんですかね?
463デフォルトの名無しさん:2009/07/25(土) 00:42:28
>>462
> ハノイの塔の3つのとき方ってそんなにあるんですかね?
無限にあるよ
464デフォルトの名無しさん:2009/07/25(土) 09:13:10
initial_state(hanoi, [[1],[],[]]).
goal_state(hanoi, [[],[],[1]]).
で考えると、

左→右
左→中→左→右
左→中→左→中→左→右
左→中→左→中→左→中→左→右


こうなるんじゃないかな
465デフォルトの名無しさん:2009/07/25(土) 09:18:10
節の並べ方によっては
左→中→左→中→左→中→左→中→…
と止まらなくなるおそれもあったのでは
466デフォルトの名無しさん:2009/07/26(日) 01:00:08
>>462です
15手順目位までは特に変わりは無かったのですがその後が変わっていってました
手順は20とか23でとまっていたので手順が雪だるま式に
増えるわけではないみたいです
467デフォルトの名無しさん:2009/07/26(日) 02:38:21
手元でやってみたら1872通りと出た。

ttp://www.research.att.com/~njas/sequences/A125295
> 1, 2, 12, 1872, 6563711232, 282779810171805015122254036992,
というような数列になるらしいよ
468デフォルトの名無しさん:2009/07/26(日) 11:11:17
>>467さん
( ゚д゚)・・・・

みなさん長々とありがとうございました
469デフォルトの名無しさん:2009/08/02(日) 23:54:24
http://okwave.jp/qa5100395.html
> quicksort([A|B],C) :-

> MLの説明に載っていたので、まさかMLでなくPrologだと思いませんでした。
> 助かりました。

気になる…
質問者の勘違いなのか説明の間違いなのかが気になる…
470デフォルトの名無しさん:2009/08/05(水) 01:08:15
Prolog は凄いな。

複雑な式
A is B + foo(C * D) / 2
がそのままデータとして扱えるなんて。

新たな演算子を自分で作れるのも、
それを組み合わせて新しい文法が定義出来るのも
(危ういと言えば危ういけど)凄いと思った。

LISP よりも Prolog の方が DSL 作るのに向いてるかも。
471デフォルトの名無しさん:2009/08/05(水) 01:16:21
むしろProlog自体が異様に応用力の高いDSLなんじゃ、と思うことがある
472デフォルトの名無しさん:2009/08/05(水) 16:53:08
SWIなら「=..」なんていう反則述語もあるし

?- findall(A,hoge(A),AList)
or
?- hoge(A),fail.

でhogeが成り立つAを全部持ってこれるバックトラックの便利さも異常
それに、計算量を無視するならとても綺麗に書ける
473デフォルトの名無しさん:2009/08/05(水) 17:50:47
>>472
=..(univ)はISO標準ですよ
474デフォルトの名無しさん:2009/08/05(水) 17:53:17
>>473
マジでw
もはや一階述語じゃないISOなのかw
475デフォルトの名無しさん:2009/08/05(水) 18:56:08
制約(constraint)を扱える処理系ってどんなのがありますか?
476デフォルトの名無しさん:2009/08/05(水) 18:58:12
>>475
SWI-prolog
477デフォルトの名無しさん:2009/08/05(水) 21:54:25
>>474
=..は一階述語ですよ
478デフォルトの名無しさん:2009/08/05(水) 22:58:18
>>477
あの述語自信はそうかも知れないけれど、
あの効果を許すとそうでなくなるのではと。

述語を作れる述語でしょ。
479デフォルトの名無しさん:2009/08/05(水) 23:25:25
>>478
univは複合項とリストを単一化するだけで述語を作ったりはしませんよ
480デフォルトの名無しさん:2009/08/06(木) 00:13:57
>474はfindallが一階述語じゃないこともわかってない気がする
481デフォルトの名無しさん:2009/08/06(木) 01:42:14
「述語を作る」という言い方は、微妙にややこしい。
論理式を作るのなら、Goal = p(X,Y)、Clause = (p :- q)などでもできる。
項と論理式を表面上区別しないから。
482デフォルトの名無しさん:2009/08/06(木) 02:28:41
例えば
findall(A,hoge(A),AList)
を論理的に考えてみると、
Findall(Hoge,x) ≡ ∀y[Hoge(y) ≡ Member(y,x)]
みたいな二階述語になると思う。(あってる?)

(=..)/2などで述語と引数をくっつけなくても、述語の引数にあたる変数を指定しさえすれば
高階の呼出しは表現できる、という例になっているんじゃないかな。
でもまあ言いたいことはわかるというか…。
483デフォルトの名無しさん:2009/08/06(木) 02:38:39
> Findall(Hoge,x) ≡ ∀y[Hoge(y) ≡ Member(y,x)]

これはリストの順序とか全く無視していてかなりしょっぱかった。今は反省している。
484デフォルトの名無しさん:2009/08/06(木) 04:43:20
>>480ー481
うんそうなんだけれど、特定の述語で高階化されているというのはまあ、
そう言う機能とかAPI欲しいよねってことで納得できる
中でごにょごにょしてるんだろうと。

=..が変?なのは、述語記号そのものを変数化できるということ
=..を使えば ∀X [X(Y, Z)] ってかけちゃうし

なんか言ってること微妙に間違ってる気もするがまぁいいやw
485デフォルトの名無しさん:2009/08/06(木) 08:16:16
よくわからんけど、
述語論理の述語変数(や述語記号、関数記号)には個々に変数の数が決まっていて、
そもそもPrologの述語名(や関数子)とは対応していないから、
findall/3のやり方の方が、見た目は違っても述語変数を再現できている面がある。

とにかく(=..)/3がなくても一階論理を超えまくっている以上、鍵のように言うのは変だよ。
高階論理風の見た目とPrologの高階性は違う、というか。
486デフォルトの名無しさん:2009/08/06(木) 08:18:02
(=..)/3じゃないや。。
487デフォルトの名無しさん:2009/08/07(金) 00:14:05
?- alive(noriP).

no
488デフォルトの名無しさん:2009/08/07(金) 12:25:11
そんな推測に過ぎない節を登録しないで欲しいな…
489デフォルトの名無しさん:2009/08/07(金) 14:23:59
え?
登録されていない事実だから、否定してるのでは?
490デフォルトの名無しさん:2009/08/07(金) 15:25:26
なるほど。
491デフォルトの名無しさん:2009/08/07(金) 23:30:07
?- stayAt( noriP, Place ).
492デフォルトの名無しさん:2009/08/08(土) 00:31:59
?-guilty(noriP).
493デフォルトの名無しさん:2009/08/10(月) 13:32:34
>>486 が顔文字に見える
494デフォルトの名無しさん:2009/08/10(月) 14:44:29
自信なさそうに、ちょっとうつむき気味に挙手してるようにも見えるなw
495デフォルトの名無しさん:2009/08/18(火) 19:06:04
プロロげ!Prologer!
ちょっとまったりし過ぎじゃないか?
496デフォルトの名無しさん:2009/08/18(火) 20:39:31
レスもprolonger。
497デフォルトの名無しさん:2009/08/19(水) 10:43:28
じゃあ別スレで出てきた覆面算でも
ONE + NINE + TWENTY + FIFTY = EIGHTY
498デフォルトの名無しさん:2009/08/20(木) 18:49:00
やってみたけど、多少枝刈りしても1分以内にはできなかった。
いや、普通の環境ならできるんだろうけどw
499デフォルトの名無しさん:2009/08/31(月) 09:07:58
この数日、Haskellのスレで続いている副作用談義は勉強になる。
http://pc12.2ch.net/test/read.cgi/tech/1231861873/
500デフォルトの名無しさん:2009/09/01(火) 07:29:44
発刊予定日さらに延期。2010/4/16。
http://www.amazon.co.jp/gp/product/0321417461
501デフォルトの名無しさん:2009/09/01(火) 20:35:51
prolonged...
502デフォルトの名無しさん:2009/09/01(火) 21:55:24
誰がうまいこと言えと
503デフォルトの名無しさん:2009/09/02(水) 10:12:24
Prologってコーディング標準とかないのですかね?
標準でなくてもいいのですが、よく使われている規約などあれば教えてほしいのであります。
504デフォルトの名無しさん:2009/09/02(水) 10:30:42
>>503
ICOTではあったと思うけれど、資料はないだろうな。Prologはほんの一部ですが。
その後は、各企業毎に多少は決められてるだろうけど、ほとんど「ない」と
言い切っていいレベルだと思います。
505デフォルトの名無しさん:2009/09/02(水) 13:14:33
>>504
そうですか…ありがとうございます。
506デフォルトの名無しさん:2009/09/02(水) 13:30:04
私の場合は「散文的」でありたいと思ってるから、
そういう規則は設けないですね。
507デフォルトの名無しさん:2009/09/02(水) 16:58:46
http://pc12.2ch.net/test/read.cgi/tech/1250204272/176
# [1]講座名:やさしいC言語
# [2]
# (1) 「ようこそC言語へ」という文字列を表示し改行するコード
# printf関数を使う。
# (2)「 ようこそC言語へ」と表示し改行してから「C言語をはじめましょう」
# と表示し改行するコード。ただしprintfは一回しか使ってはならない。
508デフォルトの名無しさん:2009/09/02(水) 17:02:09
>>507
% Prolog
t507(1) :- write_formatted('%t\n',[ようこそC言語へ]).

t507(2) :- write_formatted('%t\n%t\n',[ようこそC言語へ,'C言語をはじめましょう']).
509デフォルトの名無しさん:2009/09/02(水) 17:05:57
失礼、誤爆でした。>>507>>508は「いろいろな言語で宿題スレ」に
書き込まなくていけなかった。錯覚しました。
510デフォルトの名無しさん:2009/09/07(月) 18:59:49
ところで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9925.txt
こういう課題をProlog流に解釈して解答をつけるとすると、
どんなことになるのかな? Cの解答例としては
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9927.txt
がある。
511デフォルトの名無しさん:2009/09/08(火) 01:52:15
世界の散文化はPrologでなされるのだろうか。
512デフォルトの名無しさん:2009/09/26(土) 21:39:06
OS X 10.5.8にもSICS Prologってインストール可能だろうか?
513デフォルトの名無しさん:2009/09/27(日) 10:07:56
514デフォルトの名無しさん:2009/09/27(日) 10:28:45
なんですか偉そうに。かわりに読んでください。
515デフォルトの名無しさん:2009/09/27(日) 12:59:50
どうしてそういう不安があるの
516デフォルトの名無しさん:2009/09/28(月) 20:36:36
Mac OS X は、普通の Unix 系の OS だから、他の Unix 系の OS で動くアプリケーションなら、動くよ。
動かないのは、デバイスドライバとかの特殊なソフトウェアじゃないかな。

ただ、Mac OS X 用のアプリケーションは、他の OS じゃ動かないよ。
Mac OS X の独自機能だけを使ってアプリケーションを作るのが通例だろうから。
517デフォルトの名無しさん:2009/09/28(月) 21:38:28
> Mac OS X は、普通の Unix 系の OS
machスレッドはpthreadとお約束が違うので
微妙に動かなくなったりするけどな
518デフォルトの名無しさん:2009/10/01(木) 20:27:12
Prolog でやるエロゲー作ったら、みんな Prolog やるんじゃね?



俺は、エロゲーやらないけど
519デフォルトの名無しさん:2009/10/01(木) 20:29:40
>>518
lisp ベースのゲームエンジンがあって、それを使ったゲームは
そこそこ売れているんだけど、みんなlisp やんないよね
520デフォルトの名無しさん:2009/10/01(木) 20:39:50
>>519
それは、エンジンが lisp なんであって、lisp でやるわけじゃないんじゃ?
目に見えないと分からないでしょ。
521デフォルトの名無しさん:2009/10/01(木) 20:42:59
Age of Empire の AI が Lisp ぽいという話はあったな
522デフォルトの名無しさん:2009/10/01(木) 21:27:19
そういうチラ見せじゃなくて、
コマンドラインで Prolog 打ったら、
女の子が反応したり、
女の子に新しい何かを覚えさせたり
出来るのを考えてた
523デフォルトの名無しさん:2009/10/01(木) 21:37:43
俺が喜ぶポーズを取ってみろ!

と指令を出すと、登録してある嗜好データベースで演繹して
そのシチュエーションでプレーヤーが一番喜ぶポーズを取る萌えキャラ。
524デフォルトの名無しさん:2009/10/02(金) 03:51:46
subservient chickenみたいなものか
525デフォルトの名無しさん:2009/10/02(金) 22:54:00
? like(you, me).
no.

〜 Fin
526デフォルトの名無しさん:2009/10/03(土) 21:06:43
prologでSWAN SONG。
ピンポンピンポンピンポン!ってできたらいいなぁ。
527デフォルトの名無しさん:2009/10/04(日) 23:16:07
SWI prolog はEmacsで使うとプロンプトが出ないんですが、
対処法はありますか?
528デフォルトの名無しさん:2009/10/04(日) 23:22:37
Emacs22 + SWI-Prolog 5.7.15 on Linux で使ってるけどプロンプトでてるな。
環境は?昔、Windows上でつかってるときはなんか使い難かった記憶がある。
実用上問題はなかったのでそのまま使ってたけど。
529デフォルトの名無しさん:2009/10/05(月) 02:46:19
>>528
Windows上でMeadow+SWI-Prolog(Version 5.6.62)です。
実用上は問題ないのですが、どうも気持ち悪かったものですから。

530デフォルトの名無しさん:2009/10/05(月) 17:59:35
ファンクタに破壊的操作を加える述語ってありましたっけ?
531デフォルトの名無しさん:2009/10/06(火) 18:26:46
関数子(ファンクター)をいじるというと…
例えばf(a,b)、f(123)などのfを一気にffにするとか?
述語名には影響はないんだろうか。(いや、複合項のことだろうとは思うけど)
532デフォルトの名無しさん:2009/10/07(水) 05:36:52
問題.
久方のなかなる川のうかひ舟いかにちぎりてやみを待つらむ 藤原定家

この短歌に現れる枕詞「久方の」は
「なかなる川」= 京の中なる川 = 桂川 の
桂から月が連想されて、その月の光に対して、
添えられていると考えられる。

この関係を示す述語「久方のについて思い巡らし」を定義せよ。
533デフォルトの名無しさん:2009/10/07(水) 07:03:07
プロログって

述語(主語や目的語や補語)

って形式だよね?
なんか自然言語の語順と一致しなくて気持ち悪いんだけど
その一因は、当時の計算機の処理能力(速度とリソース)にあると思うんだ。

いまのコンピュータ性能なら、自然言語の語順で同様のことができると思うのだけど
そういう言語でプロログに近い推論を行うものってある?
534デフォルトの名無しさん:2009/10/07(水) 08:58:37
たぶんない。作ればあるだろうけど。

自然言語に近い語順、はいいけど、機械が扱うためにはきちんと形式化されてる
ことが必要だからね。
535デフォルトの名無しさん:2009/10/07(水) 09:50:36
>>534

X:>自然言語に近い語順、はいいけど、
O:>自然言語に近い語順、は「どーでも」いいけど、
536デフォルトの名無しさん:2009/10/07(水) 10:15:11
>>533
自然言語の語順と一致しなくて気持ちいい
537デフォルトの名無しさん:2009/10/07(水) 10:51:45
気持ちがよければそれでいいのかと問いたい
問い詰めたい
538デフォルトの名無しさん:2009/10/07(水) 10:56:43
自然言語にすり寄っても、論理学との関係がややこしくなったら本末転倒じゃないかな
539デフォルトの名無しさん:2009/10/07(水) 11:15:46
英語的:  主語 <述語> 目的語 :- ... .
日本語的: 主語 目的語 <述語> :- ... .

この場合は述語指定に< >を使ってしまうので大小比較の時の記号表現にちょっと困る。
日本語的: (主語,目的語)述語 :- ... . とすれば現在と差なく処理できるが、
英語的: には適用できない。
540デフォルトの名無しさん:2009/10/07(水) 11:41:56
relationなんで主語があるとは限らない。目的語も。
541デフォルトの名無しさん:2009/10/07(水) 12:53:11
格概念への割り当てが面倒になって飽きること必至
542デフォルトの名無しさん:2009/10/07(水) 16:03:17
>>533
計算機の処理能力というようなことではなく、考えに考え抜かれて、
現在の言語仕様が作られたように思うなぁ。
543デフォルトの名無しさん:2009/10/07(水) 17:51:10
言語仕様はね。

構文は 述語(引数0, 引数1, ...) でなくたとえば (引数0, 引数1, ...)述語 も
ありだとはおもうけど、今の形になったのは計算機のリソースの問題とか
じゃなくて、数学の記法における慣習とか、そこらへんでないかと。

自然言語ライクな文法って、例えば Mind みたいな文法のことを
言いたいのかな?
544デフォルトの名無しさん:2009/10/08(木) 03:35:50
述語が先にくる自然言語(タガログ語とか)を使えばよろしい。
545デフォルトの名無しさん:2009/10/09(金) 12:34:55
op で上手く定義すれば、ある程度は自然言語に近付けられそうな気がする。
546デフォルトの名無しさん:2009/10/09(金) 12:44:04
547デフォルトの名無しさん:2009/10/10(土) 20:00:13
>>543
フレーゲあたりじゃない?述語論理の形式が整ったのって。
数学の関数 f(x) にヒントを得たんじゃなかろうか。
548デフォルトの名無しさん:2009/10/12(月) 19:06:17
K-Prologについて教えてください。SWIに比べて制約があるようなのですが、
下記のコードはSyntaxErrorになります。
my-reverse([], []).
my-reverse([X | Xs], Ys) :-
my-reverse(Xs, Zs), append(Zs, [X], Ys).

SWI-Prologでは問題なく動くのですが。
K-Prologが本来の文法を維持しているのか?単なるバグなのか?
因みに下記だとK-Prologでも動きます。
my-reverse(R,L) :- my-reverse(R,L,[]).
my-reverse(R,[],R).
my-reverse(R,[A|L],LL):-
my-reverse(R,L,[A|LL]).
549548:2009/10/12(月) 20:04:58
すみません、わかりました。K-Prologの意味不明なエラーに
悩まされていたのですが原因は単純でした。
コードの最後の行に改行がないと正しく読み取られないようです。
お騒がせしました。
550デフォルトの名無しさん:2009/10/13(火) 09:05:17
最後に改行ないと本来はエラーなのかな?
551デフォルトの名無しさん:2009/10/13(火) 17:36:30
>>550
SWIやYAPでは問題ないのでうっかりなのでしょう。

K-Prologはシンプルでなかなかいいです。
最近、多忙によりメンテされていないようですけど。
552デフォルトの名無しさん:2009/10/13(火) 18:42:25
>>551
<終止符>は二文字で第一文字が"." 第二文字がasciiコード32以下の
文字ですから、K-prologの解釈が正しいと思います。
553デフォルトの名無しさん:2009/10/13(火) 18:49:27
asciiコード32以下、という定義はちょっと面白いな。
0x1a(^Z)でもいいわけだ。
554デフォルトの名無しさん:2009/10/13(火) 19:37:18
節と節の間に空白がなくて駄目だったという事態はわりとよくあると思うけど、
ファイルの終端という罠があったか。
555デフォルトの名無しさん:2009/10/13(火) 20:53:06
32以下ってことは空白でもOKなのかな?
556デフォルトの名無しさん:2009/10/13(火) 21:00:10
もちろんOKでしょ。最後に改行がなくても。
557デフォルトの名無しさん:2009/10/13(火) 21:08:01
Prologの述語ってどの程度まで規格化されてるのでしょう?
M.Hiroiさんの順列生成のコード、K-Prologで動かないので調べてみたら
select述語の第1、第2引数の順番が逆に定義されていました。
perm([],[]).
perm(Xs, [Z | Zs]) :- select(Xs, Z, Ys), perm(Ys, Zs).

/* M.Hiroi
perm([],[]).
perm(Xs, [Z | Zs]) :- select(Z, Xs, Ys), perm(Ys, Zs).
*/
558デフォルトの名無しさん:2009/10/14(水) 07:23:11
少ししらべたのでメモ。
select(X,L,<L引く[X]>)の形
・Quintus Prolog - library(lists)
・SICStus Prolog - library(lists)
・SWI-Prolog - library(lists)
・GNU Prolog
select(L,X,<L引く[X]>の形
・n-queensのプログラムにちらほら見られる(有名な本に載っている?)
559デフォルトの名無しさん:2009/10/14(水) 07:32:57
ちなみに、SWI-Prologの古い版(3.1.2あたり)では後者のリスト先行の形もあったみたいだけど
あまりちゃんと見てない。
http://www.google.com/codesearch?hl=en
lang:prolog ^select\(\[
560デフォルトの名無しさん:2009/10/14(水) 07:54:53
Prolg-KABA では「ふろく」のプログラムの例としてQUEEN.PLが
載っていて、この中のselect/3は後者。
561デフォルトの名無しさん:2009/10/14(水) 07:56:05
漏れのK-PrologからSWI-Prplog移植の経験(ほんの少し)だと、
[K] name(X, Y) が [SWI] string_to_atom(Y, X) てのがあた。
562デフォルトの名無しさん:2009/10/14(水) 07:56:22
Prolog-KABAねw
563デフォルトの名無しさん:2009/10/14(水) 08:06:15
Prologの場合、述語が双方向性を持つことが多いという特殊事情があり、
たとえば、member(A,L) はリストLにAが存在するかを問う場合この順序が
自然だが、Lから一要素づつ順に取り出す場合はPrologとして自然なのは
member(L,A) だろう。
564デフォルトの名無しさん:2009/10/14(水) 08:06:29
Prolog-KABAか、懐かしいね。
自分はPC98買えなかったから、会社のHI-UX Prolog(超マイナー!)を触っていた。
その後、WinなPCを買ったけど、当時は日本語がまともに扱えて
個人購入できるのはK-Prologくらいだったから、重宝していたよ。
565デフォルトの名無しさん:2009/10/14(水) 08:10:09
>>563
双方向性という特殊事情があるからこそ
どちらが自然であるかは一概には言えない、ってことだよね?
566デフォルトの名無しさん:2009/10/14(水) 08:12:11
SWIにもname/2はあるみたいだけど、整数の扱いが違うとかそういうこと?
http://www.swi-prolog.org/pldoc/doc_for?object=name%2f2
> (e.g. `name(N, "300"), 400 is N + 100' succeeds)

http://www.kprolog.com/doc/ja/builtins/meta/creation.html#name_2
> アトミック項をその表記である文字列と相互変換します。
これだと数がどうなるのかわからないけど。
567デフォルトの名無しさん:2009/10/14(水) 08:18:17
>>565
そうです。
もっともmember/2についていうと、append/3というスーパーセットがあり、
?- member(A,[1,2,3]). ?- foo(L),member(2,L). は

?- append(L1,[A|L2],[1,2,3]). ?- foo(L),append(L1,[2|L2],L).

と同じ意味になります。append/3くらいの地位を築いていると、
Aの位置が少々不自然でも文句を言う人はいないのかもしれない。
568デフォルトの名無しさん:2009/10/14(水) 08:29:31
>>566
スマン、6年以上も昔の不正確な情報だったかもしれない。
当時作った(K-Prologの)プログラムに、以下のようなコードが残っていたから。

stringToPathList1([A|X], [B|Y]) :-
  !,
  name(B, A),
/* for SWI-Prolog
  string_to_atom(A, B),
*/
  stringToPathList1(X, Y).
569デフォルトの名無しさん:2009/10/14(水) 08:31:26
ああ、昔のことだとわからないね
570デフォルトの名無しさん:2009/10/14(水) 08:43:03
>>567
自分の場合、双方向性の必要の無い(入出力が明確な)リスト処理については、
関数型言語風のmap_list/select_list/if_listみたいなライブラリを作っているよ。
どれも function(入力リスト, 高階述語, 出力リスト) というスタイルで統一している。
571570:2009/10/14(水) 08:54:06
>>570のif_listは間違いだ。reject_listに訂正。
if系は第2引数の高階述語向けとして定義していた。

あと、(appendに相当する)リストの結合処理は作っていないや。
もし作るとすれば、merge_list(入力リスト1, 入力リスト2, 述語, 出力リスト)
みたいな感じになると思う。
572デフォルトの名無しさん:2009/10/14(水) 09:11:31
プロログで入力、出力とな!(麿のAA略
573570:2009/10/14(水) 10:25:50
>>572
スマンw

ただ、並行論理型言語(KL1(GHC), Concurrent Prolog)の存在を知ってしまったから、
はたして逐次Prologにも双方向性(=非入出力)の概念が必須かどうかについて、
疑念を持ち始めていた。

もちろん、find_allといった全解探索に双方向性は必要。
でも、その後の得られた解の加工処理については、双方向性はかえって邪魔になる、
言い換えると、入出力を明確にした方がプログラムは読みやすくなると思う。
574デフォルトの名無しさん:2009/10/14(水) 10:33:15
双方向性を狙って書く人は少ないと思うね。
図らずも双方向性が得られたという歓びで十分だな。
575デフォルトの名無しさん:2009/10/14(水) 10:42:28
append/3 一つで済ませるをよしとするか、別述語とするかという話ですね。
Prologは基本的に単位節述語定義とappend/3だけで書くものだ、でいいと思うけど。
576デフォルトの名無しさん:2009/10/14(水) 11:36:25
>>558
>>560
どうやら
select(L,<L引く[X]>,X)の形
もあるね。
% from Sterling and Shapiro, "The Art of Prolog," page 211.
と出典のあるやつ。
577デフォルトの名無しさん:2009/10/14(水) 11:52:29
p右向き(X0,X) :- q(X0,X1), r(X1,X2), s(X2,X). % p右向き --> q, r, s.
p左向き(Y,Y0) :- s(Y1,Y0), r(Y2,Y1), q(Y,Y2).
あなたも順序を変えたくなーる
578デフォルトの名無しさん:2009/10/14(水) 12:01:47
>>575
述語定義の中は全部appendで大いに結構だけど、ここではその一層上の
話じゃないか。ライブラリに登録する時の述語頭部の仕様のことではないか。
579デフォルトの名無しさん:2009/10/14(水) 16:35:14
GoogleブックスでThe Art of Prolog(第2版)を見てみたら、
select/3は211ページ目ではなくもっと前の方に(要素先行の形で)載っていた。
ひょっとしたら1988年の初版とずれがあるとかいうオチかも。
580557:2009/10/14(水) 21:37:52
みなさん、情報ありがとうございました。
581デフォルトの名無しさん:2009/10/16(金) 16:25:27
http://pc12.2ch.net/test/read.cgi/tech/1254967587/486
の話ですが、こちらへ引っ越すことになりました。話の発端は
変数に情報をどこまで含ませられるか、コメントではだめなのか、でした。
A + B + C :- 売上入力検査(A,B,C,_診断), ... . と

_出荷日 + _商品番号 + _数量 :- 売上入力検査(_出荷日,_商品番号,_数量,_診断), ... .

の比較から、私が、
出荷日 A + 商品番号 B + 数量 C :- 売上入力検査(A,B,C,_診断), ... .

はPrologではできないので、としました。型出荷日のA、型商品番号のB、型数量のCが可能であるならば
_出荷日という蜻蛉のような表現よりは強いということです。
型について書いているのですが、私の視点は100%ソースコードの表現力に向けられていて、
コンパイラに於いて語られる諸問題とはほとんど無縁です。
582デフォルトの名無しさん:2009/10/16(金) 17:31:16
# 自分も「美しい言語」スレから、こちらへ引っ越してきました。

>>581
最終的に実現したい事は、Prologで(「データ型機能」を実現したい!と言うよりも、)
「名前付きフィールド機能」を実現したい!という事ではないかと推測します。
たとえばRubyのメソッド定義であれば、

 def 売上入力検査(出荷日, 商品番号, 数量) .... end

と記述する代わりに、ハッシュを使って

 def 売上入力検査(*入力データ) .... end

と記述し、そのメソッド呼び出しを以下のように記述する事が可能です。

 売上入力検査( '出荷日 => 20091016, '商品番号 => 200, '数量 => 36.4 )

これに類似した述語記述を、(更には、もし可能であれば言語レベルでの型定義/宣言/検査も)
Prologで実現したい!ということではないかと考えました。
SQL言語であれば、既にレコードとして実現されている機能ですから、
(RDBと比較して)Prologデータベースが使いづらい点だと思われます。

このような認識で合っているでしょうか?
583デフォルトの名無しさん:2009/10/16(金) 17:47:05
出荷日(A) + 商品番号(B) + 数量(C) :- 売上入力診断(A, B, C, _診断結果), …

だと順番が入れ替えられないのが問題なのかな?
584デフォルトの名無しさん:2009/10/16(金) 17:56:51
>>583
いや、インタプリタのトップから、
?- 20091016+200+34.6.
# 売上入力検査 true 売上 assertz(売上('20091016','0200',34.6,'2009-10-16 17:55:00.000000')) 済み
yes
?- というように使いたい。そのためには 出荷日(A) ではダメです。
585デフォルトの名無しさん:2009/10/16(金) 18:12:01
Prologを拡張して、
{A | 出荷日(A)} + {B | 商品番号(B)} + {C | 数量(C)} :-

のような表現を可能にすれば、?- 20091016+200+34.6.
は実現します。これは1980年代に中島秀之氏によって「項記述」という名で
Prolog拡張の提案として出されたことがあります。
586デフォルトの名無しさん:2009/10/16(金) 18:26:19
>>582
私の意図したのはどちらかというと、>>585の型そのものですが、
この { _変数 | _型記述 } の_型記述部分にatomがくると無条件に
真となる、と定義すれば「名前付きフィールド機能」らしきものには
なります。しかし、フィールド名からどうやって呼び出すのかという
問題を解決せねばならず理論的なアプローチが必要でしょう。
587582:2009/10/16(金) 18:27:58
>>584
>いや、

ということは、(>>582の)名前付きフィールドは不要であると考え、次の質問に移ります。

>いや、インタプリタのトップから、

インタプリタのトップレベルにこだわる理由は何かありますか?

たとえば、実行例を以下であるとし、

 ?- read_record.
 20091016+200+34.6. # <-- キーボードから入力
 yes
 ?-

とし、述語 read_record の中で 入力値検査と assert を実行した場合、
何が問題になりますか?
588582:2009/10/16(金) 18:36:21
>>586
スイマセン、>>587をカキコする前にスレをリロードしてませんですた。
>>586へのレス内容は、今、考えています。
589デフォルトの名無しさん:2009/10/16(金) 18:52:13
>>587
インタプリタのトップからに拘るのは、私がそれの虜になったから
ですね。元々一覧表のようなものが嫌いで、巨像をなでるような
細部の積み重ねで本当らしきものを築き上げることを好みます。
沢山、柔軟に質問できるものをよしとします。少なくともその方が
敏感でいられます。
590デフォルトの名無しさん:2009/10/16(金) 19:33:55
グラフを述語で表現しようと思っています。
e(1,2). e(3,2).
のように点を数で表し、点の接続をe(X,Y)で表そうと思います。

ところで、グラフをプログラム中から変更したいのですが、
retract(e(1,X)).
とするとエラーになります。assertしたものはOKなのですが、
予めテキストに書いて読み込んだものはエラーとなります。
こういう場合、どうするのが定石なのでしょうか?
591582:2009/10/16(金) 19:41:43
>>586

2点、要求仕様に関する質問があります。

まず、>>585の紹介してくれた中島氏の記述方式は、フィールドを前提としています。
たとえば、「変数 A の フィールド名は '出荷日' である」と宣言してます。
それに対して、>>586のレスでは、「名前付きフィールド機能らしきものになる」と
肯定しています。

その一方で、>>584のレスにある「いや」という表現から、「名前付きフィールド機能は
不要である」という意図のようにも読み取れるます。

これら二つの事柄は、自分の中では「矛盾」しているような気がしています。
ここから推測される意図として、以下を考えてみました。

・述語定義では名前付きフィールドを使いたい。
・ただし、問い合わせでは(フィールド名を省略した)タプルを使いたい。

この解釈で合っているでしょうか?

2点目の質問です。

# ここは>>587の後半にある質問内容と同一ですから、省略します。

ご返答を願います。
592582:2009/10/16(金) 19:48:31
# またリロードせずにカキコやっちまったゼ....orz

>>589

要求仕様について、了解しました。

# ご返答を頂いたので、>>591にある2番目の質問は無視し、
# 先頭の質問に対するのレスだけでOKです。
593デフォルトの名無しさん:2009/10/16(金) 20:25:38
GHCの処理系で今も現役のものってありますか?
また、and/or並列を自動的にやってくれるものってありますか?
594デフォルトの名無しさん:2009/10/16(金) 20:59:01
>>591
一つ違うかなと思うのは、中島氏のものは後で確認しますが、私が考えているのは
出荷日(X) :-
integer(X),
今日(_今日文字列),
atom_to_term(_今日文字列,_今日整数),
X >= 20090101,
X =< _今日整数.
のような検査述語が定義されていて(20090932なども許す不完全なものだが)
{ A | 出荷日(A) } の出荷日(A)は単一化の付加機能として適用(call)される
ということです。ちょっとfindall/3の第二引数に似ています。
これで型出荷日(実は述語)と変数Aの関係が定義できます。
しかし、これは頭部による定義であり、副目標の引数にまったく同じ型の
変数は場合によると大量に発生しますから、それらの変数をD,E,F,G,H...と
置いていくと、その型についての情報はこの節の中にはないということに
なってしまいます。そのことから現在のPrologの枠組みでは型を取り入れ
それによってソースコードの情報価値を高めることはあまり期待できないと
いう結論になってしまいます。
名前付きフィールドも同様の理由から否定的にならざるをえません。
595594:2009/10/16(金) 21:11:46
そもそもPrologとは論理変数のストリームを繋ぎ合わせる錬金術のことですから、
いちいち型など考えていられるか、ということになります。単純に言うと。
これは「もっとも美しいプログラミング言語は」スレで叫ぶべきことでしょうね。
596デフォルトの名無しさん:2009/10/16(金) 21:17:00
>>592
と、突然正反対の結論になってしまいました。申し訳ない。
実はこの話、昔から何度も何度も持ち出してはうまく解決できず、
放棄を繰り返しているのです。
597デフォルトの名無しさん:2009/10/16(金) 21:28:38
>>590
IF/Prologですか?
598デフォルトの名無しさん:2009/10/16(金) 21:42:14
>>597
いいえ、K-PrologとSWI-Prologで試しました。
599582:2009/10/16(金) 21:45:48
>>594
すいませんが、ここでレスをカキコするとスレの流れが発散しそうなので、
直接のレスは控えます。

何をしたいのか、そして実現方法としての中島氏の方式に関する質問へのレスを待ちます。
もし質問の意味に不明点や疑問があれば、質問を返してください。それには対応します。

# Prologで名前付きフィールドを実現する方法はいくつかあります。
# おそらく、中島氏の方式も、その一つであるように見えます。
# ただ、今の状況では、何も話せません。
600デフォルトの名無しさん:2009/10/16(金) 22:08:35
>>590
>予めテキストに書いて読み込んだものはエラーとなります。

具体的には、どういう方法で読み込んだの?

>>593

GHCなんて超マイナーな言語を持ち出したってことは、
ICOTライブラリのサイトを見てるし、KL1という名前は知っているんだよね?
(まさかHaskellの処理系じゃないよね?w)

あと、後半の質問は知らない。
601デフォルトの名無しさん:2009/10/16(金) 22:10:01
>>598 これでどうでしょうか。
ファイルの頭で :- dynamic(_述語形式リスト). を宣言します。

:- dynamic([e/2]).

e(1,2).
e(3,2).
602デフォルトの名無しさん:2009/10/16(金) 22:46:23
>>601
うまくいきました。ありがとうございました。

今、ケイリーの木の公式の証明に使われているアルゴリズムを
Prologで書こうとしているところです。助かりました。
603デフォルトの名無しさん:2009/10/17(土) 06:32:27
>>599
要求仕様に含まれる情報をできる限り遺漏なく、どうしたらソースコードに
盛り込めるか。これが私の課題で、型の採用は一案に留まります。
コメントでよいものか、関数名、述語名、論理変数に反映するべきなのか。
論理変数に反映したとして、どんな意味があるというのか。
それから、理論だけではなく、実務的にどれだけ有効であるか。それを測定できるか?
まったくの素人がPrologを一読して理解することがあり得るか?どうすれば可能か?
以上のような視点からの書き込みだったので一旦身を引きます。

項記述については、多分初出の第二回ロジックプログラミングコンファレンス(1984)の
Proceedingが手元にあるのでもう一度考え直して、近いうちに書き込みます。
604デフォルトの名無しさん:2009/10/17(土) 07:39:57
このところの流れは単一化が邪魔してる部分の話か。
Prologの不人気の原因もそこに帰するような気もするね。

605デフォルトの名無しさん:2009/10/17(土) 09:15:42
>>600
ガーン、GHCというか、ホーン節にガードを付けるって考え方はマイナーなんですか?
KLICも知ってますが、現役で開発・メンテされてる処理系ってないもんでしょうか。
Prologってもはや現実的プロジェクトでは使われることはないのかな。
606デフォルトの名無しさん:2009/10/17(土) 09:30:09
マイナーというなら確かにマイナー。
GHCで表現しなくてはならないような課題を与えられた人はほとんどいない。
そういう意味でマイナー。美しさという点では一頭地を抜いてると思う。
Prologはプログラマも処理系も健在だから、いつでもプロジェクトを起こす
ことは可能だけど。
607デフォルトの名無しさん:2009/10/17(土) 15:28:07
>>605

>>570だけど、逐次Prologそのもののがマイナーであることは、
このスレの寂れ具合で分かると思う。並列論理型に至っては....。

といっても、漏れは研究職でもなく、普通の職業プログラマでしかないから、
海外/国内の学会の動向を追いかけてるわけじゃない。
専門家に聞けば、また違った見解が得られると思う。

個人的には、過去に、業務でPrologでステートマシンのシミュレータを開発していたが、
そのエンジン部分をConcurrent Prologで書き換えたことがある。
処理系としてはbit誌に掲載されていたミニインタプリタに改造を加えたもの。
それ以降、活用の機会は無い。(逐次Prologは現役で、ツールとして活用しているが....。)

ただ、パイプライン構造のようにプロセスが一方向を向くシステムに限定すれば
逐次論理型言語で記述可能だけど、一般的なネットワーク構造を持つ場合には
(ストリームプログラミングによる)並列論理型言語による記述が適している。
だから、今は、システム全体を並列型で、個々のプロセス内部のアトミックな発火を
(関数としての)逐次型で記述するという、ビジネス向けシステム仕様記述技法に
応用できないかと考えている。JSD法(ジャクソンシステム開発法)に近い発想。
処理系としては、前記のミニインタプリタを復活させる予定。
608デフォルトの名無しさん:2009/10/17(土) 17:49:20
Oz言語(処理系Mozart)は、どうなんだろ。
それを中心に使ってる有名な分厚い本(ゴメン題名忘れた)で、GHCとかの並列論理型言語の概念も紹介されてて、その欠点も指摘してたんだけど、
それだったら、Ozは、その欠点を克服出来るようになってないのかな。
609デフォルトの名無しさん:2009/10/17(土) 18:23:09
Ozはマルチパラダイム言語であることくらいしか分かっていないけど、
問題解決の有効な一手法だと思う。その本は読んでいないけど、
おそらく並列論理型言語の問題は処理効率ではないかと想像。

ただ、論理型言語の魅力は、(処理効率を引き換えに得た)柔軟性と拡張性にあると考える。
だって、論理型言語の枠組みの中で、関係データベース、構文解析、関数、並行性、
制約解消、そしてオブジェクト指向を、次々と実現してきたんだから。
だから、プロトタイプやモデルシミュレーションといった、
処理効率の問題を無視できる用途であれば、
論理型言語(Prolog)は、まだまだ成長/発展を見込めるハズであると思う。

逆にマルチパラダイム言語は、魑魅魍魎というか混沌とした世界のように見える。
もちろんOzは触った事がないから、無知故の偏見だと思うが....。
610デフォルトの名無しさん:2009/10/17(土) 19:06:00
>>582
先程から売上入力検査の部分を再考していたのですが、ドキュメントとして
ここは必要という部分だけ、型(らしきもの)を添えるというのは
やはり有効かもしれませんね。

  消費税計算(商品番号 => 200,数量 => 36.4,消費税率 => 5 %,売上金額 => A,消費税 => B),
  売上金額検査(A,売上金額 => C),

というようなコードだとしても、情報量は明らかに豊かになります。
消費税計算の中で金額を計算するとしている部分は不自然ですが。
611デフォルトの名無しさん:2009/10/17(土) 20:51:21
>>610
Prologへの名前付きフィールド機能拡張の試みはいくつかありますが、
その一つに「レコード・プログラミング」という概念があります。
レコードとは、C言語の構造体やSQLのCERATE TABLE文のような、
<フィールド, 値>のペア(対:つい)から構成される集合を意味します。

たとえば、

 消費税計算(200, 36.4, 5, A, B)

というPrologの述語記法は、以下のようなレコード記法で書き換える事ができます。

 [関係→消費税計算, 商品番号→200, 数量→36.4, 消費税率→5, 売上金額→A, 消費税→B]

さらに、消費税計算 を型とすれば、以下のように表現できます。

 [商品番号→200, 数量→36.4, 消費税率→5, 売上金額→A, 消費税→B]:消費税計算

'消費税計算' とは、「型(らしきもの)」なんかじゃなくて、レコード・プログラミングの世界では、
まさしく「型」なんです。型の導入によって、「個別消費税計算 is_a 消費税計算」や
「総合消費税計算 is_a 消費税計算」のような型階層(継承)の導入が容易になります。
おそらくデータ型機能(型定義/型宣言/型検査)の導入も可能になるでしょう。

そして、レコード・プログラミング自体は考え方(パラダイム)ですが、もしもその考え方を
Prolog言語へ直接的に導入したとすれば、それはまさに、>>610のような記法になるのだと思います。

なお、このカキコのネタは、以下の書籍にある「レコード・プログラミング」の章です。
・続新しいプログラミング・パラダイム, 横田一正他著, 共立出版, 1990年
612デフォルトの名無しさん:2009/10/19(月) 12:36:04
>>609
いや、指摘されてた問題点は、処理効率ではなくて、言語のモデルの方だった。
それに論理型の問題点じゃなくて、あくまで並列論理型の問題点だよ。
何かの問題では、モデルが悪くて上手く適用出来ないけど、
その原因は、並列論理型だと、並列性だったか、ストリームだったかが、自然に融合し過ぎていて操作対象として扱えないからという事だったようにと思う。

うっかりしてたけど、GHC〜KL1をやってた上田教授(?)が、それをさらに発展(?)させた言語 LMNtal をやってたよ。
日本語以外も検索する指定で google で検索すると、pukiwiki で構築されてて、英語だけで、分子っぽい図があるページが見つかると思うけど、そこが LMNtal の本拠地みたいだ。
携帯からなんで URL が書けなくてゴメン。
613デフォルトの名無しさん:2009/10/19(月) 17:37:01
>>612
>並列論理型だと、並列性だったか、ストリームだったかが、自然に融合し過ぎていて操作対象として扱えない

たしかに、GHCはストリームを明示的に記述するから、それ自身は操作対象としては扱えませんね。
ただ、それ以上は(>>608の)Oz本を入手して読まない事には何とも....。

>GHC〜KL1をやってた上田教授(?)が、それをさらに発展(?)させた言語 LMNtal をやってたよ。

LMNtalは初見でしたので、でググってみました。斜め読みですが、初対面の印象は以下の2点。

・GHCでは、プロセス間通信チャネルとして差分リストを明示的に記述する必要があったけど、
 LMNtalでは、それが隠蔽されている。

・「形式的な視覚化(visual formalizm)」が可能な計算モデルである。例題のappendは面白い。

最近は並列論理型言語の動向を追いかけていなかったのですが、研究レベルでは着実に進展している
みたいですね。並列論理型言語の誕生から未来への展望については、上田教授のサイトにあった、
以下の解説が読みやすかったです。Ozも(LMNtalとは別の方向性?で)GHCの流れをくむことが見えます。

・上田和紀,論理・制約プログラミングと並行計算.コンピュータソフトウェア,Vol.25, No.3 (2008)
614デフォルトの名無しさん:2009/10/19(月) 21:07:10
>>613
> たしかに、GHCはストリームを明示的に記述するから、
> それ自身は操作対象としては扱えませんね。

KL1はメタレベルアーキテクチャ持ってたよ。
OS(PIMOS)はそれで書いてた。
荘園。
615デフォルトの名無しさん:2009/10/20(火) 13:08:02
Prologをほめたたえているサイトとかありませんか/
616デフォルトの名無しさん:2009/10/22(木) 12:13:47
そんな過去の事より、Prologの未来の話をしましょうよ/
それと、最後のスラッシュは、なに?/
617デフォルトの名無しさん:2009/10/22(木) 12:29:37
シフトキー入れ忘れて?が/になっちゃったんだろう
618デフォルトの名無しさん:2009/10/24(土) 12:14:36
>>612 >>613 >>614 >>616
AZ-Prologの新バージョンには並列処理が入ったよ。
OR並列でガンガンいけるらしい。
619デフォルトの名無しさん:2009/10/24(土) 12:25:19
>>618
; のところとかで並列に試行してるってこと?
パターンマッチングのところも?
620デフォルトの名無しさん:2009/10/24(土) 12:45:50
>>619
今、Downloadが終わって、これからインストールだからw
数百節の頭部のUnifyを並列に処理して、早い者勝ちで、
候補節を得ることができるらしい。もちろんそういう指定を
した場合に。16コアなどになればかなりの高速化が期待できる
とのこと。
621デフォルトの名無しさん:2009/10/24(土) 14:31:34
それはいいですね。
ところで、GHCとかICOTがらみついでなんですが、
制約付きユニフィケーションとかなんとかあったと思いますが、
あれは全然広まってないんでしょうか?
cu-Prolog(constrained-unification)というのもあったと思うんですが。
622デフォルトの名無しさん:2009/10/24(土) 14:41:30
広まってたら、知ってるはずでしょw
まだ継続して研究している人はいるけれど。
623デフォルトの名無しさん:2009/10/24(土) 20:31:08
多文字プログラミングの罠にはまった。
「〜が90°」のように角度の「°」をそのままアトムの名前の一部として使っていたんだけど、
元にした文書の中で半濁点と混用されていて…w
624デフォルトの名無しさん:2009/10/26(月) 13:52:19
625デフォルトの名無しさん:2009/10/31(土) 04:00:18
ICOTのサイトのメンテナーってどの団体なんだろうか。
研究成果のページでところどころリンク切れあるのが非常に残念。
626デフォルトの名無しさん:2009/10/31(土) 08:25:35
団体って
ボランティアでしょ。
627デフォルトの名無しさん:2009/11/01(日) 18:52:35
Bruce Batchelor 著 "Intelligent Image Processing in Prolog"
1991 Springer-Verlag
に出てくる述語群を適切な日本語で置き換えたら興味の尽きないものと
なりそう。こういう労作も永劫に忘れ去られていくのだろうか。
628デフォルトの名無しさん:2009/11/02(月) 19:59:29
>>587
ひとついい忘れたというか書き落としたことですが、
データを入力する、
その直後に、あ、あれなんだったっけと質問する。
今入力したデータはもちろん、まったく関係ない例えば人名など。
それを解決して、次の入力。
このように進行するためには、別のWindowに移るだけでアウトですね。
同じWindowの次の行で質問して、また、元の仕事に戻る。

このためには、これからデータ入力するよと宣言した負節を起動する
のではだめです。常に質問するのに「最良の」環境を維持しなくては
ならない。インタプリタに拘る一番の理由は寧ろこちらの方でしょう。
629デフォルトの名無しさん:2009/11/02(月) 20:06:54
Smalltalkという言語ができてしまって、この言葉が使えないのですが、
Prologという言語はまさにSmalltalkそのものなのですよ。
ぼそぼそと質問して、了解したら、というか了解できなくても、
またぼそぼそ。小さな質問を積み上げていくことで、少しずつ、
像を築き上げていく。そういう環境です。そのための準備をする
のがPrologプログラミングです。常にぼそぼそだかポロポロだか
わかりませんが、対話してる、それに相応しい言語がPrologです。
630デフォルトの名無しさん:2009/11/03(火) 23:53:23
質問させてください

第1引数が第2引数の部分集合(リスト)であれば成功、さもなければ失敗する述語。
第1引数と第2引数はそれぞれリストで、
これらの重複部分を除いた要素すべてをリストにしたものが第3引数の値となる(和集合)

を作りたいのですがどうすればいいのでしょう・・・・。
631デフォルトの名無しさん:2009/11/04(水) 04:07:06
>>630 最初の質問への答え
AがリストLのなかに存在するかどうかは
?- append(L0,[A|L1],L).
または
?- member(A,L).
で確かめることができます。それで最初の質問は
部分集合([],L).
部分集合([A|R],L) :- member(A,L),部分集合(R,L).
つまり、要素として存在しないケースの節を定義しない! ことによって実現します。
append/3とmember/2はほとんどのProlog処理系で「組み込み述語」となっているため
ユーザが定義する必要はありませんが、
append([],X,X).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
member(A,[A|_]).
member(A,[_|R]) :- member(A,R).
がそれぞれの定義です。
632デフォルトの名無しさん:2009/11/04(水) 05:03:35
>>630 二番目の質問はそれぞれのリストが集合を念頭に置かれたもので
あるかどうかで、述語の定義は変わってきます。それぞれが集合の場合は、
第一引数、第二引数のそれぞれに於いては重複する要素はありませんから、
>>631のappendの定義をちょっとだけ変形して
和集合([],X,X).
和集合([U|X],Y,[U|Z]) :- \+(member(U,Y)),和集合(X,Y,Z).
和集合([U|X],Y,Z) :- member(U,Y),和集合(X,Y,Z).
で実現できてしまいます。
つぎに、第一引数と第二引数自体に重複があり得る場合は、
重複を取り除く([],[]).
重複を取り除く([A|R1],[A|R2]) :- \+(member(A,R1)),重複を取り除く(R1,R2).
重複を取り除く([A|R1],R2) :- member(A,R1),重複を取り除く(R1,R).
を定義しておいて、
和集合(L1,L2,L3) :- append(L1,L2,L4),重複を取り除く(L4,L3).
633デフォルトの名無しさん:2009/11/04(水) 07:09:52
>>632 すみません、重複を取り除く/2の最後の節の最後が間違っていました。
重複を取り除く([],[]).
重複を取り除く([A|R1],[A|R2]) :- \+(member(A,R1)),重複を取り除く(R1,R2).
重複を取り除く([A|R1],R2) :- member(A,R1),重複を取り除く(R1,R2).
R2とするべきところがRになっていました。
634デフォルトの名無しさん:2009/11/04(水) 10:18:57
>>629
モノローグ?
スモールトークは“軽いおしゃべり”だからボソボソってイメージじゃないので。
635630です:2009/11/04(水) 13:16:27
すいません
プログラムの実行結果書くの忘れてました


?- subset([a, b, c], [a, b, c, d, e]). ⇒ yes
?- subset([a, b, c], [d, e, f, g]). ⇒ no
?- subset([a, b, c, d], [a, b, c]). ⇒ no

?- union([a, b, c], [a, b, d, e],[a,b,c,d,e]). ⇒ yes
?- subset([a, b, c], [a,b],X). X⇒ [a,b,c]
?- subset([c, d,e], [a, b, c],X). X ⇒ [c,d,e,a,b]

となります
appendとmemberはサブで使うらしいです
636デフォルトの名無しさん:2009/11/05(木) 02:45:40
>>635
最後のsubset/3の二節はunion/3ではないかな
637デフォルトの名無しさん:2009/11/05(木) 06:07:32
>>634
なるほど。私はネクラだから。monoっていうのはひとりということなのかな。
隠れキリシタンの末裔が講でポロポロやってるのだとするとmonologueか。
インタプリタのトップっていうのは一応会話するところなのだが・・・
638デフォルトの名無しさん:2009/11/05(木) 08:48:01
>>636さん
すいません
その通りです
639デフォルトの名無しさん:2009/11/05(木) 09:43:14
>>637
でも、ボソボソって会話って感じじゃない様な
ポロポロは、会話にも、一人の発話の雰囲気にも、使わない感じが
640デフォルトの名無しさん:2009/11/05(木) 13:40:00
ポロポロは田中小実昌の小説で使われた表現なんだな
実は「てんにましますわれらの・・・」とか言ってたんだろうけれど。
641デフォルトの名無しさん:2009/11/06(金) 16:21:49
Prologで自然言語処理における意味解析を学んでいるものです。。

wordnetを用いてPrologでシソーラスを定義しようとしています。


しかし、いまいちwordnetをPrologで使う方法が分かりません。

どなたか詳しく説明されているサイト等ご存じないでしょうか?
642デフォルトの名無しさん:2009/11/13(金) 03:03:25
方法はわからんが、WordNetはクラス、インスタンスを混同しているとか、is-aの関係を誤解している
という批判がある(溝口理一郎 オントロジー工学)ので、Cycのほうがいいんではないだろうか。

関係ないけど同書にあるIFF(information flow framework)というのが面白そう。
上位オントロジーの言葉として圏論を使うみたいよ。個人的にいろんなものが繋がって興味深い。
IFF
http://www.ontologos.org/IFF/The%20IFF%20Language.html
IFFの数学面
http://www.ontologos.org/IFF/Overview/Mathematical%20Connections.html
643デフォルトの名無しさん:2009/11/13(金) 03:16:18
圏論の創始者の一人であるマックレーンは、『数学−その形式と機能』という本の中で、
形式主義をも包括する機能的形式主義という、オントロジーの哲学みたいなことをやっているから、
当然といえば当然なのだろうけれど、実際に見ると驚いてしまう。
644デフォルトの名無しさん:2009/11/14(土) 05:37:55
ただ、やっても袋小路に行き着くのが目に見えてるわ。
これもやっぱダメポ。
645デフォルトの名無しさん:2009/11/19(木) 12:18:03
このスレも袋小路に入ってるね
646デフォルトの名無しさん:2009/11/20(金) 22:17:58
気に触ったのなら申し訳ない。自分には使いこなせそうに無いという意味で、
否定する意図は無い。
647デフォルトの名無しさん:2009/11/21(土) 08:43:42
>>625
そういえば、FTP経由で提供されていたもの(「ICOTフリーソフトウェア」など)には
すでに移転前からアクセスできなくなっていたけど、提供側も気づいてないような気がする。
648デフォルトの名無しさん:2009/11/29(日) 07:25:17
Prologプログラマに質問です。
1) あなたが小さな述語を定義するとき、リピートパターンの述語の比率はどのくらいになりますか。
ここでリピートパターンとは
r.
r :- r. の型の非決定性述語であり、代表的なものとして、append/3 や member/2 があります。
2) あなたは再帰的な述語定義をする際、追加して1)のタイプの定義を作っておきますか。

質問は以上です。
649648:2009/11/29(日) 07:34:25
2) は意味不明でしたね。1)は再帰的ですから。
ステッパーパターンと呼べばよかったとわかりました。
650デフォルトの名無しさん:2009/11/29(日) 13:18:18
2年以上前ですがこんなのあったんですね。

渕一博記念コロキウム
『論理と推論技術:四半世紀の展開』
http://www.ueda.info.waseda.ac.jp/fuchi-colloquium/
http://www.ueda.info.waseda.ac.jp/fuchi-colloquium/programme.html
651デフォルトの名無しさん:2009/11/30(月) 08:27:15
ああ、全容わかんないって言っちゃったけど、大体分かった気がする。
オントロジーやりたかっただけじゃん。
652デフォルトの名無しさん:2009/12/01(火) 06:25:46
>>648
典型的には、

p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q(A,_),!,r(A,B),p(B,X).
p(A,X) :- s(A,C),p(C,X).

のような定義かな。
完全にこの形式のものとなると少ないでしょう。
653デフォルトの名無しさん:2009/12/01(火) 06:38:12
p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q(A,B),!,p(B,X).
p(A,X) :- s(A,C),p(C,X).

という場合も多いのかな。q/2の中の副作用だけ取り除いた、
q2/2を定義して、

p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q2(A,B),!,p(B,X).
p(A,X) :- s(A,C),p(C,X).

も考えられる。
654デフォルトの名無しさん:2009/12/01(火) 07:05:59
一般型ということになると、

p(quit,_,[]).
p(A,X,[]) :- q(A,X).
p(A,X,[A|R]) :- q(A,B),!,p(B,X,R).
p(A,X,L) :- s(A,C),p(C,X,L).

も有力。
655デフォルトの名無しさん:2009/12/01(火) 07:25:06
>>654 まちがえたのかな

p(quit,_,[]).
p(A,X,[A]) :- q(A,X).
p(A,X,[A|R]) :- q(A,B),!,p(B,X,R).
p(A,X,L) :- s(A,C),p(C,X,L).

第二節を訂正した。Xが取れた時に、収集リストのなかにAが
存在する必要がある。
656デフォルトの名無しさん:2009/12/03(木) 13:01:05
いつの間にか、WikipediaのPrologの項が大幅に追加されている。
以前私がこのスレで難解と書いたLISPの括弧と集合の部分は削除されている。
カルメラウアーとコワルスキーの部分は変化なし。
657デフォルトの名無しさん:2009/12/05(土) 04:58:34
「Trueを返す」という表現に面食らった
658デフォルトの名無しさん:2009/12/05(土) 05:15:39
最近作ったプログラムの実行例
| ?- t1(3,6).
-1
---3
------6
----------10
---------------15
---------------------21
-------------------------25
---------------------------27
---------------------------27
-------------------------25
---------------------21
---------------15
----------10
------6
---3
-1
yes
副作用バリバリのプログラムを移植する練習
659デフォルトの名無しさん:2009/12/05(土) 18:59:42
>>657

> Prologの処理系は、人間が入力した命題と一致する節があるか調べ、あった場合はその本体部に記述されている命題と一致する節があるか再帰的に調べる。

この部分違和感があるのだけれど、論理の世界ではこれていいの? 特に、
「あった場合はその本体部に記述されている命題と一致する節があるか再帰的に」
という部分だけど。
660デフォルトの名無しさん:2009/12/05(土) 22:35:57
>>659
では違和感の無いように変更おねがいします
661デフォルトの名無しさん:2009/12/05(土) 23:02:00
最初の「一致する」とあとの「一致する」では探索の対象が違うはずじゃないかということかな。

それよりまず、「一致する節」と言ってしまうと目標が(頭部だけでなく)節全体と単一化するみたいに聞こえるから、
せめて「適合する」とかちょっとずらすとごまかせるかもしれない、なんて思ったりして…
662デフォルトの名無しさん:2009/12/05(土) 23:03:41
あ、ごめんなんか勘違いした。前半ナシw
663デフォルトの名無しさん:2009/12/06(日) 04:54:28
本体部が Q1,Q2,Q3. だとすると、

(Q1,Q2,Q3) :-

なんていう定義節はない、ということだよね。だからといって、
Q1,Q2,Q3 を順に確かめることを再帰的にといっているわけでもなさそう。
664デフォルトの名無しさん:2009/12/06(日) 05:48:33
「命題」のような言い方の問題点が>>231以降に出ていた
665デフォルトの名無しさん:2009/12/12(土) 11:58:25
http://www.doc.ic.ac.uk/~klc/DistKR.pdf ちょっとまえに話題になったGOは
prologベースのオントロジー指向プログラミング言語だったのね。
GoogleはWebのオントロジー技術(ページランク)で発展した企業ともいえるから、
研究しているのは当然か。
666デフォルトの名無しさん:2009/12/12(土) 12:00:57
GoとGo!は違う
667デフォルトの名無しさん:2009/12/14(月) 17:28:40
>>666
申し訳ない。間違えてた。
668デフォルトの名無しさん:2009/12/14(月) 18:36:36
669668:2009/12/14(月) 18:38:43
Francis G.McCabe だ。不思議な名前だね。
670デフォルトの名無しさん:2009/12/15(火) 00:29:59
Mcというのはゲール語で「息子」って意味。
昔アイルランド/スコットランド系の人たちには名字がなかった。
法律で名字が必要になったから、
「ローリンさんの息子のジョン」と呼ばれている人は、
John Mclauglinと名乗ることにした。
McDonaldはもちろん「ドナルドさんの息子。」
671デフォルトの名無しさん:2009/12/15(火) 04:11:21
>>670
Prologとはまったく関係ないが、とても勉強になた。
672デフォルトの名無しさん:2009/12/16(水) 00:45:22
親父のファリミーネームは息子と違うの?
親子3代皆違う名字?完全にスレ値だけど、すげー気になる。
673デフォルトの名無しさん:2009/12/16(水) 01:34:05
キーワードは「父称」だ
http://ja.wikipedia.org/wiki/%e7%88%b6%e7%a7%b0
674デフォルトの名無しさん:2009/12/17(木) 22:43:50
おお、ありがとう。
675デフォルトの名無しさん:2009/12/19(土) 08:24:07
O'ってのも息子って意味らしい。
Objective CamlがOCamlってはそんな意味にも引っ掛けてあるっぽい。
676デフォルトの名無しさん:2009/12/19(土) 17:49:44
ち・ん・こ
677デフォルトの名無しさん:2009/12/24(木) 12:26:02
>>>676
その名前を書き込むなよ。
本当に来ちゃったら…
678デフォルトの名無しさん:2009/12/24(木) 20:09:58
あいつはHaskellかScalaが引きとってくれるだろう。もしくはRuby。
679デフォルトの名無しさん:2009/12/30(水) 02:10:37
知恵を貸してください。
今宿題で嫉妬深い恋人たちの問題をやっていて
初期状態とゴール状態をそれぞれ
initial_state(jealousy, jealousy(left,[1,2,3],[1,2,3],[ ],[ ])).
final_state(jealousy(right,[ ],[ ],[1,2,3],[1,2,3])).
と作って指し手の移動と状態変化についてはかけたのですが
状態変化したときの合法性のチェックでつまっています。
legal(jealousy(right,[[1],[1,2]], [[2,3],[3]]) ×
legal(jealousy(left,[[2,3],[2,3]], [[1],[1]])  ○
としたいのですがどうしたらいいのでしょうか?
680デフォルトの名無しさん:2009/12/31(木) 09:54:59
>>679
何が疑問なのかよくわからないのだけど、右側だけだと、

legal(jealousy(_,_,_,[],[])) :- !.
legal(jealousy(_,_,_,FL,[])) :- !.
legal(jealousy(_,_,_,[],ML)) :- !.
legal(jealousy(_,_,_,FL,ML)) :- member(A,FL),member(A,ML).

で良さそうだけど。
681デフォルトの名無しさん:2009/12/31(木) 10:07:36
まちがった。

legal(jealousy(_,_,_,[],[])) :- !.
legal(jealousy(_,_,_,FL,[])) :- !.
legal(jealousy(_,_,_,[],ML)) :- !.
legal(jealousy(_,_,_,[A|R],ML)) :-
  member(A,ML),
  legal(jealousy(_,_,_,R,ML)).
682デフォルトの名無しさん:2009/12/31(木) 10:19:14
右側は誤解を生じる表現だった。状態遷移後というべきか。
下の述語定義をして、right,leftそれぞれチェックする目標を立てればいいのではないかな。

legal(jealousy(FL1,ML1,FL2,ML2)) :-
  legal(jealousy(FL1,ML1)),
  legal(jealousy(FL2,ML2)).

legal(jealousy([],[])) :- !.
legal(jealousy(FL,[])) :- !.
legal(jealousy([],ML)) :- !.
legal(jealousy([A|R],ML)) :-
  member(A,ML),
  legal(jealousy(R,ML)).
683デフォルトの名無しさん:2009/12/31(木) 21:43:58
>>680-682さん
レスありがとうございます。
しかし試してみたところ何をやってもnoと出てしまうのですがどうしたらいいのでしょうか?
684デフォルトの名無しさん:2009/12/31(木) 22:44:01
>>683
% legal(jealousy(left,[[2,3],[2,3]], [[1],[1]])

?- legal(jealousy([2,3],[2,3],[1],[1])).
yes
?- となりませんか。それから>>682の定義は5節とも述語legal/1であり、
好ましくない定義でした。第一節とそれ以降の節とは構造が異なりますから、
事実上別の述語とも見なせますが。
英語がよくわからなかったのでw そのまま使ったのですが、述語定義の引数は
できるだけフラットなものにしたい。構造体はリストのレベルまでですね。
フレームなどは例外中の例外。
685デフォルトの名無しさん:2010/01/02(土) 18:12:17
>>684 意味不明かな。

legal(jealousy(FL1,ML1,FL2,ML2)) :- より、

legal_jealousy(FL1,ML1,FL2,ML2) :- であるべきだということです。

英語がよくわからないので、例えば legal_jealousy という表現が英米人に
とって滑稽だったり大変不自然なものであるのかどうか私にはわからないので、
それを避けて、そのままの構造を借りたの意味。
686デフォルトの名無しさん:2010/01/05(火) 17:12:48
亀レスすいません>>683です
does not exist

とでてしまいます
687デフォルトの名無しさん:2010/01/05(火) 18:08:14
>>686
字下げのための全角スペースが述語名の一部となっている?
字下げがしてありますね。2chでは2個以上の半角スペースはなぜか、一個に
まとめられてしまいます。それで、はっきりした字下げを表現するため、
半角スペースは全角のスペースに書き換えられています。もし、この状態から
copy&pasteでコードを写すと、'  leagal'(jealousy( ... というような
全角二個が前に付いた述語が定義されることになってしまいます。
これだと、副目標 leagal(jealousy([2,3],[2,3],[1],[1])) はleagal/1が
存在しないとなります。そういうことがないか確かめてください。
688デフォルトの名無しさん:2010/01/10(日) 00:01:46
>>687さん
亀レスで重ね重ねすいません
どうやら勘違いしていたみたいで無事できました。

本当にありがとうございました。
689デフォルトの名無しさん:2010/01/12(火) 08:58:47
昨秋以降 Wikipedia のPrologの項が大幅に更新されました。
ご存知ない方のために、一度ageて広報します。
690デフォルトの名無しさん:2010/01/12(火) 09:00:33
昨秋以降 Wikipedia のPrologの項が大幅に更新されました。
ご存知ない方のために、一度ageて広報します。

すみません、上げ損なったので再度書き込みます。
691デフォルトの名無しさん:2010/01/12(火) 15:45:08
やっと規制解除された…以下記念に再掲
http://sports2.2ch.net/test/read.cgi/entrance2/1258584095/975
975 :Classical名無しさん sage :09/12/22 23:06 ID:Eyor18Do
http://pc12.2ch.net/test/read.cgi/tech/1235561034/601-700
Prolog猿ビア探検隊

ttp://cpansearch.perl.org/src/JJORE/AI-Prolog-0.740/examples/monkey.pl
ttp://web.archive.org/web/20060213075213/http://www.compapp.dcu.ie/~alex/LOGIC/monkey.html
> perform(climb,
> state(MP, BP, onfloor, H),
> state(MP, BP, onbox, H)).

猿の位置(MP)と箱の位置(BP)が違っても
猿が箱の上に登れるようになってると思うけど、変ではなかろうか
692デフォルトの名無しさん:2010/01/12(火) 18:12:10
>>679
jelousyという構造(複合項)の形が食い違っている上に説明がないので憶測で書きますが、
legal(jealousy(_,LMs,LFs,RMs,RFs)) :- legal_bank(LMs,LFs), legal_bank(RMs,RFs), !. % RMsはright (bank) malesの略、他も同様
legal_bank(Ms,Fs) :- \+ ( member(F,Fs), \+ member(F,Ms), member(M,Ms), M =\= F ).
こんな一行勝負もどうでしょうか。
あるいは場合分けして
legal_bank([],_). % そもそも男がいない(いても女だけ)
legal_bank(Ms,Fs) :- \+ ( member(F,Fs), \+ member(F,Ms) ). % 夫と離れた女がいない(すべての女に夫がついている)
693デフォルトの名無しさん:2010/01/12(火) 18:13:43
いつも間違える…
× jelousy → jealousy
694デフォルトの名無しさん:2010/01/18(月) 22:45:37
10年以上前にProlog協会という団体主催のPrologの講習を受講した。
その時、実践的だがすごく癖のある授業をやった人がいた。たしか会長か副会長。
http://pc12.2ch.net/test/read.cgi/tech/126144349/
を呆然とROMしているのだけど、Prologのコードを書いてる人、
あの人ではないかと思えてきた。
695デフォルトの名無しさん:2010/01/19(火) 04:15:20
126144349
1261443439 ←こっちと思われ
いろんな言語で宿題スレ 第三編
696デフォルトの名無しさん:2010/01/19(火) 06:20:43
>>695
そうでした。どこで一桁落ちたのかな。ご足労掛けました。
repeatに引数を加えていくとmemberになるという内容の授業だった。
引数の付加の仕方によって、どう性質が変わるかを副目標側のからの
視点で徹底的に考える。ただそれだけ。
このスレの>>652-655辺りも、もしかしてw
697デフォルトの名無しさん:2010/01/19(火) 06:40:55
それにしてもあのスレのPrologのコードは強烈ですね。私のProlog観は
完全に打ち砕かれましたw 太宰治が書いたコードのようです。饒舌で。
もうひとり数式処理向きの関数型言語で書き込んでいる方がいて
こちらのコードは極端に短いものが多くて、際立った対照を示して
いて、見てて飽きないですよ。
698デフォルトの名無しさん:2010/01/20(水) 11:06:13
>>694
そのころProlog協会の代表幹事はK-Prologの作者です。別人ですね。
699デフォルトの名無しさん:2010/01/21(木) 10:32:01
>>694
Prologには帰納推論をやる一派がいたので、
近くの研究室にも、ああいうプログラム書ける人たくさんいたよ。
意外とあちこちに潜んでいるのでは?
700デフォルトの名無しさん:2010/01/22(金) 23:14:28
第五世代の評価というか総括をしている文献って知りませんか?
一体第五世代計画とはなんだったのかということが非常に気になっています。

できれば、西垣通氏のルルス関連の話のように社会学関連のアプローチだと
なお嬉しいです。
701デフォルトの名無しさん:2010/01/22(金) 23:29:22
>>700
>>650のサイトは見た?

というか、宗教と第五世代に関連性はありません。
702デフォルトの名無しさん:2010/01/23(土) 00:00:09
>>701
そこのサイトはすでに見ました。
第五世代で宗教にアプローチなんてしていないので関連性があるなんて思ってないですよ。
そうじゃなくて、社会学的にどういう位置づけになっているのかどうかということです。
技術的な話は発散しているので必要なもの以外は追うつもりはないです。
703702:2010/01/23(土) 01:51:12
でも、実際最初は自分も西垣氏の話を読解力の無さから読み違えてたので他人のことは言えません。
ちゃんと読み解くとそんなことは言ってないのですよね。
704デフォルトの名無しさん:2010/01/23(土) 04:41:03
上前淳一郎が第五世代コンピュータに関するノンフィクションを書いている。
社会的背景が生き生きと描かれていて面白い。
705デフォルトの名無しさん:2010/01/23(土) 05:27:13
奇妙なことはあれだけのプロジェクトにも関わらず、
出版物として総括した大冊がないことです。途中までは共立出版等から
啓蒙本が多数出版されていたのですが、肝心の並列処理に入ってから
はさっぱりでしたし、終了後にまとめがあるのかと思ったら、
研究発表以外にはない。総予算の規模からいってもバランスが悪く
異様です。手を挙げる出版社がなかったからでしょうか。
706デフォルトの名無しさん:2010/01/23(土) 08:47:54
大冊を求めてるなら、知らん、としか答えられんが。

淵氏がコラム程度の分量を書いたものなら、『情報処理』で見かけた記憶はある。
707702:2010/01/23(土) 12:27:02
>>704
"めざすは新世代コンピュータ?「日本の夢」に挑む頭脳集団 (角川文庫)"
ですね。これはおもしろそうです。早速読んでみます。

>>705
結局何をしたかったのかよくわからないのですよね。
啓蒙書の類も推論や言語を扱うという意外は一貫性がないです。
一番おかしいと思うのが、アーキテクチャを作るという計画のハズなのに、
アーキテクチャに関する文献が見当たらないというところです。一般向けでは
ないからかもしれないですけど、それにしても見当たらなすぎるのですよね。
本当のところ淵氏としては、認知科学やりたかったんじゃないかと、
http://www.amazon.co.jp/dp/4140014466/

>>706
「情報処理」のコラムですね。国会図書館あたりで探してみます。
708デフォルトの名無しさん:2010/01/23(土) 14:53:47
個人的には、当時としてはやってみなければ成否は誰にも断言できないことだったのかもしれないとは思うが
たとえば人工知能云々には当時ですら胡散臭さやら無邪気すぎるものやらを感じたなあ。
そういう点で>>704は興味深いと思う。

結局はこういう話になってしまうのだろう
http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%94%E4%B8%96%E4%BB%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF
709デフォルトの名無しさん:2010/01/23(土) 14:59:37
もちろん、真面目な研究が行なわれていた(らしい)のはわかるけどねw
技術的にあんまり突っ込んだことを追う気はないようだが
共立出版の「続・新しいプログラミング・パラダイム」の「並行プログラミングとGHC」が
文献リストなども含めて何かの手がかりになるかもしれない
710デフォルトの名無しさん:2010/01/23(土) 15:34:37
第五世代コンピュータの並列処理
滝 和男 編
発行年月:1993年06月
発売元:共立出版

というのはあったんだけどね。
最初のころの話に出ていた、データフローマシンとか、リダクションマシンとか、いわゆるノイマン型とは根本的に
違うものがつくられることを期待していたから、実際にできたのがノイマン型を並列化したものだと知ってガッカリした。
技術的にはすごいことなんだろうけどね。
711デフォルトの名無しさん:2010/01/23(土) 15:49:34
http://www.jstage.jst.go.jp/article/jssst/25/3/3_66/_pdf/-char/ja/
淵氏としてはプロジェクトは成功なんですよね。
712デフォルトの名無しさん:2010/01/23(土) 15:56:37
”成果の具体的な内容については、報告書類が山のようにある。これは秘密では
ないので12年分を入手して検討すれば、試行錯誤を含めて全部わかるように
なっている。しかし膨大なことになるので、解読してくれるような奇特な人が
いるかどうか。”
なんとなく予感はしていたのですがJIPDECのサイトは内容についてどなたも全容を
把握していないのではないですか?
713デフォルトの名無しさん:2010/01/24(日) 01:22:15
>>700
> 社会学関連のアプローチ
そもそもこれが何を意味するかはともかくとしてだw

そういうものが今になっても存在しない(?)あたりが
今も昔も産官学の限界なんだよね

で、Prologスレで手に負える話ではないのでそろそろ勘弁してもらいたい
714デフォルトの名無しさん:2010/01/24(日) 01:53:00
建設的な話でもあればいいけど、怪しいですよね、おかしいですよねの列挙だったら
スレ違いかもしれないな。

実際それは挙げていったらきりがないと俺も思うがw
715デフォルトの名無しさん:2010/01/24(日) 08:46:47
誰かが立てて放置されてる第五世代スレがありそうなもんだが。
それを再利用するとか。
716デフォルトの名無しさん:2010/01/24(日) 23:55:47
東大や理科大行けば、論文やテクニカルレポートが全部残ってるはず。

>>705
バランスが悪いということだけど、
例えば国内外のどの研究プロジェクトと比べて、
「啓蒙書が少ない」ことが「異様」なのでしょうか。
むしろ、異常なくらい教科書的な書籍を産み出したプロジェクトだと思いますが。

>>707
Σ計画なんかもそうですが、お金が動かないと、
官僚&政治家はなかなか新しいプロジェクトを始めてくれません。
メーカーへ予算ばらまきが出来るようにするには、
ハードウェアも込みである必要があるのです。
これは研究プロジェクトというより、誠治の方の問題です。
717デフォルトの名無しさん:2010/01/25(月) 00:53:46
>>716
真っ先に仕訳の対象になるわ
718デフォルトの名無しさん:2010/01/25(月) 16:18:45
>>716
教科書的な書籍とは共立出版の「知識情報処理シリーズ」のことですか?
719デフォルトの名無しさん:2010/01/25(月) 18:18:26
ICOTの成果が出始めるのはこれからだよ。20年後かも。
720デフォルトの名無しさん:2010/01/25(月) 21:49:52
>>719
Prolog は論文を書くためだけの言語
ICOTの成果として、狙い通り、論文が大量生産された
721デフォルトの名無しさん:2010/01/26(火) 01:10:47
Prologを材料に論文を書くの意味ですか。
でも、あなただって携帯が故障したら、Prologのお世話に
なってるかも知れませんよ。
722デフォルトの名無しさん:2010/01/26(火) 04:58:09
GHCなんかは、並列(平行)に「仕切る」ための言語という
印象が強いのだけれど、そういう位置での制御要請は
今後多くなっていくものだろうか。
723デフォルトの名無しさん:2010/01/28(木) 10:38:47
>>722
個々の自動車の平行プログラミングは関数型で勝手にやらせるので済むかもしれないが、
俯瞰的な平行動作、たとえば自動車と通信しながら制御する信号の記述などでは
GHC的なものが最有力ではないか。
724デフォルトの名無しさん:2010/02/11(木) 04:23:23
クラウドコンピューティングが来ている以上、GHCの並列計算が見直される
チャンスも普通に多いだろ。誰も提案しないだけで。
725デフォルトの名無しさん:2010/02/11(木) 16:58:18
クラウドコンピューティングは並列計算じゃなくて分散技術や信頼性工学の話だからな…
726デフォルトの名無しさん:2010/02/17(水) 18:38:27
>>721
携帯じゃなくて、ADSL回線じゃなかったっけ?
727デフォルトの名無しさん:2010/02/18(木) 18:18:33
携帯の故障診断はさすがに大変じゃないかな。半端な数でないし。
ADSLでも10台以上同時に動かしてるんでしょ。それにしても、
こんな大規模な実務に使われてるのにAZ-PrologはWikipediaにも紹介
されてないね。
728デフォルトの名無しさん:2010/02/19(金) 10:26:25
正直MapReduceがどうしてこれほどもてはやされてるのか分からない。
あんなん普通にやってたことっしょ?
大規模に現実に適用したからってこと?
729デフォルトの名無しさん:2010/02/19(金) 16:58:50
>>727
5年以上前だと思うけれど、ソフトバンクが10人単位でPrologプログラマの
募集をした。ところが応募はなかったらしい。
ソフトバンク+Prologという組み合わせでは将来の地位が不安ということ
だったのかも知れないけど、日本の大学生も根性がないね。
730デフォルトの名無しさん:2010/02/19(金) 18:20:35
威勢がいいだけならチンピラ
731デフォルトの名無しさん:2010/02/19(金) 18:35:15
威勢ねぇw
732デフォルトの名無しさん:2010/02/19(金) 18:45:12
Prologで実務的なプログラムを書くことができる人は四十台後半より上。
あと10年待てば大量にリタイアが始まるから供給は充分になる。
733デフォルトの名無しさん:2010/02/19(金) 20:08:41
>>729
ソースは?
734デフォルトの名無しさん:2010/02/20(土) 00:41:47
>>733
私が募集しているという記事を読んだ。こちらはたしか。
誰も来なかったというのはうわさ話。
735デフォルトの名無しさん:2010/03/02(火) 21:43:53
復旧おめでとう age
736デフォルトの名無しさん:2010/03/08(月) 06:43:51
お願いがあります。
「いろんな言語で宿題 第三編」http://pc11.2ch.net/test/read.cgi/db/1252492296/ スレが
512Kb越えで終了してしまいました。
新しい「いろんな言語で宿題 第四編」スレを作ろうとしたところ、
現在スレ立て規制中、とのこと。私は2chのユーザIDとパスワードを忘れてしまって
特権がないので、だれか立てられる人がいたら立ててください。前口上は
「前回スレは512Kbを越えたため、終了しました」だけで結構です。
737デフォルトの名無しさん:2010/03/08(月) 12:56:10
>>736
ためしにやってみたら、できてしまいました。
いつもお世話になっています。
J言語などでかきこみしているものです。
これからもよろしくお願いします。
738デフォルトの名無しさん:2010/03/08(月) 15:13:44
>>737
ありがとうございました。私のPrologコードは外連ですが、
あなたのプログラム群のおかげであのスレはム板の中で一番
輝いています。
"bit"は1970年代中頃から愛読していましたが、結局休刊になる
前に購読しなくなりました。配達してくれていた書店が廃業した
ので。
739デフォルトの名無しさん:2010/03/08(月) 17:52:10
>>738
新しいスレ、なんか変なことになってますが、私は1番しかかいてないですよ。

「bit」は読んでいましたけど。
740デフォルトの名無しさん:2010/03/08(月) 18:17:26
荒れないうちに問題をはじめましょう。
741デフォルトの名無しさん:2010/04/27(火) 23:15:52
辞書なんて所詮、偽装された百科辞典だ。
742デフォルトの名無しさん:2010/07/04(日) 14:42:52
Prologの現代的(?)な応用って何かある?
到達点がエキスパートシステムとか自然言語処理とか止まりだと先が無さそうに思うんだけど。
743デフォルトの名無しさん:2010/07/04(日) 15:28:25
>>742
エキスパートシステムや自然言語処理が我々のプログラミングの随所に
登場という状況を知らない。まだ、そのレベルにも達していないのでは。
744デフォルトの名無しさん:2010/07/04(日) 15:32:43
Prologの役割は自然言語によるプログラミングへの橋渡しをすることに
ある。まだ何も始まっていない。
745デフォルトの名無しさん:2010/07/04(日) 15:39:38
当分の間始まる見込みもない
746デフォルトの名無しさん:2010/07/04(日) 20:58:06
>>742
Prologの現代的な応用 : 論文を大量生産する
747初心者:2010/07/04(日) 23:36:36
prologを勉強してて、以下のページの

http://mayah.jp/article/2002/reversi#toc-tplace-pl
このリストがよくわからないのですが
[[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X]]
わかるかたお願いします。

自分的には、
[[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X]]
の縦と横のリストだけでいいのではと思うのですが。
748デフォルトの名無しさん:2010/07/05(月) 04:34:12
>もともと大学の課題なので、データ構造等は結構適当に定められてしまっています。
らしいですよ
749デフォルトの名無しさん:2010/07/05(月) 06:45:55
>>747
部分的な局面の思考に全局面のデータを持ち回ることはないだろう、という意味ですか?
750初心者:2010/07/05(月) 17:59:40
>>749
そう思ったのですが・・・
やはり、全マスをあらわしてるのでしょうか
751デフォルトの名無しさん:2010/07/06(火) 06:07:17
>>750
私は実行時のヒープ領域やスタックの実際の使われ方、動きについては詳しくないので
他の方の説明を待つとして、

・ 全局面を表すリストのリスト(8×8)を引数で渡していくことにあまりコスト(時間とメモリ)はかからないと思う。
・ 全局面のデータを単位節と定義しておいて、それを参照して、部分リストと二本取り出し、
  それを加工してから、list_nthとappendを駆使して(実際には一つの述語にまとめるだろうが)元の全局面データである単位節をretract+assertするのは
  結構コストがかかる選択なのではないか。
752デフォルトの名無しさん:2010/07/18(日) 18:45:24
学校の宿題で、ハノイの塔の問題が出たんですが・・・棒が5本のときの組み方がわかりませんorz

誰か助けて下さい!
ちなみに3本のときは、
move(N,A,B) :- display(N), display(' from '),
display(A), display(' to '),
display(B), nl.

hanoi(1,A,B,C) :- move(1,A,C).

hanoi(N,A,B,C) :- M is N-1, hanoi(M,A,C,B),
move(N,A,C),
hanoi(M,B,A,C).

こんな感じで書きました。
753デフォルトの名無しさん:2010/07/21(水) 06:10:01
手数が適当でいいなら、同じプログラムが流用できるよねw
逆に、手数を最小にせよ、のような縛りがあるなら、別にPrologに特有の宿題じゃないような気がする
754デフォルトの名無しさん:2010/07/23(金) 00:31:29
>>753
先生がドSでして・・・手数を最小にするように縛りがあります;
755デフォルトの名無しさん:2010/07/23(金) 23:24:48
FDって使ってます?
756デフォルトの名無しさん:2010/07/23(金) 23:28:59
最近は使う機会がめったに無いね。
ただ、たまに緊急ブートで使うことがあるから確保はしてあるけど。
757デフォルトの名無しさん:2010/07/23(金) 23:46:29
まさかフロッピーディスク?wwww 今時FDドライブ付いてるPC少ないだろ
>>755はCLPのFD(Finite Domain)のことじゃねーの?あれ、釣られた?
758デフォルトの名無しさん:2010/07/23(金) 23:50:22
覆面算ならFDに限る
759デフォルトの名無しさん:2010/08/17(火) 15:39:02
http://www.itscj.ipsj.or.jp/senmon/09sen/sc22.html
> 最終更新日 2010-08-09
> SC 22専門委員会

> 見直しに加えて,確定節文法(DCG),マルチスレッド,大域変数などの付加機能について

wktk
760デフォルトの名無しさん:2010/10/07(木) 23:38:18
時々ICOTのリンク変えるのやめて下さい。
761デフォルトの名無しさん:2010/10/26(火) 17:43:43
age
762デフォルトの名無しさん:2010/10/27(水) 16:16:39
「いろんな言語で宿題」スレの解答を集めた
http://nojiriko.asia/prolog/index.html
が1000解答を越えました。昨年の五月後半から
ですから約一年半。一昨年の暮れ頃に宣言した
Prolog10000Tipsの柱となるチュートリアルの
材料集めでしたが、少々時間が掛かり過ぎた。今後は
・ 誤解答の修正。
・ プログラムパターンへの分類。
・ 一つの解答にいくつかの異なったパターンの定義を追加。
・ それぞれのパターンの評価と解説。
などを継続していきます。
763デフォルトの名無しさん:2010/10/27(水) 16:25:50
>>762
あんた輝いてるよ
764デフォルトの名無しさん:2010/10/27(水) 16:55:25
あンた背中がテカッてるぜ
765デフォルトの名無しさん:2010/11/10(水) 09:00:02
Prologでボジョレーヌーボーの順位を確定することはできないでしょうか?

ボジョレーの出来を勝手に並べて見た。 - ワクワク人生のススメ!
http://d.hatena.ne.jp/orangewind/20101109/p1
766デフォルトの名無しさん:2010/11/10(水) 10:15:57
767デフォルトの名無しさん:2010/11/10(水) 11:41:07
>>765
矛盾していようがいまいが、ネチネチやっていく他はなさそうw
768デフォルトの名無しさん:2010/11/10(水) 12:10:50
世界は矛盾に満ちている。しかし、我々は一節、一節、あなたの
いうことは全て正しい、という姿勢で定義していく。
当然、矛盾に満ちたものとなるから、そこから、注釈、解釈、を
定義していく。橋渡しをしていく。
そうではなくて、モデルの段階で矛盾なくと考えるから、先に進
めなくなる。
769デフォルトの名無しさん:2010/11/10(水) 12:12:28
そういう意味で>>765はすばらしい課題だと思います。
770デフォルトの名無しさん:2010/11/10(水) 16:04:06
>>766
やってる人いたのかワロタww

771デフォルトの名無しさん:2010/11/16(火) 16:56:07
これから勉強したいのでフリーで使えるコンパイラとか教えて欲しいです
772デフォルトの名無しさん:2010/11/16(火) 16:57:46
入門ならインタプリタのほうが気軽だと思うけど
773デフォルトの名無しさん:2010/11/16(火) 18:00:07
>>771
個人で使う場合はAZ-Prologがおもしろいと思います。
企業で使う場合は有料です。
この処理系のコンパイラはPrologコードをメインループごと
C言語に変換します。それに手を加えて速いコードにすると
いうこともできますし、いろいろな環境とのインタフェース
を書くことが可能になります。
774デフォルトの名無しさん:2010/11/17(水) 16:58:08
ありがとうございます
勉強始めます
775デフォルトの名無しさん:2011/01/02(日) 08:22:56
初夢。
春に、「Programming for Artificial Intelligence」の新版がでる!
776デフォルトの名無しさん:2011/01/26(水) 12:48:16
PrologTipsの人のサイトって消えちゃった?
777デフォルトの名無しさん:2011/01/26(水) 15:04:15
>>776
ごめん。起動するの忘れてた。
apacheではなく、Prologサーバなんです。
778デフォルトの名無しさん:2011/01/26(水) 17:31:30
>>777
わざわざありがとう
そしてPrologでサーバーまで作るとは…
779デフォルトの名無しさん:2011/01/26(水) 19:12:37
ワロタw
Prologサーバーとかすごいなー
780デフォルトの名無しさん:2011/01/26(水) 19:24:17
>>779
PrologインタプリタがTCP/IP経由のサーバになっていて、
たまたまポート番号80で動いているっていうだけw
781780:2011/01/27(木) 13:29:27
話題にした途端、サーバ故障。
屋根からの落雪で光ファイバーケーブルが切れたかも・・・。
来週火曜日、調べに行ってきます。それまで停止します。
782781:2011/01/27(木) 17:30:02
復旧しました。
NTTの故障かな。停電による一時断かも。
雷の多いところで変電所に落雷する夏には
あるんですが、真冬はめずらしいですね。
783デフォルトの名無しさん:2011/01/27(木) 21:27:02
単なる停電だったようです。
ルータのことを忘れていた。停電するとここが止まるから
繋がらない。パソコンの電池は3時間以上大丈夫だから、
普通の停電なら問題ないのだが、今日はもしかすると
危なかった。すくなくとも一時間以上繋がらなかった。
784デフォルトの名無しさん:2011/01/28(金) 01:37:16
冬の方が乾燥してるから落雷は多い
785デフォルトの名無しさん:2011/01/30(日) 19:21:06
Visual Prologは使えるのか?
786デフォルトの名無しさん:2011/01/31(月) 23:19:05
>>785
よくわからないけど、Visual Prolog 固有の統合開発環境では
全角文字が通らないような気がする。詳しい人、フォローを。
787デフォルトの名無しさん:2011/02/21(月) 08:44:18.00
すみません。質問です。
SWI-Prologを使い始めたのですが、LinuxOSと
インターフェイスの取り方がよくわかりません。
shell/2述語でbashコマンドの実行はできますが、
標準出力に表示される内容をProlog項に取り込み
たいのですが、みなさんはどのようになさって
いますか?
788デフォルトの名無しさん:2011/02/21(月) 11:06:50.12
つ pipe/1
789デフォルトの名無しさん:2011/02/21(月) 12:24:20.63
>>788
ライブラリに
pipe/2はあったと思うけど、
shellとどう結びつけるのだろう。
790デフォルトの名無しさん:2011/02/21(月) 12:59:24.97
openすんだよ、streamだから。
shellは関係ない。
791デフォルトの名無しさん:2011/02/21(月) 13:31:28.19
>>790
ということは、

system(Command,X) :-
  open(pipe(Command),read,Instream),
  findall(C,(
        repeat,
        get_char(Instream,C),
        (C=end_of_file,!,fail;true)),
      L),
  concat_atom(L,X),
  close(Instream).

ですか。
792デフォルトの名無しさん:2011/02/21(月) 14:13:39.44
いいんじゃねえの
というかやってみれば?
793デフォルトの名無しさん:2011/02/21(月) 14:23:38.20
>>792
ありがとうございます。うまくいきました。
?- system(pwd,X).
X = '/usr/swi-prolog\n'.

?-
といっても私は最初の質問の方ではありませんw
見ているかな。

794デフォルトの名無しさん:2011/02/21(月) 14:32:00.59
pwdならseeとかつかったサンプルがマニュアルにある。
795デフォルトの名無しさん:2011/02/21(月) 17:56:01.26
>>791

system(Command,X) :-
    system_2(Command,L),
    atom_chars(X,L),!.

system_2(Command,L) :-
    open(pipe(Command),read,Instream),
    get_char(Instream,Char),
    system_3(Instream,Char,L),
    close(Instream),!.

system_3(Instream,end_of_file,[]) :- !.
system_3(Instream,Char,[Char|R]) :-
    get_char(Instream,Char2),
    system_3(Instream,Char2,R).

shs(Command,X) :-
    system_2(Command,L),
    shs_3(L,X).

shs_3(L,[S|R]) :-
    append(L0,['\n'|R1],L),
    atom_chars(S,L0),
    shs_3(R1,R).
shs_3(L,L).
796デフォルトの名無しさん:2011/02/21(月) 18:00:44.43
>>795 訂正

shs_3(L,[S|R]) :-
    append(L0,['\n'|R1],L),
    atom_chars(S,L0),
    shs_3(R1,R).
shs_3([],[]) :- !.
shs_3(L,[S]) :-
atom_chars(S,L).
797デフォルトの名無しさん:2011/02/21(月) 18:03:14.34
% 書き直し

system(Command,X) :-
    system_2(Command,L),
    atom_chars(X,L),!.

system_2(Command,L) :-
    open(pipe(Command),read,Instream),
    get_char(Instream,Char),
    system_3(Instream,Char,L),
    close(Instream),!.

system_3(Instream,end_of_file,[]) :- !.
system_3(Instream,Char,[Char|R]) :-
    get_char(Instream,Char2),
    system_3(Instream,Char2,R).

shs(Command,X) :-
    system_2(Command,L),
    shs_3(L,X).

shs_3(L,[S|R]) :-
    append(L0,['\n'|R1],L),
    atom_chars(S,L0),
    shs_3(R1,R).
shs_3([],[]) :- !.
shs_3(L,[S]) :-
    atom_chars(S,L).
798デフォルトの名無しさん:2011/02/21(月) 18:07:23.94
shs_3/2 は shs_2/2 であるべきだし、

ここは split/3 を定義して、

    split(L,['\n'],X).

とした方がよい。
799デフォルトの名無しさん:2011/02/28(月) 08:44:20.50
swi-prologの商用利用はどれぐらい金かかるんだろう?
800デフォルトの名無しさん:2011/03/01(火) 22:34:28.94
>>799
プログラムを保守する人員を育成する費用に比べたら無視できるくらい
801デフォルトの名無しさん:2011/03/03(木) 21:17:16.01
>>800
そうなんか。ありがとう。
802デフォルトの名無しさん:2011/03/03(木) 21:25:33.22
XPCEのメソッドframeがあるとコンパイルエラーになってしまぅ。
だから、マニュアルにあるfileviewer demoが実行できない。
みなさんは実行できますか?

:- use_module(library(pce)).

fileviewer(Dir) :-
new(DirObj, directory(Dir)),
new(F, frame(’File Viewer’)),
send(F, append(new(B, browser))),
send(new(D, dialog), below(B)),
send(D, append(button(view,
message(@prolog, view,
DirObj, B?selection?key)))),
send(D, append(button(quit,
message(F, destroy)))),
send(B, members(DirObj?files)),
send(F, open).

view(DirObj, F) :-
send(new(V, view(F)), open),
get(DirObj, file(F), FileObj),
send(V, load(FileObj)).
803デフォルトの名無しさん:2011/03/03(木) 21:45:01.39
すみません。 ’File Viewer’ここを'File'にすると
実行できました。
804デフォルトの名無しさん:2011/03/03(木) 22:33:35.24
>>802
new(F,frame('File Viewer')), は
File Viewer の前が全角の’になっている
ようです。
805デフォルトの名無しさん:2011/03/03(木) 23:03:12.84
>>804
ありがとうございます!恥ずかしいミスを・・・
806デフォルトの名無しさん:2011/03/05(土) 07:32:56.05
>>802
私の環境はUbuntu10.10でKDE環境 入出力はkonsoleを
好んで使っていますが、エンコーディングはEUCなのです。
.bashrc ファイルに
export LANG=ja_JP.EUC-JP を書き入れて使っています。
さて、fileviewerを実行してみたところ、フレームへの日本語表示、
new(F,frame('ディレクトリ表示')), はうまくいくのですが、

肝心のファイル名表示の方は
EUC文字ファイル名もUTF8文字ファイル名も共に
化けてしまいます。これはなんとかならないものですか。
807デフォルトの名無しさん:2011/03/07(月) 13:51:28.92
>>775
6月に発売延期。初夢破れたり。
808デフォルトの名無しさん:2011/03/11(金) 15:21:14.78
私の所は埼玉でたいしたことないんだが、
それでも驚いた。余震でもまた驚いた。
809デフォルトの名無しさん:2011/03/12(土) 01:00:03.66
神戸のときの地震経験したけど
そのときの恐怖を初めて上回ったわ
810デフォルトの名無しさん:2011/03/12(土) 22:04:59.40
Prologスレで何の話してんのさ…
811デフォルトの名無しさん:2011/03/13(日) 09:49:01.76
でもこの週末はム板の書き込みが激減しているね。

それはともかく、【論理】Prolog【初心者】スレの方に
ちょっと既に書いたことだが、
http://nojiriko.asia/prolog サイトの冒頭近くに、
主要述語の用例集をまとめてみた。用例対象は
このサイト内の解答の中からに限られるから、
パターンとしては十分とは言えないが、いくつかの
述語は200-300例を越える。
現在は、問題の出現順になっていて分かりにくいが、
意味、機能順に並べ直す予定。
その上で、解説を付加する。
読みにくいから、元々の出典のURLを削ってしまったが、
著作権上の問題があり、これは復活する予定です。
812デフォルトの名無しさん:2011/04/01(金) 11:51:50.14
>>807
6月15日には本当に発売されるようですよ。20ページくらいしか増えないようです。
813デフォルトの名無しさん:2011/04/19(火) 08:23:04.23
"PROLOG Programming for Artificial Intelligence" お届け予定日 6月26-28日
今度こそ本当らしい。
814デフォルトの名無しさん:2011/05/09(月) 11:47:36.97
"PROLOG Programming for Artificial Intelligence"
また延びた?アマゾンから変更のメールがきたけど
815デフォルトの名無しさん:2011/05/11(水) 15:03:42.64
>>814
うちにはこない・・・トホホ
816デフォルトの名無しさん:2011/05/24(火) 22:59:08.76
prolog、↓のスレではそこそこ人気あるぞ

学んで損したプログラミング言語
http://hibari.2ch.net/test/read.cgi/tech/1140419801/
817天使 ◆uL5esZLBSE :2011/07/05(火) 15:03:29.27
∨∨∨∨
((((((((( うちにはこない・・・トホホ )))))))))(キリッッッ!!!!
818デフォルトの名無しさん:2011/07/16(土) 02:41:10.45
糖質が湧いたな
819デフォルトの名無しさん:2011/07/17(日) 22:44:24.04
swi-prolog、UTF-8 OKと謳いながら日本語ダメだね。がっかりだ。
日本語OKというAZ-prologというのを入れてみたけど、実行環境のショボさにめまいがした。
820デフォルトの名無しさん:2011/07/18(月) 03:30:05.80
文字列としての出力がダメということ?
別にできたんだけど

$ swipl
% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,928 bytes
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.2)
Copyright (c) 1990-2010 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- format("にほんご").
にほんご
true.
821デフォルトの名無しさん:2011/07/18(月) 04:14:22.42
>>820
発見されているものとしたは、

?- readln(X).
|: にほんご

X = ['に','ほ','ん','ご']


?- assertz((にほんご、えいご)).
ERROR: Syntax error: Operator expected
ERROR: assertz((にほんご
ERROR: ** here **
ERROR: 、えいご)) .

など。
822821:2011/07/18(月) 04:16:01.88
>>820
発見されているものとしては、 ・・・
823デフォルトの名無しさん:2011/07/18(月) 05:06:20.97
>>821

readln でリストではなく文字列が欲しいという意味ならば concat_atom を使えばいいと思う
?- readln(LS), concat_atom(LS, '', L), writef(L).
|: にほんご
にほんご
LS = ['に', 'ほ', 'ん', 'ご'],
L = 'にほんご'.

あと assertz の例は意味が分からない。
何がしたいの?
824デフォルトの名無しさん:2011/07/18(月) 05:14:54.16
>>823
最初のケースは本来の用法が使えなくなってしまう。
?- readln(X).
|: abc def
X = [abc,def]

後の方は "、"や"。"の扱いについて、他の処理系との
互換性などから、如何なものか。というところ。
825デフォルトの名無しさん:2011/07/19(火) 22:30:31.69
>>820
単純にソースファイルに
f(りんご).
とか記述できないです。
826デフォルトの名無しさん:2011/07/20(水) 02:06:35.40
>>825
試してみたらいけたと思う。
こういうことだよね?
http://yourpaste.net/8761/
827デフォルトの名無しさん:2011/07/20(水) 12:32:21.34
日本語入りのときは確かUTF-8でBOM付きにしないと駄目だった。
828デフォルトの名無しさん:2011/07/20(水) 17:28:19.35
BOM付きUTF-8と来たかw
829デフォルトの名無しさん:2011/07/20(水) 17:55:44.50
826だが
使ったコードのエンコーディングはBOMなしのutf-8だよ
830824:2011/07/20(水) 18:05:06.15
私が書いたような不備、不満は
SNS上で何度も指摘していれば、必ず
そう遠くないバージョンで直してもらえる
からあまり問題はない。
指摘することが大事。
831デフォルトの名無しさん:2011/07/20(水) 19:11:37.70
>826はlinux?
少なくともwindowsではそうだった。
832デフォルトの名無しさん:2011/07/21(木) 20:08:00.72
>>827
ありがとうございます。
BOMを付けるようにしたところ、日本語通りました。
833825:2011/07/22(金) 21:54:44.84
>>827
おお、できた!ありがとう!
これで心置きなく死ねる
834デフォルトの名無しさん:2011/08/01(月) 23:47:24.38
>>818
荒らすな
835デフォルトの名無しさん:2011/08/16(火) 18:00:21.42
Erlang人気に引っ張られて、Prologも復活しつつあるな。
836デフォルトの名無しさん:2011/08/20(土) 11:03:35.09
>>835 「7つの言語 7つの世界」が受けてますから。
837デフォルトの名無しさん:2011/08/20(土) 11:27:34.88
>>836
そうか。控えめに見ても数百人がPrologの勉強を始めたことになる。
838デフォルトの名無しさん:2011/09/06(火) 18:52:11.30
ずるずる遅れてた "PROLOG Programming for Artificial Intelligence" の
予定より早くお届けできることになりましたメール来た
839デフォルトの名無しさん:2011/09/07(水) 12:01:39.53
>>838
どの辺が変わったのか分かったら教えてください。
丁度これから読もうとしているのだけど
おそらくそれの初版(1986)の和訳である「AIプログラミング」って読む価値あります?
大差無いなら日本語だし手元にあるからこれで済まそうと思うのですが。
840デフォルトの名無しさん:2011/09/07(水) 12:13:01.13
>>838
情報が少なすぎましたね。
ちなみに全くの初心者です。
英文を解釈するプログラムのプロトタイプをPROLOGで書けたら修正が楽かなと、
安易な考えを持っています。
それ以前に論理プログラムの頭になれそうも無いので無駄な気もしてきましたが。

みなさんは、本に書かれている様なパターン化した処理以外のものをスクラッチから書ける様になるまで
どの位かりましたか?自分に適性があるのかも判断したいので。
841840:2011/09/07(水) 12:46:20.89
連投で申し訳ありません。
初心者なんで初心者スレなのかも知れませんし、実はPROLOGの話とも外れます。
PROLOGを(真、偽、UNKNOWNみたいな)三値論理に拡張した様な言語はありませんでしょうか?
出来ればこれらを例えば-1から1の数値として「確からしさ」として推論出来るとベストなのですが。

上に拘らず、PROLOGライクなお勧めの言語がありましたら教えて下さい。
842デフォルトの名無しさん:2011/09/07(水) 17:17:05.20
>>839
私は>>838さんではありませんが、新版が出ようが出まいが、
「AIプログラミング」は現時点で和書では最良のProlog書です。
843840:2011/09/07(水) 18:39:52.99
>>842
ありがと。そこまで言われるなら読んでみますね。理解出来るかは別だけど。
PROLOGの学習が目的じゃないんで両方読むのは避けたかったんです。
844デフォルトの名無しさん:2011/09/07(水) 18:43:34.43
>>841
Prolog使いじゃないのだけど、Prologって真かそれ以外しかないのでは?
>出来ればこれらを例えば-1から1の数値として「確からしさ」として推論出来るとベストなのですが。
よくわからないけど、Progolっていうものはあるみたい
そうじゃないならベイジアンネットワークのようなものとか
845840:2011/09/07(水) 21:28:41.51
>>844
>Prolog使いじゃないのだけど、Prologって真かそれ以外しかないのでは?
そうですね。真偽と言いますけど実質は真かそれ以外って事ですよね。
私の目的だと「そう」「それ以外」より「そう」「違う」「わからない」とあった方が便利なもので。
実装としては偽を証明する規則も作る事になるはずです。
(その「分からない」具合を規則や事実に重み付けして「確からしさ」として数値として扱えると良いなと)

>そうじゃないならベイジアンネットワークのようなものとか
あくまで感覚的なものですけど確率で決定するのは違う気がする一方
学習させたら最後は確率に落ち着く様な気もします。この辺のモデルをいろいろ変えたかったので
手続き型の言語で作り始めるのを躊躇していました。確率で問題ないなら最初から考慮しておくべきですね。

>よくわからないけど、Progolっていうものはあるみたい
ググってみたのですが帰納論理プログラミング用の言語ですかね?
確かに自分は三値論理を使って実は帰納的な事をしたかったのかもしれないなと。
全く門外漢なのでキーワードだけでも助かります。ありがと。
846デフォルトの名無しさん:2011/09/08(木) 20:16:17.38
>>845
Prologって基本は非決定性なので、まさに「わからない」なんじゃないのかな。
外部からの介入に頼るってことでしょ。
?- member(A,[1,2]).
A = 1 の状態がまさにわからない状態では?
847デフォルトの名無しさん:2011/09/08(木) 20:22:39.67
ソクラテスは人間である。
では、アリストテレスは人間か?

という問いに対して、Noと言い切る世界観に違和感を感じる。
848デフォルトの名無しさん:2011/09/08(木) 20:25:52.30
>>847
覚えさせ方が悪いだけだろ
無垢すぎる子供と思え
849デフォルトの名無しさん:2011/09/08(木) 20:37:03.72
閉世界仮説が成り立つためには、世界で成り立つ規則は余すこと無く記述されなければいけない。
850デフォルトの名無しさん:2011/09/08(木) 20:43:34.23
多くの人間は>>847の問いにYesと答えるのだけど、

ソクラテスは人間である。
では、ピテカントロプスは人間か?

と問われると、答えに詰まるな。

この「答えに詰まる」を人間的な反応と見なすべきなのか。
851デフォルトの名無しさん:2011/09/08(木) 20:45:34.36
ソクラテスは人間である。
では、サイクロプスは人間か?
852デフォルトの名無しさん:2011/09/08(木) 20:48:35.46
いやだから、間に哲学者は人間であるとか入れろよ
853デフォルトの名無しさん:2011/09/08(木) 20:54:07.98
確かに、ピテカントロプスにも哲学者がいたかも知れない。
サイクロプスに哲学者がいなかったとも言い切れない。

これこそ人間の持つ知恵の計り知れなさだ。
854デフォルトの名無しさん:2011/09/09(金) 00:06:55.70
哲学というのはものごとの共通性をみてとれるようになってはじめて可能になる学問です。
頭脳活動がそのレベルに達するには歴史の積み重ねが必要であり、
有史以前の人類の頭脳には不可能なことでした。
855840:2011/09/09(金) 18:01:18.64
>>846
実は「分からない」としたまま、より上位の推論を行って「推測」する事を考えています。
なので3値論理に拡張したPROLOGみたいなものは無いのかなと。
PROLOGの「真」「わからない」だと推論を止められなくなるもので。
856デフォルトの名無しさん:2011/09/09(金) 18:22:29.33
全部結局は二値演算です。
857840:2011/09/09(金) 18:33:59.41
>>856
二値演算って言葉をググっても見つけられなかったんだけど、
二進数って事?二項演算って事?二値論理って事?
858846:2011/09/09(金) 19:46:31.26
>>855
私が書いたことは嘘なんだが、非決定性という意味を考える上では
役立つと思ったから書いてみた。現在のPrologでは真は進め、偽は戻れ。
わからないは上か下へどけておく、くらいの意味なら追加可能だろう。
遅延評価の類だが、遅延評価となると、並列Prologの類がガードを導入して
非決定性の制御を排除したように、現在の体系で考えるのは困難になる。
859デフォルトの名無しさん:2011/09/09(金) 21:23:57.51
単純な非決定性導入については第五世代の頃に決着ついていて、
評価戦略を上手く論理型に導入するために、今は制約を考えているわけです。
制約は簡約戦略と見なしたり、簡約戦略を導出したり出来ますから。
860デフォルトの名無しさん:2011/09/09(金) 22:50:16.28
その決着はどういうものだったの?

xxxベンチマークで効率が悪すぎる、みたいな感じ?
それともoooプログラムが書きにくい?
861840:2011/09/09(金) 23:27:18.49
ググりながら必死に書いてます。

「偽」を「わからない」と解するのは全ての規則が分かっていない事を前提にすれば成立するよね?
(誤りを含む)情報より自己学習するモデルを想定していたもので、完全な事実や規則は記述出来ないとの立場でした。
正直非決定性との説明は無視してしまったのですが、
今思うと「わからない」の解釈に誤解を与えてしまったのかもしれません。
「わからない」は真値を取る(推論出来た;真値となる)領域として理解されていたのですね?
私は推論に失敗した(推論できなかった;非真値となる)領域として説明していました。

>>858
非決定性とは解(真値)を扱う際の振る舞い。ガードとはその規則が成立する前提の事でしょうか。
バックトラック何かを排除する為にガードがあると言う事でしょうか?
三値論理にするなら偽で止まれ。真なら進め、わからないなら(後で補間した事が分かる形で)変数に置き換えて進め。って感じかと。

>>859
制約は変数の条件みたいなものですよね?
制約があると、より決定的となるようなルールを書きやすいとか言う意味なら理解出来ますが、
解釈が間違えていますでしょうか?

PROLOGの勉強を始めたばかりなんで、頓珍漢な事書いてます?
862840:2011/09/09(金) 23:46:19.87
>>861
補足です。
3値論理で「分からない」になるのは、真の推論、偽の推論共に真もしくは共に偽の時です。
私のモデルでは偽となる規則を別途定義する事になります。
863デフォルトの名無しさん:2011/09/10(土) 00:48:37.05
ええと。

そういう自然言語による散発的なテーゼじゃなくて、きちんと三値の真理値表を書いて、
きちんと理詰めでやってかないと、意味わかんないと思うよ。
864デフォルトの名無しさん:2011/09/10(土) 01:26:36.09
一人でやってるんじゃなかろうな。

なんにせよ、ググって書くような人の思いつきが
先人の思いつきより有益だったら
ほんとに素敵な話だよな
865840:2011/09/10(土) 01:27:01.42
>>863
表書く事も考えたんだけど、俺のロジックの説明なんか興味あるのかな?

真の規則 偽の規則 真理値
===========================
偽    偽    わからない
偽    真    偽
真    偽    真
真    真    わからない
866デフォルトの名無しさん:2011/09/10(土) 02:20:37.24
>>861
おそらくこのスレでは普通のPrologについての正確なアドバイスはされると思うけど、
あなたの考える三値論理の理論は、あなた自身で一度正しく構築してみないと、
他の誰も知らないし説明できないと思うよ。
結果的にその理論にとってPrologが適切な手段かどうかについても、同じ事が言えるんじゃないかな?

それを踏まえた上でアドバイスすると、840さんは一度普通のPrologの処理系の仕組みを勉強されたほうがいいのでは?
Prolog自体は単純だからすぐに作れるし、理解が深まる。そうすれば、あなたの理論の役に立つかはどうかも分かりやすいんじゃないのかな?
867858:2011/09/10(土) 06:37:15.53
>>861
>>861
並列(並行)論理プログラミングに現れるガードは、節をガード部と本体部に
分けます。Prologだと頭部と本体に分けますよね。ガード部は頭部+簡単なロジックです。
簡単なというのは、ユーザが定義した複雑な述語定義ではなく、integer(X)とか、X >= 3 のようなゴールという意味です。
このような並列言語では、頭部のある変数が具体化されるまで遅延して待つのですが、
変数が具体化され、しかも、ガード部のロジックが真になると、
「この節が唯一選択されて」本体部の実行に入ります。この述語の待ち合わせ中の他の節は
もはや決して選択されることはなく、捨て去られます。この点がバックトラックに備えているPrologとは
異なります。非決定性は捨て去られています。
こういう戦略をとらないと、本体部のAND関係のsubgoalに順序性がなく実行され、ガード部のすべての節(OR)が
生きた状態で、待ってしまいますから、必要メモリー量、通信量、待ち合わせ機構の管理データの量、
遅延時間の積など、多くの点で、大きなプログラムを実行することが不可能になってしまいます。
868846 858 867:2011/09/10(土) 07:24:52.32
>>861
それから、もうひとつ。>>858で前に書いた>>846の非決定性の記述を嘘としました。このことの説明。
確かに、Prologシステムから見て、どの解だか「わからない」状態は存在します。それで外部からの
介入を待つのですが、外部からの介入(通信)は「真」か「偽」に限られています。結果として、
前に進むか後ろに戻るかという点ではやはり二値論理となっています。あなたの書かれた「わからない」
とは大きく異なる「わからない」なのです。
真偽値以外の全く、異なった動作を生む何かを受け入れるようにできないものかとは、Prologプログラマ
なら誰しも考えることですが、どんなものでしょうか。
869デフォルトの名無しさん:2011/09/11(日) 00:38:18.28
>>861

 Prolog で、実用的なプログラムが書きにくいというのも、真、偽の二値でやっている
ところにあります。
 データベースに無いというのが、偽が返り、入出力のエラーでも、偽が返ってくるので、
エラー処理を別処理できないというのが実用的なプログラムを作りにくくくしている大きな
原因の一つとなっています。
870デフォルトの名無しさん:2011/09/11(日) 03:17:32.29
パターンマッチングを使える関数型言語のHaskellやScalaなどは、Prologの代替になるうる?
871デフォルトの名無しさん:2011/09/11(日) 10:38:49.24
バックトラック相当なくていいなら幾らでもあるだろ。
872デフォルトの名無しさん:2011/09/11(日) 12:11:47.94
HaskellやScalaのパターンマッチは、Prologのパターンマッチである単一化とは違う。
873デフォルトの名無しさん:2011/09/11(日) 12:49:19.56
>>870
代替えにはならない
関数型言語と論理型言語は全く別
関数型論理型言語のcurryとかなら代替えになるかも知らんが
874デフォルトの名無しさん:2011/09/11(日) 16:11:58.72
>>870
Prologの持つ素直なデータベース検索の雰囲気だけはこの言語だけのもの。
プログラム生産の場でのそれがどれだけ効いてくるかといえば、実はたいした
ことではないだろうけれど、プログラミングの楽しさという観点からは段違い。
875デフォルトの名無しさん:2011/09/11(日) 16:21:49.65
>>870
相当に日本語がおかしい書き込みになったので書きなおし。

Prologの持つ素直なデータベース検索の雰囲気はこの言語だけのもの。
実際のプログラミングの効率等にそのことがどれだけ効いてくるもので
あるかはよく判らないけど、楽しさという観点からいえば、段違い。
876uy:2011/09/11(日) 16:59:55.54
Prologにはゴミしかいない
以前、俺が幼き頃 一度、俺のblogにもPrologの宣伝しにきたゴミカスがいたんだよ
はぁ?www って思ったね
俺はC++やってんだよ 相手の力もわからないカス君が

本当におめでたかった 学生か社会人かで区別する奴はゴミ
Prolog厨はそんなのしかいない ゴミ言語乙
877デフォルトの名無しさん:2011/09/11(日) 17:21:12.93
>>876
私もPrologの話をする時に「学生」という言葉は使うが、それは、現在のPrologの現役であり
この言語を学ぼうとしている95%以上が、学生だからだ。どんな講座を受けながら、Prologが
難しいと感じているかは我々にとって関心事のひとつ。
878デフォルトの名無しさん:2011/09/11(日) 19:46:01.48
879デフォルトの名無しさん:2011/09/11(日) 19:52:17.33
>>859
まだいますか?
決着の内容をわかる範囲で教えてくれたら嬉しいです。
880uy:2011/09/11(日) 21:48:13.25
>>877
こういうゴミみたいなしゃべり方するゴミは早く死ねばいいと思う
気持ちが悪いなあ


>難しいと感じているかは我々にとって関心事のひとつ。

悪いんだけど、お前「 中学生レベルの国語 」 からやり直したほうがいいよ


まじで気持ち悪いな お前 ゴミだな
881uy:2011/09/11(日) 21:56:21.02
>>877
こういうゴミみたいなしゃべり方するゴミは早く死ねばいいと思う
気持ちが悪いなあ
882デフォルトの名無しさん:2011/09/11(日) 23:09:03.91
なんかあぼ〜んが多いと思ったらこんなスレにまで来てるのか…
暇人だな(笑)
883uy:2011/09/13(火) 05:30:36.80
そう
「こんなスレ」って表現がただしいね

見る価値もない



きてやってるだけ感謝しろよ
884デフォルトの名無しさん:2011/09/13(火) 05:47:41.35
>>883
おはよう
885デフォルトの名無しさん:2011/09/16(金) 09:01:20.97
Prologの授業を受けながらのツイートが結構ある。きまって「Prologわかんねー」という文面。
せめて何がわからないか、つぶやいてくれれば、教官の目を覚ます質問を考えてあげられるのに。
886デフォルトの名無しさん:2011/09/16(金) 11:09:47.94
わかんねー=やりたくない
やる人は黙って取り組んでる
887デフォルトの名無しさん:2011/09/16(金) 13:04:33.55
わかった!
なんて一々言って回らないよな
888デフォルトの名無しさん:2011/09/16(金) 18:39:29.68
検索TL見ながら講義すると面白いよ。地域で絞れば意外と引っかかって、
「えー、@hogeさん。それはですねー」って説明したら顔真っ赤にしてて笑った。
889デフォルトの名無しさん:2011/09/17(土) 00:49:10.03
?- 年齢(俺, X).
X = 40

?- 童卒年齢(俺, X).
false
890デフォルトの名無しさん:2011/09/18(日) 01:41:37.26
>>889

?- 童卒年齢(俺, X)..
X = 80.
だろ
891デフォルトの名無しさん:2011/09/18(日) 04:49:16.30
>>890
Prologで「死ぬまで**することはない」はどのように表現するの?
892デフォルトの名無しさん:2011/09/18(日) 10:59:13.91
>>891
?- 初めてセックスした(Person, Year), 他のあれこれ.
false
893デフォルトの名無しさん:2011/09/18(日) 14:50:37.09
Prologの節データベースにProlog以外の言語でアクセスするのって面倒ですよね。
現状、Prologはマイナー言語なんで、他の言語からの再利用を考えた節形式にしたほうがいいですよね。

例えば、↓みたいな節を、Prolog以外で取り出すなんて想像しただけでクラッとくるので、
foo(BAR) :- hoge, fuga.

「データ」としての意味合が強くて、かつそのデータを他の言語からも利用する場合が
想定される節は、変数を含めないようにするとか、、考えないとだめですね。
ユニファイなんてPrologライクな言語以外にサポートしてませんからねぇ。

んで、

foo :- bar, baz.

とかなら、barとbazというカラムを持ったfooというテーブルのレコード、として扱えますよね。
とかPrologの扱いに慣れた人は普通にやってたりするんでしょうかね?
なんかPrologを習うときはPrologの世界に閉じた説明ばっかりで、実用が想定されてないので良くわからんのですわ。
894デフォルトの名無しさん:2011/09/18(日) 14:57:48.15
補足
ここでの実用ってのは、既に存在するシステムとの連携、という意味ですかね。
895デフォルトの名無しさん:2011/09/18(日) 19:37:15.22
Prologの処理系何使ってるの?
896デフォルトの名無しさん:2011/09/18(日) 19:52:45.50
>>893
Prologをpopenできて、pipe入力で解を貰えればよいのでは。
Goalはprologコマンドの引数で渡せばよい。変数があっても問題なし。
parse_atom(Argv,P,_),call(P),writef('%q',[P]),
でPrologの標準出力をpipe経由で受け取り、引数に渡した元の文字列と
比較して差異をとれば "童卒年齢(俺, X)" -> "童卒年齢(俺, 80)" から X = 80が簡単に解析できる。
897デフォルトの名無しさん:2011/09/19(月) 04:51:24.06
>>896
Prologの各処理系は起動時にスタック領域の確保など大きな仕事をする傾向があり、
他の言語に較べると起動に時間がかか。AZのようにコンパイルした時に小さめの
ユニットになるならば、問題はないだろうけど。
898デフォルトの名無しさん:2011/09/20(火) 07:47:48.62
>>892
始めてセックスした(俺,31).
が定義済だとして通過しても、他にあれこれでfailしたら、
やはり結果はfalse
899デフォルトの名無しさん:2011/09/20(火) 08:48:14.56
>>889あたりから延々とやってる奴
ほんとにそれだけしかアイディアが出ないのなら
計算機科学は無理だな
900デフォルトの名無しさん:2011/09/20(火) 08:55:48.35
ネタレス応酬の流れで何を言っているんだ
901デフォルトの名無しさん:2011/09/23(金) 02:36:36.92
?- 有意義(>>899のコメント).

false
902デフォルトの名無しさん:2011/10/01(土) 05:46:20.80
この言語の強みって何処にあるんだ?充足補充問題とか、その辺かえ?
現実的な場面での利用法を教えておくれ
903デフォルトの名無しさん:2011/10/01(土) 06:22:04.53
>>902
スモールビジネス
904デフォルトの名無しさん:2011/10/01(土) 11:04:00.53
>>902
論文を生産する
905デフォルトの名無しさん:2011/10/03(月) 07:42:39.79
>>902
スモールビジネスを補足すると、金融業のような多量なデータを
比較的短時間に捌くことはできないですね。ですから、スモール。
ビジネスは契約であり、つまり言語処理ですから、短文の記述、
解析に強いPrologは向いています。
事務計算も特に問題はありません。ただ、様式出力のライブラリと
いったものはまったくといってよいほどありませんから、他の系に
渡して処理することになります。
906デフォルトの名無しさん:2011/10/04(火) 00:57:25.38
バックトラックとユニフィケーションの特徴は関係するのか?
金融って、haskellとかocamlの方が流行ってない?
907デフォルトの名無しさん:2011/10/04(火) 08:44:17.94
>>906
どちらもPrologが遅い理由としてあげられます。
他には述語の定義節数が非常に多くなると追加・削除が遅くなります。
50万節を超えるような述語など。
908デフォルトの名無しさん:2011/10/04(火) 20:59:48.27
Prologが処理の遅さなんか問題にならないくらい人間の思考にマッチした言語で、
二日酔いや40℃の高熱のときでも、かなり高度な機能をコーディングできるように
なればよいのに。
909デフォルトの名無しさん:2011/10/05(水) 05:50:31.88
>>908
人間の方が数学人間に変われば、Haskellなんかは有力。現状の
国語人間ばかりだと、Prologはもっともましな言語。
910デフォルトの名無しさん:2011/10/05(水) 06:42:37.61
Prologで書かれたフリーソフトウェアで有名なのをいくつか教えて欲しいんですが…
オープンソースでもかまいません。
911デフォルトの名無しさん:2011/10/05(水) 06:48:38.73
>>910
私は全然知らない。神戸大学の田村先生の研究室か、九州工大あたりに
問い合わせれば、いい答えが出てくると思いますが。
912デフォルトの名無しさん:2011/10/05(水) 07:08:17.66
フリーじゃないけどたとえば論文で
Evaluation of Behavior Description Based CAD System Used in Prolog Machine Logic Design
913デフォルトの名無しさん:2011/10/07(金) 09:10:15.38
>>893
>Prologの節データベースにProlog以外の言語でアクセスするのって面倒ですよね。

schekog の %is
914デフォルトの名無しさん:2011/10/07(金) 09:10:49.60
>>913
>schekog の %is
schelog の %is
915デフォルトの名無しさん:2011/10/07(金) 12:30:52.77
>>835
ひとつの書籍がこれほどまでに流れを変えるとは。驚き。
8月以降twitter上のProlog情報が数倍に増える。
916デフォルトの名無しさん:2011/10/07(金) 20:11:32.88
ああ、Erlnagのパターンマッチ渡しから、Prologに思いを馳せる訳か。
917デフォルトの名無しさん:2011/10/10(月) 12:42:42.97
arity/prolog は、2テラバイトの仮想記憶、b-tree の採用などで、
比較的大規模なシステムも構築できたんだが、どうして普通の
Prologなんかは、そんな方向を採用しないんだろうか?
918デフォルトの名無しさん:2011/10/10(月) 14:20:32.67
>>917
その答えは私にはわかりませんが、
大規模オンメモリデータベースとしてしか、Prologの生き残るスペースは
ないかも知れない。
919デフォルトの名無しさん:2011/10/10(月) 19:38:32.28
グルー言語としてはどうですかね?
920デフォルトの名無しさん:2011/10/10(月) 21:24:37.86
>>919
元々極めて有力ですね。ただ、そういう低レベルで使う発想は初めからなかった。
もうひとつ、Prologのプログラミング作法は大規模なスタックサイズを前提にした
ものが多かった。このような用途で最小サイズでの使用を要求されると、
スタックオーバーフロー等の懸念がなくはない。立ち上がりが遅いというより、
そちらの懸念から使われてこなかったということは言える。
921デフォルトの名無しさん:2011/10/11(火) 23:08:03.52
>>919
全然駄目なのでは?
結局各言語で特化された推論エンジンライブラリが実装されていって、
Prologの活躍する場はなくなった。
922デフォルトの名無しさん:2011/10/12(水) 06:35:58.18
>>921
推論エンジンとグルーとは関係がないでしょう。
923デフォルトの名無しさん:2011/10/12(水) 06:43:08.99
>>921
全然関係ない話だけど、推論エンジンなんて、日常的に使っていてこそ、
いざと云う場合使えるので、そういう意味では、ライブラリで実装されたからと
いって誰でもが使えるものではない。
924デフォルトの名無しさん:2011/10/12(水) 09:35:58.81
>>923
推論を日常化する。つまり、訓練の場だからね。Prologは。
それでも、うまく書けない。推論エンジンが丸々Prologだと
しても、日常的に書いていなくては、書けません。
925デフォルトの名無しさん:2011/10/12(水) 10:04:05.99
>>924
日常化というのは違和感がある。空気のように意識しないものにする、くらいだろう。
926デフォルトの名無しさん:2011/10/13(木) 00:08:55.78
苦節十年、息をするように自然にカットが入れられるようになった。
927デフォルトの名無しさん:2011/10/13(木) 07:59:45.70
鰻職人の「串打ち3年、裂き8年、焼き一生」で言えばやっと串打ちができた段階ですな。
928デフォルトの名無しさん:2011/10/13(木) 09:04:50.16
>>926
Pureな論理式の世界から解脱するのに十年か。
929デフォルトの名無しさん:2011/10/14(金) 09:45:27.93
>>928
25年以上やってるけど、論理式の世界から解脱できない・・・。もっと
俗にまみれなくてはね。
930デフォルトの名無しさん:2011/10/14(金) 19:20:52.74
まずはassert/retractの利用に対する罪悪感をなくすところからだね
931デフォルトの名無しさん:2011/10/15(土) 07:15:34.80
遂に Prologブーム が来た。ブームっていうのは怖いけどね。
932デフォルトの名無しさん:2011/10/15(土) 08:13:04.97
ききかじってプロログスゲーおわり、で収束しそう
何年に一回くらいこれからプロログって聞くけど実際は...
933デフォルトの名無しさん:2011/10/15(土) 10:00:07.95
>>931
海外ではstackoverflowサイトの質問数の急増があるし、
国内では、twitterの書き込みの急増。
さらに、Tiobeのインデックスの急伸。ErlangやHaskellを再び抜き返す勢いだ。
もともと、授業を受けたことのある人だけで国内で一万人を遙かに超えるのだから、
潜在人口はある。どれだけ持続するかだな。
934デフォルトの名無しさん:2011/10/15(土) 10:10:51.01
>>933
日本は「7つの言語 7つの世界」だと思う。海外は、よく判らないが、
4月かなIBMがワトソンの言語解析に関係して、わざわざPrologを強調した。これも謎。
今更って感じで受け止めた人が多かったようだけど、影響はあるのだと思う。
935デフォルトの名無しさん:2011/10/15(土) 10:29:51.88
Prologの授業を受けたり、講習会にでたことが有る人の総計は2-3万人くらいでしょう。
さらに自習者も加えて3万人だとすると、そのうち現在プログラマをしている人は少なくとも1000人はいる。
この人たちの何人を復活させることができるかでしょうね。100人単位で復活してくれば影響力は十分あります。
936デフォルトの名無しさん:2011/10/15(土) 10:47:57.56
>>935
WikipediaのPrologも丁寧すぎるくらいに充実して、元々文法が簡素なPrologの
学習サイトとしては、あれで十分という声もある。情報が少ないという弱点は
解消されつつある。準備は整ったというところか。
937デフォルトの名無しさん:2011/10/15(土) 11:03:34.98
wikipedia程度で…

技芸レベルの本の翻訳が数冊ないと。
938デフォルトの名無しさん:2011/10/15(土) 11:06:16.55
>>937
初心者に技芸は全くいらない。
939938:2011/10/15(土) 11:10:37.23
Prologは実際のコードを見て見様見真似だけで進むべき言語で、
それができない場合は(例えば再帰が理解できないなど)向いていないから
断念した方がよいと思う。
940デフォルトの名無しさん:2011/10/15(土) 12:52:10.90
それはなぜ?
941デフォルトの名無しさん:2011/10/15(土) 14:33:28.79
>>940
他のプログラミング言語と際立って異なる点は、
ユニフィケーションと導出以外に学ぶべきことがないと云う点。
「学ばない姿勢」がむしろ必要。
Prologとは単純なクイズです。
論理の授業で取り上げる場合違ったアプローチになるのは
仕方有りません。しかし、ほとんどの場合、それはPrologの
普及という観点からは「マイナスであった」と断じてよいと
思います。
942デフォルトの名無しさん:2011/10/15(土) 16:00:22.48
つ チラ裏
943デフォルトの名無しさん:2011/10/15(土) 16:23:09.28
>>938
技芸が初心者にとって難しすぎるということはあるかも知れない。それから、
一般にPrologの参考書の課題が足早に進みすぎるとか。だけど、リストについて
全く知識のない初心者がプログラムを見るだけで、 X = [A|B], のような部分を
理解するということは、やはり考えにくい。そういうレベルからWikiのような所で
書くわけにもいかないのだから、適切な導入テキストは必要だと思う。
944デフォルトの名無しさん:2011/10/15(土) 20:45:16.25
Prologブーム再燃って、ソースどこ?
945デフォルトの名無しさん:2011/10/15(土) 20:53:08.66
:-)
946デフォルトの名無しさん:2011/10/15(土) 22:06:20.56
>>944
このスレw >>933 かな。
Tiebe Index で2月51位からこの二ヶ月で39位まで上昇したのは確か。
ただ、以前の計測が誤りで、修正しただけ、という説も。Prologはプログラム言語の他に歌のグループや
Car racing さらに、アニメやゲームなどにも現れるから、見極めが難しいのかも知れない。
947946:2011/10/15(土) 22:33:35.99
>>946
Tiobe だったか。
948デフォルトの名無しさん:2011/10/15(土) 23:42:15.97
処理対象を述語で表すか項で表すか、はどうやって使い分けてますか?

たとえばツリーは
parent(1,2).
parent(1,3).
parent(2,4).
のようにも表せるし
node(1,[node(2,leaf(4),()),leaf(3)]).
のようにも表せますよね。
949デフォルトの名無しさん:2011/10/16(日) 00:18:42.77
>>948
項で表すことはしません。全部述語、単位節。
引数としてリスト以外の複合項を渡すこともないですね。
950デフォルトの名無しさん:2011/10/16(日) 00:23:09.35
述語はグローバル変数のようなものだから、
引数として項で入力データを渡す方が綺麗だよね。
遅いけど。
951デフォルトの名無しさん:2011/10/16(日) 01:09:43.22
>>948
問題解決にノード間の関連が重要な場合は、迷わず命題(単位節)で書く。
そうすることで、grand_parent(X, Y) :- parent(X, Z), parent(Z, Y). のような述語と
その述語を使った演繹(推論)が可能になる。
952デフォルトの名無しさん:2011/10/16(日) 02:24:11.57
それは項を使ってもできるでしょ。
ただ述語の引数がひとつ増えるだけで。
953951:2011/10/16(日) 02:55:55.11
>>952
もちろん項表現でもコードは書けます。
ただし「問題解決にノード間の関連が重要な場合」には、
命題として定義するのが望ましいという話です。

項表現が望ましい場合もあります、
たとえば、単純にデータ構造としての直積(C言語の構造体)を表現したいのなら、
項表現を用いるのが望ましいと思います。
この場合には親要素と子要素との間に存在する「親子関係」は無視されますが、
それはそれでかまわないという応用は多々あるでしょう。
954デフォルトの名無しさん:2011/10/16(日) 06:15:10.97
述語定義の以前的に構造が決まっている場合がある。例えば行列。それ以前の部分はPrologが関与しない。
句構造文法における辞書とか、あるいは一般的にフレームとか。こういう場合は、構造体を定義する。

変化する部分が少数に特定できる場合は、引数に選択したアトムを指定し持ち回る。
特定できない場合は、フレームが典型ですが、構造体で渡す。そうでないと要素数64のフレームは
64 * 2 = 128 引数以上必要になり煩瑣だ。

つまり、推論のどん詰まり、プリミティブな情報を何に求めるか。構造体であることも有りうる。
しかし、あくまで基本はアトム。集合の外延的記述データ。これを単位節の引数に列記する。
955デフォルトの名無しさん:2011/10/16(日) 06:23:21.94
項の場合に親子関係が無視されるというのがわからない。

項表現の利点は
・処理対象データが局所的なこと(物理的にでなく、論理的な意味で)
・prologの持つ一階性の制約を受けないこと(全解計算に集合述語不要)
欠点は
・データを受け渡す記述の手間
・実行効率
だと思う。

基本的に、Haskellのような関数型言語の利点と欠点がそのままあてはまる。
956デフォルトの名無しさん:2011/10/16(日) 06:32:59.69
手元の本をみると、技芸は伝統的な述語表現派、Bratkoは項表現派だね。
957951:2011/10/16(日) 06:39:39.60
>>955
解決すべき問題に「ノード間の関連が重要」だとして、以下のように項で表現したとする。(>>948から引用)
 node(1,[node(2,leaf(4),()),leaf(3)]).
この場合、述語 grand_parent/2 を、>>955はどのようにコード化するのだろうか?

% もしも述語表現であれば、>>951のように「論理的に簡潔」なコード化ができる。
958デフォルトの名無しさん:2011/10/16(日) 06:40:58.45
>>956
それは面白い指摘だ。
959デフォルトの名無しさん:2011/10/16(日) 06:48:41.74
>>955
findall/3, setof/3, bagof/3 のようなメタ述語。述語で指定されたデータからリストへの変換は
Prologそのものであると認識する必要がある。これなくしては、Prologの能力を半分も利用できない。
使用を絶対にためらわないこと。述語定義の作法に悪影響がでる。
960951:2011/10/16(日) 07:10:07.20
>>957の補足。

>>951でも書いたが、項表現を全面的に禁止すべきとまでは考えていないので、誤解しないでほしい。
解決すべき問題が関連(親子/隣接/参照...etc)としてモデル化される場合、それらは命題として表現すべきと考える。
ただし、それらから演繹(推論)導かれた結果を処理するのは、(直積構造としての)項表現が望ましいと思っている。
現実の応用には様々な階層的なデータ構造がある。たとえばCSV/JSON/XMLのように。
演繹の結果をそれら応用に合わせて項として処理(コード化)する事については、何ら反論する気は無い。
961954:2011/10/16(日) 07:13:01.91
Prologの得意とする領域は、>>954で書いてみた以前的な部分ではないか。
それ以後は関数型で書いても差が出ない。現実のデータがどう抽象されるか、
問題の言語的な認識がどう述語として整理できるか、そこら辺にPrologの本領は
あると思う。
962951:2011/10/16(日) 07:33:10.41
関数型言語と比較して、論理型言語であるPrologが優位である点は
関連(relationship)を簡潔に表現できる点にあると思う。

簡単に言うと、与えられた課題が「1対n の単方向写像」として表現(モデル化)できるのなら、
その課題は関数型言語で簡潔に記述できるし、処理効率の面でPROLOGに勝ち目は無い。(...と言い切る)

それに対して、課題が「m対n の双方向写像」であるなら、論路型言語が絶対的に優位となる。
これはデータベースのE-R図やUMLのクラス図を知っていれば、日常的な例であると理解できるはずだ。
963デフォルトの名無しさん:2011/10/16(日) 07:56:51.75
ルールを記述する場合においては有利なんじゃないかな。
例えばメールフィルターの設定とかに応用できないかな?
思い付きだけど。
964デフォルトの名無しさん:2011/10/16(日) 08:00:23.06
これからソフトウェアはますますインテリジェンスが要求される。
ユーザーは、チェックボックスとかテキストエリアなどに入力した簡単な設定をするだけでなく、
ルールを設定してある程度ソフトウェアに自動化してもらいたいのね。
965デフォルトの名無しさん:2011/10/16(日) 08:09:09.64
>>962
なるほどね。
関連を簡潔に表現という部分に補足するなら、返り値が事実上ないと云う点が大きいと思う。
常にデータ構造を平坦に保てる。本体部分のSubgoalも並記されたものとして読めばよい。
だからそれを押し進めて、引数はアトムでありたい、と云うことだと思う。
966デフォルトの名無しさん:2011/10/16(日) 09:21:52.90
表現力の話なら述語表現で出来て項表現にできないことはないだろう。
単に述語のリストを作ればいいだけ。

parent(1,2).
parent(2,3).
...

というファクトの集合は
[parent(1,2),parent(2,3)]
という項のリストで表せる。

論点は、効率を取るか、モジュール性や理論的な美しさを取るかの違い。

余談だが、経験的に言うと、項表現の方が述語を双方向的にしやすい。
述語表現ではどうしても副作用に頼る部分がでてくる。

まあリストで持つのは効率悪すぎだから、インデックスがきくような
データ構造を作って、モジュール化してしまうのがいいだろうね。
967デフォルトの名無しさん:2011/10/16(日) 09:49:11.05
横からだけど、すごい参考になった。Bratkoって最近四版がでたアレだよな。
Art of Prolog しか持ってないのでちょっと注文してくる。
968デフォルトの名無しさん:2011/10/16(日) 12:28:25.76
>>955
> 項表現の利点は (全部略)
> 基本的に、Haskellのような関数型言語の利点と欠点がそのままあてはまる。

全然違うだろ。
文法的には関数型言語はC言語風でも全く問題ない。
ML以降の流れでああなっているというだけで。
Prologはそうじゃない。歴史を無視しても制約がある。
969デフォルトの名無しさん:2011/10/16(日) 13:10:01.17
>>968
C言語風とは?
970デフォルトの名無しさん:2011/10/16(日) 13:14:26.59
横レスだけど、>>955のカキコ内容が自分にはまるで意味不明 .
しかも、そこからどうやってHaskellうんぬんにつながるのか、まるで分からんw
971デフォルトの名無しさん:2011/10/16(日) 19:14:19.69
この流れは >>948 から続いているのかな。そうだとすると、>>948のレスとして、
Prologは述語の節定義を基礎にバックトラックを使ってのプログラミングと、
リストデータを使っての再帰的プログラミングの組合せで書くものだ、という
当たり前のことをはっきり述べるべきではないかな。
巡回問題など木構造を扱うものは、リスト構造を取らず再帰的に書けるが、
これはプログラマが節をまたぐ論理的な連関を仕組んだからで、その努力なしに
書くためのPrologのサービスはリストしかない。
その上で、リストの中に複雑な項(複合項)を書かない理由を述べれば良いのだと思う。
972デフォルトの名無しさん:2011/10/16(日) 22:25:14.91
>>971
> これはプログラマが節をまたぐ論理的な連関を仕組んだからで、その努力なしに
> 書くためのPrologのサービスはリストしかない。

トイ・プログラムしか書いたことない人?
973デフォルトの名無しさん:2011/10/16(日) 22:32:41.51
Prologはトイ・ランゲージ
974デフォルトの名無しさん:2011/10/17(月) 06:16:14.88
>>972
他に何かあったかな?
975デフォルトの名無しさん:2011/10/17(月) 06:41:41.12
>>974
functor/3による分解があるということなのでしょう。
976デフォルトの名無しさん:2011/10/17(月) 11:50:33.43
DSLを定義して、これの上でアプリ開発、それをPrologで解析して実行というのは
考えらるし、確かに項の読み込みで終始する。でも、そんなことなら最初から
Prologで書きたい。
977デフォルトの名無しさん:2011/10/30(日) 23:49:45.84
こんなのあるのね。

Overlay GHC
http://www.media-art-online.org/ghc/
978デフォルトの名無しさん:2011/11/03(木) 19:52:26.79
Prologで自然演繹はできますか?
979デフォルトの名無しさん:2011/11/03(木) 22:48:49.68
Prologって普通に書いてておもしろい言語だから!!
一番好きな言語がprolog
大学の頃、出会ってよかったと思う。
だからこんなブームが来ると逆に・・・・。
980デフォルトの名無しさん:2011/11/04(金) 06:59:27.60
Prologのパズルゲームとかあると面白いかも。
じわじわと迫ってくるインタプリタが来る前に節を追加削除してゴールに誘導するみたいな。
981デフォルトの名無しさん:2011/11/06(日) 15:03:28.15
SWI-PrologとGNU Prologってどっちがよく使われてるの?
982デフォルトの名無しさん:2011/11/06(日) 15:25:42.81
このすれでSWIとGNUで検索した限りではSWIっぽい。
983デフォルトの名無しさん:2011/11/06(日) 15:25:57.45
>>981
SWI-Prolog
984デフォルトの名無しさん:2011/11/06(日) 15:30:10.93
日本でPrologがもう一度流行るかどうかは、SWI-PrologとXPCEグラフィックライブラリの
非常によくできた日本語マニュアルが作られるかどうかにかかっている。現在ある、英語版
つまり本家のマニュアルはあまりできがよくないから、これを翻訳したのではだめ。
985デフォルトの名無しさん:2011/11/06(日) 15:58:29.18
マニュアル云々より日本語使うと表示が崩れるのはなんとかならんのかね?
986デフォルトの名無しさん:2011/11/06(日) 16:24:32.91
開発環境が不満
今どきEmacsでちまちまやってられん
Eclupseみたいに述語一覧とかリファクタリングとか「まともに動く」IDEないのかな
987デフォルトの名無しさん:2011/11/06(日) 16:25:13.56
Eclipseみたいな機能、述語一覧とかリファクタリングとかできる、「まともに動く」IDEないのかな
988デフォルトの名無しさん:2011/11/06(日) 16:33:25.03
IDEの開発には無茶苦茶労力がかかるし、Eclipse以前以後どんだけ死屍累々だと思ってるんだか。
簡単に言うなって。
989デフォルトの名無しさん:2011/11/06(日) 17:51:18.29
>>984
事例がないんだよね。
990デフォルトの名無しさん:2011/11/06(日) 20:32:39.01
Eclipseで動作するProlog開発環境を幾つか試してみたけど、あんまり機能が無くて、これじゃEmacsでいいやってレベルだな。
991デフォルトの名無しさん:2011/11/06(日) 20:47:31.70
Prolog Plugin
http://eclipse.ime.usp.br/projetos/grad/plugin-prolog/index.html

エジンバラ大学の卒論プロジェクトみたいだけど微妙
ぶっちゃけシンタックスハイライトしか無い。
992デフォルトの名無しさん:2011/11/07(月) 12:18:23.24
プログラマがPrologにも手を出す時はIDEをのぞむけれど、
全くのプログラミング初心者の場合は関係ない話だな。
問題は言語が理解しやすいかどうかだろうから。
993デフォルトの名無しさん:2011/11/07(月) 13:14:10.40
>>992
実務で利用する人にとっては、開発環境なんてどうでもよく、
サバクラをどう構築するかとか、他の言語インターフェイスは
どんな手段がありうるかといった情報が重要。Prolog単独使用
のケースは少なく、呼ぶか、呼び出されるかという選択になる。
それぞれのケースでどんな問題があるかなどの判断材料が欲しい。
そういうものがしっかりあるかどうかでPrologを採用するか
どうかにも影響がでる。
マニュアルというより、SWI-Prolog詳説といった書き物ね。
994デフォルトの名無しさん:2011/11/07(月) 13:14:12.04
それはどうだろう。
理解には試行錯誤が有効。
IDEは試行錯誤を支援してくれる。
例えばプログラミング初心者にJavaを教えるときは、
いきなりIDEをさらわせてHallo Worldを書かせる。
プログラミングという行為において、効率的な意味で開発環境と開発言語は切り離せなくなってきている。
995デフォルトの名無しさん
>>993
確かに、内容の過半が主要なメジャー言語とのインタフェイスに取られていて、
Prologと相手言語の間て授受するデータ構造の提案と、その解析の方法が
書かれている大冊の全書本(PDFファイルであっても)があったらすばらしい。