Prologでまったり Part4

このエントリーをはてなブックマークに追加
601デフォルトの名無しさん
>>598 これでどうでしょうか。
ファイルの頭で :- dynamic(_述語形式リスト). を宣言します。

:- dynamic([e/2]).

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

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

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

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

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

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

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

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

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

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

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

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

たとえば、

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(Q1,Q2,Q3) :-

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

できれば、西垣通氏のルルス関連の話のように社会学関連のアプローチだと
なお嬉しいです。