【論理】Prolog【初心者】

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2010/11/06(土) 13:00:56
Prolog初心者のスレ

これは良い言語だ…
2012/08/27(月) 11:50:25.32
はあ?
2012/08/27(月) 16:10:05.17
>>550
そのリンクは第3版ですが、すでに第4版が出ています。

PROLOG Programming for Artificial Intelligence
http://www.amazon.co.jp/dp/0321417461
2012/08/27(月) 18:11:20.68
大学の演習でSchemeでProlog処理系を作らされたから、利用する機能を限定すればなればかなりのProlog処理系は自作できると思う
2012/08/28(火) 19:24:32.09
SchemeのPrologならminiKanrenは凄い短いソースで出てきてるね
Kanrenの方が使いやすいけど
2012/08/31(金) 16:31:31.25
沖電気のサイトにpython実装のprolog処理系の記事が掲載されてたよ
2012/09/27(木) 11:46:27.80
他のスレ(正規表現)での続きを書くと、
日本語で書かれてしかもPrologに触れているツイートのうち
評価を含んでいるものを調べると肯定、否定の割合は2:1くらい。
それとは別に、難しい、分からないとのツイートは多い。
2012/09/27(木) 12:11:47.56
Prologでする画像処理なんてありましたっけ?
2012/09/27(木) 15:08:31.86
>>557
Prologの欠点は遅いことです。それもC言語に比べて数百倍の単位で。
遅い理由は、バックトラックに備えてスタックを余分に積むことや、リストを
含む構造体のユニフィケーションの作業量の多さ、アトムテーブルの管理、
GCなどいろいろですが、これだけ遅いと対象範囲がビットマップ全体になる
計算はする気がなくなります。それで汎用システムとしての画像処理に適用
されたという話は聞いたことがありません。
Prologによる画像処理アルゴリズムの研究としては
http://www.amazon.co.jp/dp/0387196471 があります。
2012/09/27(木) 15:42:42.51
Wales大の人だな。MacPrologを改造したProlog+。
http://www.lpa.co.uk/はまだ活動しているみたいだな。
2012/10/02(火) 10:11:30.88
遅い欠点をもつPrologがAIのシステムに導入されたのはなぜ?
現在ではもう時代遅れになっている言語なのかな?
2012/10/02(火) 11:39:10.46
cutのあるバックトラックを使って、ほぼ宣言的に記述できるから。
2012/10/02(火) 13:53:16.16
>>560
C言語などとの相対速度の差は現在の方がさらに開いていると思いますが、
AIは極めて遅い人間の脳がモデルですから、元々速度はあまり問題ありません。
最後は例えばRubyでPythonで同じくらい簡単に書けますかどうですかということ
でしょう。
Prologについては、まだまだ2-3割しかその能力を引き出す努力がなされて
おらず、これからどうなって行くかまったく予断はできません。
2012/10/02(火) 15:20:49.89
なんか斜めです

> 元々速度はあまり問題ありません。
> RubyでPythonで同じくらい簡単に書けます
2012/10/02(火) 15:23:18.10
>>563
Prologでも書けませんが。
2012/10/02(火) 15:43:11.34
>>563
今日、プログラマの水準は高く、Prologクラスの推論ならば、簡単に
インタプリタのロジックを各言語に組み込む方はいます。しかし、その
人が論理学にも精通していたとしても、Prologのプログラミング程度の
単純な論理であっても、いきなりある一定単位持続して書き並べていく
ことは多くの場合そんなに簡単なことではない。
だから、日常的に論理式の記述を習慣付けるためにPrologを使うのです。
2012/10/02(火) 16:17:28.79
Prologレベルの推論エンジンは簡単に書けるなら、
ASP solver competitionにでも参加してみてくれ。
まさかPrologベースのシステムに負けないよな?
2012/10/02(火) 17:33:16.76
1.まずPythonでPrologを実装します
2012/10/02(火) 17:43:02.82
>>567
そういうアプローチが全てのプログラム言語で、できるだけ多くの
プログラマによって、なされることを期待します。
できれば表層はDEC-10 Prolog仕様(ISO標準も同じ)でね。
2012/10/03(水) 01:00:34.38
ISOに合わせるように頑張ってたけど
bagofが上手く実装できなくて詰んだはww
2012/10/04(木) 16:06:23.95
>>560
AIのモデルを簡潔に記述するのが目的だったから
それを何を勘違いしたのか、日本のICOTは秒あたりの推論数を競いだして自滅した
2012/10/04(木) 17:11:04.53
人間の脳は遅いです。ひとつのプロセッサーを見れば。ところが、1000個以上の
プロセッサが協調して働けば、何十万個のプロセッサ付き記憶装置から読み出せれば
偉大な働きをする。囲碁のような単純な思考でもそうでしょう。名人は1秒間に
何千万手に相当する手を読みますが、それは画像認識に近いレベルでなされる。
浮かんだ画像をこれは、だめ。これは、可能性があると。その一瞬10^3どころではない
オーダーの記憶装置付きのセルが働いている考えられる。
ICOTの目指した並行処理は間違ってはいなかったと思います。
2012/10/05(金) 00:03:03.08
飛行機は鳥のようにはばたかず、プロペラを回して飛ぶ。
自動車は馬のように駆けず、タイヤを回して走る。
AIは…?
2012/10/05(金) 00:51:55.41
>>572
emotionとかethics抜きで単体のintelligenceってのが
そもそも存在するのか?

ないものをマネようとして失敗してるんじゃないかと思う。
いや色々な知見は得られているんだけれども。
2012/10/05(金) 05:50:08.90
>>572
強い、弱いという分類がされますが、広義、狭義という分類も可能ですね。
馬の例えだと、馬の脚を車軸と車輪、タイヤで置き換えた。そこで止まって
しまったり、そこから発展して、鳥から飛行機->ジェット機のように別の物に
進化していってしまう。そういう展開全て包容してのAIというのもあり得る。
けれども少なくとも20年前のAIブームの頃には、こういうものはAI研究の
「お零れ」と認識していた。エキスパートシステムもそう。
一時的に馬の蹄がタイヤであっても、そこに止まっていては馬の神経系や
骨格の力学的な研究とも出会うことができないから、それは所詮工業技術
じゃないか。こちらの方が一般的な見解ではないか。
2012/10/05(金) 12:20:07.04
エキスパートシステムはロジックの部分がまさに本流なわけだけど…
2012/10/05(金) 13:27:22.28
>>575
上の文脈からいって、エキスパートシステムは適切ではありませんでしたね。
577デフォルトの名無しさん
垢版 |
2012/10/05(金) 14:09:15.30
>>562
> AIは極めて遅い人間の脳がモデルですから、元々速度はあまり問題ありません。

いやでも、フレーム問題みたいなのも、
人間の脳の処理速度よりコンピュータの処理速度のほうがずっと高速だから
解決できるという見通しが当初からあったんでしょ?
つまり、コンピュータの高速な処理速度にAI実現の将来の希望を託していた
ことからすると、もともと処理速度は重要な問題だったわけで。
2012/10/05(金) 16:09:56.25
>>577
でも速度に「追っかけられる」というような業務ではないです。
2012/10/05(金) 18:06:17.69
天気予報に使ってるエキスパートシステムは速度が重要だよ。
予報が民間に許可された今はリアルタイム予報が期待されているから。
2012/10/08(月) 15:01:54.60
確かにリアルタイムな天気予報は期待されてるけど、
具体的にはゲリラ豪雨みたいなイレギュラーな変化の予報。
これはエキスパートシステムのような大量の情報から引っこ抜くといった
性質のものでは無いのでは…。
2012/10/08(月) 15:36:21.25
>>580
大気シミュの結果、各種リアルタイム測定値、過去の天候パターン記録などは、
エキスパートシステムのソースの一つなのよ。
扱う知識の一つというわけ。天候予測システムについても、
エキスパートシステム論についても知識が古過ぎ。
2012/10/08(月) 17:11:51.49
いくら計算頑張っても元データの精度は超えないぞ。
縦横5km、高さ1kmのメッシュだからな。

