[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 12/23 11:34 / Filesize : 227 KB / Number-of Response : 759
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Prologでまったり Part4



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/

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<227KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef