トップページ⇒tech
983コメント289KB

Prolog でまったり

■ このスレッドは過去ログ倉庫に格納されています
0001人工無能NGNG
Cなどの言語とは全く得意分野も構造もちがうProlog。
そんなPrologについてまったり話しましょう
0002名無し娘。NGNG
よく分からんが人工知能用の言語だっけ?
実際人工知能ってどれくらいのもの作れるの?
0003名無しさん@お腹いっぱい。NGNG
>>1=2
1自身がよく判ってないので終了。
0004(V)o\o(V)NGNG
Prologについてわかりやすいサイトとか書籍はありますか?
ちなみに、Prologについは全くしりません
0005名無しさん@お腹いっぱい。NGNG
おいらも知りたい。
文法すらわからん。
フリーの処理系ありますか?
00062NGNG
>>1
1じゃね〜ぞ!!
00072NGNG
6は >>3 の間違い
0008名無しさん@お腹いっぱい。NGNG
ftp://ftp.lddlabs.co.jp/lang/prolog/
ここになにかあるよ。
0009名無しさん@お腹いっぱい。NGNG
GNU も prolog 出してるよ。
0010名無しさん@お腹いっぱい。NGNG
ま、カットの使い方がキメ手だな。
0011名無しさんi486NGNG
http://www.gnu.org/gnulist/production/prolog.html
0012名無しさんi486NGNG
http://bach.seg.kobe-u.ac.jp/prolog/intro/
0013名無しさん@お腹いっぱい。NGNG
どっか、プロログについて詳しくのってるところないかな。
歴史とか背景とか
0014名無しさん@お腹いっぱい。NGNG
ここのなかはいろいろ書いてあるんだけど
http://www.ifcomputer.com/home_jp.html

とくにここなんかはどう?
http://www.ifcomputer.com/Products/IFProlog/Manuals/v4.1/user_guide/concept/home_en.html
00158NGNG
PrologのHello, Worldだ。
http://www.latech.edu/~acm/helloworld/prolog.html
0016初心者ちゃんNGNG
プロログってシステム設計とかにしか使われないのでしょうか?
0017PrologNGNG
Prologはすごいと言われてるけど、C言語とかを覆すほどのすごさなのか?
0018名無しさん@お腹いっぱい。NGNG
 少なくとも、>>15のHelloWorldじゃあ、効率悪くてCどころか
 JAVAの足元にも及ばない位、すごくないです。

0019名無しさん@お腹いっぱい。NGNG
逆の演算(みたいなこと)もできる(場合がある)のが
Cよりもすごい
00205NGNG
わーい さんくすー
さっそく gprolog インストール中です。
0021名前ついてますか?NGNG
ぎゃはは、もっとも Prologらしくない >> hello.world

でも Prologって本当につかえるソース見たことないや。
パズル解くぐらいなら書いたけどねえ。
でも ICOTでは Prologマシン作ってたんだっけ?
0022名無しさん@お腹いっぱい。NGNG
Prologでの正しい "Hell World"
と印字するプログラムを教えてください
00235NGNG
最初のほうのサンプルは理解できるー

member(X, [X|_]).
member(X, [_|L]) :- member(X, L).

になると 理解できるけど、書けません(x_x)。
こんなの思いつきません(x_x)。

しかし.....楽しい^^)
0024名無しさん@お腹いっぱい。NGNG
>>19
そうそう、ユニフィケーションと代入の大きな違いだね。

>>23
リストを先頭と2番目以降に分けて考えるやりかたは、
prolog出現前にlispでしゃぶりつくされた常套手段だから
当たり前のように使えるようになっておくといいよ。
0025名無しさん@お腹いっぱい。NGNG
>>21
ICOTが作っていたのは非ノイマン型の「第五世代コンピュータ」。

色々な研究が為されて成果もあったけど、結局のところは、
「ノイマン型で高速化・高集積化する方が産業的に成功する」
という現実に叩き潰されたと思う。
0026名無しさん@お腹いっぱい。 NGNG
ノイマンってそんなに凄いのか?
なんかで読んだけど計算機を作ったときに
「俺の次に計算の速い奴が確定した」
とか言ってた話を読んだことがあるけど
0027名無しさん@お腹いっぱい。NGNG
今までずっとプロローグだと思ってました。
0028名前ついてますか?NGNG
>>24 わしも Lisp(つーかLogo) やってから、member述語が理解できました。
で、調子に乗って quick sortを書くと
qsort([], []).
qsort([X|XS], YS) :-
partition(X, XS, XL, XR), qsort(XL, YL), qsort(XR, YR),
append(YL, [X|YR], XS).
partition と appendは作ってね。