せめてあと2ケタのデータ精度向上がないと、計算だけじゃ
ゲリラ豪雨の予測には届かないんじゃないか。
2012/10/08(月) 17:58:25.36
GPV以外にも観測データはありまして…
2012/10/18(木) 11:14:08.91
Prologの宿題スレはなくなってしまったか。
585デフォルトの名無しさん
垢版 |
2012/10/19(金) 09:53:31.41
>>584
大分書き込まれていなかったからね。400位以下にいただろうから仕方ないね。
結構おもしろいコードもあったし、他所からリンクも張ってあったから、
保存しておけばよかった。
2012/10/19(金) 10:04:01.70
>>585
代わりに「Prolog演習の課題を書き込みましょう」というスレを作ってみたが、
2日くらいでこれも削られた。聞くところによれば、今はテンプレの書かれていない
新スレは全部削られるらしい。スレたて荒らしの退治の余波で。
2012/10/19(金) 18:36:19.25
最近のSWI-Prologでは、アトムや関数名の中に改行が含まれても
構わないようだ。'\n'で表現する必要がなく、自然に改行できる。
http://nojiriko.asia/prolog/j72_387.html
http://nojiriko.asia/prolog/c160_246.html
の最初の述語のような定義が可能である。これでシングルクォートも
省ければすばらしいのだが。
2012/10/19(金) 23:53:01.60
論文とか書く人ってどのProlog処理系使ってるのだろうか…
2012/10/21(日) 17:48:15.67
>>579
速度が必要になった時点でAIからは外れていると思います。
人間の能力を遙かにに超えたものを期待しているわけですから。
2012/10/21(日) 21:04:53.19
>>588
処理系の研究ならASP-Prologとかが多いんじゃないでしょうかねえ。
古典的なPrologとは違いますけど。
591デフォルトの名無しさん
垢版 |
2012/10/22(月) 08:29:19.82
「Prologでまったり」から始まりこのスレに至るProlog系スレは、他の
スレに較べて、圧倒的にソースコード掲載の比率が高かった。
この希少な伝統を守るべく、どしどしソースを上げようではないか。
2012/10/22(月) 08:59:03.59
「憲法改正」は総選挙の争点になるか

安倍さんは「強い日本」「美しい日本」にしたいということで、まずは憲法9条の改正を目指す。
総裁選も盛り上がり、自民党が一気に国民の期待を集めている。
勢いに乗る安倍晋三総裁は、次期衆院選で憲法改正を争点のひとつにする意向を示している。

詳細 2012/10/21
http://www.zakzak.co.jp/society/politics/news/20121021/plt1210210709000-n1.htm


2012/10/22(月) 09:00:20.64
zakzakの記事貼るぐらいならまだイカリソースのほうがよかった。
2012/10/22(月) 09:54:47.36
>>592 % これを述語化しようと思ったが、結構難しく断念。 代わりに最近twitterに張ったものをここにも載せる。出典は空海の秘蔵宝鑰



暗生始 :- 生生生生.

冥生終 :- 死死死死.



暗生始(_) :- 生生生生(_).

冥生終(_) :- 死死死死(_).


2012/10/22(月) 10:15:10.89
% これもtwitterに出したもの。バブルソート。カットが一ヶ所入るのが癪。


バブルソート(L1,L2) :-
軽い泡はちょっと浮き上がる(L1,L3),
泡が浮き上がったら最初からやり直す(L3,L2),!.
バブルソート(L,L) :-
浮き上がる泡がなくなったらバブルソート終了.

