1 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:23:54 ] 過去スレ Prologでまったり Part3 pc11.2ch.net/test/read.cgi/tech/1193354806/ PrologでまったりPart 2 pc11.2ch.net/test/read.cgi/tech/1102664221/ Prolog でまったり pc5.2ch.net/test/read.cgi/tech/976462999/ リンク集 www.summa.jp/lang/logic/prolog.htm bach.istc.kobe-u.ac.jp/prolog/ チュートリアル www.amzi.com/AdventureInProlog/ computing.unn.ac.uk/staff/cgpb4/prologbook/ www.intranet.csupomona.edu/~jrfisher/www/prolog_tutorial/pt_framer.html bach.istc.kobe-u.ac.jp/prolog/intro/ www.geocities.jp/m_hiroi/prolog/ www.asahi-net.or.jp/~JF1T-YSD/prologV2/
2 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:27:17 ] P-99: Ninety-Nine Prolog Problems https://prof.ti.bfh.ch/hew1/informatik3/prolog/p-99/
3 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:32:21 ] 新スレおめでとうございます。
4 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:16:07 ] 404 Not Found www.summa.jp/lang/logic/prolog.htm www.asahi-net.or.jp/~JF1T-YSD/prologV2/
5 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 00:35:26 ] 乙( >>1 ).
6 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:30:05 ] >>4 lang.x0.com/logic/prolog/ light21.s26.xrea.com/prologV2/ ほい移転先
7 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 07:55:28 ] まったりしてきた
8 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 12:00:16 ] sameという述語の定義は same(X,X). です。
10 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:43:41 ] 「重複しない」という事の意味が漏れには分からない。というか課題の定義が曖昧だと思う。 述語livesNear/2の意味は「Person1の近場にPerson2が住んでいる」だよね? もしそうなら「Aさんの近場にBさんが...」と「Bさんの近場にAさんが...」という 「重複した」結果こそ正しいと思う。両者の間には双方向な関連があるのだから。 もし問い合わせが livesNear('Aさん', P) あるいは livesNear('Bさん', P) だとしたら、 「重複しない」という述語定義に対して、>>8 はどんな結果を期待するのだろうか。
12 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:24:31 ] >>10 どうもありがとうございます。数字と対応づけしないといけないんですか。 >>11 主として、これは疑問文として使用します。 叙述としては、確かに(Aさん、Bさん)、(Bさん、Aさん)とは 同格として扱うべきですが、疑問文として、 「この住所録の中の人物の中で、お互いに近くに住んでいる人たちは、 誰と誰ですか?」 という問の回答として、「AさんとBさん、あと、BさんとAさんです。」は、 不自然です。
13 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 14:40:11 ] この問題は? 例 2.2 7つの部屋がある。その内の4つの部屋を4人のプログラマの事務 室として割当て、残りの3つの部屋をコンピュータ端末機器を設置する 部屋としたい。このような割当て方は7×6×5×4=840通りある。 『組合せ構造とグラフ理論入門』C.L.リュー著 成瀬弘、秋山仁共訳 マグロウヒル好学社 p42 より、 さて、この840通りをすべて数え上げる非決定性述語を定義せよ。
17 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:05:15 ] 処理系に依存する問題をひとつ。 「千人万首 ―よよのうたびと―」という高名な和歌サイト www.asahi-net.or.jp/~SG2H-YMST/yamatouta/sennin.html から情報を引き出し、 第一引数に作者名を与えると、第二引数にその作者の歌が 一首づつとりだせる述語 千人万首/2 を定義しなさい。 ただし、取り出すのは歌本体のみで題や解説、類歌、本歌などは 削ぎ落としてください。
18 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:10:48 ] まあ、こんな感じで「Prolog述語 1000Tips」を目指します。
19 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:16:58 ] >>18 1000分野、10000Tips行きましょう。
20 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 05:42:50 ] 1/10000Tips どんな情報源でもよいから、そらで覚えていれば勿論それでよいから、 和暦、西暦変換述語を作れ。
21 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 05:45:04 ] 1/10000Tips
22 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 05:48:32 ] 1/10000Tips ジョギングシュミレーター(サイト)を参考にして、 体重、走行距離、タイムから、消費エネルギーと脂肪燃焼量を得る述語を 定義せよ。
23 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 06:00:11 ] >>18->>22 出典の記載ルール等を決めておかないといけない。 オブジェクト指向的な枠組みがないから、 述語で定義するとして、標準的な述語構成例が欲しい。
24 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 06:10:29 ] それから、問題を出すときは、 1/10000Tips (解答準備済み/解答準備未了) 等のコメントを入れて、未解決問題がスレに大量に残ることを避けよう。 解答準備済みで出題した人は様子を見て、良いタイミングで模範?解答を 載せるべし。
25 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 07:28:55 ] >>23 述語定義して公開するなると、著作権の問題が出てきます。 Prologの書籍50冊分の巻末参考文献を全部sortして述語として 公開するとする。私はその文献の内2%くらいしか目を通した ことがない。それでも誰も文句をいわないだろう。ところが、 古川康一著「Prolog入門」の参考文献だけを述語定義して載せた 場合はどうなのか?これは問題になるかな。
26 名前:デフォルトの名無しさん mailto:sage [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リクエストへのレスポンスで用い ることができるコードで、新しいリソースが作成されて利用可能であることを示します') . <以下略> この述語の場合は、www.amazon.co.jp/dp/4894710412/ からの 全コピーであることは明らかです。実際、Prolog述語はこういうのだらけ。 前スレにちょっとだけ著作権の話がでたと思うけど書物を写し取った述語の 公開できるのはどの範囲か。Webサイトの場合はどうか。
27 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 07:14:52 ] ちょっと話が逸れますが、>>26 の場合は10年近く前に本を傍らに置いて タイプした。ところが今はこのくらいの情報はWebから入手できる。 そういう変化は、Prolog言語の意味をも決定的に変えたと思う。以前は 単位節データベースとルール節はある程度バランスを保っていたが、 現在では、99%以上が単位節、しかも>>26 に見られるように、将来の利用に 含みを残して、原文そのままを引数に取り込む。Prologの解説書で示される 開発手法やプログラミング事例とは全く違う。10000Tipsの狙いは、そういう ことをはっきり示すことでもあります。
28 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 08:00:34 ] >>27 10000Tipsにしても、ここよりも日本Prolog協会のメーリングリストで提起する方が 相応しい課題ではないかな。
29 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:35:35 ] >>27 徹底して非形式的なデータ蒐集に努めるというのは面白いかも。 例えば、述語名が衝突したらその時点で何か解決策を捜す。
30 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:04:24 ] >>32 書かない。負節は書くw このスレでも強調されているように、結局Prologプログラミングは member/2,append/3,findall/3の繰り返し。少し前に出てきた組合せ系 の述語などがライブラリ化していると、もうほとんどルールを書く 必要はない。負節のログに頭部を付加してライブラリに加えることは ある。 以前は**コードなどの処理も書いたから、1342という口座番号を '0001342'にするヘッドゼロサプライ処理などが文字列からparse_atom する度に発生した。それで手続的決まり文句も随分と書いたが、10年 くらいまえに書き尽くした。
34 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:46:09 ] 自動仕訳ルールの追加というようなことは日常的に発生するが、それも 銀行口座の明細から取得するような場合は、すでに形式化しているから、 単位節一節の追加だし、摘要的な記述からの場合もS,V,Oが確定すれば ほぼ決定的になる。この場合、本体に2副目標を持つルール節を一つ追加。
35 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 07:15:04 ] ごめん。本体に1副目標を持つルール節一つを追加。でした。
36 名前:デフォルトの名無しさん [2009/03/15(日) 17:48:02 ] >>33 むかしエキスパートシステムに書いたような簡単なif-thenルールなら、 今でも書くと思うけど。subgoalが1-3個くらいのやつ。
37 名前:35 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 08:57:53 ] 一向に中身のあるTipは現れないw 初心者のための言語スレに誤爆してしまった
41 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 05:44:26 ] 本でも読めば。
42 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:10:04 ] 入門者です。前スレにでていたPrologで学ぶAIプログラミングを買ってみました。 二章のLHKあたりで既に挫折しそう…
43 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:10:39 ] うおー規制解除 kimiyasu-arai.at.webry.info/200801/article_1.html > 下記はLispによるProlog処理系の例である。 動かしてないけど、なんか変数の扱いがすごくあやしい。。
44 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:15:04 ] >>8 > 重複しないようにするにはどうすればいいでしょうか。 最初見たとき livesNear(P,Q), P @< Q と書いて「いや、それはちょっと…」という反応を見たいと思ったのに規制のせいで
45 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 09:56:29 ] >>44 ならほど。考えも及ばなかったwww
46 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:02:19 ] なるほど。でした・・・
47 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 14:11:05 ] >>44 この話題から外れるけれど・・ アトム(文字列)の大小比較は、集約(鍵)問題を扱ったとき場合を以外には、 実務的にあまり使う機会はなかったのですが、最近、古庄普二著 東大総研刊 「汎用超高速データベース処理技術 多様なデータ構造と超並列への普遍的アプローチ RealTimeVIDP」 を読んでPrologのデータ構造の中に値の順序性をもう少し取り入れる余地は ないかなど気になっていた。
48 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 14:16:39 ] >>43 どんな感じであやしい?
49 名前:47 mailto:sage [2009/03/28(土) 14:59:44 ] 古庄晋二著でした
50 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 18:23:58 ] >>48 はっきり変だと思えるのは?_の扱い。関数ab、fb(束縛の追加と検索?)あたりでは 無名変数もどきというか、単一化されない扱いになってるんだけど、 実際には、?xなどのローカルな変数名をgensymで作ったグローバルな名前に 書き換えるとき、何も特別扱いされていないから、意味がないんじゃないかっていう。
51 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:14:03 ] そろそろSWI-Prolog Reference Manual の邦訳が欲しくなってきた。 SWI-Prologの動きが活発になってきて、参照機会が急に増えた。 こうなってくると、常に楽に参照できる「ベース」が欲しい。
52 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 01:39:45 ] 精神力が異常。
53 名前:デフォルトの名無しさん [2009/05/07(木) 08:08:13 ] prologで同じ解を出さないようにするにはどうするの?誰か教えて><
54 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 08:14:00 ] >>53 >>8 以下を読んでみてください。
55 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:05:44 ] Prolog用語を整理しかけたら、変なことに気づいた。 ISO、JISではどうやら、 '' は null atom(空アトム) [] は empty list(空リスト) らしい。 null と empty の使い分けもまあ微妙だけど、もし www.weblio.jp/category/computer/prolg が五十音順だとすると、ひょっとして 空(から)アトム 空(くう)リスト と読み分けるんだろうか、という疑問が湧いたw
56 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 08:23:49 ] >>57 どのような部分で難しいと感じるか、教えてください。 できればソースプログラムを見せてください。
59 名前:デフォルトの名無しさん [2009/05/10(日) 10:10:05 ] >>58 ソートの処理をさせるときとか
60 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:26:44 ] >>59 ソートはちょっと違うかも知れないけど・・・。 Prologのプログラミングはただひたすら、appendだけで プログラムを書くつもりで行けばよい。
61 名前:デフォルトの名無しさん mailto:sage [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でよい。
62 名前:60 mailto:sage [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). は ... <以下略> が正しい順序でした。
63 名前:60 mailto:sage [2009/05/11(月) 05:55:25 ] >>62 さん 60は私ですw
64 名前:60 mailto:sage [2009/05/11(月) 06:09:03 ] どこまで、副目標としてappend/3を使うか、それとも 別述語を定義して使うのかは指針があるわけでもなく、 迷うけどね。
65 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 02:51:24 ] ロジック プログラミング言語「デカルト言語」の開発者に聞く - SourceForge.JP Magazine sourceforge.jp/magazine/09/05/11/0417217 さあ聞こうじゃないか もちろんまだ読んでないがw
67 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:33:37 ] >>67 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 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:34:48 ] と、思わず一つ勉強になっちゃったぜ えへへ
70 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:58:20 ] これこれ 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 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:03:55 ] >>67 結論としては、作者にこのスレを教えてあげるとかw
72 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 18:27:23 ] >>67 ちょっとソース見たけど、ncursesがなかった場合に対応できるような感じではなかったから、 どのみちncursesを入れなきゃダメなんだろうね
73 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 10:25:12 ] >>72 ncurses.hは Kbuntu Ubuntu にはなくて、私がすぐ手に入るのは、 FC5のncurses.hディレクトリなんだけど、これをコピーすれぱいいのかな? やってみよう。
74 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:17:57 ] ディレクトリはncurses.h ではなくてncursesだった。続いて、 readlineディレクトリが無いときた。これもコピーと・・・
75 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:47:45 ] 何か無茶苦茶やってませんかw とりあえず綴りは「Kbuntu」じゃなくて「Kubuntu」みたいですね 使ったことないけど ubuntuforums.org/showthread.php?t=296224 > Re: install curses/ncurses > sudo apt-get install build-essentials > sudo apt-get install libncurses5-dev こんな情報が
77 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:49:52 ] てゆーかもうさすがにスレ違いかと
78 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:01:17 ] >>77 デカルトさんまたねw
79 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:32:46 ] slashdot.jp/interview/09/05/11/0445205.shtml こっちのページの方が面白そうだよ 作者も降臨してるし
80 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 17:19:06 ] デカルト言語のキーワードの一つは「オレオレ」かな
81 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 17:20:16 ] オレ惟ふ故にオレオレ
82 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:15:19 ] ttp://lists.sourceforge.jp/mailman/archives/descartes-developer/2009-May/000012.html > 次のPrologのプログラムはDecartes > ではどのように書けばよいのでしょうか。 > > factorial(0,1). (以下略) sourceforge.jp/projects/descartes/wiki/ManGrammar ここによると、 ・is/2にあたるのは、<let #変数名 = 式>、<#変数名 = 式>など ・(<)/2など、数値の関係を与える式の評価は、<compare 式>など ・ただし、扱う数値の型によって述語を使い分ける必要がある(letf、letc、comparef) みたいな感じ?要はLispで適当にマクロを組んだ感じかな
83 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:23:39 ] しばらく読んでみたけど、結局、 sourceforge.jp/projects/descartes/wiki/ManBuiltin X+b = a+Y という単純なマッチングを普通に書く方法が見つからないww
84 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:29:52 ] :- op(850,xfx,>>). ?- もう少し本格的な生成文法でなんとかならないの >>76 .
85 名前:84 mailto:sage [2009/05/17(日) 08:31:59 ] 誤爆です。こっちへ書くつもりだった。 pc12.2ch.net/test/read.cgi/tech/1179157784/
86 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 09:13:13 ] >>85 閑してますねw
87 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:50:12 ] 学生さん! どなたかこの本、邦訳してくださらないか。 "Building Expert Systems in Prolog" Dennis Merritt著 1989年 Springer-Verlag ISBN 0-387-97016-9
88 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 00:11:34 ] >>87 エキスパートシステムって、実用化までたどり着けなかったシステムと 聞いてますけど、いまさら翻訳する意味あるんですか。
89 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 02:38:11 ] 駅スパアトなら使ってるけど?
90 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 04:35:33 ] >>88 金字塔的な書籍は何でも読みたい。 ロジカルアプローチは世界的に再評価の時期に入っているから、 読み直しの要求は出てくるよ。
91 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 05:19:32 ] >>88 エキスパートシステムは漸く事業化の時期に来たのではないか。 20年(一世代)待ったということになる。 エージェントアプローチ + エキスパートシステムでリプレース できるアプリケーションは無限にあるよ。
92 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 09:32:23 ] 三重野博司著の「人事情報エキスパートシステム」という本に210くらいの 質問事例が載っています。ほとんど揺らぎとでも表現したいくらいの微妙な 差異のif-thenルールを積み重ねているのですが大変参考になりました。 それで感じたのはエキスパートシステムを能率よく構築するためには 質問文やif-thenルールの自動生成が欠かせないのではないか、という ことでした。
94 名前:93 mailto:sage [2009/05/19(火) 09:49:21 ] 210くらいのif-thenルールが載っています。 でした・・
95 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 09:51:34 ] オントロジーは?
96 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 10:17:05 ] オントロロロギッタンディスカー
97 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 23:45:46 ] blog.livedoor.jp/heitatta/archives/65113337.html > もともと大学で Lisp を少しやっていたので、() をカッコ、コッカと読む習慣は持っているのだが、 > [] をギッコン、ガッコンと読まれて面喰らった。そーか、そう読むのか。 mjd?
98 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 01:04:31 ] www-ksl.stanford.edu/kst/what-is-an-ontology.html
99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 05:01:56 ] >>93 最初に言語のクラスを定義しておいて、組み合わせで 文を生成していくというようなことかな。 エキスパートシステムにそういう部分が必須であると いう意味ですか? 言語クラスの定義、辞書の定義まで、すべてのアプリ ケーションのリプレースに必要とまでの主張だとすると 多少はオントロジーとも無関係ではないかもしれないw
100 名前:デフォルトの名無しさん [2009/05/20(水) 05:29:18 ] Prologって今から思えても意味ありますか? 特技みたいに思ってもらえたりするでしょうか?
101 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 05:40:22 ] >>100 思えても→覚えても でした
102 名前:デフォルトの名無しさん [2009/05/20(水) 07:14:59 ] >>100 これからがPrologの時代です。
103 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 07:23:08 ] >>100 私がPrologを使うのは生産性が高いからですよ。 それ以外のことは、まあどうでもいいです。
104 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:09:18 ] >>100 あなたが、今プログラミングをしたことのない60才だとします。 "Prolog以外"のプログラム言語をこれから覚えて使いこなすのは 不可能といっていいでしょう。これが答えです。
105 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 09:47:05 ] Prolog始まっ・・・そんなものはとっくに始まってるさ
106 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:02:14 ] 企業経営という観点からいうと、 反射的にコストを考えてしまう社員は要らない。反利速的な経営の 基礎となる情報システムは記号処理言語を基礎に上層を築き直さな くてはならない。Prologをアセンブラとして使う。 is/2には死んでもらうw
107 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:22:46 ] >>106 経路問題だけで業務ソフト作るのは難しいよw
108 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:23:52 ] www.cyc.com/
109 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 10:28:06 ] リンクだけ張っても仕方ない。
110 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 14:21:04 ] SWI-PrologでIF/Prologのparse_atom/2のような事を行いたいのですが、 どのようにすれば良いかご存知の方いらっしゃいませんか。
111 名前:110 mailto:sage [2009/05/20(水) 14:29:57 ] 補足です。 やろうとしている(というか移植しようとしている)内容を簡単に書くと do_all:- (rule->
112 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 14:30:21 ] >>110 ?- atom_to_term('append([1],[2],L).',X,Y). X = append([1], [2], _G261) Y = ['L'=_G261]
113 名前:110 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 14:44:17 ] >>113 create_rule/2 でなぜ直接Rを生成しないのか疑問ですが。
115 名前:110 mailto:sage [2009/05/20(水) 14:45:05 ] >>112 さま できました! ありがとうございます!
116 名前:110 mailto:sage [2009/05/20(水) 14:54:25 ] >>114 さま すいません、直接ルールを生成するというのはどのようなことなのでしょうか。 今のところは文字列処理でルール文を生成しています。 ほとんど独学なのでPrologの事は知っているようでよくわからなかったりします・・
117 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:36:16 ] data(筋肉は使い過ぎると傷害を起こす) だとします。 この文を解析して 筋肉,使い過ぎ,傷害を起こす という要素を得て、 ?- ... create_rule(_文,'筋肉(使い過ぎ,障害を起こす)'), ... 生成できたのだとすると, ?- ... create_rule(_文,筋肉(使い過ぎ,障害を起こす)), ... を直接生成できるのではないか。
118 名前:110 mailto:sage [2009/05/20(水) 17:51:16 ] >>117 さま string(atom)で返しているのは、assert以外に、ルール文をファイル保存等、 テキスト処理を行いたいため、そのようになっています。 ※ parse_atom/2には直接関係無いため、記述を省略しておりました。 わかりにくくて申し訳ありません。 ruleの直接生成については、ご指摘の通りだと思います。 ただ、create_ruleでは複雑な処理を行っているのので、 今回は無理をせずにatom_to_termで行きたいと思います。 ご指摘ありがとうございました。
119 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:02:30 ] >>118 そうでしょうね。項とともにテキストの生成を意識することは よい設計だと思います。あなたはご存知だと思いますが、 ruleの生成で私が書いた述語らしからぬ筋肉という関数の部分に 変数がくる、つまりその文によってここを変化させたい場合は、 functor/3,arg/3 または (=..)/2 を使います。メタ述語ですね。
120 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:43:14 ] >>106 反利速的な経営ってどういう意味?
121 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 19:45:17 ] >>120 利速的とは、売上、利益の伸び率などが今どういう傾向に 微分的に変化しつつあるかについて、もっとも注視すること。 反利速的ですから、計量的微分的な量りから遠ざかる、 そういうことに囚われない経営態度。
122 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 00:59:44 ] 初心者のプログラミング言語ガイドスレで見て来ました。 ーー文化と実践ーーっていう本が薦められていて探してみようと思います。 処理系はSWI-Prologで良いですか? というか、処理系によって言語仕様(でいいのかな)とかが違ったりするのでしょうか?
123 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:02:55 ] >>122 すみません。--文化とその実践-- でした。あちらのスレでも訂正をしておきました。 処理系はSWI-Prologで十分でしょう。Prologは残念ながら、処理系によっての差が かなりあります。しかし、1995年にISO規格が制定されて、少なくとも各処理系が この述語群は共通にサポートする方向ですから、できるだけこの規格に沿った述語を 選択して利用する方がよいでしょう。
125 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:11:05 ] >>123 ここの前スレで紹介があったのですが、 SWI-Prologは比較的最近のバージョンからYES ではなく true. と 表示されるようになりました。trueの後のピリオドにも注目です。 これで、実行ログが完全に項としてreadできるようになりました。 一時的な思いつきなのか永久にこの仕様になったのか分からない のですが、多くのPrologプログラマは好意的に受け止めています。
126 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:54:03 ] この言語将来性なさそう・・・大丈夫か?
127 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:06:15 ] >>126 どういう理由で?
128 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:14:26 ] >>126 ほとんどのプログラム言語が死に絶えた時に最期まで生き残っているのが論理型言語なのさ。Prologであるとは言わないけど。
129 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:28:22 ] >>128 平行論理型。それが機械語。
130 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:32:58 ] 機械語なんていわれるとピンとこないなぁ。
131 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:21:10 ] 第五世代ではKL1が機械語という位置づけだったんだっけ?
134 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:29:47 ] このスレってさ、まったりとか描いてる割には内容が高度すぎて読む気に慣れねーわ。 つーか、読んでも意味ワカンネーし。 やる気無くなるし。
135 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:37:06 ] 狙いとしてはどうかしらないけど、プロトタイプシステムとやらではちゃんとコンパイルしてるみたいよ www.icot.or.jp/AITEC/Publications/TRTM/2/tm0875/003.html PrologのWAMにあたるKL1-Bといったものもあるらしい
136 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:40:21 ] >>134 すまん、漏れが親しみやすいトリビア集めをさぼっているばかりに…
137 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:48:51 ] 「WAMにあたる」じゃないな WAMコード、WAMの機械語にあたる、か
138 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 18:11:16 ] 平行論理世界へようこそ
139 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 18:12:05 ] つーことは>>129 の「それが機械語」は言い過ぎかな WAMの命令セットが論理型言語と言えるならKL1-Bも並行論理型言語で それが(仮想機械の)機械語と言えるかもしれんが
140 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:47:50 ] 将来ロボットが出現するだろうから、それらをプログラムする言語はPrologになるってことか。 それなら納得した。
141 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:52:38 ] >>140 20世紀は石油。 21世紀はロボットの世紀だからね。
142 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 20:55:43 ] 当面、情報家電のUIはPrologインタプリタでなくちゃいけないのだが・・・
143 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:01:04 ] >>142 JAVAでもしょうがないとは思うがPrologの項をparse_atomできる 関数をライブラリに持っていて欲しい。
144 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:52:21 ] >>134 だから第五世代計画は失敗した、という面もある。
145 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:12:17 ] この言語でプログラミングやるんだったらPython始めた方が良いよ
146 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:17:40 ] じゃあ君はPythonやればいい。
147 名前:デフォルトの名無しさん [2009/05/21(木) 23:34:31 ] 僕は、 KL-1 が素晴らしいと思ったので、今、勉強中です。
148 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 00:55:07 ] PythonとPrologって、主にどうちがうんですか?
149 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 01:36:28 ] >>148 Pで始まるところ以外全部
150 名前:デフォルトの名無しさん [2009/05/22(金) 02:39:04 ] Pythonってjavaの代わりって感じ?
151 名前:Prolog工作員 mailto:sage [2009/05/22(金) 06:57:46 ] >>148 pc12.2ch.net/test/read.cgi/tech/1242876647/3 Pythonの解答と見較べれば、まったく違うことがわかる。
152 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 00:02:52 ] >>124 その本、あちらのスレでは在庫無しと書いてらっしゃいましたが、 まだ流通あるようですよ。ヤフオクの7アンドYでポチりました。
153 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 11:39:14 ] >>152 ありがとう。まだ大丈夫でしたか。 私は用心に去年二冊目を買いました。人に貸せるように。 Prologの本は昨年の赤間さんの本以外はいつ絶版になっても しかたがないというのが多くて・・・
154 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:40:24 ] >>95 突然、ミケランジェロがでてきたような感じなんだよね。
155 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:14:18 ] 最初に読んだPrologの本が中島秀之先生の本だった影響で 今でもProlog/KRに愛着があります。GCLで動かしています。 S式が扱えるPrologが好きです。
156 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 22:28:37 ] >>147 正式には"KL1"なんじゃないかな。 www.icot.or.jp/ARCHIVE/Museum/TRTM/tr-list-J.html www.icot.or.jp/ARCHIVE/Free-Software/Free-Software-J.html
157 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 20:17:18 ] >>160 えーとつまり、括弧をデータとして扱うことの問題点は感じてもらえるのでは
163 名前:デフォルトの名無しさん [2009/05/25(月) 22:06:50 ] 再起処理で一番上流だけを求めるってできる?
164 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 08:28:35 ] 後戻りを再起処理と言っていたのかw エスパーの勉強になった
167 名前:166 mailto:sage [2009/05/26(火) 08:31:58 ] おっとすまん、勘違いだったようだ
168 名前:166 mailto:sage [2009/05/26(火) 08:37:29 ] >>165 aの特徴は、\+ up(_,a)というところだよね そのへんが切り口なのでは
169 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 08:48:17 ] >>165 top(Top,End) :- up(A,End),top(Top,A). top(Top,Top) :- up(Top,_).
170 名前:169 mailto:sage [2009/05/26(火) 08:51:19 ] なるほど、これだとだめなのか。
171 名前:169 mailto:sage [2009/05/26(火) 08:53:18 ] top(Top,End) :- up(A,End),top(Top,A),!. top(Top,Top) :- up(Top,_). かな。
172 名前:169 mailto:sage [2009/05/26(火) 09:14:07 ] top(Top,Top) :- up(Top,_),not(up(_,Top)). top(Top,End) :- up(A,End),top(Top,A). 確かにこの方がよい。
173 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 12:18:46 ] >>173 だとあれか、top(z,z)とかもあれしちゃうか
175 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 12:36:56 ] そのケースが閃くかどうかだ。Prologの弱点も垣間見える。 「いい問題」だね。
176 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 12:41:46 ] でも実際には孤立した点を含む集合を考えているかも知れないけどね
177 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 13:28:55 ] 順序集合の概念を知ってるかどうかで
178 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 10:47:37 ] >>179 まずくない
181 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 10:48:25 ] というよりも、up(X,_)を満たすものだけを対象にすべきかどうかはっきりしない
182 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 10:50:57 ] もっと言えば、up/2で言及されない元がないとはいえない
183 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 11:07:00 ] うーん、つくづく、いい問題、いい仕様(>>165 )、だな。
184 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 11:14:40 ] よく読んでみると、一番上流と言う言葉の解説として、 >>165 が呈示されているので、やはり少し無理があるか。
185 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 14:10:47 ] なんかSWIのマニュアルが動的になって、静的な索引が見当たらなくなった。 くそーそんなにキーワードを入力させたいのか
186 名前:185 mailto:sage [2009/05/27(水) 20:38:25 ] バージョン5.6までの古いのがまだ別サイトに残っていた。情弱でごめん gollem.science.uva.nl/SWI-Prolog/Manual/ しかしリリース日がよくわからなくなってる感じがする 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 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 23:32:50 ] <超>Prologトリビア探検隊 中村克彦訳『Prologプログラミング』(いわゆるClocksin & Mellish)の 索引の「く〜け」の所ではなく「か」の所に、「空リスト」を発見…! さあ、お手持ちの本の情報もぜひw
188 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 23:52:27 ] なにそれこわい
189 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 04:26:10 ] バラスの本は啓学出版ですね。 「食う派」は15本見つけました。 「知識・代数・データベース」 グレイ著 田中穂積・徳永健伸訳 産業図書 「人工知能の基礎理論」 赤間世紀著 電気書院 「法律家のためのコンピュータ利用法」 加賀山茂著 有斐閣 「Prologマシン」 金田悠紀夫著 森北出版 「Prolog ユーティリティライブラリ」 フィリピッチ著 中野誠・伊藤哲郎訳 「Prologのソフトウェア作法」 黒川利明著 岩波書店 「Prologプログラミング入門」 安倍憲広著 共立出版 「論理による問題の解法」 コワルスキ著 浦昭二監修 山田眞一・菊池光昭・桑野龍夫訳 「Prologで学ぶ AIプログラミング」 赤間世紀著 工学社 「PROLOG入門」 後藤滋樹著 サイエンス社 「Prologランニングブック上」 横井与次郎著 ラジオ出版社 「わかる:-Prolog」塚本龍男著 共立出版 「例題演習 Prolog入門」 細野充著 オーム社 「情報学概論 Prologプログラミング」 吉田要著 八千代出版 「TURBO PROLOG入門」Townsend著 倉谷直臣・酒見高広訳 オーム社 赤間氏は確信を持って「食う」のようです。
191 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 04:42:40 ] 「論理プログラミングの基礎」 J.W.ロイド著 佐藤雅彦・森下真一訳 産業図書株式会社 では「空節」が「か」に分類されています。これはさすがに。
192 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 08:00:04 ] このような場合もっとも重んじられるProlog本と思われる 「Prolog入門」 古川康一著 オーム社 の索引には"空リスト"はなかった。
193 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:18:46 ] えっ
194 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:38:57 ] >>189-192 また一歩、人類の知識が深化したね
195 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:09:56 ] ソラ派の俺はどうしたら
196 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:17:18 ] この手の話で盛り上がるのは、廃れつつある言語の典型ですなあ
197 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:40:17 ] >>189 PROLOGデーベース・システム」はもちろん誤りで正しくは「PROLOGデータベースシステム」です。 >>190 出版社に漏れがありました。 「Prolog ユーティリティライブラリ」は海文堂、 「論理による問題の解法」は培風館です。 「Prolog ユーティリティライブラリ」の索引は独特で、これは確信を以っての「食う派」ですね。
198 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 12:08:44 ] さすがに「あ」とか「す」はなさそうだね
199 名前:197 mailto:sage [2009/05/30(土) 12:17:05 ] 確信を以って -> 確信を持って ですね。
200 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 12:25:55 ] >>163 その質問は「下流」ならできるけど、という話に見えるのがひっかけかな
201 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 22:07:06 ] >>133 周辺で、第五世代で機械語がどうたらという話があったけど、 逐次型の方のシステムで使われたKL0というのは、インタプリタ(の実行部分)が マイクロプログラム(マイクロコード)化されていたというんで「機械語」だったらしいね。 www.icot.or.jp/ARCHIVE/Museum/TRTM/tr0079.htm 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 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 15:13:12 ] 似たような状況 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 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 15:18:38 ] 「別のファイルにあって」は 「別々のファイルにあって」ですねスミマセン
206 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 18:42:18 ] >>202 逐次型推論マシンPSIは論理型プログラムPrologを高速に実行するのに最適化して設計 された,ワーク・ステーションである。次のような特徴を持っている。 ・タグの採用 ・最大16Mワード(80Mバイト)の実メモリ ・8Kワード(40Kバイト)のキャッシュ・メモリ ・高水準ビット・マップ・ディスプレイとマウスを装備 ・高水準機械命令(KL0)とファームウェアによりKL0インタプリタ ・メモリ管理,一部のプロセス管理のファームウェア化 ・ガーベッジ・コレクション機能のファームウェア化 PSIの基本処理装置の実行制御は,マイクロプログラム制御で行われる。このファーム ウェアシステムは,マイクロ・インタプリとも呼ばれるPSIの機械語KL0を直接解釈実行 する。またファームウェアは,割込み制御,プロセス管理,メモリ管理,入出力制御等の システム制御の機能を持ち,オペレーティング・システムによる資源管理の効率化が計られ ている。 -- KL0 システム制御説明書 1-1 -- より
207 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:37:48 ] >>203 おまけ wiki.visual-prolog.com/index.php?title=Environment_Overview#Browsing 扱われるファイルの拡張子の概略 www.visual-prolog.com/vip/example/userExample/calendar/calendar.htm 「.prj6」という拡張子のファイルをIDEにロードしてビルドしてくれという指示のある例 そもそもコマンドラインから簡単にビルドできるのか、と疑ってみたところ… 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 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:36:04 ] >>203 ふと何か勘違いをしている気がしてきた。 これまでのプログラム例のビルドには当然IDEを使って来たけども、 今回はコンパイラオプションを変えなきゃいけないようなのでコマンドラインでやってみた、 ということでしょうか。そうすると、 wiki.visual-prolog.com/index.php?title=Environment_Overview#Creation IDEの「Build Options」か何かをいじることになるのかも。それができないといっとんのじゃ、 という場合は、スミマセンw
209 名前:デフォルトの名無しさん mailto:sage [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が空ベクタである。
210 名前:203 [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 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 06:23:06 ] いや、単にエスパー能力試しなのでお気になさらず 「インストールしたくないオーラ」を感じていただければw
212 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 07:21:34 ] >>210 どうして深く追及したくないかというと… discuss.visual-prolog.com/viewtopic.php?t=7838 > It seems that Visual Prolog changed since I wrote that chapter. 入門書の例が動かなくなった、という報告が他にもあるみたいなので
213 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:43:48 ] 前スレで少しだけ話題になっていたと思うけど、 en.wikipedia.org/wiki/Prolog ja.wikipedia.org/wiki/Prolog この落差は一体なんなのだろう。 どちらかが間違っているという部分もあるし。
214 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:59:01 ] >>どちらかが間違っているという部分もあるし。 ってどこ?
215 名前:デフォルトの名無しさん mailto:sage [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年ごろにフランスのカルメラウアーとコワルスキーによって考案された。
216 名前:215 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:15:52 ] >>215 エッカート博士のストアード・プログラム方式の最初のアイデアに関する 裁判などを見ても、最初のアイデアを出したのが誰か、そして、本人がそれを 主張するか、などなかなか微妙。マルセイユグループとコワルスキとの間に 何かあるか、あるいは何もないのか、知らないが・・・ カルメラウア側の情報に終始するProlog生成の物語に、ある種の客観性を 与えるため、 According to Robert Kowalski, 以下があるのだと思う。カルメラウアが示唆を受けたと表明しているこの分野の 最高権威がお墨付きを与えているとして文献が示されている。 en.wikipedeaのここの部分の書き手とHistoryの書き手は異なるのかもしれない。
218 名前:217 mailto:sage [2009/06/09(火) 08:27:54 ] ついでに云ってしまうと、en.wikipedia は非常によく書けていると思う。 誰か翻訳して、jp.wikipediaを全面下記潰していただけないだろうか。
219 名前:203 mailto:sage [2009/06/09(火) 08:45:29 ] >>211-212 Visual Prologの元祖スレで質問して カットを一つ入れたら治りました。 一応報告まで。
220 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:32:38 ] 元祖スレというのが何を指しているかわかりませんが よかったですね
221 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:35:48 ] >>218 手間と予想される悶着を考えると、とりあえずリンクを張って あとは「独自研究」とか「雑多な内容」とかで
222 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:46:02 ] よく書けていると評価できる位なら独自に全部書けるだろwww とか一瞬思ってしまった
223 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:48:12 ] >>222 まともな文章書いたことないだろw
224 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:23:43 ] >>222 プログラミングテクニックについてならいくらでも書けるけどね。 現在のWikipediaの構造を維持したら整合しない。だからといって、 Prologの歴史や述語論理との関係についてまで解説するのは、荷が 重い。
225 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:38:44 ] この項目はあまりよく書けていない可能性があります。 ノートでの議論と記事の発展への協力をお願いします(Template:よく書けていない)。
226 名前:デフォルトの名無しさん [2009/06/09(火) 22:23:54 ] このスレで、記事をまとめて、 それを Wikipedia にアップさせれば良いのでは?
227 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:21:25 ] 著作権が曖昧になると嫌がられるよ
228 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 07:48:04 ] 翻訳はやりたいけど、今のjaのPrologの記事を書き潰すと一悶着ありそうだな…
229 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:13:58 ] 匿名で書けるんだから面倒なことになったらトンズラすれば?
230 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:37:37 ] 全部書き潰す必要はないし、ルールに従ってやればいいのだけれど、 Googleの検索でWikipediaが先頭にくるようになってからは、 大半のPrologのことを知りたい人がこのサイトを読んで引き返して しまっていることは確かだ。しかも、そういう人のためのサイトに 全くなっていない。誰のために書いてあるのか分からないサイトと 言ってよいだろう。やはり、相当手を入れないといけない。
231 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:01:54 ] >Prologは、導出において節を以下に述べる頭部が一つの命題からのみなる >ホーン節に限定したものととらえる事が出来る。 この文、変だよね。
232 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:06:20 ] "からのみなる" の検索結果 約 915 件中 1 - 10 件目 (0.21 秒)
233 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:38:12 ] "nominal horn clause"の検索結果 8 件中 1 - 8 件目 (0.28 秒)
234 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:42:59 ] >>231 確かに難解な文だな。 Prologでは導出される対象を頭部が一つの項に限定されたホーン節と 呼ばれる命題に限定している。 と言いたいのですか?
235 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:56:02 ] ちょっとかじった人なら読み飛ばして何事もなしだが…… 詰め込みすぎたか、あとで書く予定が面倒になったか。
236 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:17:36 ] >>234 私も素人なのだが。 ( P ∧ Q ) も一つの項でしょ。 そうすると (p1 ∧ p2) :- q1 ∧ q2 ∧ .... も許される事になっちゃうんじゃないの。
237 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:43:16 ] Prolog的混乱が生じてるねへっへっへ 「原子論理式」という言葉があるよ
238 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:22:05 ] ものの本によると、アタマのないやつも「ホーン節」のうちみたいよ。 質問とか、計算中の目標(ゴール)として現れるやつ。 アタマのあるやつ(Q∧R⇒P、P∨¬Q∨¬R、{P,¬Q,R}、P:-Q,R.)は 「頭部つきのホーン節」とか「プログラム節」とかいうらしい。
239 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:22:56 ] やべ × {P,¬Q,R} ○ {P,¬Q,¬R}
240 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 13:01:54 ] 古川康一著の「Prolog入門」より。 # ホーン論理とは,一階述語論理の命題をA1 ∨ A2 ∨ ... ∨ An ← B1 ∧ B2 ∧ ... ∧ Bm の # 形(節形式)であらわしたときに,左辺の句がたかだか一つしか現れないような命題のみ扱う論理 # である(ここで,A1,A2, ... ,An,B1,B2, ...,Bm は正の句である). すなわち,左辺に句が # 一つ現れるのか定義節であり,そこが空になるのがゴール節である(ゴール節を":-"から始めても # よいのは,そのためである).
241 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 13:05:44 ] >>240 句・・・か・・
242 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 13:19:13 ] 原子論理式、基本論理式、リテラル、句 は微妙に違いがあるのかな。リテラルは否定形を含むとか。
243 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:23:51 ] リテラルはそうでしょう
244 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:24:50 ] 「正の句」と言っているから 句=リテラル なのか
245 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:59:16 ] そうか「頭部つき」=「確定節」(DCGのDC)ということか
246 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:17:58 ] definite(明確な、限定的な など) definitive(確実な、限定的な、明確な、限定詞 など) definitional(definitionの形容詞形) definition(限定、明確化、定義、解像力 など) ややこしい
247 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:40:12 ] 第129回技術委員会議事録 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 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:02:05 ] 小ネタ: FGHC(Flat GHC)をGDC(Guarded Definite Clauses)と呼ぶことがあるらしい
249 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:03:10 ] Prologなら使用人口も少ないだろうし、 論文ネタがゴマンとあって書きやすいんじゃないかと思って手を出そうとしてるところ 実際、どう?
251 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:15:34 ] >>250 あくまでも、プログラム言語であるという視点で、 ・ Prologのプログラムパターン ・ Prologのプログラミングスタイル ・ 得手とする領域とその典型的なプログラム の記述を重視して。 お願いします!!
252 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:20:45 ] >>250 ごめん、間違えた。勉強しようという話ですね。 論文ネタなら、ICOTの検証だけで事実上無限にあります。
253 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:34:53 ] >>251-252 >論文ネタなら、ICOTの検証だけで事実上無限にあります。 ウホッ、予感的中!感謝感激雨霰! マジで 人 生 賭 け て 研 究 す る 所 存 で あ り ま す でも、その前に紙の上での記号論理学や形式言語をもっと勉強しなければ、と今勉強中です
254 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 11:40:45 ] DCGトリビア発見 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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:37:38 ] >>215-217 何気にスルーしちゃったけど、「Colmerauer」はフランス語の発音の原則だと 「コルメロエ」みたいになると思うけど、そのへんどうなんだろう。
257 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:44:05 ] クルルァ
258 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:51:02 ] ○○が近いが△△あるいは□□とも書かれてきた
259 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:53:17 ] ちなみにおなじみC&M邦訳では「コルメロエ」だった
260 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:59:40 ] >>258 カタカナ表記の揺れの問題じゃなくて、 フランス語読みと英語読みの違いでしょ。
261 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 10:29:21 ] 仏語:コルムローエル 英語:コルマローアー では?
262 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 11:27:20 ] blog.goo.ne.jp/lumieremondiale/e/e5b1b21b53807b0763ea239ffad4fc45 > 君のパリのアクセントが気に入らない! といいはるんですね。w
264 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:23:27 ] >>263 やっぱりコルメラウアじゃないか!
265 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:24:54 ] また新たな「確定節」解釈を発見。 『人工知能の基礎』(馬場口登・山田誠二共著)によると、 事実(fact)=単位節(unit clause) ルール(rule)=確定節(definite clause) 質問(query)=ゴール節(goal clause) らしい(p.75)。かなりパターンが揃ってきたねw
266 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:44:38 ] hagi.is.s.u-tokyo.ac.jp/pub/staff/hagiya/kougiroku/ronri/4.txt > 単位節(unit clause) > 一つのリテラルから成る節 > 正単位節(unit clause) > 一つの正リテラルから成る節 > 負単位節(unit clause) > 一つの負リテラルから成る節 どうして全部unit clauseなんだろう
267 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:26:18 ] あそうか、コピペ駆動開発みたいな感じか
268 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:56:10 ] The Birth of Prolog by Alain Colmerauer citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.85.7438
269 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 05:26:20 ] >>268 「clause」だけ検索してみたら ・ここではdefinite clauseという言葉を使っていない ・たまに「program(の)clause」のような言い方をする程度 ・そもそも、最初はホーン節という概念に着目していなかったらしい という感触だった
270 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 08:29:53 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 09:38:32 ] 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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 12:18:37 ] 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. うーんこのへんになにかありそうな… foldoc.org/Horn+clause > A definite clause is a Horn clause that has exactly one positive literal. mathworld.wolfram.com/HornClause.html > A definite clause is a Horn clause that has exactly one positive literal. この2つのページ、かなり酷似した部分があるけど大丈夫なのかな
274 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 12:46:23 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 12:48:21 ] というかdefinite (program) clauseか
276 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 13:20:39 ] ともかくSLD導出のDだというのは真面目に調べればすぐ分かったはずだった気がする。 エスパー能力の限界か。。 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は名前をつけたりしないのかな en.wikipedia.org/w/index.php?title=SLD_resolution&oldid=135876212 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 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 15:05:53 ] ついにCarl Hewitt(の恨み節みたいなの)が面白く読める程度まで予備知識がついた気がする knol.google.com/k/carl-hewitt-see-httpcarlhewittinfo/middle-history-of-logic-programming/pcxtp4rx7g1t/3?domain=knol.google.com&locale=ja#
278 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 22:06:24 ] 『Horn節は、ある条件の下で(あるいは無条件に)成り立つ事柄について、 B1”または”B2というような不確定な言い方を許さない。そこでHorn節は 確定節(definite clause)とも呼ばれる』 論理と意味 p105 直観主義論理の形式系LJの式は全部Horn節、というのもどこかで 関係するんじゃないですかね。
279 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 22:19:54 ] 失礼。書き忘れました。B1,B2というのは A1,A2,...An → B1,B2,...Bn という右辺にあるそれぞれの式のことを指します。
280 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 05:15:56 ] LJを調べてみました。扱っている式の形はホーン節に似てはいますが、 それぞれの論理式は原子論理式である必要はないんですよね
281 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 05:18:56 ] >280の「式」は「→」や「,」を含む全体、「論理式」はそこで対象化されている部分です、念のため
282 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 10:41:13 ] >>それぞれの論理式は原子論理式である必要はないんですよね 確かにその通りです。 では、そもそもなぜHorn節(より一般に節)は、原子論理式及び原子論理式 の否定の選言で構成されないとならないのか?という疑問が湧いてきますね。 多分何かしらの変換において、要素が原子論理式でなければならないという 縛りが出てきそうです。そのラインから少し調べてみます。
283 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 23:03:56 ] >>283 プログラミング言語の新潮流という本では、 正のリテラルが(”高々”はつかず)一つである節を確定節(definite clause)と呼ぶ。とある。 思うに証明戦略上区分けしていると思われる。 正の節、すなわち確定節の場合、 証明戦略:SPU(selective positive unit resolution) 負の節、すなわち不確定節の場合、 証明戦略:SNL(selective negative linear resolution)。 SLD = SPU + SNL? SLD戦略を理解するに当たって、確定節、不確定節を区分したほうが わかりやすいから区分しているように見える。
285 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 23:08:11 ] LJの式がHorn節になるというのはあまり関係ないようだ。 加えて、要素が複合論理式か、原子論理式かはあまり関係なかった。 SPUなりSNLの証明戦略を用いたとすると、結局原子論理式しか出てこない。 わかりにくい言い方だが、つまり、何かしら自動証明することを考えると、 複合論理式であるかどうか、ということは特に問題ならなくなる。
286 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 23:09:53 ] 付け加えて、SPU,SNLについては『論理と意味』に解説がある。
287 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 23:14:46 ] 改めて読み返すと>>285 の内容がおかしい。とりあえず、保留。
288 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 00:06:52 ] 質問です prologで ?- divide([a,b,c,d,e],L1, L2). L1 = [a,c,e] L2 = [b,d] とするにはどうしたらよいのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 00:20:52 ] divide([],[],[]). divide([X|Xs],[X|Ys],Zs) :- divide(Xs,Zs,Ys).
290 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 00:39:39 ] >>289 さん ありがとうございます ちなみにこれの停止条件は空リストは空リスト二つに分けろってことですか? 何で最小単位が空リストになってしまうのでしょうか? a,b見たいな感じにはならないのですか? 後再帰条件はヘッドのXをXsとYsに分けてZsが残っているか判定する、でいいのでしょうか? prologよくわからないので日本語がおかしいかもしれないですが回答お願いします
291 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 20:46:00 ] うぅむ・・・。 Xというリストを分けてXsとし、残ったリストXをまた分けてYzとし、 最終的に分割できるものがなくなったら残った物をZsとして 停止条件に行き着くみたいな感じでしょうか・・・?
293 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 21:44:32 ] ひとつ削ると奇数偶数が反対になる、というふうに考えればいいかも
295 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:25:56 ] >>295 > リストをAとBに分けて ちょっとまった [A,B|Xs] [A|[B|Xs]] この2つが同じものだと思っていないということ?それとも直感的な解釈の違いのことを言ってるのかな
297 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:30:04 ] このスレは一体何が起きているんだ・・・。 なぜか体が震えてくる。俺だけ?
298 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 22:35:57 ] >>295 [10,9,8,7,...] から [10,8,...], [9,7,...] を取るとき、 [10,8,...]がほしい立場からすれば、次の9は飛ばして8を取りたい。 [9,7,...]がほしい立場からすれば、今回の10は見送って次の9を取りたい。 ちょうどニーズが交代しているという感じで捉えているけど、もうひとつ明確じゃないねこりゃ。
299 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 23:00:46 ] >>296 さん あ、勘違いしてました・・・。 >>297 さん 僕も自分の理解力がなさ過ぎて手が震えてきました >>298 さん おぉ!なんとなくわかってきました! [X|Ys]ここはどうしてこうなるのでしょうか?Xを排除したものをYsとしてるんですよね? ([X|Xs],[X|Ys],Zs)ここの部分を今みたいな日本語に直すとどんな感じなのでしょうか? 頓珍漢な事ばかり書いて皆さんを惑わせてしまって申し訳ないです。もう少し付き合って下さい><
300 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 13:57:34 ] 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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:53:16 ] ちょっとまだ言葉遣いが混乱していると思うけど、 (「[A|Ys]Xsを踏まえたうえでで」とか) 大体わかったみたいでよかったね
306 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 23:02:46 ] 500億かけただけあってGHCは全容が見えなさ過ぎる。 調べれば調べるだけ話題が出てくる。なんなんだ、この言語。
307 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 23:11:19 ] 皆さん、本当にありがとうございました まだ完全ではないですが理解できました なんだか軽く荒らし兼、笑いものになってた気がしますが寛大な心で 許してください><
308 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 10:56:16 ] ?-g1. input=taro. input=jiro. input=2 input=.. . input=end. yes endが入力されるまで繰り返し、入力をしるg1を作りたいんですけど、全くわかりません。知恵を貸して下さい。
309 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:13:56 ] >>308 g1 :- repeat,write('input='),read(X),(X=end;assertz(tmp(X)),fail). repeat. repeat :- repeat.
310 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:15:59 ] >>308 g1(L) :- findall(X,(repeat,write('input='),read(X),(X=end,!,fail;true)),L).
311 名前:デフォルトの名無しさん mailto:sage [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=').
312 名前:311 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:04:27 ] X \= end や X = end は、 X \== end や X == end としたほうがいいかもしれない。 read/1だと変数も入力できてしまうし。
316 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:27:03 ] ごめん、>>313 の再帰版にもカットが必要だった。 ?- g1, X=X.などとすると余計な成功が生じているのがわかると思う。 うーん勉強になるw
317 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 04:36:56 ] >>316 g1 :- write('input='),read(X),X==end,!. g1 :- g1. がスマートで推奨版なのかな。インタプリタのトップからの使いやすさから、 repeat/0を利用してしまうが。
318 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:01:43 ] 失敗駆動ループを使うならrepeatのほうがいいかと
319 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:03:29 ] えーっとつまり、値を蓄積したいなら再帰で、という
320 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:48:54 ] >>319 こういうのはあるか。 g1(X) :- write('input='),read(X). g1(_) :- g1(_). ?- g1(X), ... ,X==end. 最後に ... の中でendが消費されてしまうのが難。
321 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:52:29 ] 匿名変数だとダメなのかな。 g1(X) :- write('input='),read(X). g1(X) :- g1(X). でないと。
322 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:06:07 ] repeatから一歩も出てないねw
323 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:30:01 ] なんか「生成検査」という言葉の使い方を間違えた気がするw
325 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:05:00 ] 引数の数が違うようですが
328 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 23:38:11 ] split(X, [], [], []).ではXを空リスト3つに分けているのですか? 否定(?)を利用してますがなくても問題ないですよね? 連レスすいません
333 名前:328 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 01:22:10 ] >>332 まだ問題の理解が十分ではないようですね。その段階で>>325 のように、 「〜というものを作りたいのですが」という言い方をするのはよくないと思います。
335 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 01:26:37 ] スミマセン、なんか言い過ぎましたw そんなによくなくもないかもしれません
336 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:09:00 ] 私たちって言うな
338 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:23:14 ] >>337 リストの再帰で、 []になった場合の検証から入るプログラマって そんなにいるかな。まあ、時間的には一瞬だけど。 もし、変数が来たらは、常に注意を張りながらだと思うけど。
339 名前:デフォルトの名無しさん [2009/06/26(金) 05:37:18 ] >>338 宣言的でありたいというのがある。 できることなら停止節なんて省略したい。 こういう姿勢だから、考えないね。
340 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:47:30 ] 微妙すぎる。>>332 は明確に否定するのが親切だと思うけど、 そもそもどこかの宿題を乱暴に投げているだけような気配がするw
341 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 06:01:59 ] >>339 それだ! 停止節省略指示子の導入。 帰納論理がそこそこ行けるんだったら、 それくらい処理系にやらせたっていいじゃないか。
342 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:35:25 ] 「トレースモードにして」じゃなくて「スパイ点を設定して」か
344 名前:デフォルトの名無しさん [2009/06/26(金) 21:10:24 ] >>333 さん すいませんでした。 なるほど、カットするとそこで探索を停止するからですね? >>334-335 さん おっしゃるとおりです・・・。prolog理解するのとても難しいです >>336 さん 空リストを停止条件に持っていく場合とそうでない場合の見極めが難しいです >>337 さん 落ち着いてください >>339 さん て、停止節ですか? >>340 さん 丸投げではないです・・・。 >>342 さん すいません。僕の使ってるprologは未完成での実行はできないです
345 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:13:40 ] split(X, [H|L], B, [H|A]) :- split(X, L, B, A). でH =< Xではない時をマッチングさせるんでよね?
346 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:44:57 ] カット(!)はまだ勉強していない、という前提で進めた方がいいんでしょうか
347 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:47:54 ] >>332 > 否定(?)を利用してますがなくても問題ないですよね? これはなぜそう思ったんですか
348 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:31:18 ] Prologって面白すぎ。もっと流行ればよいのに。
350 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 01:46:01 ] >>346 さん 軽く説明された程度です >>347 さん 授業の説明だと余分なところまでマッチングしないようにするためだと聞いたので なくてもいいのかなぁと >>348 さん そこは自分でプログラムするときわかりやすいように書いてみただけです >>349 さん 面白いですけど難しくて頭が痛くなりますw
351 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:26:10 ] >>344 > すいません。僕の使ってるprologは未完成での実行はできないです デバッグ機能がないというのはちょっと考えにくいので、 差し支えなければ処理系の名前を、参考までに。 一つ一つの確認を細かくしないと、Prologのプログラムはなかなか組めないんじゃないかと思います。
352 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:43:19 ] >>325 >>344 リストがそれぞれ何らかの「集合」を表していると解釈すれば自明ではないでしょうか。 ・空集合の部分集合は(どんな条件がついても)空集合だけ ・空集合を表すリストは空リストだけ
353 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 06:05:07 ] >>350 いろんな言語で宿題スレ pc12.2ch.net/test/read.cgi/tech/1242876647/ にPrologのプログラムが沢山載っています。 間違ってるところや、それを逐次修正していく過程が晒されている部分。 処理系依存(あるPrologでは動くが別のPrologでは述語未定義となり動かない)の ところも多いから、いろいろな意味で勉強になると思います。
354 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 08:44:23 ] 自演乙
355 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:22:10 ] >>351 さん terateamを使ってLinuxにアクセスしてemacsやらsicstusを入力してやってます >>352 さん 貴重なご意見感謝します うまく見分けれるように頑張ります >>353 さん prologの宿題スレになってますねw こっちのスレを回ってみようと思います。情報ありがとうございました >>354 さん いったい何と戦っているんですか?ここで自演して自分に有益になるとは到底思えませんが? とりあえず落ち着いてください
356 名前:353 mailto:sage [2009/06/27(土) 16:39:14 ] >>354 いろんな言語で宿題スレに大量に書き込んでいるのは私ですが、 それがなにか? これは前スレで、よそのスレに載っているプログラムや課題を このスレでPrologに書き直そうという提唱や、 Prolog10000Tipsを目指す活動の手始めです。
357 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:09:40 ] prologプログラムの無限ループバグを防ぐtipsを教えてください。 C以上に暴走しやすい危険な言語ですね。
358 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:31:14 ] >>356 >>338-339 と>>341 もあなたではないかと思っているのですが、ひょっとして…?w
359 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:35:50 ] >>357 > 暴走しやすい これはいつだか、大学の先生がPrologで作ったCGIが無限ループしてひどいことになっていたのを見て思った
360 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:48:12 ] >>356 これまでの観察によれば ・動作確認をしないことが多い。 ・ISOから外れた述語を断りなく多用する。not/1など。 ・勘違いを書いても明確に訂正しない。 このへんはちょっとどうかと思っています。 2ちゃんねるだからアリ、という考えなのかもしれませんが。
361 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:55:39 ] オウフ語 ・”F”は、太ったものに当てはまる。 ・”G”は、貪欲なものに当てはまる。 ・”a”は、アルバートを表示する。 ・”b”は、ベティを表示する。 ・主語述語形式の文”Pn”が新であるのが、”n”が表示するものが、 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。 ・”¬A”という形式の文が新であるのは、文Aが真で無いとき、 かつ、そのときに限る。 ・”A&B”という形式の文が新であるのは、文Aと文Bがともに新であるとき、 かつ、そのときに限る。
362 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:57:11 ] 誤字多すぎた。も一回。 オウフ語 ・”F”は、太ったものに当てはまる。 ・”G”は、貪欲なものに当てはまる。 ・”a”は、アルバートを表示する。 ・”b”は、ベティを表示する。 ・主語述語形式の文”Pn”が真であるのは、”n”が表示するものが、 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。 ・”¬A”という形式の文が真であるのは、文Aが真で無いとき、 かつ、そのときに限る。 ・”A&B”という形式の文が真であるのは、文Aと文Bがともに真であるとき、 かつ、そのときに限る。
363 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 00:10:06 ] 表示的意味論付き単純言語オウフ。 例えば、アルバートを表示する、というのはアルバートという人がそこにいる 事態を指す/結びつける。
365 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 00:50:38 ] 参考文献も表示したほうがいいのではw
366 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 01:02:45 ] >>363 つまりこういうことかも。 ・POSTなりGETなりの方式で入力が与えられることを前提にしている。 ・無入力の場合に暴走するように書いてしまっている。 ・読ませるためのソースに実行可能フラグをつけてしまった。
367 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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は\+より こちらの方が誰にでも意味がわかるいう理由でこれで通しています。
369 名前:368 mailto:sage [2009/06/28(日) 05:01:05 ] >>358 >>336 、>>338 と>>340 は私だが、>>339 は違うよ。この時間帯に 読んでくれているのが誰だかは知っているがw
370 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:08:06 ] と、いう人がいるので注意してください。
371 名前:368 mailto:sage [2009/06/28(日) 05:13:09 ] 10000Tipsについては、著作権の問題が出てくるようで 弁護士に相談中。いちいち著作者に了解をとることは コスト的に無理なようなので。 試しにスポーツルールの述語化をしてみようと思ったの ですが、ただただベースボールマガジン社が発行している 著作物を編集し直した物になってしまいました。
372 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:15:58 ] >>368 >>309-312 はまだちゃんと訂正していないような気が
373 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:30:15 ] >>370 ところであなたも早朝派ですか? 私は早朝ジョギング派なので3時半起きで、2chの書き込みも その後1-2時間の間にしますが、それに関してのメールが6時前に 到着しているので驚くのですが。結構多いんですね。
374 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:44:31 ] 早朝派じゃないのに書き込んでみるテスト Prologって研究には良さそうでも就職にはヤヴァそう C, C++, Java辺りを必須という求人は何度も見たことはあるが Prolog必須という求人は見たことがない
376 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:52:09 ] なぜか日本では皆無ですね。 うちがそのうちのせますが。いまはきゅうじんのよゆうなし。
377 名前:374 mailto:sage [2009/06/28(日) 06:15:11 ] 何の話か明確にすると、 ?- ... , g1(L), ... ,fail. のように、一度end入力で終了したg1がバックトラックによって、 再び実行の可能性が生まれた場合に、意図通りの結果になるかと いうことです。
378 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 07:47:04 ] それから、いろんな言語で宿題スレですが、私のPrologコードは 課題を示したレス番号の頭にtをつけたHTMLファイルを nojiriko.asia/prolog/ というディレクトリに全部コピーすることに しています。メールなどで間違っているんじゃないかと指摘を受けた 場合は、このサイトの方はできるだけ速やかに訂正しますが、宿題スレ の方にはその旨の書き込みはしません。いつの間にか書き換わって いることも多いのでちょっと覗いてみてください。
379 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:03:33 ] >>375 いまやビジネスの世界はひたすら論理。今まで日本は会社規則があっても 無視してたり。契約書作成しようと思うと取引先から敬遠されたりと、 論理的なことを何かと回避できる環境にあった。 んでまぁそういう時代は終わりを迎えている。 今や本屋の自己啓発本コーナに行けば論理が大事だ、という本が置かれ、 論理に対する需要と言うのはかなり上がっている。 確かに一般に普及する可能性は低いけど、上記の論理的な力を必要とする層 (金融とかコンサルとか上流の方々ね)には教育用ツールとして需要がある 可能性はある。例えば、『〜論理トレーニング』という本の内容として prologによる論理トレーニングとか。 あとは、企業の訴訟リスクが上がっているとかなんとか理由つけて法律の エキスパートシステム作ってみるとか。 裁判所の判例はもはや膨大で、弁護士費用は高い。とりあえず、抱えている案件に 合致する判例があるかどうか探索するシステムとか作れば結構いけるんじゃない。 法律家の助けが必要だけど。差別化は結構できるんじゃないかね。
380 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:08:52 ] あと、心理学の人と、認知科学の人、哲学の人も必須だな。 普通にやると第五世代と同じ末路になる。 あと問題は日本語文のパターンマッチかな。
381 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:12:55 ] うーん。微妙な日本語だ。
382 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:30:47 ] あと20年前と違うのはWebの発展なんだから、セマンティックウェブ関連で なんか出来そう。 500億かけた研究結果がそのまんま公開されてて、しかもどうやらあんまり 中身を見られていないみたいなんだし、意外と宝の山かもしれないよ。 (評価計算の方法がわからないし、現在価値としては下がっているけど 少なくとも数千万ぐらいの資本価値はあると考えてもいいはず。いきなり 数千万資本をゲットできるというのはそれなりにお得な気はする。) 見直す価値がある可能性はある。
383 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 14:59:53 ] 「いろんな言語で宿題スレ」の中で pc12.2ch.net/test/read.cgi/tech/1242876647/168 pc12.2ch.net/test/read.cgi/tech/1242876647/225 といったProlog向き問題が未回答となっています。 どなたか、よろしくお願いします。
384 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 05:45:20 ] 前に10000Tipsは著作権の問題が出てくるということを書いたのですが、 意味がわからんとのご意見メールをいただきました。 私の「Tip」のイメージを示します。これで2Tips。 燃ゆる頬(ラグビーの頬傷ほてる海見ては). 燃ゆる頬(車輪繕う地のたんぽゝに頬つけて). 燃ゆる頬(目つむりていても吾を統ぶ五月の鷹). 燃ゆる頬(沖もわが故郷ぞ小鳥湧き立つは). <以下略> 句集(燃ゆる頬,寺山修司,ラグビーの頬傷ほてる海見ては). 句集(燃ゆる頬,寺山修司,車輪繕う地のたんぽゝに頬つけて). 句集(燃ゆる頬,寺山修司,目つむりていても吾を統ぶ五月の鷹). 句集(燃ゆる頬,寺山修司,沖もわが故郷ぞ小鳥湧き立つは). <以下略>
385 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 07:48:21 ] ----- ここまで役に立つTipなし
386 名前:デフォルトの名無しさん [2009/06/30(火) 15:44:51 ] Tips というより、データベースでは?
387 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 17:06:38 ] >>386 Prologですからデータベースですが、それをTipという感覚でやろうということです。 福島さんが100mの日本記録出した時、何歩で走ったか。これをビデオで確認したから 述語としておこう。これでひとつ。 Googleで検索できない対象というのがありますね。一つには過去の文献や文学作品の 内容に関する部分。無尽蔵にあります。これはTipとして復活するだけで価値がある。 構造のしっかりしたデータベースである必要もないし、述語として十分に機能する 必要さえない。気楽に日常的に拾い上げられることだけが大事です。
388 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:55:33 ] 天気(神奈川,20090630,晴れ).
389 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:58:04 ] 好き(イチノ,理美).
390 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 21:26:12 ] % p(原因, 結果) ?- p(X, 俺に彼女ができる). false
391 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:15:02 ] マル得Prologトリビア探検隊 gollem.science.uva.nl/SWI-Prolog/Manual/DocIndex.html SWI-Prolog 5.6.60 Reference Manual > \ > +/1 > /2 > 1 > =/2 > ==/2 > =@=/2 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 \+と\=の消え方が変化している
392 名前:387 mailto:sage [2009/07/01(水) 05:32:35 ] 気楽にと書きましたが、逆に徹底してとか、偏執狂的にというのも あるでしょう。ある書物を徹底的に述語化してしまうとなどがこれ です。古典的なものはもちろん現代の例えば白書的なものでも、 表、グラフの述語化は十分に有用で希少価値を持ちます。社会的に 文章、表、グラフなどの中立をする形式は未開拓であり、未完成に 放置しても、後に利用、発展が自然に可能なProlog述語への書き換 えは有力なものではないでしょうか。
393 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 05:59:28 ] >>391 わからないです(><;)
394 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 06:13:14 ] 前スレに書いたことですが、私のインタプリタ環境で ?- 相模(X). と質問すると答えが返ってきます。相模/1は未定義ですが。 未定義の質問が(導出の最中でも)現れると、その述語名の 性質を調べて、関係ありそうな分野からの検索します。分野には 古典文学->歴史文献->地名等 の優先順位がつけられているため ?- 相模(X). X = 花ならぬなぐさめもなき山里に桜はしばし散らずもあらなむ; X = なにか思ふなにをか嘆く春の野に君よりほかに菫つませじ; X = 見わたせば波のしがらみかけてけり卯の花さける玉川の里 no という具合になります。この歌並びからこれは千人万首を 検索してるだけだなとわかってしまいますw セマンティックウェブの話もありましたが、ウェブに頼らずこういった 情報発信を自らPrologサーバからやろうではないかということです。 多くのボランティア的献身によって(千人万首もそうだ)我々のウェブ 環境は豊かになりましたが、的確に得られる情報は未だ極々僅かです。 負担にならない蒐集・表示形式としてPrologが活躍する余地は大きい ように思いますが如何でしょうか?
395 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 06:38:23 ] www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-58.html > Tabbing commands > * \= (set tab) : > * \+ (indent; move margin right) 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 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:04:07 ] やばい>>395 のLaTeX説は眉唾だった。\/が消える説明がつかない。 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 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 12:24:08 ] >>325 以降をどうぞ
399 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:01:03 ] >>387 opencycとかWordnetの日本版ってこと?
400 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 06:39:12 ] >>399 そうですねとは、さすがにいえないw まだ何も始まってないから。 ライブラリを目指すのではなく、 断簡、反古として知識、ルールの切れっ端を 可能な限り隙間なく集める。述語とする。 ありとあらゆる分野に於いて。 使い手は適宜、論理変数を補充して、自分にふさわしい 使い方を見つける。 10000Tipsとは極度に控えめに言っている。 10000があっという間ではないかと予感させる一例を。 典拠不詳(古墳多くは少年の人). /* でも、 */ 古墳多くは少年の人(求塚,世阿弥,典拠不詳). /* でも */ 述語にしておこうと思い立った人が閃いた形式で登録すればよい。 典拠不詳であることが大事なのか、世阿弥の求塚という作品に 「古墳多くは少年の人」という一節があることを伝えたいのか、 そんなことはどうでもよい。心にとまったことを書き付ける形式が ひとつあるということだけが大事なのだ。
401 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:28:35 ] >>400 意図としては大体了解できたと思う。ただ、 >>ありとあらゆる分野に於いて。 というのは、気を悪くして欲しくないけど、それは危険フラグだ。 辞書爆発が問題で使い物にならないといわれているのに、 改めてそれに無策で挑むというのは、人を説得しきれない。 むしろ分野を限りなく限定させてしまったほうが面白い結果が 得られるかもしれない、と無責任に思う。
403 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:01:58 ] abelard.flet.keio.ac.jp/ontology/
404 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:44:42 ] 言語哲学にどう接続させるか。
405 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 10:01:55 ] sourceforge.jp/projects/prologpedia/ > あらゆる情報を Prolog のプログラムとして蓄積する為の基盤作りをしようと思います。 > 登録日: 2009-07-01 08:05 またそういう
406 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:10:06 ] 人は壁にぶつかって成長していく。静かに見守ろう。
407 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:01:35 ] 切れっ端ならtipsじゃなくてchipsだね
408 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:06:53 ] 辞書でchipを引くとひどい意味ばかりあるw
409 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:33:05 ] 最近まったりが足りない。
410 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 03:34:34 ] Prologではったり
411 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:33:31 ] この言語極めたらガンダムのハロとかオートマトン作れんの?
412 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 11:26:30 ] >>413 Prolog風かどうかは疑問ですが。どこが違うかよく見てください。 ?- X=50, Y=100, Z is X^2+2*Y+5, write(Z).
415 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:27:01 ] >>413 >>1 に上がっているサイトにもいくつかあります bach.istc.kobe-u.ac.jp/prolog/intro/arith.html www.geocities.jp/m_hiroi/prolog/prolog01.html#chap5 その他 www.kprolog.com/doc/ja/builtins/math.html
416 名前:413 [2009/07/18(土) 06:57:50 ] 遅くなりました。プロバイダがアク禁だったので。 おかげさまで計算することができました。ありがとうございました。
417 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:29:08 ] 他スレで質問したのですが流れてしまったのでこちらで質問させてください ?- con2(2, [1,3]). no ?- con2(1, [2,3]). yes と答えるようにしたいのですがどうしたらよいのでしょうか?
418 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:06:42 ] con2(1, [2,3])だけをyesとしたいのであれば、 con2(1, [2,3]). と定義するだけでOK。
419 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:08:42 ] >>417 con2(X,Y) :- X = 1, Y = [2,3].
420 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:29:14 ] >>418 さん>>419 さん 言葉が足りていませんでした・・・。 今、ハノイの塔の問題を作っていて ペグの上に載るディスクは常にそのペグの最小ではならないと 移動先でもディスクは最小でないとならないって言う制約の判定をする部分を 作っていてそこに当たる部分なんですが・・・。 途中までは作って制約の部分の製作がわからなかったのでこちらで質問させて いただきました 未完成のプログラム乗せたほうがいいですか?
421 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 02:35:46 ] >>420 一番上の円盤(B)がAより大きい con2(A,[B|R]) :- A < B.
422 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 06:21:32 ] >>420 本当に必要な述語はどんなものかという分析ができているのかどうか ちょっと不安
424 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 07:05:40 ] >>417 ?- con2(1,[]). これは?
425 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:53:02 ] >>428 肌に合わないなら無理してPrologで解く必要は無いよ。 自分に合った言語を使えばいいんだから。 Prologを使う事も宿題の前提の一つならあきらめなさい。 神様や天才じゃないんだからあきらめることを学ぶのも勉強。 だまには宿題ができず先生に怒られるのもいいでしょ。 それが嫌なら、まずは自分でできるところまでPrologで挑戦して、 できなかったところを具体的に自分の言葉で表現してみて。 そうすればスレの住人も返事のしようがある。
430 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:43:31 ] prolog使うのも条件なんです 最終レポートなんで出さないのはちょっと… c系列なら二次元配列で表して左上はじから数字を当て嵌めてダメならバックトラックで出来ると思うんですがprologでそれをどうやっていいのか見当がつきません。 ヒントだけでもお願いできませんか?
431 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:58:02 ] あきらめなさい
432 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:01:51 ] 理解してないくせに単位だけ取ろうなんて図々しいよな。
433 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:02:16 ] >>430 nojiriko.asia/prolog/index.html
434 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:17:12 ] すみませんご迷惑かけました >>433 ありがとうございます。みてみます。
435 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:22:10 ] まあまあ、俺も学生時代そんなんだったし興味ない言語に縛られるのもやでしょ。 特にCとかになれた人ならprologちょっとつらいしね。 この辺みれば良いんじゃないかな kaz.cyteen.nagoya-bunri.ac.jp/advprog2/prolog.html
436 名前:429 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:46:57 ] >>426 > %-- 制約2 > % 一番上にあるディスクよりも、小さいことを検査 「一番上に今置こうとするディスクXよりも、その下にあるディスクYがすべて小さいことを検査」 と、強引に変形してみると、心なしか > con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが これに近くなる。なんていうエスパー解釈はダメでしょうか… (Yを半ば集合的にとらえるところがミソ。[Y|_]がどこか投げやりであることにも符合)
438 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:18:55 ] >>438 > Rが定義されていないみたいなエラーだったのでBの後ろは_として この行動の説明ができれば疑問はないような気が。 これはこれでいいとして、問題は「エラー」(ではなくて警告だと思いますが)なのか、 期待通り動かないことなのか、なんだかよくわかりません。
440 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:19:40 ] 一応紹介 www.sken.biz/~tsuchiya/prolog/text/sicstus.html > 節内で他に共有されていない変数について、Prologが気をきかせて知らせてきています。 > > 無名変数(_で始まる変数)にした方がよい場合もあるし、「変数名を書き間違えていた」という場合もあるでしょう。 ただし「(_で始まる変数)」は余計ですね
441 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:21:53 ] いや、余計ではなくて「(または_で始まる(無名でない)変数)」と言い換えるべきなのかも
442 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 00:29:35 ] >>440 さん [R] - singleton variables in user:con2/2 と出ているのでRは定義されてないよ〜って言ってるんだと思うんですが どうなんでしょう?
443 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 00:46:54 ] >>441 _X でも警告されるんじゃ婦負の? SICStus のことはよくわからんが。
444 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 05:59:29 ] >>442 R のように節のなかで一回しか使われていない変数は虚変数といって、 実効がありません。実は変数名の付け間違いという可能性が高いため 処理系からWarningがでますが、Prologの仕様としては、エラーでは ありませんし、Prologのプログラムの中ではそんなに珍しいものでも ありません。全く気にすることのないものです。
445 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:07:46 ] 実効がないと書きましたが論理的に実効がないと言う意味であって、 [A|R] ではなく [_一番上の円盤|_それより下の円盤の重なり] だったら、 ドキュメントとしての実効はあります。こんなアクの強い事例は少ないで しょうが、多少のニュアンスを残すために虚変数はよく使われます。
446 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:21:26 ] >>443 single_var_warningsというPrologフラグの説明によれば > variables not beginning with `_' occurring once only というのが警告対象なので、_から始まるものは除外されているね。 確かに昔SICStusを使ったときそんなで、利用した覚えがある。 「don't care variable」という言い方があるらしい
447 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:22:54 ] >>442 違います
448 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:54:42 ] >>442 初心者はその警告を無視しないほうが無難だと思います。
449 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:01:39 ] >>442 つまりまとめると、>>421 を書いた人は「一度しか現れない変数は間違いの兆候とみなされる」という原則を 意図的に無視したか、単に動作確認せずに書いて自己弁護しているかw、 ということでしょう
450 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:35:56 ] >>449 なんでそんなことが長々話題になってるのか解りません。 私の処理系ではWarningも出ないだけです。
451 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:57:19 ] それはなおさら興味深いじゃないですかw
452 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:10:09 ] >>448 に補足すると、 「一度しか使っていないことに気づかなかった」こと自体はどうでもよく、 単に「意図せず食い違いが生じた」ことを浮き彫りにするための手段になるということです。
453 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:11:09 ] >>451 ごめん。IF/Prolog自体はconsult時にWarningを出してました。 私のはもう一層上にインタプリタが被っているので。 というより、ご指摘どおり、今やってみただけで、処理系での動作確認などは 確かにしていません。 ただ、この話は私の書いた >>444->>445 に尽きると思いますが。
454 名前:444 445 453 mailto:sage [2009/07/23(木) 08:39:20 ] 済みません。間違ってたかな・・・ 虚変数というのはトップレベルになくてはいけないという定義だったかも。 cons3(A,B,C) :- A < B. の場合の C は虚変数だが、 cons3(A,[B|C]) :- A < B. の C は虚変数ではない、かな。 トップレベルってそういう解釈でいいのだろうか。
455 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 14:58:39 ] 虚変数という言葉は初耳ですが、要するに、 名前をつけただけで呼ばれることがない変数(の実体)は、 実行中に名前を覚えておく必要がない(「環境」から除外できる)ということでしょう。
456 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:04:39 ] いや、「名前」の問題だけではないか。 とにかく一定の処理を省略できるという特質があるということでは。
457 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:16:38 ] anonymous variable(「無名変数」、まれに「匿名変数」)の別名として、 void variableという、「虚変数」に近い言い方があるみたいですね。
458 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:31:17 ] >>454 なるほど、複合項の一部に持たせるときはその記憶領域が必要ですね。 某処理系のあのバグの本質はそういうことだったのか。。 勉強になりましたw
459 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:53:48 ] p(X) :- Y = [H|T].
460 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 23:55:54 ] >>446 ども、ありがとうです。>>445 みたいに使うのかな。 コメントでもいいような気もするけど。
461 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 09:06:42 ] よく考えると、自分が利用したのは、 ?- findall(_X,( _X = a ),L). のように問合せの中に使って、成功時に値を見なくていい変数であることを示す、 という効果だったような…。それは別の処理系だったかな…。
462 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 00:42:28 ] >>462 > ハノイの塔の3つのとき方ってそんなにあるんですかね? 無限にあるよ
464 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 09:13:10 ] initial_state(hanoi, [[1],[],[]]). goal_state(hanoi, [[],[],[1]]). で考えると、 左→右 左→中→左→右 左→中→左→中→左→右 左→中→左→中→左→中→左→右 : こうなるんじゃないかな
465 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 09:18:10 ] 節の並べ方によっては 左→中→左→中→左→中→左→中→… と止まらなくなるおそれもあったのでは
466 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:00:08 ] >>462 です 15手順目位までは特に変わりは無かったのですがその後が変わっていってました 手順は20とか23でとまっていたので手順が雪だるま式に 増えるわけではないみたいです
467 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 02:38:21 ] 手元でやってみたら1872通りと出た。 ttp://www.research.att.com/~njas/sequences/A125295 > 1, 2, 12, 1872, 6563711232, 282779810171805015122254036992, というような数列になるらしいよ
468 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:11:17 ] >>467 さん ( ゚д゚)・・・・ みなさん長々とありがとうございました
469 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:54:24 ] okwave.jp/qa5100395.html > quicksort([A|B],C) :- > MLの説明に載っていたので、まさかMLでなくPrologだと思いませんでした。 > 助かりました。 気になる… 質問者の勘違いなのか説明の間違いなのかが気になる…
470 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 01:08:15 ] Prolog は凄いな。 複雑な式 A is B + foo(C * D) / 2 がそのままデータとして扱えるなんて。 新たな演算子を自分で作れるのも、 それを組み合わせて新しい文法が定義出来るのも (危ういと言えば危ういけど)凄いと思った。 LISP よりも Prolog の方が DSL 作るのに向いてるかも。
471 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 17:50:47 ] >>472 =..(univ)はISO標準ですよ
474 名前:デフォルトの名無しさん [2009/08/05(水) 17:53:17 ] >>473 マジでw もはや一階述語じゃないISOなのかw
475 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:56:08 ] 制約(constraint)を扱える処理系ってどんなのがありますか?
476 名前:デフォルトの名無しさん [2009/08/05(水) 18:58:12 ] >>475 SWI-prolog
477 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:54:25 ] >>474 =..は一階述語ですよ
478 名前:デフォルトの名無しさん [2009/08/05(水) 22:58:18 ] >>477 あの述語自信はそうかも知れないけれど、 あの効果を許すとそうでなくなるのではと。 述語を作れる述語でしょ。
479 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:25:25 ] >>478 univは複合項とリストを単一化するだけで述語を作ったりはしませんよ
480 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 00:13:57 ] >474はfindallが一階述語じゃないこともわかってない気がする
481 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:42:14 ] 「述語を作る」という言い方は、微妙にややこしい。 論理式を作るのなら、Goal = p(X,Y)、Clause = (p :- q)などでもできる。 項と論理式を表面上区別しないから。
482 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:28:41 ] 例えば findall(A,hoge(A),AList) を論理的に考えてみると、 Findall(Hoge,x) ≡ ∀y[Hoge(y) ≡ Member(y,x)] みたいな二階述語になると思う。(あってる?) (=..)/2などで述語と引数をくっつけなくても、述語の引数にあたる変数を指定しさえすれば 高階の呼出しは表現できる、という例になっているんじゃないかな。 でもまあ言いたいことはわかるというか…。
483 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:16:16 ] よくわからんけど、 述語論理の述語変数(や述語記号、関数記号)には個々に変数の数が決まっていて、 そもそもPrologの述語名(や関数子)とは対応していないから、 findall/3のやり方の方が、見た目は違っても述語変数を再現できている面がある。 とにかく(=..)/3がなくても一階論理を超えまくっている以上、鍵のように言うのは変だよ。 高階論理風の見た目とPrologの高階性は違う、というか。
486 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:18:02 ] (=..)/3じゃないや。。
487 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:14:05 ] ?- alive(noriP). no
488 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:25:11 ] そんな推測に過ぎない節を登録しないで欲しいな…
489 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:23:59 ] え? 登録されていない事実だから、否定してるのでは?
490 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:25:26 ] なるほど。
491 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:30:07 ] ?- stayAt( noriP, Place ).
492 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:31:59 ] ?-guilty(noriP).
493 名前:デフォルトの名無しさん [2009/08/10(月) 13:32:34 ] >>486 が顔文字に見える
494 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:44:29 ] 自信なさそうに、ちょっとうつむき気味に挙手してるようにも見えるなw
495 名前:デフォルトの名無しさん [2009/08/18(火) 19:06:04 ] プロロげ!Prologer! ちょっとまったりし過ぎじゃないか?
496 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:39:31 ] レスもprolonger。
497 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 10:43:28 ] じゃあ別スレで出てきた覆面算でも ONE + NINE + TWENTY + FIFTY = EIGHTY
498 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:49:00 ] やってみたけど、多少枝刈りしても1分以内にはできなかった。 いや、普通の環境ならできるんだろうけどw
499 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:07:58 ] この数日、Haskellのスレで続いている副作用談義は勉強になる。 pc12.2ch.net/test/read.cgi/tech/1231861873/
500 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 07:29:44 ] 発刊予定日さらに延期。2010/4/16。 www.amazon.co.jp/gp/product/0321417461
501 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 20:35:51 ] prolonged...
502 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 21:55:24 ] 誰がうまいこと言えと
503 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 10:12:24 ] Prologってコーディング標準とかないのですかね? 標準でなくてもいいのですが、よく使われている規約などあれば教えてほしいのであります。
504 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 10:30:42 ] >>503 ICOTではあったと思うけれど、資料はないだろうな。Prologはほんの一部ですが。 その後は、各企業毎に多少は決められてるだろうけど、ほとんど「ない」と 言い切っていいレベルだと思います。
505 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:14:33 ] >>504 そうですか…ありがとうございます。
506 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:30:04 ] 私の場合は「散文的」でありたいと思ってるから、 そういう規則は設けないですね。
507 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 16:58:46 ] pc12.2ch.net/test/read.cgi/tech/1250204272/176 # [1]講座名:やさしいC言語 # [2] # (1) 「ようこそC言語へ」という文字列を表示し改行するコード # printf関数を使う。 # (2)「 ようこそC言語へ」と表示し改行してから「C言語をはじめましょう」 # と表示し改行するコード。ただしprintfは一回しか使ってはならない。
508 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:05:57 ] 失礼、誤爆でした。>>507 と>>508 は「いろいろな言語で宿題スレ」に 書き込まなくていけなかった。錯覚しました。
510 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 18:59:49 ] ところで kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9925.txt こういう課題をProlog流に解釈して解答をつけるとすると、 どんなことになるのかな? Cの解答例としては kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9927.txt がある。
511 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:52:15 ] 世界の散文化はPrologでなされるのだろうか。
512 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:39:06 ] OS X 10.5.8にもSICS Prologってインストール可能だろうか?
513 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:07:56 ] 本家サイトくらい読めよ。 www.sics.se/isl/sicstuswww/site/download4.html www.sics.se/isl/sicstuswww/site/portability.html
514 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:28:45 ] なんですか偉そうに。かわりに読んでください。
515 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:59:50 ] どうしてそういう不安があるの
516 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:36:36 ] Mac OS X は、普通の Unix 系の OS だから、他の Unix 系の OS で動くアプリケーションなら、動くよ。 動かないのは、デバイスドライバとかの特殊なソフトウェアじゃないかな。 ただ、Mac OS X 用のアプリケーションは、他の OS じゃ動かないよ。 Mac OS X の独自機能だけを使ってアプリケーションを作るのが通例だろうから。
517 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:38:28 ] > Mac OS X は、普通の Unix 系の OS machスレッドはpthreadとお約束が違うので 微妙に動かなくなったりするけどな
518 名前:デフォルトの名無しさん [2009/10/01(木) 20:27:12 ] Prolog でやるエロゲー作ったら、みんな Prolog やるんじゃね? 俺は、エロゲーやらないけど
519 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:29:40 ] >>518 lisp ベースのゲームエンジンがあって、それを使ったゲームは そこそこ売れているんだけど、みんなlisp やんないよね
520 名前:デフォルトの名無しさん [2009/10/01(木) 20:39:50 ] >>519 それは、エンジンが lisp なんであって、lisp でやるわけじゃないんじゃ? 目に見えないと分からないでしょ。
521 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:42:59 ] Age of Empire の AI が Lisp ぽいという話はあったな
522 名前:デフォルトの名無しさん [2009/10/01(木) 21:27:19 ] そういうチラ見せじゃなくて、 コマンドラインで Prolog 打ったら、 女の子が反応したり、 女の子に新しい何かを覚えさせたり 出来るのを考えてた
523 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 21:37:43 ] 俺が喜ぶポーズを取ってみろ! と指令を出すと、登録してある嗜好データベースで演繹して そのシチュエーションでプレーヤーが一番喜ぶポーズを取る萌えキャラ。
524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 03:51:46 ] subservient chickenみたいなものか
525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 22:54:00 ] ? like(you, me). no. 〜 Fin
526 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:06:43 ] prologでSWAN SONG。 ピンポンピンポンピンポン!ってできたらいいなぁ。
527 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:16:07 ] SWI prolog はEmacsで使うとプロンプトが出ないんですが、 対処法はありますか?
528 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:22:37 ] Emacs22 + SWI-Prolog 5.7.15 on Linux で使ってるけどプロンプトでてるな。 環境は?昔、Windows上でつかってるときはなんか使い難かった記憶がある。 実用上問題はなかったのでそのまま使ってたけど。
529 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 02:46:19 ] >>528 Windows上でMeadow+SWI-Prolog(Version 5.6.62)です。 実用上は問題ないのですが、どうも気持ち悪かったものですから。
530 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:59:35 ] ファンクタに破壊的操作を加える述語ってありましたっけ?
531 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:58:37 ] たぶんない。作ればあるだろうけど。 自然言語に近い語順、はいいけど、機械が扱うためにはきちんと形式化されてる ことが必要だからね。
535 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:50:36 ] >>534 X:>自然言語に近い語順、はいいけど、 O:>自然言語に近い語順、は「どーでも」いいけど、
536 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:15:11 ] >>533 自然言語の語順と一致しなくて気持ちいい
537 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:51:45 ] 気持ちがよければそれでいいのかと問いたい 問い詰めたい
538 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:56:43 ] 自然言語にすり寄っても、論理学との関係がややこしくなったら本末転倒じゃないかな
539 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:15:46 ] 英語的: 主語 <述語> 目的語 :- ... . 日本語的: 主語 目的語 <述語> :- ... . この場合は述語指定に< >を使ってしまうので大小比較の時の記号表現にちょっと困る。 日本語的: (主語,目的語)述語 :- ... . とすれば現在と差なく処理できるが、 英語的: には適用できない。
540 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:41:56 ] relationなんで主語があるとは限らない。目的語も。
541 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:53:11 ] 格概念への割り当てが面倒になって飽きること必至
542 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:03:17 ] >>533 計算機の処理能力というようなことではなく、考えに考え抜かれて、 現在の言語仕様が作られたように思うなぁ。
543 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:51:10 ] 言語仕様はね。 構文は 述語(引数0, 引数1, ...) でなくたとえば (引数0, 引数1, ...)述語 も ありだとはおもうけど、今の形になったのは計算機のリソースの問題とか じゃなくて、数学の記法における慣習とか、そこらへんでないかと。 自然言語ライクな文法って、例えば Mind みたいな文法のことを 言いたいのかな?
544 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:35:50 ] 述語が先にくる自然言語(タガログ語とか)を使えばよろしい。
545 名前:デフォルトの名無しさん [2009/10/09(金) 12:34:55 ] op で上手く定義すれば、ある程度は自然言語に近付けられそうな気がする。
546 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:44:04 ] >>545 pc12.2ch.net/test/read.cgi/tech/1179157784/30 とか。
547 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:00:13 ] >>543 フレーゲあたりじゃない?述語論理の形式が整ったのって。 数学の関数 f(x) にヒントを得たんじゃなかろうか。
548 名前:デフォルトの名無しさん mailto:sage [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]).
549 名前:548 mailto:sage [2009/10/12(月) 20:04:58 ] すみません、わかりました。K-Prologの意味不明なエラーに 悩まされていたのですが原因は単純でした。 コードの最後の行に改行がないと正しく読み取られないようです。 お騒がせしました。
550 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 09:05:17 ] 最後に改行ないと本来はエラーなのかな?
551 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 17:36:30 ] >>550 SWIやYAPでは問題ないのでうっかりなのでしょう。 K-Prologはシンプルでなかなかいいです。 最近、多忙によりメンテされていないようですけど。
552 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:42:25 ] >>551 <終止符>は二文字で第一文字が"." 第二文字がasciiコード32以下の 文字ですから、K-prologの解釈が正しいと思います。
553 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:49:27 ] asciiコード32以下、という定義はちょっと面白いな。 0x1a(^Z)でもいいわけだ。
554 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:37:18 ] 節と節の間に空白がなくて駄目だったという事態はわりとよくあると思うけど、 ファイルの終端という罠があったか。
555 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:53:06 ] 32以下ってことは空白でもOKなのかな?
556 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:00:10 ] もちろんOKでしょ。最後に改行がなくても。
557 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:32:57 ] ちなみに、SWI-Prologの古い版(3.1.2あたり)では後者のリスト先行の形もあったみたいだけど あまりちゃんと見てない。 www.google.com/codesearch?hl=en lang:prolog ^select\(\[
560 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:54:53 ] Prolg-KABA では「ふろく」のプログラムの例としてQUEEN.PLが 載っていて、この中のselect/3は後者。
561 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:56:05 ] 漏れのK-PrologからSWI-Prplog移植の経験(ほんの少し)だと、 [K] name(X, Y) が [SWI] string_to_atom(Y, X) てのがあた。
562 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:56:22 ] Prolog-KABAねw
563 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:06:15 ] Prologの場合、述語が双方向性を持つことが多いという特殊事情があり、 たとえば、member(A,L) はリストLにAが存在するかを問う場合この順序が 自然だが、Lから一要素づつ順に取り出す場合はPrologとして自然なのは member(L,A) だろう。
564 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:06:29 ] Prolog-KABAか、懐かしいね。 自分はPC98買えなかったから、会社のHI-UX Prolog(超マイナー!)を触っていた。 その後、WinなPCを買ったけど、当時は日本語がまともに扱えて 個人購入できるのはK-Prologくらいだったから、重宝していたよ。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:10:09 ] >>563 双方向性という特殊事情があるからこそ どちらが自然であるかは一概には言えない、ってことだよね?
566 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:12:11 ] SWIにもname/2はあるみたいだけど、整数の扱いが違うとかそういうこと? www.swi-prolog.org/pldoc/doc_for?object=name%2f2 > (e.g. `name(N, "300"), 400 is N + 100' succeeds) www.kprolog.com/doc/ja/builtins/meta/creation.html#name_2 > アトミック項をその表記である文字列と相互変換します。 これだと数がどうなるのかわからないけど。
567 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:31:26 ] ああ、昔のことだとわからないね
570 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:43:03 ] >>567 自分の場合、双方向性の必要の無い(入出力が明確な)リスト処理については、 関数型言語風のmap_list/select_list/if_listみたいなライブラリを作っているよ。 どれも function(入力リスト, 高階述語, 出力リスト) というスタイルで統一している。
571 名前:570 mailto:sage [2009/10/14(水) 08:54:06 ] >>570 のif_listは間違いだ。reject_listに訂正。 if系は第2引数の高階述語向けとして定義していた。 あと、(appendに相当する)リストの結合処理は作っていないや。 もし作るとすれば、merge_list(入力リスト1, 入力リスト2, 述語, 出力リスト) みたいな感じになると思う。
572 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:11:31 ] プロログで入力、出力とな!(麿のAA略
573 名前:570 mailto:sage [2009/10/14(水) 10:25:50 ] >>572 スマンw ただ、並行論理型言語(KL1(GHC), Concurrent Prolog)の存在を知ってしまったから、 はたして逐次Prologにも双方向性(=非入出力)の概念が必須かどうかについて、 疑念を持ち始めていた。 もちろん、find_allといった全解探索に双方向性は必要。 でも、その後の得られた解の加工処理については、双方向性はかえって邪魔になる、 言い換えると、入出力を明確にした方がプログラムは読みやすくなると思う。
574 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:33:15 ] 双方向性を狙って書く人は少ないと思うね。 図らずも双方向性が得られたという歓びで十分だな。
575 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:42:28 ] append/3 一つで済ませるをよしとするか、別述語とするかという話ですね。 Prologは基本的に単位節述語定義とappend/3だけで書くものだ、でいいと思うけど。
576 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:36:25 ] >>558 >>560 どうやら select(L,<L引く[X]>,X)の形 もあるね。 % from Sterling and Shapiro, "The Art of Prolog," page 211. と出典のあるやつ。
577 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:01:47 ] >>575 述語定義の中は全部appendで大いに結構だけど、ここではその一層上の 話じゃないか。ライブラリに登録する時の述語頭部の仕様のことではないか。
579 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:35:14 ] GoogleブックスでThe Art of Prolog(第2版)を見てみたら、 select/3は211ページ目ではなくもっと前の方に(要素先行の形で)載っていた。 ひょっとしたら1988年の初版とずれがあるとかいうオチかも。
580 名前:557 mailto:sage [2009/10/14(水) 21:37:52 ] みなさん、情報ありがとうございました。
581 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:25:27 ] 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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:12:01 ] Prologを拡張して、 {A | 出荷日(A)} + {B | 商品番号(B)} + {C | 数量(C)} :- のような表現を可能にすれば、?- 20091016+200+34.6. は実現します。これは1980年代に中島秀之氏によって「項記述」という名で Prolog拡張の提案として出されたことがあります。
586 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:26:19 ] >>582 私の意図したのはどちらかというと、>>585 の型そのものですが、 この { _変数 | _型記述 } の_型記述部分にatomがくると無条件に 真となる、と定義すれば「名前付きフィールド機能」らしきものには なります。しかし、フィールド名からどうやって呼び出すのかという 問題を解決せねばならず理論的なアプローチが必要でしょう。
587 名前:582 mailto:sage [2009/10/16(金) 18:27:58 ] >>584 >いや、 ということは、(>>582 の)名前付きフィールドは不要であると考え、次の質問に移ります。 >いや、インタプリタのトップから、 インタプリタのトップレベルにこだわる理由は何かありますか? たとえば、実行例を以下であるとし、 ?- read_record. 20091016+200+34.6. # <-- キーボードから入力 yes ?- とし、述語 read_record の中で 入力値検査と assert を実行した場合、 何が問題になりますか?
588 名前:582 mailto:sage [2009/10/16(金) 18:36:21 ] >>586 スイマセン、>>587 をカキコする前にスレをリロードしてませんですた。 >>586 へのレス内容は、今、考えています。
589 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:52:13 ] >>587 インタプリタのトップからに拘るのは、私がそれの虜になったから ですね。元々一覧表のようなものが嫌いで、巨像をなでるような 細部の積み重ねで本当らしきものを築き上げることを好みます。 沢山、柔軟に質問できるものをよしとします。少なくともその方が 敏感でいられます。
590 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 19:33:55 ] グラフを述語で表現しようと思っています。 e(1,2). e(3,2). のように点を数で表し、点の接続をe(X,Y)で表そうと思います。 ところで、グラフをプログラム中から変更したいのですが、 retract(e(1,X)). とするとエラーになります。assertしたものはOKなのですが、 予めテキストに書いて読み込んだものはエラーとなります。 こういう場合、どうするのが定石なのでしょうか?
591 名前:582 mailto:sage [2009/10/16(金) 19:41:43 ] >>586 2点、要求仕様に関する質問があります。 まず、>>585 の紹介してくれた中島氏の記述方式は、フィールドを前提としています。 たとえば、「変数 A の フィールド名は '出荷日' である」と宣言してます。 それに対して、>>586 のレスでは、「名前付きフィールド機能らしきものになる」と 肯定しています。 その一方で、>>584 のレスにある「いや」という表現から、「名前付きフィールド機能は 不要である」という意図のようにも読み取れるます。 これら二つの事柄は、自分の中では「矛盾」しているような気がしています。 ここから推測される意図として、以下を考えてみました。 ・述語定義では名前付きフィールドを使いたい。 ・ただし、問い合わせでは(フィールド名を省略した)タプルを使いたい。 この解釈で合っているでしょうか? 2点目の質問です。 # ここは>>587 の後半にある質問内容と同一ですから、省略します。 ご返答を願います。
592 名前:582 mailto:sage [2009/10/16(金) 19:48:31 ] # またリロードせずにカキコやっちまったゼ....orz >>589 要求仕様について、了解しました。 # ご返答を頂いたので、>>591 にある2番目の質問は無視し、 # 先頭の質問に対するのレスだけでOKです。
593 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:25:38 ] GHCの処理系で今も現役のものってありますか? また、and/or並列を自動的にやってくれるものってありますか?
594 名前:デフォルトの名無しさん mailto:sage [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の枠組みでは型を取り入れ それによってソースコードの情報価値を高めることはあまり期待できないと いう結論になってしまいます。 名前付きフィールドも同様の理由から否定的にならざるをえません。
595 名前:594 mailto:sage [2009/10/16(金) 21:11:46 ] そもそもPrologとは論理変数のストリームを繋ぎ合わせる錬金術のことですから、 いちいち型など考えていられるか、ということになります。単純に言うと。 これは「もっとも美しいプログラミング言語は」スレで叫ぶべきことでしょうね。
596 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:17:00 ] >>592 と、突然正反対の結論になってしまいました。申し訳ない。 実はこの話、昔から何度も何度も持ち出してはうまく解決できず、 放棄を繰り返しているのです。
597 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:28:38 ] >>590 IF/Prologですか?
598 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:42:14 ] >>597 いいえ、K-PrologとSWI-Prologで試しました。
599 名前:582 mailto:sage [2009/10/16(金) 21:45:48 ] >>594 すいませんが、ここでレスをカキコするとスレの流れが発散しそうなので、 直接のレスは控えます。 何をしたいのか、そして実現方法としての中島氏の方式に関する質問へのレスを待ちます。 もし質問の意味に不明点や疑問があれば、質問を返してください。それには対応します。 # Prologで名前付きフィールドを実現する方法はいくつかあります。 # おそらく、中島氏の方式も、その一つであるように見えます。 # ただ、今の状況では、何も話せません。
600 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:08:35 ] >>590 >予めテキストに書いて読み込んだものはエラーとなります。 具体的には、どういう方法で読み込んだの? >>593 GHCなんて超マイナーな言語を持ち出したってことは、 ICOTライブラリのサイトを見てるし、KL1という名前は知っているんだよね? (まさかHaskellの処理系じゃないよね?w) あと、後半の質問は知らない。
601 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:10:01 ] >>598 これでどうでしょうか。 ファイルの頭で :- dynamic(_述語形式リスト). を宣言します。 :- dynamic([e/2]). e(1,2). e(3,2).
602 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:46:23 ] >>601 うまくいきました。ありがとうございました。 今、ケイリーの木の公式の証明に使われているアルゴリズムを Prologで書こうとしているところです。助かりました。
603 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:32:27 ] >>599 要求仕様に含まれる情報をできる限り遺漏なく、どうしたらソースコードに 盛り込めるか。これが私の課題で、型の採用は一案に留まります。 コメントでよいものか、関数名、述語名、論理変数に反映するべきなのか。 論理変数に反映したとして、どんな意味があるというのか。 それから、理論だけではなく、実務的にどれだけ有効であるか。それを測定できるか? まったくの素人がPrologを一読して理解することがあり得るか?どうすれば可能か? 以上のような視点からの書き込みだったので一旦身を引きます。 項記述については、多分初出の第二回ロジックプログラミングコンファレンス(1984)の Proceedingが手元にあるのでもう一度考え直して、近いうちに書き込みます。
604 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 07:39:57 ] このところの流れは単一化が邪魔してる部分の話か。 Prologの不人気の原因もそこに帰するような気もするね。
605 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:15:42 ] >>600 ガーン、GHCというか、ホーン節にガードを付けるって考え方はマイナーなんですか? KLICも知ってますが、現役で開発・メンテされてる処理系ってないもんでしょうか。 Prologってもはや現実的プロジェクトでは使われることはないのかな。
606 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:30:09 ] マイナーというなら確かにマイナー。 GHCで表現しなくてはならないような課題を与えられた人はほとんどいない。 そういう意味でマイナー。美しさという点では一頭地を抜いてると思う。 Prologはプログラマも処理系も健在だから、いつでもプロジェクトを起こす ことは可能だけど。
607 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:23:09 ] Ozはマルチパラダイム言語であることくらいしか分かっていないけど、 問題解決の有効な一手法だと思う。その本は読んでいないけど、 おそらく並列論理型言語の問題は処理効率ではないかと想像。 ただ、論理型言語の魅力は、(処理効率を引き換えに得た)柔軟性と拡張性にあると考える。 だって、論理型言語の枠組みの中で、関係データベース、構文解析、関数、並行性、 制約解消、そしてオブジェクト指向を、次々と実現してきたんだから。 だから、プロトタイプやモデルシミュレーションといった、 処理効率の問題を無視できる用途であれば、 論理型言語(Prolog)は、まだまだ成長/発展を見込めるハズであると思う。 逆にマルチパラダイム言語は、魑魅魍魎というか混沌とした世界のように見える。 もちろんOzは触った事がないから、無知故の偏見だと思うが....。
610 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:06:00 ] >>582 先程から売上入力検査の部分を再考していたのですが、ドキュメントとして ここは必要という部分だけ、型(らしきもの)を添えるというのは やはり有効かもしれませんね。 消費税計算(商品番号 => 200,数量 => 36.4,消費税率 => 5 %,売上金額 => A,消費税 => B), 売上金額検査(A,売上金額 => C), というようなコードだとしても、情報量は明らかに豊かになります。 消費税計算の中で金額を計算するとしている部分は不自然ですが。
611 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:07:10 ] >>613 > たしかに、GHCはストリームを明示的に記述するから、 > それ自身は操作対象としては扱えませんね。 KL1はメタレベルアーキテクチャ持ってたよ。 OS(PIMOS)はそれで書いてた。 荘園。
615 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:08:02 ] Prologをほめたたえているサイトとかありませんか/
616 名前:デフォルトの名無しさん [2009/10/22(木) 12:13:47 ] そんな過去の事より、Prologの未来の話をしましょうよ/ それと、最後のスラッシュは、なに?/
617 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:29:37 ] シフトキー入れ忘れて?が/になっちゃったんだろう
618 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:14:36 ] >>612 >>613 >>614 >>616 AZ-Prologの新バージョンには並列処理が入ったよ。 OR並列でガンガンいけるらしい。
619 名前:デフォルトの名無しさん [2009/10/24(土) 12:25:19 ] >>618 ; のところとかで並列に試行してるってこと? パターンマッチングのところも?
620 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:45:50 ] >>619 今、Downloadが終わって、これからインストールだからw 数百節の頭部のUnifyを並列に処理して、早い者勝ちで、 候補節を得ることができるらしい。もちろんそういう指定を した場合に。16コアなどになればかなりの高速化が期待できる とのこと。
621 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:31:34 ] それはいいですね。 ところで、GHCとかICOTがらみついでなんですが、 制約付きユニフィケーションとかなんとかあったと思いますが、 あれは全然広まってないんでしょうか? cu-Prolog(constrained-unification)というのもあったと思うんですが。
622 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:41:30 ] 広まってたら、知ってるはずでしょw まだ継続して研究している人はいるけれど。
623 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:31:08 ] 多文字プログラミングの罠にはまった。 「〜が90°」のように角度の「°」をそのままアトムの名前の一部として使っていたんだけど、 元にした文書の中で半濁点と混用されていて…w
624 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:52:19 ] そんな君に euc.jp/i18n/ucsnote.ja.html www.ingrid.org/java/i18n/encoding/ja-conv.html
625 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 04:00:18 ] ICOTのサイトのメンテナーってどの団体なんだろうか。 研究成果のページでところどころリンク切れあるのが非常に残念。
626 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 08:25:35 ] 団体って ボランティアでしょ。
627 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:52:35 ] Bruce Batchelor 著 "Intelligent Image Processing in Prolog" 1991 Springer-Verlag に出てくる述語群を適切な日本語で置き換えたら興味の尽きないものと なりそう。こういう労作も永劫に忘れ去られていくのだろうか。
628 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 19:59:29 ] >>587 ひとついい忘れたというか書き落としたことですが、 データを入力する、 その直後に、あ、あれなんだったっけと質問する。 今入力したデータはもちろん、まったく関係ない例えば人名など。 それを解決して、次の入力。 このように進行するためには、別のWindowに移るだけでアウトですね。 同じWindowの次の行で質問して、また、元の仕事に戻る。 このためには、これからデータ入力するよと宣言した負節を起動する のではだめです。常に質問するのに「最良の」環境を維持しなくては ならない。インタプリタに拘る一番の理由は寧ろこちらの方でしょう。
629 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 20:06:54 ] Smalltalkという言語ができてしまって、この言葉が使えないのですが、 Prologという言語はまさにSmalltalkそのものなのですよ。 ぼそぼそと質問して、了解したら、というか了解できなくても、 またぼそぼそ。小さな質問を積み上げていくことで、少しずつ、 像を築き上げていく。そういう環境です。そのための準備をする のがPrologプログラミングです。常にぼそぼそだかポロポロだか わかりませんが、対話してる、それに相応しい言語がPrologです。
630 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 23:53:23 ] 質問させてください 第1引数が第2引数の部分集合(リスト)であれば成功、さもなければ失敗する述語。 第1引数と第2引数はそれぞれリストで、 これらの重複部分を除いた要素すべてをリストにしたものが第3引数の値となる(和集合) を作りたいのですがどうすればいいのでしょう・・・・。
631 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:18:57 ] >>629 モノローグ? スモールトークは“軽いおしゃべり”だからボソボソってイメージじゃないので。
635 名前:630です [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 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 02:45:40 ] >>635 最後のsubset/3の二節はunion/3ではないかな
637 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 06:07:32 ] >>634 なるほど。私はネクラだから。monoっていうのはひとりということなのかな。 隠れキリシタンの末裔が講でポロポロやってるのだとするとmonologueか。 インタプリタのトップっていうのは一応会話するところなのだが・・・
638 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 08:48:01 ] >>636 さん すいません その通りです
639 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:43:14 ] >>637 でも、ボソボソって会話って感じじゃない様な ポロポロは、会話にも、一人の発話の雰囲気にも、使わない感じが
640 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 13:40:00 ] ポロポロは田中小実昌の小説で使われた表現なんだな 実は「てんにましますわれらの・・・」とか言ってたんだろうけれど。
641 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:21:49 ] Prologで自然言語処理における意味解析を学んでいるものです。。 wordnetを用いてPrologでシソーラスを定義しようとしています。 しかし、いまいちwordnetをPrologで使う方法が分かりません。 どなたか詳しく説明されているサイト等ご存じないでしょうか?
642 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 03:03:25 ] 方法はわからんが、WordNetはクラス、インスタンスを混同しているとか、is-aの関係を誤解している という批判がある(溝口理一郎 オントロジー工学)ので、Cycのほうがいいんではないだろうか。 関係ないけど同書にあるIFF(information flow framework)というのが面白そう。 上位オントロジーの言葉として圏論を使うみたいよ。個人的にいろんなものが繋がって興味深い。 IFF www.ontologos.org/IFF/The%20IFF%20Language.html IFFの数学面 www.ontologos.org/IFF/Overview/Mathematical%20Connections.html
643 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 03:16:18 ] 圏論の創始者の一人であるマックレーンは、『数学−その形式と機能』という本の中で、 形式主義をも包括する機能的形式主義という、オントロジーの哲学みたいなことをやっているから、 当然といえば当然なのだろうけれど、実際に見ると驚いてしまう。
644 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:37:55 ] ただ、やっても袋小路に行き着くのが目に見えてるわ。 これもやっぱダメポ。
645 名前:デフォルトの名無しさん [2009/11/19(木) 12:18:03 ] このスレも袋小路に入ってるね
646 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 22:17:58 ] 気に触ったのなら申し訳ない。自分には使いこなせそうに無いという意味で、 否定する意図は無い。
647 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:43:42 ] >>625 そういえば、FTP経由で提供されていたもの(「ICOTフリーソフトウェア」など)には すでに移転前からアクセスできなくなっていたけど、提供側も気づいてないような気がする。
648 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 07:25:17 ] Prologプログラマに質問です。 1) あなたが小さな述語を定義するとき、リピートパターンの述語の比率はどのくらいになりますか。 ここでリピートパターンとは r. r :- r. の型の非決定性述語であり、代表的なものとして、append/3 や member/2 があります。 2) あなたは再帰的な述語定義をする際、追加して1)のタイプの定義を作っておきますか。 質問は以上です。
649 名前:648 mailto:sage [2009/11/29(日) 07:34:25 ] 2) は意味不明でしたね。1)は再帰的ですから。 ステッパーパターンと呼べばよかったとわかりました。
650 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:18:18 ] 2年以上前ですがこんなのあったんですね。 渕一博記念コロキウム 『論理と推論技術:四半世紀の展開』 www.ueda.info.waseda.ac.jp/fuchi-colloquium/ www.ueda.info.waseda.ac.jp/fuchi-colloquium/programme.html
651 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 08:27:15 ] ああ、全容わかんないって言っちゃったけど、大体分かった気がする。 オントロジーやりたかっただけじゃん。
652 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 13:01:05 ] いつの間にか、WikipediaのPrologの項が大幅に追加されている。 以前私がこのスレで難解と書いたLISPの括弧と集合の部分は削除されている。 カルメラウアーとコワルスキーの部分は変化なし。
657 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 04:58:34 ] 「Trueを返す」という表現に面食らった
658 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:59:42 ] >>657 > Prologの処理系は、人間が入力した命題と一致する節があるか調べ、あった場合はその本体部に記述されている命題と一致する節があるか再帰的に調べる。 この部分違和感があるのだけれど、論理の世界ではこれていいの? 特に、 「あった場合はその本体部に記述されている命題と一致する節があるか再帰的に」 という部分だけど。
660 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 22:35:57 ] >>659 では違和感の無いように変更おねがいします
661 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:02:00 ] 最初の「一致する」とあとの「一致する」では探索の対象が違うはずじゃないかということかな。 それよりまず、「一致する節」と言ってしまうと目標が(頭部だけでなく)節全体と単一化するみたいに聞こえるから、 せめて「適合する」とかちょっとずらすとごまかせるかもしれない、なんて思ったりして…
662 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:03:41 ] あ、ごめんなんか勘違いした。前半ナシw
663 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 04:54:28 ] 本体部が Q1,Q2,Q3. だとすると、 (Q1,Q2,Q3) :- なんていう定義節はない、ということだよね。だからといって、 Q1,Q2,Q3 を順に確かめることを再帰的にといっているわけでもなさそう。
664 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 05:48:33 ] 「命題」のような言い方の問題点が>>231 以降に出ていた
665 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 11:58:25 ] www.doc.ic.ac.uk/~klc/DistKR.pdf ちょっとまえに話題になったGOは prologベースのオントロジー指向プログラミング言語だったのね。 GoogleはWebのオントロジー技術(ページランク)で発展した企業ともいえるから、 研究しているのは当然か。
666 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:00:57 ] GoとGo!は違う
667 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:28:40 ] >>666 申し訳ない。間違えてた。
668 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 18:36:36 ] >>667 Francis G.MCabe の www.amazon.co.jp/Objects-Prentice-Hall-International-Computer-Science/dp/013536079X は良書。
669 名前:668 mailto:sage [2009/12/14(月) 18:38:43 ] Francis G.McCabe だ。不思議な名前だね。
670 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:29:59 ] Mcというのはゲール語で「息子」って意味。 昔アイルランド/スコットランド系の人たちには名字がなかった。 法律で名字が必要になったから、 「ローリンさんの息子のジョン」と呼ばれている人は、 John Mclauglinと名乗ることにした。 McDonaldはもちろん「ドナルドさんの息子。」
671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 04:11:21 ] >>670 Prologとはまったく関係ないが、とても勉強になた。
672 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:45:22 ] 親父のファリミーネームは息子と違うの? 親子3代皆違う名字?完全にスレ値だけど、すげー気になる。
673 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:34:05 ] キーワードは「父称」だ ja.wikipedia.org/wiki/%e7%88%b6%e7%a7%b0
674 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 22:43:50 ] おお、ありがとう。
675 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 08:24:07 ] O'ってのも息子って意味らしい。 Objective CamlがOCamlってはそんな意味にも引っ掛けてあるっぽい。
676 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:49:44 ] ち・ん・こ
677 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:26:02 ] >>>676 その名前を書き込むなよ。 本当に来ちゃったら…
678 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 20:09:58 ] あいつはHaskellかScalaが引きとってくれるだろう。もしくはRuby。
679 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:43:58 ] >>680-682 さん レスありがとうございます。 しかし試してみたところ何をやってもnoと出てしまうのですがどうしたらいいのでしょうか?
684 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 18:12:17 ] >>684 意味不明かな。 legal(jealousy(FL1,ML1,FL2,ML2)) :- より、 legal_jealousy(FL1,ML1,FL2,ML2) :- であるべきだということです。 英語がよくわからないので、例えば legal_jealousy という表現が英米人に とって滑稽だったり大変不自然なものであるのかどうか私にはわからないので、 それを避けて、そのままの構造を借りたの意味。
686 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 17:12:48 ] 亀レスすいません>>683 です does not exist とでてしまいます
687 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 18:08:14 ] >>686 字下げのための全角スペースが述語名の一部となっている? 字下げがしてありますね。2chでは2個以上の半角スペースはなぜか、一個に まとめられてしまいます。それで、はっきりした字下げを表現するため、 半角スペースは全角のスペースに書き換えられています。もし、この状態から copy&pasteでコードを写すと、' leagal'(jealousy( ... というような 全角二個が前に付いた述語が定義されることになってしまいます。 これだと、副目標 leagal(jealousy([2,3],[2,3],[1],[1])) はleagal/1が 存在しないとなります。そういうことがないか確かめてください。
688 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 00:01:46 ] >>687 さん 亀レスで重ね重ねすいません どうやら勘違いしていたみたいで無事できました。 本当にありがとうございました。
689 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 08:58:47 ] 昨秋以降 Wikipedia のPrologの項が大幅に更新されました。 ご存知ない方のために、一度ageて広報します。
690 名前:デフォルトの名無しさん [2010/01/12(火) 09:00:33 ] 昨秋以降 Wikipedia のPrologの項が大幅に更新されました。 ご存知ない方のために、一度ageて広報します。 すみません、上げ損なったので再度書き込みます。
691 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 15:45:08 ] やっと規制解除された…以下記念に再掲 sports2.2ch.net/test/read.cgi/entrance2/1258584095/975 975 :Classical名無しさん sage :09/12/22 23:06 ID:Eyor18Do 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/www.compapp.dcu.ie/~alex/LOGIC/monkey.html > perform(climb, > state(MP, BP, onfloor, H), > state(MP, BP, onbox, H)). 猿の位置(MP)と箱の位置(BP)が違っても 猿が箱の上に登れるようになってると思うけど、変ではなかろうか
692 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:13:43 ] いつも間違える… × jelousy → jealousy
694 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:45:37 ] 10年以上前にProlog協会という団体主催のPrologの講習を受講した。 その時、実践的だがすごく癖のある授業をやった人がいた。たしか会長か副会長。 pc12.2ch.net/test/read.cgi/tech/126144349/ を呆然とROMしているのだけど、Prologのコードを書いてる人、 あの人ではないかと思えてきた。
695 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 04:15:20 ] 126144349 1261443439 ←こっちと思われ いろんな言語で宿題スレ 第三編
696 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:20:43 ] >>695 そうでした。どこで一桁落ちたのかな。ご足労掛けました。 repeatに引数を加えていくとmemberになるという内容の授業だった。 引数の付加の仕方によって、どう性質が変わるかを副目標側のからの 視点で徹底的に考える。ただそれだけ。 このスレの>>652-655 辺りも、もしかしてw
697 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:40:55 ] それにしてもあのスレのPrologのコードは強烈ですね。私のProlog観は 完全に打ち砕かれましたw 太宰治が書いたコードのようです。饒舌で。 もうひとり数式処理向きの関数型言語で書き込んでいる方がいて こちらのコードは極端に短いものが多くて、際立った対照を示して いて、見てて飽きないですよ。
698 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 11:06:13 ] >>694 そのころProlog協会の代表幹事はK-Prologの作者です。別人ですね。
699 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 10:32:01 ] >>694 Prologには帰納推論をやる一派がいたので、 近くの研究室にも、ああいうプログラム書ける人たくさんいたよ。 意外とあちこちに潜んでいるのでは?
700 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:14:28 ] 第五世代の評価というか総括をしている文献って知りませんか? 一体第五世代計画とはなんだったのかということが非常に気になっています。 できれば、西垣通氏のルルス関連の話のように社会学関連のアプローチだと なお嬉しいです。
701 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:29:22 ] >>700 >>650 のサイトは見た? というか、宗教と第五世代に関連性はありません。
702 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:00:09 ] >>701 そこのサイトはすでに見ました。 第五世代で宗教にアプローチなんてしていないので関連性があるなんて思ってないですよ。 そうじゃなくて、社会学的にどういう位置づけになっているのかどうかということです。 技術的な話は発散しているので必要なもの以外は追うつもりはないです。
703 名前:702 mailto:sage [2010/01/23(土) 01:51:12 ] でも、実際最初は自分も西垣氏の話を読解力の無さから読み違えてたので他人のことは言えません。 ちゃんと読み解くとそんなことは言ってないのですよね。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:41:03 ] 上前淳一郎が第五世代コンピュータに関するノンフィクションを書いている。 社会的背景が生き生きと描かれていて面白い。
705 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:27:13 ] 奇妙なことはあれだけのプロジェクトにも関わらず、 出版物として総括した大冊がないことです。途中までは共立出版等から 啓蒙本が多数出版されていたのですが、肝心の並列処理に入ってから はさっぱりでしたし、終了後にまとめがあるのかと思ったら、 研究発表以外にはない。総予算の規模からいってもバランスが悪く 異様です。手を挙げる出版社がなかったからでしょうか。
706 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 08:47:54 ] 大冊を求めてるなら、知らん、としか答えられんが。 淵氏がコラム程度の分量を書いたものなら、『情報処理』で見かけた記憶はある。
707 名前:702 mailto:sage [2010/01/23(土) 12:27:02 ] >>704 "めざすは新世代コンピュータ?「日本の夢」に挑む頭脳集団 (角川文庫)" ですね。これはおもしろそうです。早速読んでみます。 >>705 結局何をしたかったのかよくわからないのですよね。 啓蒙書の類も推論や言語を扱うという意外は一貫性がないです。 一番おかしいと思うのが、アーキテクチャを作るという計画のハズなのに、 アーキテクチャに関する文献が見当たらないというところです。一般向けでは ないからかもしれないですけど、それにしても見当たらなすぎるのですよね。 本当のところ淵氏としては、認知科学やりたかったんじゃないかと、 www.amazon.co.jp/dp/4140014466/ >>706 「情報処理」のコラムですね。国会図書館あたりで探してみます。
708 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:53:47 ] 個人的には、当時としてはやってみなければ成否は誰にも断言できないことだったのかもしれないとは思うが たとえば人工知能云々には当時ですら胡散臭さやら無邪気すぎるものやらを感じたなあ。 そういう点で>>704 は興味深いと思う。 結局はこういう話になってしまうのだろう 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 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:59:37 ] もちろん、真面目な研究が行なわれていた(らしい)のはわかるけどねw 技術的にあんまり突っ込んだことを追う気はないようだが 共立出版の「続・新しいプログラミング・パラダイム」の「並行プログラミングとGHC」が 文献リストなども含めて何かの手がかりになるかもしれない
710 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:34:37 ] 第五世代コンピュータの並列処理 滝 和男 編 発行年月:1993年06月 発売元:共立出版 というのはあったんだけどね。 最初のころの話に出ていた、データフローマシンとか、リダクションマシンとか、いわゆるノイマン型とは根本的に 違うものがつくられることを期待していたから、実際にできたのがノイマン型を並列化したものだと知ってガッカリした。 技術的にはすごいことなんだろうけどね。
711 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:49:34 ] www.jstage.jst.go.jp/article/jssst/25/3/3_66/_pdf/-char/ja/ 淵氏としてはプロジェクトは成功なんですよね。
712 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:56:37 ] ”成果の具体的な内容については、報告書類が山のようにある。これは秘密では ないので12年分を入手して検討すれば、試行錯誤を含めて全部わかるように なっている。しかし膨大なことになるので、解読してくれるような奇特な人が いるかどうか。” なんとなく予感はしていたのですがJIPDECのサイトは内容についてどなたも全容を 把握していないのではないですか?
713 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:22:15 ] >>700 > 社会学関連のアプローチ そもそもこれが何を意味するかはともかくとしてだw そういうものが今になっても存在しない(?)あたりが 今も昔も産官学の限界なんだよね で、Prologスレで手に負える話ではないのでそろそろ勘弁してもらいたい
714 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:53:00 ] 建設的な話でもあればいいけど、怪しいですよね、おかしいですよねの列挙だったら スレ違いかもしれないな。 実際それは挙げていったらきりがないと俺も思うがw
715 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 08:46:47 ] 誰かが立てて放置されてる第五世代スレがありそうなもんだが。 それを再利用するとか。
716 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 23:55:47 ] 東大や理科大行けば、論文やテクニカルレポートが全部残ってるはず。 >>705 バランスが悪いということだけど、 例えば国内外のどの研究プロジェクトと比べて、 「啓蒙書が少ない」ことが「異様」なのでしょうか。 むしろ、異常なくらい教科書的な書籍を産み出したプロジェクトだと思いますが。 >>707 Σ計画なんかもそうですが、お金が動かないと、 官僚&政治家はなかなか新しいプロジェクトを始めてくれません。 メーカーへ予算ばらまきが出来るようにするには、 ハードウェアも込みである必要があるのです。 これは研究プロジェクトというより、誠治の方の問題です。
717 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 00:53:46 ] >>716 真っ先に仕訳の対象になるわ
718 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:18:45 ] >>716 教科書的な書籍とは共立出版の「知識情報処理シリーズ」のことですか?
719 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:18:26 ] ICOTの成果が出始めるのはこれからだよ。20年後かも。
720 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:49:52 ] >>719 Prolog は論文を書くためだけの言語 ICOTの成果として、狙い通り、論文が大量生産された
721 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:10:47 ] Prologを材料に論文を書くの意味ですか。 でも、あなただって携帯が故障したら、Prologのお世話に なってるかも知れませんよ。
722 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 04:58:09 ] GHCなんかは、並列(平行)に「仕切る」ための言語という 印象が強いのだけれど、そういう位置での制御要請は 今後多くなっていくものだろうか。
723 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 10:38:47 ] >>722 個々の自動車の平行プログラミングは関数型で勝手にやらせるので済むかもしれないが、 俯瞰的な平行動作、たとえば自動車と通信しながら制御する信号の記述などでは GHC的なものが最有力ではないか。
724 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 04:23:23 ] クラウドコンピューティングが来ている以上、GHCの並列計算が見直される チャンスも普通に多いだろ。誰も提案しないだけで。
725 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:58:18 ] クラウドコンピューティングは並列計算じゃなくて分散技術や信頼性工学の話だからな…
726 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 18:38:27 ] >>721 携帯じゃなくて、ADSL回線じゃなかったっけ?
727 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 18:18:33 ] 携帯の故障診断はさすがに大変じゃないかな。半端な数でないし。 ADSLでも10台以上同時に動かしてるんでしょ。それにしても、 こんな大規模な実務に使われてるのにAZ-PrologはWikipediaにも紹介 されてないね。
728 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 10:26:25 ] 正直MapReduceがどうしてこれほどもてはやされてるのか分からない。 あんなん普通にやってたことっしょ? 大規模に現実に適用したからってこと?
729 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:58:50 ] >>727 5年以上前だと思うけれど、ソフトバンクが10人単位でPrologプログラマの 募集をした。ところが応募はなかったらしい。 ソフトバンク+Prologという組み合わせでは将来の地位が不安ということ だったのかも知れないけど、日本の大学生も根性がないね。
730 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:20:35 ] 威勢がいいだけならチンピラ
731 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:35:15 ] 威勢ねぇw
732 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:45:12 ] Prologで実務的なプログラムを書くことができる人は四十台後半より上。 あと10年待てば大量にリタイアが始まるから供給は充分になる。
733 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:08:41 ] >>729 ソースは?
734 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 00:41:47 ] >>733 私が募集しているという記事を読んだ。こちらはたしか。 誰も来なかったというのはうわさ話。
735 名前:デフォルトの名無しさん [2010/03/02(火) 21:43:53 ] 復旧おめでとう age
736 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 06:43:51 ] お願いがあります。 「いろんな言語で宿題 第三編」pc11.2ch.net/test/read.cgi/db/1252492296/ スレが 512Kb越えで終了してしまいました。 新しい「いろんな言語で宿題 第四編」スレを作ろうとしたところ、 現在スレ立て規制中、とのこと。私は2chのユーザIDとパスワードを忘れてしまって 特権がないので、だれか立てられる人がいたら立ててください。前口上は 「前回スレは512Kbを越えたため、終了しました」だけで結構です。
737 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:56:10 ] >>736 ためしにやってみたら、できてしまいました。 いつもお世話になっています。 J言語などでかきこみしているものです。 これからもよろしくお願いします。
738 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:13:44 ] >>737 ありがとうございました。私のPrologコードは外連ですが、 あなたのプログラム群のおかげであのスレはム板の中で一番 輝いています。 "bit"は1970年代中頃から愛読していましたが、結局休刊になる 前に購読しなくなりました。配達してくれていた書店が廃業した ので。
739 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 17:52:10 ] >>738 新しいスレ、なんか変なことになってますが、私は1番しかかいてないですよ。 「bit」は読んでいましたけど。
740 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:17:26 ] 荒れないうちに問題をはじめましょう。
741 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:15:52 ] 辞書なんて所詮、偽装された百科辞典だ。
742 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:42:52 ] Prologの現代的(?)な応用って何かある? 到達点がエキスパートシステムとか自然言語処理とか止まりだと先が無さそうに思うんだけど。
743 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:28:25 ] >>742 エキスパートシステムや自然言語処理が我々のプログラミングの随所に 登場という状況を知らない。まだ、そのレベルにも達していないのでは。
744 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:32:43 ] Prologの役割は自然言語によるプログラミングへの橋渡しをすることに ある。まだ何も始まっていない。
745 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:39:38 ] 当分の間始まる見込みもない
746 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:58:06 ] >>742 Prologの現代的な応用 : 論文を大量生産する
747 名前:初心者 [2010/07/04(日) 23:36:36 ] prologを勉強してて、以下のページの 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 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 04:34:12 ] >もともと大学の課題なので、データ構造等は結構適当に定められてしまっています。 らしいですよ
749 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 06:45:55 ] >>747 部分的な局面の思考に全局面のデータを持ち回ることはないだろう、という意味ですか?
750 名前:初心者 [2010/07/05(月) 17:59:40 ] >>749 そう思ったのですが・・・ やはり、全マスをあらわしてるのでしょうか
751 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 06:10:01 ] 手数が適当でいいなら、同じプログラムが流用できるよねw 逆に、手数を最小にせよ、のような縛りがあるなら、別にPrologに特有の宿題じゃないような気がする
754 名前:デフォルトの名無しさん [2010/07/23(金) 00:31:29 ] >>753 先生がドSでして・・・手数を最小にするように縛りがあります;
755 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:24:48 ] FDって使ってます?
756 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:28:59 ] 最近は使う機会がめったに無いね。 ただ、たまに緊急ブートで使うことがあるから確保はしてあるけど。
757 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:46:29 ] まさかフロッピーディスク?wwww 今時FDドライブ付いてるPC少ないだろ >>755 はCLPのFD(Finite Domain)のことじゃねーの?あれ、釣られた?
758 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:50:22 ] 覆面算ならFDに限る