でも appendなんかつくってエレガントじゃないなあ。
差分リストとか使えばかっこよくいくんでしょうか?


0029名前ついてますか?NGNG
>>25 その非ノイマン型コンピュータのシステム記述言語が Prologじゃ?
ってもしかすると KL/1だったっけ。並列 Prologの一種の。

>>26 すごいっす。やつがいなかったら日本は被爆国になってません。
# いや、多分。
0030名無しさん@お腹いっぱい。NGNG
>>26
ロスアラモスで、エッカート(だったかなぁ)が計算機を、
ファインマンが計算尺をそれぞれ忙しく操作している時、
傍らに座ったノイマンが暗算で最も速く答を出していた、
というようなエピソードが「御冗談でしょうファインマンさん」
に載ってる。
0031名無しさん@お腹いっぱい。NGNG
>>29
ノイマンが爆縮レンズを考案しなかったら、
核爆弾の完成はかなり遅れただろうね。
0032名無しさん@お腹いっぱい。NGNG
「爆縮レンズ」を Yahoo で検索して調べた。
CIAにマークされたかもしれんな。
ヤバイ情報を収集すると特殊機関にマークされるらしい。
これで俺も有名人!!
0033名無しさん@お腹いっぱい。NGNG
C言語とPrologの違いがわかりやすい、プログラムの例があれば教えて下さい。
0034名無しさん@お腹いっぱい。NGNG
age
0035名無しさん@お腹いっぱい。NGNG
なんていうか、prologはCみたいに、趣味とかのプログラミングには使い
ずらいのかな
0036デフォルトの名無しさんNGNG
>>33

member(_, []) :- false.
member(Ans, [Ans|Tail]).
member(Ans, [_|Tail]) :- member(Ans, Tail).


bool member(const vector<int>& vec, const int ans)
{
for (vector<int>::iterator it=vec.begin(); it!=vec.end(); it++) {
if (*it == ans)
return true;
}
return false;
}Prologならmember判定できるだけでなく

?- member(X, [1,2,3,4,5]).

のようにすると

X = 1;
X = 2;
X = 3;
X = 4;
X = 5;

のようにmemberを一つ一つ取り出す事ができる。
0037デフォルトの名無しさんNGNG
>>36
それだけじゃ、で?って感じだけど...
もっとPrologならではっての無いの?
0038デフォルトの名無しさんNGNG
爆縮ってなんですか?
Prologで解答をお願いします。
0039デフォルトの名無しさんNGNG
PrologとCを比較するのはナンセンスだよ。
0040デフォルトの名無しさんNGNG
理由を説明せよ>39
0041デフォルトの名無しさんNGNG
>>37
Prologの特徴を十二分に表現してると思うけど。
0042デフォルトの名無しさんNGNG
ふむふむ。なんか面白くなってきた。
ちなみに、36さんの奴をcにするとどうなるの?
0043デフォルトの名無しさんNGNG
どれが特徴なんですか?>41
0044デフォルトの名無しさんNGNG
Cなどの手続き型言語あるいは命令型と呼ばれる言語は命令を並べる事がプログラミング。
Prologでは関係の記述がプログラミング。

命令の記述とは(全てではないが)データの流れの制御。
Prologではデータの流れは結果として起こる事でありプログラムがデータの流れを記述しているわけではない。
そのためmemberのようにある変数が入力ともなり得るし出力ともなり得る。
0045名無しさん@NGNG
Prolog++ってなんじゃ?
http://www.lpa.co.uk/ppp.htm
0046名前ついてますかNGNG
Lispスレッドに触発されて書いた sortの定義。
algorithmを書かないようにしてみたけど、当然実用的ではない。(O(n!))

% sortの定義
% Xの bsortが Yであるとは、Yが Xの並び替えで、かつ Yが整列しているとき。
bsort(X, Y) :- permutation(X, Y), sorted(Y).