軽い泡はちょっと浮き上がる(L1,L3) :-
append(L0,[_重い泡,_軽い泡|R],L1),
_重い泡 @> _軽い泡,
append(L0,[_軽い泡,_重い泡|R],L3).

泡が浮き上がったら最初からやり直す(L3,L2) :-
バブルソート(L3,L2).

浮き上がる泡がなくなったらバブルソート終了.
2012/10/22(月) 10:18:12.44

バブルソート(L,L) :-
    浮き上がる泡がなくなったらバブルソート終了.

軽い泡はちょっと浮き上がる(L1,L3) :-
    append(L0,[_重い泡,_軽い泡|R],L1),
    _重い泡 @> _軽い泡,
    append(L0,[_軽い泡,_重い泡|R],L3).

泡が浮き上がったら最初からやり直す(L3,L2) :-
    バブルソート(L3,L2).

浮き上がる泡がなくなったらバブルソート終了.
2012/10/22(月) 10:33:43.08
最大公約数をユークリッドの互除法で求める(M,N,_最大公約数) :-
    'MがNより小さい時はNとMを置換して実行する'(M,N,_最大公約数),!.
最大公約数をユークリッドの互除法で求める(M,N,_最大公約数) :-
    ユークリッドの互除法は割り切れるまで除数だった数を被除数に剰余だった数を
除数として割ることを繰り返す(M,N,_最大公約数).

'MがNより小さい時はNとMを置換して実行する'(M,N,_最大公約数) :-
    M < N,
    最大公約数をユークリッドの互除法で求める(N,M,_最大公約数).

ユークリッドの互除法は割り切れるまで除数だった数を被除数に剰余だった数を除数とし
て割ることを繰り返す(_被除数,_除数,_最大公約数) :-
    _剰余 is _被除数 mod _除数,
    割り切れるまで除数だった数を被除数に剰余だった数を除数として割ることを繰
り返す(_除数,_剰余,_最大公約数).

割り切れるまで除数だった数を被除数に剰余だった数を除数として割ることを繰り返す(_
除数,0,_最大公約数) :-
    割り切れたらその時の除数が最大公約数だ(_除数,_最大公約数),!.
割り切れるまで除数だった数を被除数に剰余だった数を除数として割ることを繰り返す(_
除数,_剰余,_最大公約数) :-
    '割り切れなかったら除数を被除数、剰余を除数に置き換えて計算を続ける'(_除
数,_剰余,_最大公約数).

割り切れたらその時の除数が最大公約数だ(_除数,_最大公約数) :-
    _除数 = _最大公約数.

'割り切れなかったら除数を被除数、剰余を除数に置き換えて計算を続ける'(_除数,_剰余,
_最大公約数) :-
    ユークリッドの互除法は割り切れるまで除数だった数を被除数に剰余だった数を
