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/
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月 発売元:共立出版 というのはあったんだけどね。 最初のころの話に出ていた、データフローマシンとか、リダクションマシンとか、いわゆるノイマン型とは根本的に 違うものがつくられることを期待していたから、実際にできたのがノイマン型を並列化したものだと知ってガッカリした。 技術的にはすごいことなんだろうけどね。