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/
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 違います