除数として割ることを繰り返す(_除数,_剰余,_最大公約数).
598デフォルトの名無しさん
垢版 |
2012/10/23(火) 04:01:29.74
昨日、「Prologの宿題片付けます」スレが第二編として復活しました。
http://toro.2ch.net/test/read.cgi/tech/1350893602/
出題-解答系はこちらに載せましょう。
2012/10/23(火) 09:52:31.68
そういえば、「いろんな言語で宿題 第5編」スレもDat落ちしてしまった。
勝手は事実上のPrologスレといえるほど、肩入れしていたのだが最近は
さっぱりで、二ヶ月近くも書き込みがなかったせいか削除された。
「いろんな言語で宿題」スレの歴史はム板の中でも秀逸だと思うが。
2012/10/23(火) 10:40:52.30
そのスレはJのコードの量だけでもちょっと見ることができないものだった。
JはAPL後継で有名だが、ほとんど知られていない数式処理関係のプログラム言語の
コードがかなり掲載されて凄いスレだったことは間違いない。私どもProlog勢が
書き込み過ぎて、Prologスレと見られてHaskell等関数型の書き込みが少なかった
のが残念だったけど。
2012/10/23(火) 10:52:07.55
いろんな言語で宿題 第五編
http://logstar.jp/toro.2ch.net/tech/1276873238/
2012/10/23(火) 11:14:19.57
マイナー言語がハッスルするスレですね。
2012/10/23(火) 11:51:01.56
>>602
「いろんな言語で宿題」スレは、大変マニアックなと言っては失礼に当たるかも知れ
ない専門家が一人いて、5題に1題くらいの割ではあったが、次々と書き込んで
くださった。私は結局覚えなかったし、ほとんど分からなかったが、十分楽しんだ。
2012/10/24(水) 15:22:58.60
>>603
J言語が大半だったと思うけど、あの手の言語の解答だけまとめたら、
結構話題になるサイトが作れるんじゃないかな。全部合わせれば
分量も多い。
2012/10/24(水) 15:43:33.97
間違いないことは、この3年間に、最もプログラムがリンクを張るのでなく
直接2chに書き込まれたプログラム言語はPrologだということ。それも
圧倒的に。それではなぜ書き込むことができたかが、重要な点なのだが。
606デフォルトの名無しさん
垢版 |
2012/11/04(日) 16:04:59.78
三交代の当直表を作るときなんかは便利そうなのになぁ。縦横の
条件と初期条件を満たす解を探すのなんて数独と同じだよね。
それとクリティカルパスを考えるときに、データ構造を網構造として手続き型で
処理するか、ガッサリPrologエンジンに任せるか。まだメモリ8GB程度じゃ
遅いのかねぇ?

2012/11/09(金) 21:14:46.06
今でも結構人気なんですね。SchemeやGoよりGitHub利用が多い。
http://jp.techcrunch.com/archives/20120912javascript-tops-latest-programming-language-popularity-ranking-from-redmonk/
2012/11/10(土) 11:41:57.60
>>607
大体25位前後の人気のようです。アセンブラやシェルをプログラム言語と
見做すかどうかにもよりますが。米国では底固い実務的な人気があるようです。
2012/11/10(土) 18:20:35.78
モノ珍しいので一度は触ってみるという意味での人気であって、業務で使っているとは思えない
2012/11/11(日) 05:08:35.66
>>609
日本の場合、大学に100以上の講座があって、それを受講したら
お終いなので物珍しいからに近い。あちらでは、日本でSQL枠と
されている就職口が論理という枠になっていて権威もある。論理
枠の中でPrologは一定の地位を占めていて、想像以上に実務でも
使われている。
2012/11/11(日) 05:34:52.19
只々類似パターンの再帰の繰り返しのPrologがStackoverflowで質問数が
すくないことはよくわかる。ところが何故、まったくライブラリ指向でない
言語の代表のPrologがGitHubに結構upされているのだろうか。
2012/11/11(日) 05:58:11.84
GitHubの誤判定ではないだろうか
例えばhttps://github.com/languages/PrologのMost Starred Overallの
上位5つのリポジトリを見てみると、

https://github.com/onyxfish/csvkit
https://github.com/vangelisv/thea
https://github.com/reprappro/Mendel
https://github.com/Attempto/APE
https://github.com/leaflabs/oak

このうち実際にPrologを使っているのはtheaとAPEの2つに見える
2012/11/11(日) 13:01:59.07
ワロタ
拡張子plをPrologプログラムと勘違いしてるらしい。
https://github.com/onyxfish/csvkit/blob/master/examples/realdata/census_2010/ilgeo2010_excerpt.pl
拡張子txtの言語作ればGitHub一位まちがいなし!
ちなみに607です…
2012/11/11(日) 15:36:43.35
拡張子plはPerlじゃないし、GHCはHaskellのコンパイラじゃないのは世界の常識
2012/11/11(日) 16:12:53.88
前者はともかく後者はもう日本国内ですら通じないだろ……
2012/11/11(日) 17:19:10.25
ここ:-を,どこだと|思って,るんだ!.
2012/11/11(日) 18:07:12.48
ソースに使われてる言語の判定にはこれ使ってるっぽいね
https://github.com/github/linguist