% permutation(並び替え)
% Yが Xの並び替えであるとは
permutation([], []).
permutation([X|Xs], Y) :- permutation(Xs, Ys), insert(X, Ys, Y).

insert(X, Ys, [X|Ys]).
insert(X, [Y|Ys], [Y|Yss]) :- insert(X, Ys, Yss).

% sorted(整列?)
% Yが整列しているとは、その先頭の 2つが順になっていて、
% かつ、先頭を除いた残りも整列になっているとき
sorted([]).
sorted([X]).
sorted([X0, X1|Xs]) :- X0 =< X1, sorted([X1|Xs]).
0047デフォルトの名無しさんNGNG
>>46
う〜む。なにか、人間の言葉みたいだけど、
なぜだかかえってわかりにくいな・・・
0048デフォルトの名無しさんNGNG
>>47
同意します。
頭がそっちに入ってる時には非常に分かりやすく感じるんだけど、突然見せられるとなかなか難解。
このあたりがPrologが普及しなかった(すでに過去形・・・)最大の理由だと思う。
結局人間にとっては手続き的思考の方が容易という事なのであろうか。
0049デフォルトの名無しさんNGNG
慣れ、だ〜よ〜
0050名前ついてますか?NGNG
多分、宣言的に書くほうが本当はわかりやすいんだけど、
でも実はそれじゃ使い物にならなくて (46の sortみたいな)
動作に依存した手続き的な書き方をしなきゃいけない場面も多くて。
そこらへんの切り替えが慣れないと大変なのかなあ。と思いました。
0051Pure CerNGNG
>>46
なななな、何をやってるのかさっぱりわからない。
0052デフォルトの名無しさんNGNG
8パズル問題を解くPrologプログラムの例などがのってる
HPを知ってるかた居ませんでしょうか?
0053デフォルトの名無しさんNGNG
8パズル問題って何?
0054デフォルトの名無しさんNGNG
http://alpha.c.oka-pu.ac.jp/~yokota/ai/03.htm
こういう問題のことです、はい。
0055デフォルトの名無しさんNGNG
もっとprologのことしたいばい。
HP教えてクレクレタコら
0056デフォルトの名無しさんNGNG
Prologでぐったり
0057タケNGNG
・宣言的に記述できるのは、非常に有用。
ともかく「性質」をならべるだけでいいのだから。
・大量のデータをファクトで置いとくときの
探索は非常に強力
・手続き的な部分が必要な場合、例えば、
解を複数出したくないときは!をどうしても
使わないといけない。
・ある述語が必ず成功するのか、失敗することも
あるのかを考えないといけない。
・他の手続き的言語とうまく組み合わせることが大事
なんじゃないかなあ。

以上!!
0058デフォルトの名無しさんNGNG
カットの存在で萎えました。
0059デフォルトの名無しさんNGNG
あげ
0060デフォルトの名無しさんNGNG
>>52
8QUEEN のことか?