Perl製と判定されたソフトの8割が実はProlog製だった可能性が出てきたな……
2012/11/14(水) 22:28:53.31
あるあ・・・ねーよ
2012/11/18(日) 03:03:49.27
連番のエロ画像をダウンロードするスクリプトください
2012/11/18(日) 19:47:08.62
>>619
http://nojiriko.asia/prolog/ronri_prolog_619.html
2012/11/23(金) 19:45:54.79
>>619
エロかどうかの画像解析も必要?
2012/11/24(土) 01:11:45.59
必須
2013/01/30(水) 14:34:59.52
Prologの実装がいろいろあるけど
_ が任意にマッチするものと
_.1 _.2 みたいにマッチする部分集合をわけるものがあるみたいですね
それぞれの方式に名前がついてたりするのでしょうか
2013/02/01(金) 08:26:29.05
>>623
私は後のケースを知りません。確かめてみたいので
処理系をご存知でしたら、教えてください。
2013/02/03(日) 16:44:21.38
miniKanren
cKanren
という処理系です
2013/02/03(日) 19:55:52.08
_1 は知ってるけど _.1 は知らない
2013/02/16(土) 23:41:31.81
日常の諸問題の解決にPrologを使っている人はいる?
2013/02/16(土) 23:57:59.44
>>627
RDB使うかわりにレコードをprologのhead形式でファイルに追加して、prologの問い合わせで検索してる
SQLより使い勝手がいい
2013/02/17(日) 00:01:25.81
過疎スレでこんなに早くレスをもらえるとは思いませんでした。
head形式とはどういうものですか?
2013/02/17(日) 00:22:14.39
meisi(山田, xxx-xxxx, 東京都○○○○, 080-xxxx, 080-xxxx, ○○社, ○○課, 201301xx, 飲み会).
memo(201302xx, 隕石落ちた).
todo(201302xx, [郵便とりに行く, 印鑑確認する, 製本する, 連絡する, 掃除する, メールする/12]).

みたいなのをジャンル分けずにどんどん同じファイルにアペンド
今40000タプルくらいある
2013/02/17(日) 00:32:15.91
(・∀・)イイ!
実生活でPrologが役立っている例を始めて見ました
NGNG?PLT(18001)
私は社内IRCに
?- ... と打ち込むと謹製Prologが答えてくれるボット投入してます
誰も使ってないけど
2013/02/17(日) 13:26:35.69
昔Java版のprologが出たときに大学の演習で作ったルールベースシステムをアプレットに移植して人工知能の会話システムを作ったけど、大して身のあるシステムにはならなかった
2013/02/17(日) 15:09:00.03
Prologは初等教育に組み込むべきですね。プログラム言語としてではなく、
情報・知識の記述形式として。
2013/02/22(金) 17:22:47.00
初心者ですので初歩的な質問をさせていただきます。よろしくお願いします。
prologで単純な迷路を説くのは簡単ですが、縦横につながった升目(または碁石など)の数を数えるプログラムに難渋しています。
他の言語に習って、5個つながっているかどうかを、

heisa1(5,_,_,_,_,_,_,_):-!.
heisa1(N,W,H,X,Y,Field,L0,L):-
getv(W,H,X,Y,Field,V)
,(var(V)->((not(member((X,Y),L))->(adde((X,Y),L,L1),N1 is N+1);(N1=N,L1=L))
,(X<W->(X1 is X+1,heisa1(N1,W,H,X1,Y,Field,L0,L1)))
,(Y<H->(Y1 is Y+1,heisa1(N1,W,H,X,Y1,Field,L0,L1)))
,(X>1->(X1 is X-1,heisa1(N1,W,H,X1,Y,Field,L0,L1)))
,(Y>1->(Y1 is Y-1,heisa1(N1,W,H,X,Y1,Field,L0,L1))))).

のような書き方で、細部をいろいろ工夫しても、無駄なバックトラックが起こってうまくいきません。
どのように書けばよいのでしょうか。ご教示いただければ幸です。
2013/02/22(金) 17:25:15.99
>>635
ちなみに、私は切羽詰って、

heisa(0,_,_,_,_,EL,EL):-!.
heisa(_,_,_,_,[],EL,EL):-fail,!.
heisa(N,W,H,Field,[Pos|Re],EL,EL2):-
search(N,W,H,Field,[(1,0),(0,1),(-1,0),(0,-1)]
,Pos,Re,AL,EL),adde(Pos,EL,EL1)
,N1 is N-1,heisa(N1,W,H,Field,AL,EL1,EL2).
search(_,_,_,_,[],_,AL,AL,_):-!.
search(N,W,H,Field,[XY|Re],Pos,AL,AL2,EL):-
(X,Y)=Pos,(X1,Y1)=XY,X2 is X+X1,Y2 is Y+Y1
,getv(W,H,X2,Y2,Field,V)
,((nonvar(V);member((X2,Y2),AL);member((X2,Y2),EL))->AL1=AL;adde((X2,Y2),AL,AL1))
,search(N,W,H,Field,Re,Pos,AL1,AL2,EL).
getv(W,H,X,Y,Field,V):-(X>0,Y>0,X=<W,Y=<H)->(Co is (X+(Y-1)*W),arg(Co,Field,V));V=k.

のような形で実現しましたが、汎用的でないようですし、境界条件があとにきているのが気にいりません。
2013/02/22(金) 18:46:22.89
% 全然仕上がってないけど、凡そ以下のようなコードとなるはず。

連続している(_色,X1,Y1,X2,Y2) :- 隣接した石がある(_色,X1,Y1,X2,Y2).
連続している(_色,X1,Y1,X2,Y2) :-
    隣接した石がある(_色,X1,Y1,X3,Y3),
    連続している(_色,X3,Y3,X2,Y2).

隣接した石がある(_色,X1,Y1,X2,Y2) :-
    隣接(X1,Y1,X2,Y2),
    石(_色,X2,Y2).

隣接(X,Y1,X,Y2) :- 上に隣接(Y1,Y2).
隣接(X,Y1,X,Y2) :- 下に隣接(Y1,Y2).
隣接(X1,Y,X2,Y) :- 右に隣接(X1,X2).
隣接(X1,Y,X2,Y) :- 左に隣接(X1,X2).

上に隣接(Y1,Y2) :- length(L1,Y1),length([_|L1],Y2).

下に隣接(Y1,Y2) :-length(L1,Y1),[_|L2]=L1,\+(L2 = []),length(L2,Y2).

右に隣接(X1,X2) :- length(L1,X1),length([_|L1],X2).