http://www.geocities.co.jp/SiliconValley-Oakland/1680/prolog/prolog12.html
0061デフォルトの名無しさんNGNG
むかーし処理系書いたけど、面白いよ。
つーかプログラムか?あれ?SQLの方が
近いのではないかしらん。
0062>61NGNG
面白いのはいいから
使い道おしえてくれ
0063デフォルトの名無しさんNGNG
データベースの操作とかも出来るらしいです。
第五世代コンピュータの開発に用いられたらしいですけど・・・
0064デフォルトの名無しさんNGNG
同値関係(反射律、対称律、推移律)ってPrologでどう書くの?
0065デフォルトの名無しさんNGNG
その質問の答えがここで返ってくると思うか?>64
0066デフォルトの名無しさんNGNG
>64
言葉の意味をおせーてくれ!たのむ!!
0067デフォルトの名無しさんNGNG
はんしゃ率 R(X,X).
タイショウ率 R(Y,X) :- R(X,Y).
水位率 R(X,Z) :- R(X,Y),R(Y,Z).
かな〜
0068デフォルトの名無しさんNGNG
それだと止まらなくなるんじゃないか?
0069デフォルトの名無しさんNGNG
人工知能やるにはやっぱりlispとprolog、両方極めるべきですか?
0070デフォルトの名無しさんNGNG
>>67
そのまま書けばいいんでない?処理系によるけど。
0071デフォルトの名無しさんNGNG
つーかlispでprolog実装しろ>69
0072関数型牽制揚げNGNG
そだね、やっぱunificationとresolutionでLisp入門だよね。
0073デフォルトの名無しさんNGNG
http://bach.seg.kobe-u.ac.jp/prolog/
0074デフォルトの名無しさんNGNG
WIN版で日本語対応かつフリーなPrologってないでしょうか?
UNIX版では結構あるんですけど、、、
0075デフォルトの名無しさんNGNG
>>74
windowsに移植するってのは?
(ひょっとするとcygwin環境でそのままコンパイルできるかもしれないし。)
あとは、日本語に対応したlispやschemeの上で使うとか。
scheme上で動くのはschelogってのがあった様な。
0076デフォルトの名無しさんNGNG
>>75
レスありがとうございます。
基本的に初心者にも簡単に使用できるシステムを考えているもので、
cygwinでの動作はシステムの趣旨から反してしまうので、、、
せっかく教えていただいたのに、自分勝手ですみません。
schelogは知りませんでした。
調べてみようと思います。
0077デフォルトの名無しさんNGNG
479まで下がってたage
0078デフォルトの名無しさんNGNG
prologマンセー
0079デフォルトの名無しさんNGNG
万世橋で会おう
0080デフォルトの名無しさんNGNG
(message "Hello")
0081デフォルトの名無しさんNGNG
駅スパートシステムってナニ?
0082デフォルトの名無しさんNGNG
schelog
http://www.cs.rice.edu/CS/PLT/packages/schelog/
0083 ◆TB25hej6 01/09/02 22:22ID:8hKu3S3E
prolog万歳さげ
0084 NGNG
マンセ
0085デフォルトの名無しさんNGNG
Prolog+オブジェクト指向
って可能?
0086デフォルトの名無しさんNGNG
そういや、
Plorog
Soralis
て間違えそうだな。
きをつけないと!
0087デフォルトの名無しさんNGNG
>>85
OOですか?
試してみれば?
008885NGNG
Object LISPができたように
Object Prolog もできないかな〜ってことです。
0089デフォルトの名無しさんNGNG
なにをするの?
0090デフォルトの名無しさんNGNG
ESP ってなかったっけ。と名前だけ挙げてみる。
009185NGNG
OOであったらいいなあ〜と卒研のとき思ったので・・・
0092デフォルトの名無しさんNGNG
なんだ学生か…
0093デフォルトの名無しさんNGNG
卒研でやったのにhttp://www.afm.sbu.ac.uk/logic-prog/を見てないのか?
大丈夫だったか?その卒研。
0094デフォルトの名無しさんNGNG
>Object Prolog

Objectごとに「それぞれ違う論理」を学習していき、
最終的にObject同士の対話が成り立たなくなる、
バベルの塔のようなシステムっすか?(藁
009585NGNG
>>93 ほんとだ沢山ありますね(--;)
おっしゃるとおり卒研ボロボロでした。
どうも失礼しました
0096デフォルトの名無しさんNGNG
>>94
それ素敵ですねw
0097デフォルトの名無しさんNGNG
漏れ、大学院時代に修論で、Prologインタプリタとコンパイラの実装方法の
本読まされて、所属研究室で開発したソフトのマンマシン部分にPrologイン
タプリタをC言語で組み込むっていうのをやったんだけど、その時読んだ本
が思い出せない…
なんとかウォーレンとかいう人の書いた本(もちろん洋書)なんだけど…
原始的な処理系の実装から始めて、高速化、最適化、バイトコード化していく
という内容なんだけど。誰か、いま読んでる人いない!?
0098デフォルトの名無しさんNGNG
ゆにふぃけーしょんage
0099デフォルトの名無しさんNGNG
差分リストでつまずく!
0100デフォルトの名無しさんNGNG
SQL勉強してるんだけど、Prologってデータベースと何か関係ある?
0101デフォルトの名無しさんNGNG
prologで定義された事実=演繹データベース
SQLとは次元が異なる
SQLみたいなのは、帰納的って事だろうね
■ このスレッドは過去ログ倉庫に格納されています