左に隣接(X1,X2) :- length(L1,X1),[_|L2]=L1,\+(L2 = []),length(L2,X2).
2013/02/22(金) 18:57:40.84
升目の数を数える問題ですか。問題をよく読んでいなかった。それだと
バックトラックするとダメなので、再帰で書き直す必要がありますね。
ずっと難しくなりますね。
それから、算数が嫌いなのでY2 is Y1 + 1,を複雑なリスト処理で書きましたが、
単純な算術でもちろん大丈夫です。
2013/02/22(金) 19:16:47.42
>>638
早速ありがとうございます。
バックトラックできないところと、カンマがANDを意味するため、
成功しないと後ろにいけないところなどがネックになっています。
2013/02/22(金) 20:06:38.13
>>634
今、ラッセルやウィトゲンシュタインみたいな分析哲学に凝っているんだけど、
知識の記述に述語論理を使うという前提を共有しているのに、
人工言語派vs.日常言語派みたいな分裂が続くあたり、
何ともいえない不思議さを感じる。
2013/02/22(金) 20:35:52.78
東アジアの農民は、10000年もゆったりした言語で特に深刻に悩むでもなく、
自然と共存したり、痛い目に遭わされながらつぶやいてきた。その延長の言語で
あってよいから、もう少しだけ自分が生きた証しをくっきりとできればいい。
言語に内在するほんの少しの論理性の助けを借りて。だから論理プログラミング。
その程度の論理プログラミング。
2013/02/23(土) 16:24:36.29
論理性の無い文章だなぁ
2013/03/08(金) 23:47:28.33
Prologでシークエント計算できますか?
2013/03/09(土) 14:22:50.10
できるけど、50行くらいプログラミングが必要
2013/03/19(火) 05:22:51.00
wa(you, shock).
2013/03/20(水) 14:52:27.58
prologのバックトラックを使って
深さ優先探索のミニマックス戦略のプログラムを作れますか。
やむをえなければassert,retractを使ってもかまいません。
幅優先探索ならできるのですが。
2013/03/20(水) 17:44:36.54
>>646
こんな定義になると思う。未定義の部分が多いけれどそのうちに書く。

n手先を評価する(_n,_局面1,_着手ならび,_評価点,_局面) :-
    length(Ln,_n),
    手を読む(Ln,自分,_局面,[],[],_着手ならび,_評価点,_局面).

手を読む([],_,_局面,_着手ならび,_評価ならび,_着手ならび,_評価点,_局面) :-
    sum(_評価ならび,_評価点),!.
手を読む([_|Ln],自分,_局面1,_着手ならび1,_評価ならび1,_着手ならび,_評価点,_局面) :-
    findmax([_評価,_着手,_局面2],(
          着手(_局面1,_局面2,_着手,評価)),
        [_評価,_着手,_局面2]),
    手を読む(Ln,相手,_局面2,[_着手|_着手ならび1],[_評価|_評価ならび1],_着手ならび,_評価点,_局面).
手を読む([_|Ln],相手,_局面1,_着手ならび1,_評価ならび1,_着手ならび,_評価点,_局面) :-
    findmin([_評価,_着手,_局面2],(
          着手(_局面1,_局面2,_着手,評価)),
        [_評価,_着手,_局面2]),
    手を読む(Ln,自分,_局面2,[_着手|_着手ならび1],[_評価|_評価ならび1],_着手ならび,_評価点,_局面).

着手(_局面1,_局面2,_着手,_評価) :-
    着手の選択(_局面1,_局面2,_着手),
    局面の評価(_局面2,_評価).
648647
垢版 |
2013/03/20(水) 18:04:57.94
そうか。
これだと、最善手をn手続けてみただけか。
一手目を非決定性に着手してn手先まで最善手で読ませて、すべての着手を
評価して、評価点がもっとも高い着手を選ぶようにしないといけないか。
2013/03/20(水) 18:25:18.12
>>647,648
深さ優先ですから、とりあえずある道筋で、最終局面まで行き、
そこで評価点を決め、それをひとつ下のレベルに下ろしておいて、
また別の最終局面に行って評価点を求め、其れを先ほどの値と比較し、
最終局面がなくなったら更に一つ下のレベルと比較......
のようなことを繰り返し、次第にレベルを下げていくことになるはずですが、
バックトラックをうまく制御できません。
650647
垢版 |
2013/03/20(水) 18:45:14.17
>>649
深さ優先といっても株は全部評価しないとどれが最高評価点かが
分かりません。それで最高点-最低点-最高点...と降りていって、
葉までたどり着いたら(つまりn手先)一つ候補が決まる。次善候補を
葉のレベルの次の評価点の候補着手とするという意味ですか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況