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

Prolog でまったり

レス数が950を超えています。1000を超えると書き込みができなくなります。
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みたいなのは、帰納的って事だろうね
0102デフォルトの名無しさんNGNG
演繹=えんえき
かな?難しい漢字
0103デフォルトの名無しさんNGNG
>>97
Warren Abstract Machineか.懐かしいな.
0104デフォルトの名無しさんNGNG
あげちゃうぞ
0105デフォルトの名無しさんNGNG
prolog 使えないけど一番好きな言語
0106デフォルトの名無しさんNGNG
なんだそりゃ。
0107105NGNG
prolog 使える分野が実用的でない。(儲からない)
けれども個人的にはシックリくる言語
0108106NGNG
ああ、そういう意味か。
あなたがプログラム組めないけど好き、という意味かと思った(w
0109デフォルトの名無しさんNGNG
エキスパートシステムに使われてるんじゃないんですか?
0110デフォルトの名無しさんNGNG
prologはチンポこするのに便利だよNE!
0111デフォルトの名無しさんNGNG
>>110
チンポ自分でこすってるの?
おれは今こすられてるよ!ハァハァ
0112デフォルトの名無しさんNGNG
嘘つけ!
011397NGNG
>>103
そう!それ!
今のProlog勉強する学生さんは読まないのかな?
0114デフォルトの名無しさんNGNG
>>110
なんでprologとチンポが結び付いたのかが気になる
0115デフォルトの名無しさんNGNG
>>100
いまや(てか歴史上ずっと?)SQLしか存在しないに等しいけど、
Datalogってのがあったの。
関係論理に基づく問い合わせ言語なの。
Prologからカットをなくしたような言語だったらしいの。
動くのみたこ都内の。
0116>>115NGNG
Warren Abstract Machine の本にたしかDatalogの話
出てたように思われ…
0117デフォルトの名無しさんNGNG
>>100
> SQL勉強してるんだけど、Prologってデータベースと何か関係ある?

論理述語はrelationと関係が深いので大あり。

Datalogは、Prolog知る者にとっては、SQLよりずっとpretty。
"Reational" databaseという事の意味も分かりやすい。
0118デフォルトの名無しさんNGNG
>>100
乱暴に言えば、SQLのテーブル名がDatalogでは関係を示す
述語名になると思われ
0119デフォルトの名無しさんNGNG
思われヤメロ
0120デフォルトの名無しさんNGNG
>>119
嗤
0121デフォルトの名無しさんNGNG
確かこんな感じと重割れ

:- 戸籍(Person, '東京'), 年齢(Person, Age), Age <= 14, アダ名(Person, 'モナー').
{ { Person = '思えモナー' }, { Person = '白松がモナー' } }

David Warrenさんの近況:
http://www.cs.sunysb.edu/~warren/
ftp://ftp.cs.sunysb.edu/pub/XSB/doc/XSB/wfswam.ps.gz
ftp://ftp.cs.sunysb.edu/pub/XSB/doc/XSB/lrdwam.ps.gz
「ワムワムだよ、人生は。」Warren
0122デフォルトの名無しさんNGNG
「Prologで はまったり」かとオモタヨ
0123デフォルトの名無しさんNGNG
シンプルにて最強の人工知能言語age
0124デフォルトの名無しさんNGNG
高階っぽいことしようとしてよくcopy_term/2つかうんだけど、
これって効率悪いのかな。
0125デフォルトの名無しさんNGNG
『Prologの技芸』って本のカバーが渋い。
理工書か?
0126デフォルトの名無しさんNGNG
大学の授業でやりましたよ。しかも必修。
2回も落として4回生まで残ったときは
マジで焦って勉強しました。

ハノイを解くプログラムを書け、って問題があって
筆記でガリガリ書きましたよ。
なつかしい・・・。

ちなみに、Masterでもその先生の授業を取って
詰め将棋をひたすら検索して解くプログラムとか
作りました。
0127デフォルトの名無しさんNGNG
布教age
0128デフォルトの名無しさんNGNG
α-β刈り下げ
0129デフォルトの名無しさん NGNG
こんなのどうだろう?
http://www.cs.mu.oz.au/research/mercury/index.html

只今.NET関連言語調査中につきダウソ中。
0130デフォルトの名無しさんNGNG
みんな、ごめん・・・
Haskellに乗り換えちゃった・・・
0131デフォルトの名無しさんNGNG
>>129
新しいの出てるね。
これが一応.NETのProlog処理系標準となるのかな?
0132デフォルトの名無しさんNGNG
MINERVAってどうですか?
0133デフォルトの名無しさんNGNG
prolog処理系を作るかもしれないのですが、どんな勉強をすればいいんでしょ?
推論?
0134デフォルトの名無しさんNGNG
>>133
言語仕様。
0135デフォルトの名無しさんNGNG
学校に新しい人工知能 発展編 オーム社
があったので買いました。

推論の入門によさげです。
本に参考文献ってあるけど半分以上入手できない予感・・・。
0136デフォルトの名無しさんNGNG
MercuryとかProlog++とかも調べてみるといいかもよ。
伝統的なPrologのメリデメが分るから。
0137デフォルトの名無しさんNGNG
なぜ述語に変数が使えない。
0138デフォルトの名無しさんNGNG
保守age
0139デフォルトの名無しさんNGNG
age
0140デフォルトの名無しさんNGNG
>>136
メリデメってなに
0141デフォルトの名無しさんNGNG
メリット・デメリット?
0142functorNGNG
老後のボケ予防に Prolog の勉強をマターリと始めようとしている者です。
おまえら、普通 cut ! の作用を「副作用」と呼ぶものでしょうか?

厨房(老後目前だけど)の漏れは,、副作用というと、解の soundness(つまり、得られた解が論理的に正しいかどうか)に影響するものを連想します。
例えば破壊的代入や、Prolog でいえば assert のようなものです。
cut をどのように使っても、得られた解は sound であることが保証されています。(もちろん得られるはずだった解が得られなくなることが起きる)

そのような、穏やかな副作用(一般用語)でも、「副作用」(コンピュータ科学用語)っていうのでしょうかゴルァ
0143デフォルトの名無しさんNGNG
私の感覚ではprologにおいて述語が真理値を
持つ以上の動作をすると副作用である。殆どの組み込み述語が
該当するほか、!も真であると同時に再充足を妨害するので
これを副作用と呼んでいる。
あくまで私がそう呼んでいるだけだが
0144デフォルトの名無しさんNGNG
Prologの冒険をもう一度読みたいんだけど、どっかに売ってないかなぁ
FDのデータは家のマシンのどっかに眠ってるはずだけど....
0145デフォルトの名無しさんNGNG
好き(俺,柳たん).

って日本語でprologってみたいんだけど。
あるの?
0146デフォルトの名無しさんNGNG
>>145
K-prologかSWI-prologはできてた気がします。
0147デフォルトの名無しさんNGNG
誰か覆面算の解くプログラム作ってください

learn+linear+logic=prolog
0148デフォルトの名無しさんNGNG
誰かPrologのスパーセト言語を総括してくれ。
イパーイありすぎて何がなんだかサパーリ分からん。
0149デフォルトの名無しさんNGNG
他の言語に組み込むPrologのライブラリや、
Prologを組み込んだ言語などはありますか?

Prologだけで何かを書くことはむずかしいので、他の言語に組み込む形で
つかうのが現実的であると思いますがいかがでしょうか。

たとえば、MLに論理型をくっつけたらしいMercuryとか
HaskellにあるらしいPrologのライブラリですとか。
#MLもHaskellも使えないから私にはどうかわからん


JavaとかC++に組み込んで使えるものがあったらうれしいのですが。l
0150デフォルトの名無しさんNGNG
>>149
こういうの?
http://www.kprolog.com/jipl/jipl_e.html
0151デフォルトの名無しさんNGNG
prolog…今日試験だったよ。
問題勘違いして間違えまくった…鬱
0152デフォルトの名無しさんNGNG
Prologだと圧倒的で、他の言語だとショボ〜ンなこととは
どんなことでしょうか?
いまいち用途が見つからずに悩んでるですが・
0153デフォルトの名無しさんNGNG
>152
本気で言ってる?
0154デフォルトの名無しさんNGNG
>>152
英語の構文解析のプログラムとかはprologでやると簡単かも……。
確かに、MP3のエンコードとかそういうのには、
あまり役に立たないかも知れませんね(笑)。
0155デフォルトの名無しさんNGNG
> MLに論理型をくっつけたらしいMercury
「関数型言語に」であって別に「MLに」ってわけじゃないと思うよ。
つか、「論理型に関数型を」な気がしないでもない。
0156ざっしょくものNGNG
>>144さん
あ、Prologの冒険なつかしいすねー!持ってます!
高校時代、好奇心でPrologやってみたくて買ったです。
ただ、5インチFDを読める環境が無く、
実際にプログラム組みたくても組めなくてもんもんとした覚えです。
0157デフォルトの名無しさんNGNG
>>154
構文解析って、他の言語でやってもそれほど骨ではないです。
他の言語では地獄を見るようなものってあるかな?
0158デフォルトの名無しさんNGNG
>>146

Java上のPrologならいろいろある。

アプリに組み込み可能なPrologエンジンとしては、ilogが有名。
http://www.ilog.com/
用途は、経路探索とか縦型検索問題、その他。
0159デフォルトの名無しさんNGNG
まったりできるような言語じゃありません
0160デフォルトの名無しさんNGNG
PrologはLogoのプロ仕様言語ですか?
0161デフォルトの名無しさんNGNG
EPILOG も勉強しる!
0162デフォルトの名無しさんNGNG
SWI-Prologまんせー
0163デフォルトの名無しさんNGNG
まとめ=Prologは探索を記述する言語。
0164デフォルトの名無しさんNGNG
宿題助けて下さいな。

Artificial Intelligence
Assignment I

Question 1
Given the following medical expert system devise queries for the
following:
1. A query which will list all the diseases in the medical
database without their symptoms.
2. A query which will pick out all the symptoms of flu.
3. A query which will pick out the diseases with a symptom headache.

/ * Medical Expert System */
symptom(cold,sneezing).
symptom(cold,headache).
symptom(cold,runny_nose).
symptom(flu,headache).
symptom(flu,shivery).
symptom(flu,temperature).
symptom(brain_tumour,headache).
/* END */
0165デフォルトの名無しさんNGNG
宿題助けて下さいな。

Artificial Intelligence
Assignment I

Question 2
Read the following passage, and express the information it contains
in a semantic net. Convert the net to a prolog database and use it
to test
(a) whether herbivores ever hunt and
(b) whether all herbivores are hunted.

In the animal world, carnivores such as lions and leopards hunt
and eat herbivores such as zebras and wildebeest.
Thus some animals are hunters and some are hunted, and generally
speaking, carnivores hunt herbivores. However, there are many
exceptions to this rule. Elephants, which are herbivores, are rarely
hunted because of their size. Nor are bears, which are not normally
meat eaters and therefore basically herbivores. Bears will
catch and eat other animals when the opportunity arises.

0166デフォルトの名無しさんNGNG
宿題助けて下さいな。

Artificial Intelligence
Assignment I

Question 3
Study the attached Prolog Murder Mystery and explain how the prolog
program works, paying particular attention to the rules.
Also briefly outline the importance of backtracking to this
particular problem.

0167デフォルトの名無しさんNGNG
/* Victim is Celia */
body_discovered_at(60,mansion).

/* Death caused by blugeoning */
cause_of_death(blugeoning).

/* Body temperature at 10:10 was 96.4F */
body_temp_at(70,96.4).

/* Specify suspects */
suspect(maid).
suspect(colonel).
suspect(vicar).
suspect(nigel).
suspect(cynthia).


/* Everybody's physical strength rating
1 = bed ridden, 10 = strong as an ox */

physical_strength(vicar,7).
physical_strength(colonel,4).
physical_strength(maid,2).
physical_strength(nigel,8).
physical_strength(cynthia,5).

/* Where everybody lives */
lives_at(celia, vicarage).
lives_at(ronald, vicarage).
lives_at(maid, mansion).
lives_at(colonel, mansion).
lives_at(nigel, cottage).
lives_at(cynthia, cottage).
0168デフォルトの名無しさんNGNG
/* Fastest possbile travel times between key locations */
time_between(mansion,vicarage,12).
time_between(vicarage, mansion,12).
time_between(cottage,vicarage,18).
time_between(vicarage,cottage,18).
time_between(cottage,mansion, 24).
time_between(mansion, cottage, 24).
time_between(Anywhere, Anywhere, 0).

/* Everybody's whereabouts */
saw(vicar, celia, vicarage,0,20).
saw(vicar, nigel, vicarage, 52,52).
saw(nigel, cynthia, cottage,0,30).
saw(nigel,cynthia,cottage,90,99).
saw(colonel,vicar,vicarage,50,99).
saw(cynthia,nigel,cottage,90,99).
saw(vicar,colonel,vicarage,50,99).
saw(maid,colonel,mansion,0,35).
saw(nigel,vicar,vicarage,52,52).
saw(colonel,maid,mansion,0,35).
saw(celia,nigel,cottage,0,30).

/* Specify who's fingerprints where found */
finger_prints_found(celia).
finger_prints_found(colonel).
finger_prints_found(nigel).
finger_prints_found(cynthia).


/* This is the reasoning part, the 'inference engine' */
whodunnit(Person):-suspect(Person),
unexplained_fingerprints(Person),
not(has_alibi(Person)).

whodunnit(Person):-suspect(Person),
strong_enough(Person),not(has_alibi(Person)).


unexplained_fingerprints(Person):-
finger_prints_found(Person),
body_discovered_at(_,Scene_of_crime),
not(lives_at(Person,Scene_of_crime)).
0169デフォルトの名無しさんNGNG
has_alibi(Person):-
body_discovered_at(Latest,Scene_of_crime),
earliest_time_of_death(Earliest),
saw(_,Person,Somewhere,Early_time,Late_time),
time_between(Scene_of_crime, Somewhere, Travel_time),
Latest < Late_time + Travel_time,
Earliest > Early_time - Travel_time.

earliest_time_of_death(Time):-
body_temp_at(Time_temp_taken, Temp),
Time is Time_temp_taken - (98.4-Temp)*10.


strong_enough(Person):-cause_of_death(blugeoning),
physical_strength(Person,Rating),Rating >=4.
strong_enough(Person):-cause_of_death(shooting),
physical_strength(Person,Rating),Rating >=1.
strong_enough(Person):-cause_of_death(poisoning).
0170デフォルトの名無しさんNGNG
宿題助けて下さいな。

Artificial Intelligence
Assignment I

Question 4
Reasoning with uncertainty is an important issue with regard to
using symbolic systems to achieve AI. One such approach is to use
default logic. However another approach is to use Fuzzy logic.
Using the Internet, Books, Magazines, Journals explain in 2-3 typed
pages how fuzzy logic can be used in situations where there is
uncertainty. Give a brief explanation of the logic itself, how it
can be applied, one such area where it has been used, and any
possible future developments with the theory. Reference your work !!!!!!!!!!
0171デフォルトの名無しさんNGNG
お願いします。
0172デフォルトの名無しさんNGNG
思考中。
0173とをりすがりでしてご回答はムリですが...NGNG
#なんか、プログラム技術板っぽく、
#ソースコード乗せまくりで、いい感じ!
0174デフォルトの名無しさんNGNG
どこからどこまでがコードなの?
Prolog って不思議な言語だねぇ。

ところで、Prolog って「ぷろろぐ」? それとも「ぷろろーぐ」?
0175デフォルトの名無しさんNGNG
>>173
え?荒らしじゃないの?
0176デフォルトの名無しさんNGNG
>>164
Question 1
1. ?- symptom(Disease,_).

てことか?もしこんなウォーミングアップ程度からわかんないなら、
キミ相当ヤバイ。正直、出直した方がいいだろ。

>>174
日本じゃプロログが主流と思われ。国際的にはたぶんプロローグ。
0177宿題助けて下さいなNGNG
>>176
'?-' とかははじめからある前提でお願いします。
こっちではプロローグです。
0178デフォルトの名無しさんNGNG
Prologのデータ構造とRDBは似ていますか?
0179デフォルトの名無しさんNGNG
>177
真性?
0180しっぽりNGNG
>>164
花粉症を診断できるように改造しる!
0181親切な人NGNG

ヤフーオークションで、凄い人気商品、発見!!!

「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0182デフォルトの名無しさんNGNG
>>157
文法をほとんどそのままDCGで書くとそれが
動いてくれるってのはイイ!くない?
0183[ ◆rJF0ZGiM NGNG
Q1-1。
?-assert(ako(cold,diseasesaa)).
?-assert(ako(flu,diseasesaa)).
?-assert(ako(brain_tumour,diseasesaa)).
この3行を下の問題文にたして--

?-assert(symptom(cold,sneezing)).
?-assert(symptom(cold,headache)).
?-assert(symptom(cold,runny_nose)).
?-assert(symptom(flu,headache)).
?-assert(symptom(flu,shivery)).
?-assert(symptom(flu,temperature)).
?-assert(symptom(brain_tumour,headache)).

これでリストするっていうのはどうかな?
?-ako(X,diseases).

もっと簡単に出来るのある?
0184挑戦 ◆rJF0ZGiM NGNG
Q1-2にも挑戦中...
0185挑戦 ◆rJF0ZGiM NGNG
Q1-2.
これはこれで簡単。
?-symptom(flu,X).
Q1-3.
これもこの1行でいいんじゃないかな?
?-symptom(X,headache).
0186挑戦 ◆rJF0ZGiM NGNG
でもQ1-1自信ない。ラインたさなくても病名だけリスト出来る方法ありそう。
0187デフォルトの名無しさんNGNG
まじでPrologをCから呼び出せるライブラリがほしいなぁ。
Guile みたいかんじで。

Scheme で Prolog みたいな動作をさせるためには、
どんな勉強すればいいかな?
とりあえず、バックトラッキングだけでもいいんだけど。

っていうか、SchemeもPrologもまだほとんど覚えてないんだけど。
0188デフォルトの名無しさんNGNG
Prologのいい参考書教えてください。
「Prologの技芸」に目をつけていたんですが、品切れ中の模様です。
0189デフォルトの名無しさんNGNG
>とりあえず、バックトラッキングだけでもいいんだけど。
再帰。
深さ優先探索とか、幅優先探索とか調べて見なされ。
0190デフォルトの名無しさんNGNG
しかしこのスレよく伸びるな。(w
0191デフォルトの名無しさんNGNG
>>188 昔よく売れてて、学生も買ってたみたいだから、古本屋を探したら...
0192デフォルトの名無しさんNGNG
いい参考書かどうかは分からないけど、
『機能論理プログラミング』という
Prologを使った機械学習とかそいういうのについて書いた本を
少し前に買ってちょっとだけ読んでみた。
難しくてまだ半分も理解してない。。。
0193デフォルトの名無しさんNGNG
>>192
ごめん。
×『機能論理プログラミング』→○『帰納論理プログラミング』
でした。
0194デフォルトの名無しさんNGNG
オレはカットでめげた。

制約論理プログラミングとかもあるらしいね。
方程式とか解けるのか?
0195デフォルトの名無しさんNGNG
>>194
探索木の枝を切るって事が分かれば難しくないよ。
簡単なメタインタープリタを書いてみると良く分かると思うよ。
0196デフォルトの名無しさんNGNG
『Prologプログラミング入門』アベ著 共立出版
を買ったけどよくわかりません。
とくにバックトラックを図で説明しているのですが、ああいうのはどうなんでしょうか。
カットにいたってはさっぱりわかりません。
0197デフォルトの名無しさんNGNG
box modelカコイイ
ttp://citeseer.nj.nec.com/cachedpage/225686/4
0198デフォルトの名無しさんNGNG
box modelって何?
Prologのペトリネットはみたことあるけど。
0199デフォルトの名無しさんNGNG
最近の日経コンピュータに、どっかがPrologで人事システムを構築という
短信があったと思うがどんなんだろう。
0200名無しさん@お腹いっぱい。NGNG
人工知能で給料カットするんだよ、きっと
0201デフォルトの名無しさんNGNG
すんません,prologってどこかの企業で使われてるんですか?
つまり儲かるような仕事(研究)に使える言語なんでしょうか?
0202デフォルトの名無しさんNGNG
プロローグって3段論法を背理法で解くものだろ。
で、論理式はホーン形式に限られている。
もっと、一般の論理式の真偽を求めれるプログラムないのか。
量化子なんかもOkのやつがいいね。
タブロー法あたりをプログラム化したものないかな。
0203デフォルトの名無しさんNGNG
書籍に良いのは無いのでしょうか?
絶版だったりどうでもいい本だったりして困ってます。

定番な良書や、この本で開眼した、というような推薦書はありませんか?
0204デフォルトの名無しさんNGNG
Interlogってどうよ。
http://homepage2.nifty.com/logic/

http://homepage2.nifty.com/logic/ai6.htm にあるように
イベントが発生するとき、ゴールが設定されるというのは面白い。
でも、文章からはイタサが漂う。
0205名無しさん@お腹いっぱい。NGNG
>>202
ワラタ
0206デフォルトの名無しさんNGNG
>>205
タワラ
0207デフォルトの名無しさんNGNG
>>201
Windowsの一部はPrologで書かれてるとかこないだ聞いた。
具体的にどこにどう使われてるかとかは知らんけど。聞いただけの話だから。
詳しい人いたら補足レスきぼんぬ。
0208デフォルトの名無しさんNGNG
>>207

 まさか、Windows の一部は、Prolog と Epilog で
書かれているというオチではなかろうね。
0209デフォルトの名無しさんNGNG
 この Prolog、Epilog というのは、プログラム
言語のことじゃなくて、識別子のことね(Epilog
という一種の Prolog 言語があるから)。

0210デフォルトの名無しさんNGNG
>>196
「論理の木構造の深さ優先探索」て理解でいいんじゃなーい?

木の根の所にカニがいて、枝の先端にある柿をたびたいと思ってる。

カニは進行方向を見て歩けないし、カニにとって木は巨大な構造体だから、事前に最短経路を考えて辿ることはできない。
しょうがないから蟹知恵で、枝の分岐点の組み合わせをシラミ潰しに探索する(深さ優先探索)。
枝先端へ行って柿がなければ、一つ前の分岐に戻って(バックトラック)別の枝を試す。

カニは柿を食ったら別の作業をしたいが、その作業が失敗したからといって柿採りに戻りたくないからカット!
0211デフォルトの名無しさんNGNG
age
0212デフォルトの名無しさんNGNG
Prologの実習が始まりました。
誰かユニフィケーションとバックトラックについて詳しく説明してください。
このままじゃレポートかけない・・・・・。
0213デフォルトの名無しさんNGNG
こちらへどうぞ。
http://www.google.com/
0214厨房ですよ@PrologNGNG
ユニフィケーション=単一化≒項同士が等値かどうか調べること。
調べる=項の評価し、その結果を見ること。
バックトラック=ゴールが見つかったのに、別のゴールが無いか調べること
0215デフォルトの名無しさんNGNG
>>210
わー、わかりやすいー。
柿を食った後の作業で失敗しても、
柿を食う前には戻らないちゅうことですね。
0216デフォルトの名無しさんNGNG
Prolog.NET なんて出ないだろうなぁ
0217ageNGNG
保全しときます。
0218デフォルトの名無しさん NGNG
ぜんほあげ
0219デフォルトの名無しさんNGNG
k-prolog ってbignumが使えるんだね。
Lisp、Schemeの専売特許じゃなかったんだ。
知らんかった〜。
0220デフォルトの名無しさんNGNG
こんな板があるとは・・・。
学生時代にやってもう忘れたけど、マジカルバナナをするプログラムとか言うのを演習で提出した覚えがある。懐かしい・・・。
0221デフォルトの名無しさんNGNG
中島秀之さんのProlog/KRってどうなったか知ってる人いる?
WindowsのLispで動くかな?

0222デフォルトの名無しさんNGNG
Prolog/KRて、和田研近辺で作られたUTILISP上で動いてて、
その後名前が裏茄子に変わったと、本に書いてあったよね。

UTILISPはかなり前にインターネット上で公開されてたと記憶。

中島秀之せんせーって、今も産総研で活躍されてるよね。
メールで聞いてみたら?
0223デフォルトの名無しさんNGNG
>222
Common Lisp 用に書き直されてないかいな。
マジに聞いてみようか。(なんと恐れ多い)
入門書の付録のPrologはCommon Lispに書き直されたもの
が存在するんだよね。
多重世界機構かぁ。
0224デフォルトの名無しさんNGNG
いいねぇ
0225名無しさん@お腹いっぱい。NGNG
http://www.carc.aist.go.jp/~nakashim/
0226デフォルトの名無しさんNGNG
Windowsで使える最強のプロログ処理系教えてください。
0227デフォルトの名無しさんNGNG
>>226
http://www.swi-prolog.org/
0228デフォルトの名無しさんNGNG
ナローイングってなに?
0229デフォルトの名無しさんNGNG
すみません教えてください
PCH creation point
ってなんですか?
よろしくお願いします
0230デフォルトの名無しさんNGNG
宿題は、宿題スレでやれ。
0231デフォルトの名無しさんNGNG
KLCはどうですか。
五世代プロジェクトの
0232名無しさん@XEmacsNGNG
>>231
> KLCはどうですか。
> 五世代プロジェクトの

KL1 ね。で、UNIXen で動くその言語処理系が KLIC。

Prolog とはかなり趣を異にするけど、これはこれで結構面白い言語だ
わな。副作用なしで入出力が扱えたりするところとかね。
0233貼っとくNGNG
prologディレクトリ
http://dir.goo.ne.jp/computers/00941/00979/00988/
0234デフォルトの名無しさんNGNG
なローイングってあに?
0235デフォルトの名無しさんNGNG
あいーん
0236デフォルトの名無しさんNGNG
Prologのコンパイラでは
実行ファイル(.EXE)は作成されないの??
0237デフォルトの名無しさんNGNG
>>236
Turbo Prolog では作れたよ。
0238デフォルトの名無しさんNGNG
試してみます。
ども。
0239デフォルトの名無しさんNGNG
本家スレage
0240okdNGNG
SWI-PrologをWin98SEでダウンロードして使おうとしたのですが、日本語を節名や変数名に使えないのですが、何かよい方法はないでしょうか?
0241デフォルトの名無しさんNGNG
普通は、シングルクオート '' で囲う。そんで日本語フォントで表示させる。

しかし、シフトJISコードの2バイト目に \ とかがあると
モロ化けるので、フォントを設定するくらいではどうしようもないね。
0242デフォルトの名無しさんNGNG
みつけた!
ここみんな必見だよ
プロログの動作原理
http://web.sfc.keio.ac.jp/~tozaki/LP/01/handout/prolog-dousa/
0243デフォルトの名無しさんNGNG
Prologを使いこなすとハッカーだって言うけど本当ですか?
0244デフォルトの名無しさんNGNG
さあ
0245242NGNG
と思ったけど結構浅いや(汗)
スタックな図とか初めめちゃくちゃ分かりやすいと思ったんだけどね。

>>243
>>209
0246デフォルトの名無しさんNGNG
Prologを使いこなすとお金持ちになれるって本当ですか?
0247デフォルトの名無しさんNGNG
Prologを使いこなすと彼女ができるって本当ですか?
0248デフォルトの名無しさんNGNG
Prologを使いこなすと大学卒業できるって本当ですか?
0249デフォルトの名無しさんNGNG
聞いてみろ。

?- available(girl,X).
no.
0250デフォルトの名無しさんNGNG
>>246 嘘
>>247 微妙
>>248 本当
0251デフォルトの名無しさんNGNG
>>246-250
深夜に自作自演ですか?
0252デフォルトの名無しさんNGNG
閉世界仮説
0253デフォルトの名無しさんNGNG
>>250 嘘つき。
0254デフォルトの名無しさんNGNG
?- liar(>>250).
Yes.
0255デフォルトの名無しさんNGNG
今日からProlog始めますた
なかなか意味不明ですた
0256デフォルトの名無しさんNGNG
お勧めの処理系は?
0257デフォルトの名無しさんNGNG
あ
0258デフォルトの名無しさんNGNG
>>255
俺も始めたさー。
なかなか意味不明だよねん。
でも意味わからないままさくさく書けるようになってしまう自分も
意味不明なんよね。
まぁゆっくりいきましょか。

ちなみにうちはK-prologとProlog Cafeっす。
0259 NGNG
SWI-PrologとEmacsプラグイン、ダウンロードしてみた。
0260デフォルトの名無しさんNGNG
>>259
同じく。只今いろいろといじり中
0261デフォルトの名無しさんNGNG
SWI-Prolog で

Clauses of hoge/4 are not together in the source-file

というワーニングに苦しめられてます
hoge/4 はいっぱい書いてあんのになぁ

一応、ちゃんと動いてくれてんだけど
0262デフォルトの名無しさんNGNG
Prologみたいな言語ってどう作ればいいんですか?
0263デフォルトの名無しさんNGNG
頑張って作ればよろしい。
0264デフォルトの名無しさんNGNG
>>261
メッセージの通り、同じ述語を定義するファクトやルールを、
同じ所に並べて書いてないんだと思われ。
hoge(1). hoge(2). hage(hage). hoge(3).
0265デフォルトの名無しさんNGNG
ちなみに、ワーニングと言うくらいならワーミングと言って欲しい
0266デフォルトの名無しさんNGNG
>>264
おお、スタイルに対して文句をいわれていたのかアレは・・・
ありがとう、おかげで綺麗に動くようにナタヨ・・・
0267デフォルトの名無しさんNGNG
パズルの本に下のようなのがあったんだけど、Prologで表現するとどうなります?

 ・Aさん、Bさん、Cさんの3人がいる。
 ・黒髪と茶髪と金髪が1人ずつ。
 ・Cさんは黒髪じゃない。
 ・金髪はCさんじゃない。
 ・黒髪はAさんじゃない。
 Q:Aさん、Bさん、Cさんの髪はそれぞれ何色?

こんな感じでいいの?

color(c, black) :- !, fail.
color(c, blond) :- !, fail.
color(a, black) :- !, fail.
color(_, _).

ans(A, B, C) :-
 select(A, [black, brown, blond], R),
 select(B, R, [C|[]]),
 color(a, A), color(b, B), color(c, C).
0268デフォルトの名無しさんNGNG
否定は \+ とか \== とかを使ったほうがいいと思うけど。

?- select(A,[black,brown,blond],_BC),select(B,_BC,[C]),A \== black, C \== black, C \== blond.

A = blond
B = black
C = brown

Yes
0269デフォルトの名無しさんNGNG
差分リストを使わないとできない事って何?
つーか、差分リストってなんか役に立つの?
0270267NGNG
おお、1行で書けちゃうんですか。どもです。>>268

>>267で書いたやつを、ちょっと直してみました。
リストも使わないようにしてみました。
前のやつと同じようにFactの部分を外に出してはあるんですが。
(改行略)
person(a). person(b). person(c).
col(black). col(brown). col(blond).

mismatch(c, black).mismatch(c, blond).mismatch(a, black).
match(Person, Color) :- person(Person), col(Color),
  \+ mismatch(Person, Color).

ans(A, B, C) :-
  match(a, A), match(b, B), match(c, C),
  A \+ B, B \+ C, C \+ A.

こういうのが大規模になったとき、例えば色が10万色くらいに
なったときってどう管理するんですかね?
Prologソースのままがいいのか、RDBがいいのか…
0271デフォルトの名無しさんNGNG
こんなのどうです?またパズルの本からですけど。
Prologやってる人ってこんなのも簡単に書けちゃうのかな。
始めたばっかなんで漏れには激しく難しかったんですけど。

 ・a、b、c、dの4人でレースをした。
 ・赤、緑、青、黒の服のうち、それぞれ違うのを着ている。
 ・w、x、y、zの形のブローチのうち、それぞれ違うのを着けている。
 ・赤服に続いてaがゴール。aに続いてyブローチがゴール。
 ・zブローチの次にb。bに続いて青服。
 ・wブローチの次に黒服のc。

 Q:1位、2位、3位、4位はだれで何色の服でなんのブローチか?
0272デフォルトの名無しさんNGNG
こういうgenerate-and-testの場合、
ふつうはまず、「順列を(全とおり)作る述語」を作ると思う。

permute(L,[Car|Cdr]) :- select(L,Car,Rest), permute(Rest,Cdr).
permute([],[]).

?- permute(['赤','緑','青','黒'],色マップ),
permute([w,x,y,z],形マップ),
permute([1,2,3,4],順位マップ).
で、a,b,c,dが1,2,3,4(リストの要素の位置)に対応してる事にする。

例:条件「赤服に続いて a がゴール」
nth1(赤服,色マップ,'赤'), % 「赤服は誰か?
nth1(赤服,順位マップ,赤服の順位), % その順位は?
赤服の次の順位 is 赤服の順位 + 1, % その次の順位は?」まで調べて、
nth1(1,順位マップ,赤服の次の順位), % 「赤服の次はa(=1)である」
0273デフォルトの名無しさんNGNG
もちろん、ちゃんと述語で抽象化したほうがいい
0274デフォルトの名無しさんNGNG
SWI-Prologのcopy_term/2はループした節に使えないんだな。
?- S = s(S), copy_term(S,T).
ひょっとして使える方が変なのか
0275271NGNG
>>272
最初に条件同士が成り立つ組み合わせを求めて、あとで並べ替えを
当てはめてみる感じでやってみました。(test-and-generate?)

condition/1を通った時点で[X1,X2,X3,X4]が
[[○,○,z],[b,red,○],[a,blue,w],[c,black,y]]
の一通りだけに定まって、あとは単に空白を埋めるだけになると。

ちなみにもっと複雑な問題でも試してみたんですが、
最初に並べ替えを作ってから条件を通すより、かなり早いです。

?- ans([X1, X2, X3, X4]).
X1 = [d, green, z]
X2 = [b, red, x]
X3 = [a, blue, w]
X4 = [c, black, y]

次レスにソース。
0276271NGNG
ans([X1, X2, X3, X4]) :-
condition([X1, X2, X3, X4]),
result([X1, X2, X3, X4]).

condition([X1, X2, X3, X4]) :-
subseq([[_, red, _], [a, _, _], [_, _, y]], [X1, X2, X3, X4]),
subseq([[_, _, z], [b, _, _], [_, blue, _]], [X1, X2, X3, X4]),
subseq([[_, _, w], [c, black, _]], [X1, X2, X3, X4]).

result([[P1, D1, B1], [P2, D2, B2], [P3, D3, B3], [P4, D4, B4]]) :-
perm(person, [P1, P2, P3, P4]),
perm(dress, [D1, D2, D3, D4]),
perm(brooch, [B1, B2, B3, B4]).

subseq(X, Y):- append(X, _, Y).
subseq(A, [_|B]) :- subseq(A, B).

perm(_X, []).
perm(X, [H|T]) :- perm(X, T), call(X, H), \+member(H, T).

person(a).(略) dress(red).(略) brooch(w).
0277デフォルトの名無しさんNGNG
>>269 計算量O(1)でappendとかできるじゃん
0278デフォルトの名無しさんNGNG
例えばlotate([1,2,3], X)に対して、
X=[1,2,3];
X=[2,3,1];
X=[3,1,2];
X=[1,2,3];
と答えるような述語が、
lotate(A, X) :- append(M, N, A),append(N, M, X).
って書かれてるとして、
こういうのも差分リストで効率化できる?
0279278NGNG
スマソ
rotateの間違い。
0280デフォルトの名無しさんNGNG
面白そうだが、理解できない
0281デフォルトの名無しさんNGNG
リストから要素の重複をなくしたリスト(集合)を得る述語が書けません…
getSet(LIST,SET).=LISTの要素の集合はSETである
addSet(OLD,X,NEW) =集合OLDの要素にXを追加したものが集合NEWである

getSet([],_).
getSet([X|XL],OLD):- addSet(OLD,X,NEW), getSet(NEW,XL).
/*OLDにXを追加して、残りの分を処理*/

これでgetset([a,b,c,b,a],X).すると
X=[a,b,c|_210],
みたいにうしろにごみが。どうすればいいのでしょう。
addSet/3の動作に不備はないのですが。
setof/3のない処理系なんで困ってます。

>>278
ううん、それで十分効率的だと思うのですが。
0282281NGNG
ああっと。自己解決しました。
getSet(SET,[],SET).
getSet(OLD,[X|XL],NEW2):- addSet(OLD,X,NEW), getSet(NEW,XL,NEW2).

答えはgetSetにもOLD,NEWふたつつけることでした
0283デフォルトの名無しさんNGNG
>>278 分割と結合を分けたらできた。しかしややこしい。。
--------------------------------------
split_d(A-AX,L-L,R-R) :- A == AX, !.
split_d(A-AX,L-L,A-AX).
split_d([AH|AT]-AX,[AH|LT]-LX,R-RX) :- split_d(AT-AX,LT-LX,R-RX).
append_d(L-R,R-RX,L-RX).
rotate_d(A-AX,B-BX) :- split_d(A-AX,L-LX,R-RX), append_d(R-RX,L-LX,B-BX).
rotate(A,B) :- append(L,R,A), append(R,L,B).
sample_dlist(0,LX-LX) :- !.
sample_dlist(N,[N|LT]-LX) :- succ(NT,N), sample_dlist(NT,LT-LX).
test_rotate(N,R) :-
sample_dlist(N,L-[]), sample_dlist(N,DL-DLX),
( time(( between(1,R,_K), rotate(L,_B),
fail, writeln(_B), fail )) ; true ),
( time(( between(1,R,_K), rotate_d(DL-DLX,_DB-[]),
fail, writeln(_DB), fail )) ; true ),
true.
--------------------------------------
?- test_rotate(100,1000).
% 5,253,001 inferences in 8.51 seconds (617274 Lips)
% 404,001 inferences in 0.99 seconds (408082 Lips)
--------------------------------------
0284283NGNG
簡略化してみた
split_lld([],[],R-R).
split_lld([H|T],[],[H|RT]-RX) :- split_lld(T,[],RT-RX).
split_lld([H|T],[H|LT],R-RX) :- split_lld(T,LT,R-RX).
rotate_using_dl(A,B) :- split_lld(A,L,B-L).
0285283NGNG
う。。284じゃ意味ないじゃん。。なかったことに
0286283NGNG
append_d(L-R,R-RX,L-RX).
つーかこんなの↑使わないか。
rotate_d(A-AX,B-BX) :- split_d(A-AX,L-BX,B-L).
さらにややこしく
0287デフォルトの名無しさんNGNG
prologの日本語の優しい解説サイトありませんか?
0288デフォルトの名無しさんNGNG
http://bach.scitec.kobe-u.ac.jp/prolog/
ここはやさしくないのかな
0289278NGNG
>>283
お疲れ様でした。

rotate_dに与えるAが[回転させたいリスト|Ax]になってて、
rotateの仕事量の一部を外に出して前処理しているように
見えるのがちょっと気になったんで、

rotate_d2(A, B) :- append(A, AX, As), split_d(A-AX,L-[],B-L).

こんなの追加して試行してみたんだけど、やっぱそれでも早いんですね。

?- test_rotate(100,500).
% 2,626,501 inferences in 3.79 seconds (693008 Lips)
% 151,501 inferences in 0.29 seconds (522417 Lips) <== >>286の修正版
% 202,501 inferences in 0.36 seconds (562503 Lips) <== rotate_d2

inferencesの増加が約5万なんで辻褄は合うから、てことはやはり元の
rotateの効率がよくなかったってことか。

それにしても難解…
幾何の補助線みたいに考えればいいのかな。
0290278NGNG
たびたびスマン。・・・何やってんだ俺・・・
rotate_d2(A, B) :- append(A, AX, As), split_d(As-AX,L-[],B-L).
0291デフォルトの名無しさんNGNG
>>288
日本語訳があるのはいいね(笑)
あと主要なbuiltin predicateが書いてあったらもっと良
0292デフォルトの名無しさんNGNG
日本語の入門だったらこんなのはどう?
http://web.sfc.keio.ac.jp/~tozaki/LP/02/handout/theory/lp.html

難しめの事もわりと平易に書いてる気がするんだけど。
0293デフォルトの名無しさんNGNG
[a,b,c] なんてリストから
[a,b,c|T]-T なんて差分リストを作りたいのだけど
どしたらいいんでしょ??
逆なら簡単なんだけど・・・
0294293NGNG
自力解決しますた・・・逝って来ます
0295デフォルトの名無しさんNGNG
>>293
Tの頭にc,b,aと足し込んで行くしか思い浮かばないんですが、
O(1)でやりたいってことですよね。きっと。

できるとしたらその解でも、できないならその証明でも
どっちでも面白そうなんで、識者の方、ご教示おながいします。
0296295NGNG
げっ。
どう解決したんですか?>294
まさかappendとか・・・
0297293NGNG
>>296
appendデス(笑)
とは言え、私の使ってる奴は
appendが組み込みで、リストの分解
とかには使えないんで、
myappend([],L,[]).
myappend([X|L1],L2,[X|L3]):-myappend(L1,L2,L3).
list_dlist(L,H-T):-myappend(L,T,H).
です。
効率は悪いけど、殆どの処理を差分リストを用いて、
必要な部分だけ上のを使うってのでいいかなーって
思ってるのですが・・・
0298デフォルトの名無しさんNGNG
Mercuryの悪口とか、ここに書いていいの?
0299デフォルトの名無しさんNGNG
保守
0300300NGNG
>>299
なんかネタだせ。
0301デフォルトの名無しさんNGNG
大学の授業でPrologがあるんだけど、意味不明、、、
0302デフォルトの名無しさんNGNG
常識かもしれないけど、SonyのAIBOの処理系はPrologで記述されてますよ。

知ってた?
0303デフォルトの名無しさんNGNG
Prologもマンセー
0304デフォルトの名無しさんNGNG
>>302
知らんかった。<LISPとかだと思った。
0305デフォルトの名無しさんNGNG
知らなかった香具師がおれの他にもいた。よかった。
0306デフォルトの名無しさんNGNG
>>302
知らんかった。<Cとかだと思った。
0307デフォルトの名無しさんNGNG
>>302
しらんかった。<中に本物の犬が入ってると思ってた。
0308デフォルトの名無しさんNGNG
知らんかった。<中にバイト君が入ってると思った。
0309デフォルトの名無しさんNGNG
座布団全部持って逝け
0310デフォルトの名無しさんNGNG
ソリャネーヨ
0311デフォルトの名無しさんNGNG
Prologで文字列のマッチングをするのはどういう方法がいいんでげしょ?
文字列もリスト構造になってるんで、有名なKMPとかを使ってもあんまり効率
は改善できそうにないし・・・

0312デフォルトの名無しさんNGNG
>>311
Cでかく
0313デフォルトの名無しさんNGNG
AIBO蹴ったら「イテ」って低い声がしたけどな。
0314デフォルトの名無しさんNGNG
>文字列もリスト構造
そうなの?
0315デフォルトの名無しさんNGNG
Prologコンパイラについて全部教えて
0316デフォルトの名無しさんNGNG
バカだね
0317デフォルトの名無しさんNGNG
>>315
http://www.t.ring.gr.jp/pub/GNU/gprolog/gprolog-1.2.13.tar.gz
その情報ならここにあるよ。変なURLかも知れないけれど、確実。
0318デフォルトの名無しさんNGNG
Prologマンセー
0319デフォルトの名無しさんNGNG
gprologは、prologソースをprologを使ってwamにしてるんですか?
prologの研究をしてる振りなのでprologが読めなかったり(苦笑
0320318NGNG
Prologやろうと思うんだどVC++が一段落しねえな。
0321デフォルトの名無しさんNGNG
激しくなつかすぃ「Prologの冒険」
http://www.amzi.com/AdventureInProlog/
0322デフォルトの名無しさんNGNG
リストカット
0323デフォルトの名無しさんNGNG
お前ら今週prologの勉強を始めた俺が初めて自力で
書いたプログラムを添削して下さいませんか?

/* 犬と、犬の主人と、
ヒンズー教の男と、牛が2頭、
イスラム教の男と、豚が2匹。
ボート(定員2)で河を渡ります。
最低一人は人間が乗らなければなりません。
主人がいないと、犬は見境無く噛み殺します。
イスラム教の男がいないと、ヒンズー教の男は豚を食べます。
ヒンズー教の男がいないと、イスラム教の男は牛を食べます。
河を渡る手順はどのようになるでしょうか? */

human( man ).
human( hindu_man ).
human( islamic_man ).

animal( dog ).
animal( cow ).
animal( pig ).

move_boat( Ca, NewCa, Cb, NewCb ) :-
select( boat, Ca, NewCa ),
append( [ boat ], Cb, TempNewCb ),
msort( TempNewCb, NewCb ).
0324デフォルトの名無しさんNGNG
move_human( Ca, NewCa, Cb, NewCb ) :-
select( Human, Ca, NewCa ),
human( Human ),
append( [ Human ], Cb, TempNewCb ),
msort( TempNewCb, NewCb ).

move_animal( Ca, NewCa, Cb, NewCb ) :-
select( Animal, Ca, NewCa ),
animal( Animal ),
append( [ Animal ], Cb, TempNewCb ),
msort( TempNewCb, NewCb ).

move_other( Ca, Ca, Cb, Cb ).

move_other( Ca, NewCa, Cb, NewCb ) :-
move_human( Ca, NewCa, Cb, NewCb ).

move_other( Ca, NewCa, Cb, NewCb ) :-
move_animal( Ca, NewCa, Cb, NewCb ).
0325デフォルトの名無しさんNGNG
fail_by_dog( C ) :-
member( dog, C ),
not( member( man, C ) ),
length( C, X ),
(member( boat, C ) -> 2 < X ; 1 < X).

fail_by_hindu_man( C ) :-
member( hindu_man, C ),
not( member( islamic_man, C ) ),
member( pig, C ).

fail_by_islamic_man( C ) :-
member( islamic_man, C ),
not( member( hindu_man, C ) ),
member( cow, C ).

print_answer( [], [] ) :- !.

print_answer( [CR | CRH], [CL | CLH] ) :-
print_answer( CRH, CLH ), write( CL ), write( CR ), nl.

solve( Sa, [ Ca | CaH ], _Sb, [ Cb | CbH ] ) :-
Sa == rightSide,
Ca == [], !, print_answer( [Ca | CaH], [Cb | CbH] ), nl.
0326デフォルトの名無しさんNGNG
solve( _Sa, [ Ca | CaH ], Sb, [ Cb | CbH ] ) :-
Sb == rightSide,
Cb == [], !, print_answer( [Cb | CbH], [Ca | CaH] ), nl.

solve( Sa, [ Ca | CaH ], Sb, [ Cb | CbH ] ) :-
move_boat( Ca, Ca2, Cb, Cb2 ),
move_human( Ca2, Ca3, Cb2, Cb3 ),
move_other( Ca3, NewCa, Cb3, NewCb ),
not( fail_by_dog( NewCa ) ),
not( fail_by_dog( NewCb ) ),
not( fail_by_hindu_man( NewCa ) ),
not( fail_by_hindu_man( NewCb ) ),
not( fail_by_islamic_man( NewCa ) ),
not( fail_by_islamic_man( NewCb ) ),
not( member( NewCa, CaH ) ),
not( member( NewCb, CbH ) ),
solve( Sb, [ NewCb, Cb | CbH ], Sa, [ NewCa, Ca | CaH ] ).

river_problem :-
msort( [ boat, man, dog, hindu_man, cow, cow, islamic_man, pig, pig ], Init ),
solve( rightSide, [ Init ], leftSide, [ [] ] ).
いじょ。
0327デフォルトの名無しさんNGNG
323> 初めて自力で書いたプログラム
レベル高すぎ。俺は
mortal(ore).
mortal(omae).
とかだったぞ。
?-mortal(X)
とかやって、動いた、感動した、単位取れた、終わり、だったな。
0328デフォルトの名無しさんNGNG
cかc++かjavaで書かれたprolog->wamコンパイラ募集中♪
0329318NGNG
>>323
おお、激しく面白そうだ。
さすがProlog
0330デフォルトの名無しさんNGNG
>>323
だれ(どれ)が、(安全に?)川を渡ればいいの?
ふれーむもんだいかな?
0331デフォルトの名無しさんNGNG
>>327

mortal っすか。
0332デフォルトの名無しさんNGNG
>>327
初めて自力で書いた(ある程度まとまった意味のある処理をする)プログラム
ということでよろしく。
mortal(X). で感動できたんなら、俺よりセンスありそうだ。感動は大事っす。

>>330
全員が川岸から反対の川岸まで、犠牲者を出すことなく渡ればOKっす。
0333デフォルトの名無しさんNGNG
こないだGNU prologダウンロードしてみましたけど、
情報学部系の人は授業などでやるようですね。

しかし仕事で使うことはまず無い言語ですよね?
0334デフォルトの名無しさんNGNG
Prolog, Lisp, MLは直接使わない時でもプログラミングの役に立つことでしょう。
0335 NGNG
>>332
案外難しいですね。
ループしないように履歴をもってないといけないと。
0336デフォルトの名無しさんNGNG
Finite Domainって知ってますか?
0337デフォルトの名無しさんNGNG
Infinite Justiceなら知ってるぞ
0338デフォルトの名無しさんNGNG
>>337
なにそれ
0339デフォルトの名無しさんNGNG
>>338
アメリカのアフガニスタン攻撃作戦の名前でわ。
0340デフォルトの名無しさんNGNG
んだよ
0341デフォルトの名無しさんNGNG
↑象牙の塔まるだし
0342デフォルトの名無しさんNGNG
swi-prologをJavaから呼び出せるようにしようとしてるんですが、
誰か意見があればどうぞ。
0343デフォルトの名無しさんNGNG
>誰か意見があればどうぞ。

エッチさせろ。
0344デフォルトの名無しさんNGNG
>誰か意見があればどうぞ。

Could you insert your penis to my anal!
0345デフォルトの名無しさんNGNG
>誰か意見があればどうぞ。

C++からも呼べるようにしといて。
0346デフォルトの名無しさんNGNG
>誰か意見があればどうぞ。

Prolog -> WAM のコンパイラをうpしてください。
ソースは、C,C++,Javaあたりでお願いします。
Prologで作ったPrologコンパイラばかりで困ってます。
0347デフォルトの名無しさんNGNG
>>346
コンパイルの時間が遅いってこと?
0348デフォルトの名無しさんNGNG
>>347
WAMがわからんってことです。
Prologソースも読めないし。
0349デフォルトの名無しさんNGNG
>>923
ttp://member.nifty.ne.jp/K-8_PLANT/tsuka/bsiq150.html
0350デフォルトの名無しさんNGNG
リストから、空リストを再帰的に削除するのってどうやるの?
[[], a, [b, [], [], c, []], [[[]]], [[[a]], [b]], []] が
[a, [b, c], [[[a]], [b]]] となる述語。
できそうでできませんでした(泣)
0351デフォルトの名無しさんNGNG
やってみた。いいのかな・・・

remove_empty([], []).
remove_empty([[]|T], T2) :- remove_empty(T, T2), !.
remove_empty([[H|T]|T1], T2) :- remove_empty([H|T], []), remove_empty(T1, T2), !.
remove_empty([[H|T]|T1], [H2|T2]) :- remove_empty([H|T], H2), remove_empty(T1, T2), !.
remove_empty([H|T], [H|T2]) :- remove_empty(T, T2).
0352デフォルトの名無しさんNGNG
をを、お見事。サンクス。
入れ子のパターンマッチングと、カットがキモでしたか…。
どうやったら、[[H|T]|T1] を思い付くんでしょう?
0353デフォルトの名無しさんNGNG
こんなのもどう?
remove_empty([],[]) :- !.
remove_empty([H|T],L2) :- !,
 remove_empty(H,H2), remove_empty(T,T2),
 remove_empty_aux(H2,T2,L2).
remove_empty(X,X).
remove_empty_aux([],T2,T2) :- !.
remove_empty_aux(H2,T2,[H2|T2]).
0354デフォルトの名無しさんNGNG
remove_empty(X,X):- リストじゃないっていう組み込み述語(X).
ってしてカットを抜いたほうがきれいかも
0355デフォルトの名無しさんNGNG
再挑戦してみたらできました。遅いかも。述語によってカットがあったりなかったりが謎。
is_empty( [] ).
is_empty( [A] ) :- is_empty( A ).
is_empty( [A | L] ) :- is_empty( A ),is_empty( L ).
remove_empty( X, X ) :- not( is_list( X ) ).
remove_empty( [A | X], [] ) :- is_empty( A ), is_empty( X ), !.
remove_empty( [A | X], Y ) :- is_empty( A ), not( is_empty( X ) ), remove_empty( X, Y ), !.
remove_empty( [A | X], [B] ) :- not( is_empty( A ) ), is_empty( X ), remove_empty( A, B ).
remove_empty( [A | X], [B | Y] ) :- not( is_empty( A ) ), not( is_empty( X ) ), remove_empty( A, B ), remove_empty( X, Y ).
0356デフォルトの名無しさんNGNG
WAMについて(その動作など)詳しく知りたいのですが、よい文献などありますか?
和文が希望ですが、和文以外でもよいものがあればご教授ください。

Prologの動作の仕組みなどに興味があります。
0357デフォルトの名無しさんNGNG
prolog使って喜んでる奴って根暗そう。
0358デフォルトの名無しさんNGNG
prologがjavaから呼べると何がいいんでしょうか?
0359デフォルトの名無しさんNGNG
>>357
ママンのtitsでも吸ってろ!
0360デフォルトの名無しさんNGNG
>>357
http://maid.dmz-plus.com/saitama/1033241851.jpg
0361デフォルトの名無しさんNGNG
>>358
JavaからPrologを利用できる
0362西門#NGNG
>>356
http://www.vanx.org/archive/wam/wam.html
0363デフォルトの名無しさんNGNG
>>361
冗談にしてはつまらないな。
もうちょっとまともな事書けばと思ってしまった。
参考になればいいけど
0364bloomNGNG

http://www.agemasukudasai.com/bloom/
0365356ですNGNG
>>362
西門#さん
ありがとうございます。
Warren's Abstract Machine<A TUTORIAL RECONSTRUCTION>[wambook.pdf]の
「Prolog in a Nutshell 91」
「The WAM at a glance 97」
がよさそうですね。日本語の文献がよかったんですが、なさそうなので
とりあえずこれを読んでみます。
ありがとうございました。
0366デフォルトの名無しさんNGNG
prologインタプリタを作るのって簡単?
ためしに作ってみたんだけど、あまりにも簡単すぎて。
これでいいのかな。
0367デフォルトの名無しさんNGNG
よくわかんないけど、いいんじゃないの。
0368デフォルトの名無しさんNGNG
見せて見せて。
まさか Brainfuck で書いてないよね?
0369デフォルトの名無しさんNGNG
GNU Prolog Compilerを取ってきたので今からインストールして試してみます。
http://pauillac.inria.fr/~diaz/gnu-prolog/ から取れます。
何でもPrologプログラムをCプログラムにコンパイルしてくれるようで楽しみ。
0370デフォルトの名無しさんNGNG
・・・と思ったら、どうも直接アセンブリ出力をするようです。
0371デフォルトの名無しさんNGNG
>>356 >>365
その会話サンクス
ちょーど質問しよーとしてたとこだた
0372デフォルトの名無しさんNGNG
>>366
ただ動くだけのインタプリタなら、100行足らずで書けるよね。
効率よく動かそうと思うと1万行とかになるけど。
0373デフォルトの名無しさんNGNG
100行足らずのprologきぼんぬ。
何が出来ればprologなの?
0374デフォルトの名無しさんNGNG
prologの処理系で一番使いやすいのってswi prologってきいたんですけど本当ですか?
自分、prologすらつかったことありません・・・
0375デフォルトの名無しさんNGNG
100行は超えてるけど
http://www.ece.pdx.edu/~mperkows/CLASS_ROBOTICS/LISP/tanimoto/PROLOG.CL
とか?
もっと短くなりそうですけどね。

Horn節のresolutionができればPrologなんじゃない?
0376デフォルトの名無しさんNGNG
>>374
やはりSicstus Prologでは?
0377デフォルトの名無しさんNGNG
Quintus Prologだろう。
SicstusはQuintusの模造品。
0378デフォルトの名無しさんNGNG
execute((P,Q)) :- !, execute(P), execute(Q).
execute(P) :- predicate_property(P, built_in), !, P.
execute(P) :- my_clause((P :- Q)), execute(Q).

3行で書けたよ。
0379デフォルトの名無しさんNGNG
スキームですか、そのprologインタープリタは・・・
C言語しかわからない。・゚・(ノД`)・゚・。 うえええん
0380デフォルトの名無しさんNGNG
>>379
PrologをCへコンパイルするコンパイラを
Prologで書けばよい。きっと百行で書ける。
0381デフォルトの名無しさんNGNG
ユーザーコンサルト画面がスクリーンエディタになっているprolog処理系は
ありませんでしょうか?
ラインエディタでは使いにくくて・・・・

外部でエディットしてconsult('filename'). 使ってファイル読み込めばいいのですけどね。
0382デフォルトの名無しさんNGNG
よーしPrologはなんか逆コンパイラに使えそうな気がしてきたぞ〜
0383デフォルトの名無しさんNGNG
気のせいだろ
0384デフォルトの名無しさんNGNG
推論系はprologが楽
0385デフォルトの名無しさんNGNG
Prolog→Cへの変換プログラムをPrologで書けば、
それを使ってC→Prologの変換もできるよね?
0386デフォルトの名無しさんNGNG
親(ママ,太郎).
親(ママ,花子).
兄弟(X,Y) :- 親(P,X),親(P,Y).
?- 兄弟(太郎,X)
太郎
兄弟(X,Y) :- 親(P,X),親(P,Y),X\=Y.
?- 兄弟(太郎,X)
花子

今はこれが精一杯。
0387デフォルトの名無しさんNGNG
>>386
性別をfactに持たせて、叔父、叔母、その他いとこやおじいさんおばあさんも
作ってみよう。
0388デフォルトの名無しさんNGNG
cutオペレータの使い所がわからない・・
ただの否定じゃ駄目なの?
0389デフォルトの名無しさんNGNG
readとかの入出力って、副作用だよね?
バックトラックで問題にならないのかな。
0390デフォルトの名無しさんNGNG
>>388
not_p(x) :- p(x), !, fail.
not_p(x) :- true.
cutがないと、上の節は必ず失敗するが、下の節があるので
結局かならず成功してしまう。

あと、双方向性がいらないときや、非決定性がいらないとき、
cutを使うと効率が良くなる。

>>389
問題になるよ。
副作用を使ったら、cutと同じく、双方向性や
非決定性が制限される。
0391デフォルトの名無しさんNGNG
親(パパ、ママ).
0392デフォルトの名無しさんNGNG
有向性グラフの問題を解く時なんか、カットオペレータがないと
勝手にバックトラックして変な解まで見つけてしまうことがある。

それとか、最初の一つの解が見つかった所で処理を止めて次
に移りたい時とか。
0393デフォルトの名無しさんNGNG
>>321
> 激しくなつかすぃ「Prologの冒険」
> http://www.amzi.com/AdventureInProlog/

日本語翻訳本は絶版っぽいので、がんばって読み始めました。
激しく面白いです。
はやくパズルとかを解けるようにがんばります。
教えてくれてありがとう!
0394デフォルトの名無しさんNGNG
>>393
図書館にあるよ
0395デフォルトの名無しさんNGNG
prologだとコンパイラとかって簡単に作れたりするの?
0396356ですNGNG
>>395
ブラトコ(?)の本(多分「Prologの技芸」)にパスカルのサブセットを
マシン語にコンパイルする例があったと思うけどやたら簡単だった。
1日も必要ない。1時間もあれば理解できるじゃないかな?

0397356ですNGNG
「Prologの技芸」はあってましたが、Leon Sterling/Ehud Shapiro 著
松田利夫 訳の本でした。ちなみに共立出版です。
(えっ、知ってた?)
0398356ですNGNG
私は、lispを使ったことが無いのですが、
lispは簡単にprologを構築できると聞いたことがあるのですが、
そのあたりご存知な方いらっしゃいますか?
0399デフォルトの名無しさんNGNG
>>398
>>375
0400デフォルトの名無しさんNGNG
>>397
LISPのは、ちょっと厚い本には大抵載ってるよ。
>>375のは主要なオペレータが揃ってなかったり不完全な気がするけど。
schemeもschelog(本体はschemeコードで500行程度)
つーのがあったり、
SICPというschemeを例にしたアルゴリズム教科書に、
非決定性や論理型プログラミングの解説がある。
0401デフォルトの名無しさんNGNG
中島秀之さんが書いた、日本で最初のPrologの本では、たしか
Lispで書いたPrologインタプリタを使ってたと思う。

だから、例題も全部Lisp風の文法。
0402デフォルトの名無しさんNGNG
だめだーーーー
サンプルプログラム読むとふむふむと理解でき(た気になれ)るけど
いざ自分で書こうとすると何書いていいかわかんなくなる
0403デフォルトの名無しさんNGNG
SWI-Prolog入れてみたんだけど、どうやって使うの?
とりあえずHello World的なプログラムを試してみたいんですが。
0404403NGNG
なんかエラーになると思ったら、
[../demo/likes].
とは書けないのね。
?- cd(../demo)
?- [likes].
でうまくいきました。
0405デフォルトの名無しさんNGNG
http://www.cs.kuleuven.ac.be/~bmd/PrologInJava/
これなんかけっこう簡単な割には
機能的には充分だと思うんだけど、どうかな?
0406デフォルトの名無しさんNGNG
卒研でGNUprologをやらされるはめに、、、あと1ヶ月もないってのにさ。
CやJavaの方がまだマシだよ。ってかCとかJavaに慣れちゃってる人には
Prologって根本的に違うからわかりづらいね。
基本的なことはわかったけど、どう応用してよいのやらわからんよ。
「Prologへの入門」あべ著にあったプログラムをコピペしても走らなかったりするしさ〜
同じような境遇の人いたら同情しまっせ。
0407デフォルトの名無しさんNGNG
大学で弄って以来 Prolog さわってないな。
0408引き篭もりNGNG
Prologやるならこれだけは読んどけなんて本ありますかm(_ _)m
0409デフォルトの名無しさんNGNG
>>406 テーマ与えられるだけマシと思えよな
0410406NGNG
>>409
テーマは強制的です。やりたくてやってたんじゃないんですよ〜
ちゃんと初めはやりたいことあったんですが「駄目だ!」と一蹴。
「うちの研究室では初めての分野だし・・・」とあーだこーだと
論点すりかえて説得され続けるのがいやになってあきらめたんです。
ツッコミ入れると面白いくらいあせってつくろうし。ガキみたいな教授です。
って愚痴ってしまってすいません。
がんばりますよ!
0411デフォルトの名無しさんNGNG
>>410
こんなとこで愚痴たれるお前の方がガキだろ。
いやなら教授殴ってやめちまえ。
0412デフォルトの名無しさんNGNG
Prologなんて二日くらいで習得できたぞ

差分リスト以外は
0413デフォルトの名無しさんNGNG
Prologは文法的には非常に単純だが、単純過ぎて、何か複雑な事を
やらせようとすると脳内シミュレートが重荷で大変だと思った。
0414デフォルトの名無しさんNGNG
>>406
困難から逃げるのが好きな漏れはProlog絡みの卒研を履修放棄した。
0415デフォルトの名無しさんNGNG
>>410
テーマの内容は何?
0416デフォルトの名無しさんNGNG
prologインタープリターを自分で作ってみたいのですが、
どうしていいかよくわかりません。
誰か救いの手をお願いします。
0417デフォルトの名無しさんNGNG
>>416
既存の処理系のソース読破汁!!
0418デフォルトの名無しさんNGNG
Cでコーディングされたprologのソースコードくれよ
0419デフォルトの名無しさんNGNG
>>418
GNU-Prologのソースコードなら
http://gnu-prolog.inria.fr/
にあるじゃん。
0420デフォルトの名無しさんNGNG
全然関係無いんだが、
>>417
>読破汁!!
2ちゃん語って非常に気持ち悪いんだけど、慣れないと駄目ですか?
0421デフォルトの名無しさんNGNG
>>420
2ちゃんねる見なきゃ大丈夫。
0422デフォルトの名無しさんNGNG
421がいいこといった
0423デフォルトの名無しさんNGNG
>>420
2ちゃん語なんてものはありません。
ただ日本語すらまともに使えていないバカが多いだけです。
0424デフォルトの名無しさんNGNG
g-prologはやめたほうがいい
0425デフォルトの名無しさんNGNG
なして
0426デフォルトの名無しさんNGNG
Turbo Prologは強烈だったなー
0427デフォルトの名無しさんNGNG
第5世代プロジェクトと共に消えたプrolog
0428デフォルトの名無しさんNGNG
あのころはあれだけprologに期待をかけられていたのに、いまじゃただの藻屑とかした
0429PrologNGNG
(´Д⊂ヽうるせーバカチンども
0430デフォルトの名無しさんNGNG
おまえらアルゴリズムデバッギングくらい知ってるよね?
あれってprologで実装するもの?
0431416NGNG
公開されているソースコードを参考にして
ある程度作って、だいたい動くようになったのですが
バックトラックが上手く実装できていないのと、
あと
test(A,A).
test1(A,B):-test(A,C),test(B,C),A=1.
の単一化を実現する上手い方法が思いつきません。
誰かバックトラックの実装方法と
上記の単一化を実現する実装方法を教えてください。
0432デフォルトの名無しさんNGNG
>>431
何が知りたいのかわからないけど、
prologのバックトラックは、パターン内の節を順に適用していって、
失敗したら他のパターンを試す処理。
これはパターンと節の二次元のテーブルで済む筈。
単一化は未確定の変数に対して値を代入する処理。

>test(A,A).
>test1(A,B):-test(A,C),test(B,C),A=1.

Aを仮に1としてパターンtest1を評価すると、
変数の初期値はA=1 B=? C=? (?は未確定)
最初の節test(A,C)からA=Cが確定(単一化)してC:=1、
testは無条件に真なのでバックトラックせずに継続、
次の節test(B,C)からB=Cが確定(単一化)してB:=1、
testは無条件に真なのでバックトラックせずに継続、
次の節A=1がtrueなのでYesが返る。

Aが1以外なら、パターンtest1の最後の節A=1で失敗し、
バックトラックに入るが、可能な他のパターンが無いのでNoが返る。

という説明じゃ駄目?
0433デフォルトの名無しさんNGNG
>>430
自信ないけど、アルゴリズムデバックじゃなく
アルゴリズミックデバッギングのように表記しない?

Prologで実装というより、対象がPrologのプログラム(というのが発祥)
なんじゃないかな。実装は特にPrologじゃなくてもいい気がする。
Prologで実装して特に楽になる部分あるかなあ。
0434デフォルトの名無しさんNGNG
>これはパターンと節の二次元のテーブルで済む筈。
この実装だと死ぬな。
ある節がfalseを出した時、どこまで戻すかの記録が微妙。
代入のデータとスタックを使うのが普通かと。

>Aを仮に1としてパターンtest1を評価すると、
アフォ?
test1(A,B).
と質問した時、prologは
どうやってA=1,B=1
を見つけて来るんだよw
という俺もよくわからないけど、
内部でA=C,B=Cという表現を作ってるんだと思う。
0435デフォルトの名無しさんNGNG
SWIprologにて
-----------fib.pl------------
fib(0, 0).
fib(1, 1).
fib(N, F) :- N > 1, N1 is N-1, fib(N1, F1), N2 is N-2, fib(N2, F2), F is F1+F2.
-----------fib.pl------------
?- [fib].
% fib compiled 0.00 sec, 748 bytes

Yes
?- fib(30,X).
ERROR: Out of local stack.
うーむ。
0436デフォルトの名無しさんNGNG
>>435
fib(0, 0):-!.
fib(1, 1):-!.
とcutを入れればよいだろう。でも、ふつーは
fib(N, _):-N < 0, !, fail.
fib(N, F):-ifib_loop(N, 0, 0, 1, F).
ifib_loop(N, N, A, _, A).
ifib_loop(N, X, A, B, F):-X1 is X + 1, AB is A + B, ifib_loop(N, X1, B, AB, F).
とやる。
0437435NGNG
>>436
こういうとこでcut使うんですか・・・。
いまいちcutの使い所がわかんないですな。
多分どういう動きなのか想像つかんからですが。
0438デフォルトの名無しさんNGNG
>>437
cutがないと、fib(0,0)にいったん成功して、その後バックトラックする時に
下の選択肢を探すことになる。(そのための情報がスタックに積まれる。)

でも、fib(0,0)に成功したならば、下の選択肢は無意味なので、cutで取り除い
てやる。
0439デフォルトの名無しさんNGNG
カットって無くてもOK?
0440デフォルトの名無しさんNGNG
理論的には無くてもOKだが、
実際には、cut無しでは実用的なプログラムが書けない。
0441デフォルトの名無しさんNGNG
ファイル入出力とか、副作用があったりするとcutみたいな
制御が無いと駄目でしょ。
0442デフォルトの名無しさんNGNG
>>435
フィボナッチを分割統治とは渋いな。
っていうか何がうーむなのか。
0443デフォルトの名無しさんNGNG
>>441
ファイル入出力は無くてもいいからね。
関数としてはカットは不要だと思う。
0444デフォルトの名無しさんNGNG
>>442
いや定義式どおりのありふれたアルゴリズムなんだけど。
指数オーダーなので実用には使っちゃ駄目なんだけど。

>>443
ファイル入出力がいるプログラムもあるんだけど。
関数じゃないんだけど。
0445デフォルトの名無しさんNGNG
>>444
計算論知ってる?
帰納関数知ってる?
0446デフォルトの名無しさんNGNG
>>445
知ってますが何か?
0447デフォルトの名無しさんNGNG
442=443=445=アフォ
0448デフォルトの名無しさんNGNG
447=引き篭もり=アフォ=キモイ
0449デフォルトの名無しさんNGNG
うるせーイチジ!
0450デフォルトの名無しさんNGNG
prologインタプリター作ったんだけど、
お前らに見せる価値はありますか?
0451デフォルトの名無しさんNGNG
>>449
ワショーイ!!
0452デフォルトの名無しさんNGNG
>>450
そんなこと言われても(´・ω・`)ショボーン
見てみないと価値なんかわからないっす。
0453デフォルトの名無しさんNGNG
>>452
インタプリターの価値じゃなくて、
評価してもらう価値あるかって事では?

まあ、俺はたぶん読めるだろうけど
過去ログからもわかるように
バックトラックの実装すらよくわかってない奴が
ほとんどだと思うから
ここで公開しても、へたれコメントしか出てこないと思われ。

そもそも自分でインタプリター作れる奴はそれ程多くないし、
2chにはたぶんいない。
0454デフォルトの名無しさんNGNG
>>452
7行スレからパクッたのか?
0455デフォルトの名無しさんNGNG
へ?
0456デフォルトの名無しさんNGNG
450みせてくれ。見たい。
0457デフォルトの名無しさんNGNG
>>453
>そもそも自分でインタプリター作れる奴はそれ程多くないし、
>2chにはたぶんいない。

チミのレベルで他人を判断しないように。
研究者仲間でも、2ch読んでる人は多いよ最近。
0458デフォルトの名無しさんNGNG
457の研究者仲間ってレベル低いんでしょ?
むしろ、どういうレベルなの?
0459デフォルトの名無しさんNGNG
晒しあげ
0460デフォルトの名無しさんNGNG
a
0461デフォルトの名無しさんNGNG
>>458
んー、チューリング賞はとれそうに無いが、
日本の学会の論文賞なら皆とっている。
0462デフォルトの名無しさんNGNG
>>461
分野によりけりだろ。
まあ、ためしにprologインタプリターでも作ってみろって
どうせ作れないだろうけど。
0463デフォルトの名無しさんNGNG
>>462
それはあまりに簡単すぎる。
0464デフォルトの名無しさんNGNG
>>450
見せたいなら
もったいぶらずに
早く見せろやゴルァ!
0465デフォルトの名無しさんNGNG
突然ですが、情報系院生だけど趣味でLISPインタプリタ作ったよ。

以外といろんな人が見てますよ。さすがにプロフェッサーはないだろうけども。
0466デフォルトの名無しさんNGNG
証拠プリーズ
ネタかな?
0467デフォルトの名無しさんNGNG
>>463
もっと難しい課題の提案よろしく
自称レベル高いだから、さぞかしすごい事ができそうだ。
prologインタプリターを自動生成するprologのプログラムとか
0468デフォルトの名無しさんNGNG
LISPぐらいなら素人でも作れるよ。
schemeはちょっとセンスがいる。
両方ともインタプリタのままだと無茶苦茶遅いけど。
0469デフォルトの名無しさんNGNG
lispが一番簡単だな。
末尾再帰の最適化ってどうやるの?
パターン判定するの?
0470デフォルトの名無しさんNGNG
PrologインタプリタだってLispインタプリタと同じくらい簡単だろ。
>>378 にあるとおり。
0471デフォルトの名無しさんNGNG
>>469
Schemeで書けば、自動的に末尾再帰は最適化される。
0472デフォルトの名無しさんNGNG
メタインタプリタとインタプリタの区別がつかないバカがいるスレですか?
0473デフォルトの名無しさんNGNG
>>472
それを言うならメタサーキュラーインタプリタだろ。ハズカシ…
でも、どっちもインタプリタだよ。同じ事。
0474デフォルトの名無しさんNGNG
まあ、実際Common Lispのインタプリタは
たいていCommon Lispで書いてあるしな。
0475デフォルトの名無しさんNGNG
>>474
PrologのインタプリタもフツーPrologで書くよ。

インタプリタの速度なんて誰も気にしないし、
コンパイルすればじゅうぶん速い。
0476デフォルトの名無しさんNGNG
有名度
メタインタプリタ>>メタサーキュラーインタプリタ
同じ意味だろ。

じゃあ、perlもrubyもevalで終わりか。
作れない言い訳にしては普通すぎるというか。
0477デフォルトの名無しさんNGNG
>>476
ほんとに無知だな。
eval自身をその言語で書くのがメタインタプリタ。
0478デフォルトの名無しさんNGNG
ML作れる兵はいないのか?
0479デフォルトの名無しさんNGNG
素人質問で申し訳ないのですが
lispでlispインタプリターを作る意味は何ですか?
0480デフォルトの名無しさんNGNG
>>479
それが一番楽で実際的だから。
0481デフォルトの名無しさんNGNG
>eval自身をその言語で書くのがメタインタプリタ。
ソースキボーン
0482デフォルトの名無しさんNGNG
さっきLISPを作ったと書いたものです、院生。
作成言語はC++ with STLです。C++の勉強のために作った代物。
実は作成したのはscheme likeなlispなのですが、同じといえば同じ。
ガベージコレクションがたいへんでした。

しかし、そんなに難しいものじゃない。効率考えなきゃ、だれでも作れるでしょう。
0483デフォルトの名無しさんNGNG
で、ウプしないの?
ネタ?
0484デフォルトの名無しさんNGNG
>483
おまえ、ソースきぼんとかうぷしろとか
さっきからしつこいけど、アホだろ?
0485482NGNG
>>483
私に言っています?
すでにあげてるのですが、研究室のサーバに挙げてるので
おしえたくねー。疑われそうではあるけど、仕方ない。

どこにあげればいい?鯖いってくれりゃ、あげまっせ。
ちなみにmainとatom以外はtemplateで書いてるから、読みにくいよー。
0486デフォルトの名無しさんNGNG
インタプリタを作るのか
メタインタプリタを作るのか
はっきりしやがれ
0487デフォルトの名無しさんNGNG
メタインタプリタとメタサーキュラーインタプリタは違うよ。

「SchemeでSchemeインタプリタを書く」のはメタサーキュラーインタプリタ。
メタインタプリタは、メタレベルのインタプリタ。
インタプリトされているプログラム(オブジェクトレベル)と
インタプリタ自身(メタレベル)は、意味的に『別』の言語、『別』のデータ
で表される。
0488デフォルトの名無しさんNGNG
Lispインタプリタはすれ違いのような。
0489デフォルトの名無しさんNGNG
>>387
SchemeでSchemeコンパイラを書くのは何なんですか?
0490デフォルトの名無しさんNGNG
C++の練習でlisp作るなんて・・・
すげー
0491デフォルトの名無しさんNGNG
>>490
ネタだと思われ。
0492デフォルトの名無しさんNGNG
>>489
何だろうね。別にメタとは言わないね。

理論屋がその言語自身のコンパイラで何かするとしたら、
「操作的意味論」と呼ぶかもな。
0493デフォルトの名無しさんNGNG
http://www2.ezbbs.net/25/sendai/
ウプロダ
0494デフォルトの名無しさんNGNG
>>490
Lispのプログラマを書いたことのある人間なら
別に意外でもないと思う。

たぶん、「型判定にvirtualメソッドを使う」とか
やってるんじゃないかな。

C++に慣れたプログラマだと「スマートポインタでGC」
とかやりたくなるかもしれないけど、それは止めたほうが無難。
0495490NGNG
ネタかな・・・
>ちなみにmainとatom以外はtemplateで書いてるから、読みにくいよー。
この辺がネタ臭さを出してるけど、
でも、templateで書いてるなら普通にすごいかも。
0496490NGNG
メタサーキュラーってどういうスペリングですか?
0497490NGNG
いつの間にかウプロダが貼られてる。
期待してます。
是非、見せてください。
0498デフォルトの名無しさんNGNG
metacircularでは
0499482NGNG
>>491
まじっす。まじっす。ほんとっす。

でも、defun,cons,cond,eq,car,cdr,print,terpri,...
程度の基本の基本しか実装してないです。凄いの想像したならごめんです。
入出力込みで2000行程度の代物。

もう少しすてきな感じになったら、世の知れたところに出しますので
そのときはよろしく(作ってて楽しくなった)。

キーワードは いろんなデータ構造をatomとして使えるLISP です(ありきたり)
LISP on design patterned でよろしゅうに。名前は未定さん。
0500デフォルトの名無しさんNGNG
サーキュラーがつくかつかないかの違いは
まったく同じか、ちょっと違うかの違いだろ。
0501デフォルトの名無しさんNGNG
メタサーキュラーはリフレクションと関係ないだろ。

メタインタプリタはリフレクション用語。
0502482NGNG
>>494
ごめんなさい、GCにスマートポインタをまさに使ってます。
遅い遅い。

すこしだけ、アップロードとやらをしてみます。
全部はダメぴょん。
0503デフォルトの名無しさんNGNG
ウプまだ??
ネタ率95%
0504デフォルトの名無しさんNGNG
>>503
ウザイ
0505デフォルトの名無しさんNGNG
>>502
コンパイルして動く程度はウプしないと
途中で挫折したくせに強がった厨房ケテーイ
となると思うけど

期待してるよ。
0506デフォルトの名無しさんNGNG
>>504

>どこにあげればいい?鯖いってくれりゃ、あげまっせ。
って書いてるんだから、仕方ないのでは?
0507506NGNG
502読み損ねた、スマン
0508デフォルトの名無しさんNGNG
もうちょっとでこのスレ丸2年ですね。
0509デフォルトの名無しさんNGNG
逃げた・・・・
0510482NGNG
あぷろだとかよくわからんので、ここにすこしだけ公開。
こんなところに書くから、根幹は秘密の関係ないとこだけ。

名前空間省略!インクルード省略!!
class LispErr {
string perr;
public:
LispErr(const string &s) {perr =s;}
string err(void){return "error :" + perr;}
};
template<class C> class Function;
class LispBool{
Condition p_cond;
public:
Condition cond(void) const {return p_cond;}
string print(void) const ;

LispBool& operator=(const LispBool& l) {p_cond = l.cond();}
LispBool(){p_cond = UNDEF;}
LispBool(Condition c){p_cond = c;}
};

template<class C> class S_EXP : public LispBool{
bool p_isatom;
bool p_isS;
bool p_isList;
bool p_isSymbol;
int p_S_num;
C p_atom;
1レスで書けるのはこの程度?
0511デフォルトの名無しさんNGNG
結局、自称レベル高いとか言うカス研究者はどうなったんだろう(pw
0512デフォルトの名無しさんNGNG
おいおい、zipで圧縮もできない厨房かよw
0513490NGNG
名前
E-mail
題名
内容
URL
添付
ってなってるから
添付のところにウプしたいファイルを指定するだけだですよ。
0514デフォルトの名無しさんNGNG
インタプリタ書くのさえ難しいと思ってて
書いた人を神とあがめるアフォが集まるスレはここですか?
0515490NGNG
>>514
俺にはできないけどなぁ
Lispもあまりよくわかっていなかったりする。
0516デフォルトの名無しさんNGNG
>>514
おめーもできないだろ、カス
メタインタプリタ作ってインタプリタ作ったつもりになってるバカですか?
0517デフォルトの名無しさんNGNG
>>516
まだメタインタプリタとメタサーキュラーの区別がついてない厨房がいる(w
0518デフォルトの名無しさんNGNG
>>516
でも、遊びならともかく、PrologインタプリタはPrologで書くのが
実際的だし、SchemeインタプリタはSchemeで書くのが有利だろ。
あらゆる意味で。
0519482NGNG
>>505
ありゃ、こんなこと書かれてる。よけい火に油を注いだ形になりそうな予感。
しかし、もし挙げたら神になれるのかしら。迷うな。

正直なところ、あまり見せたくないんだわ。
こんなに重宝な感じでいわれると、もう少し、立派なところで公開したくなりました。もしかして、これって凄いのとかいう勝手な妄想。
コピー公開とかされたらムカつくので、ライセンスとってから公開します。
お騒がせごめんなさい。

0520デフォルトの名無しさんNGNG
>>510
インデントがないから激しく読みにくい(笑
0521デフォルトの名無しさんNGNG
>>519
見せなくて良いよ。
自分でインタプリタも書けないような厨房ども、どうせ見ても理解できない。

だいいちスレ違いだし(w
0522デフォルトの名無しさんNGNG
>コピー公開とかされたらムカつくので、ライセンスとってから公開します。
ライセンス取るってお前アホ?
ライセンスってのはソースの片隅に
著作権アリって書くって意味だろうが。

作れる能力は確かにすごいだろうけど
作った物自体はたいした事ないでしょ。
同じ機能なら俺も1日あればできるよ。

その部分的なコードを見るとすごくネタなきがするんだけど・・・

心配ならsourceforge使え
0523522NGNG
まあ、個人的にはテンプレートをどう使ったのか
くらいにしか興味ないから別にウプしなくてもいいけど。

この流れでやめたら釣り師だよな(笑)
0524デフォルトの名無しさんNGNG
>ライセンスってのはソースの片隅に
>著作権アリって書くって意味だろうが。

うわ、すげーアフォだ(藁
0525522NGNG
>>518
prologなんかはバックトラックなどを実装する事に意味があると思うけど。
ふと思った、あれを幅優先で実装するとどうなるんだ?
カットを除けば、結果はかわらないだろうけど
なんか意味があるのだろうか。

0526デフォルトの名無しさんNGNG
>>525
もちろん結果は同じ。
空間計算量が異なる。
0527522NGNG
>>524
あれ、違うの?
スマン、説明お願い。
0528482NGNG
>>522
GNUライセンスなら結局そんな感じになりますがね。
でもコードに色々著作埋め込んだり、形式を一応整えたりと手間はあるんです。

ちなみにtemplateはclassをatomとして扱えるようにしてます。
結局的にatomの演算をatom自身に持たせたというところ。
簡単には足し算はatomの概念によってかわるから、うんたらみたいに。
そこをtemplateとabstruct virtual classでよいこら(ここが味噌だからさ)とね。
微妙にboostのpreprocessをつかってね。

釣り師です。以上です。
0529デフォルトの名無しさんNGNG
abstractだろ(ヤレヤレ
0530490NGNG
なんか残念ですね。
気分的には
「だったら言うなよ・・・」
ってとこですが、
見せてもらう側なので文句は言えませんが。
0531デフォルトの名無しさんNGNG
著作権って「あり」って書かなくてもありに決まってるだろ。
0532デフォルトの名無しさんNGNG
なんか臆病な奴が多いようで
0533デフォルトの名無しさんNGNG
>>531
主張しなきゃねーよ
0534522NGNG
>そこをtemplateとabstruct virtual classでよいこら(ここが味噌だからさ)とね。
具体性が全然ないんだけど。
無駄にtemplate使ってるだけなきがしてきたよ。
0535デフォルトの名無しさんNGNG
>>533
おいおい。ヴェルヌ条約加盟以前のアメリカならともかく、
日本やヨーロッパや今のアメリカは無方式主義だよ。
主張は不要。著作権は手続き無しで自動的に生じる。
0536デフォルトの名無しさんNGNG
>>533 ネタだろ?
0537482NGNG
>>534
よくわかってらっしゃることで。もしかして、あなたも作ろうとしたのかな?

正味、インタプリタとして用いるならtemplateは使わない方が簡潔に書ける
と思われます。ただし書く効率は別として。

ただ、別のプログラムの内部処理に組み込むことを考えていますので、
そのためのtemplateの意味もあります。
0538デフォルトの名無しさんNGNG
>>533は未だにパブリックドメイソとか言っていると思われ。
0539デフォルトの名無しさんNGNG
>主張は不要。著作権は手続き無しで自動的に生じる
そんな事ないでしょ。
ソースコードは著作物だけど
権利を主張しない限りは、勝手にコピーされても
文句は言えない
0540デフォルトの名無しさんNGNG
>>539
おいおい…
Copyright (C) ....
が法律的に何の意味ももたないことを本当に知らないのか?

「無方式主義」でぐぐってみろや。
0541482NGNG
ネタでしたごめんなさい。
本当はインタープリターなんて作れないんです。
もう何も言わないでください。
0542482NGNG
>>541
せめてインタプリタとかいてほしかった。
ネタでしたごめんなさい。
0543482NGNG
英語のカタカナ化はどっちでもいいぽ
0544デフォルトの名無しさんNGNG
>>518
>でも、遊びならともかく、PrologインタプリタはPrologで書くのが
>実際的だし、SchemeインタプリタはSchemeで書くのが有利だろ。
>あらゆる意味で。

実際的って何?何が有利?
作り方のお勉強程度の意味しかないじゃん。
0545デフォルトの名無しさんNGNG
482は普通にウザイ
スレ違いもいいところ。
0546デフォルトの名無しさんNGNG
>>539
本当にそう思ってたのか????
そこまで遅れているやつがこの世にいたとは…
0547482NGNG
>>543
いや本人がインタプリタと書いてるから(一貫してる)
そうかかなきゃ、本当っぽくみえないと思ったといってみる。
0548デフォルトの名無しさんNGNG
インタープリタだっけ?
俺はインタープリンタだと思ってた。プリンタの一種(w
0549デフォルトの名無しさんNGNG
そんな>>545が一番うざがられているワナ。
鏡みろよ、かがみ。
0550デフォルトの名無しさんNGNG
>>544
いや実際、製品ではそうしてるけど。
そのほうが生産性ははるかにいいし、速度もそんなに変わらんし、
だいいちインタプリタの速度を気にしてもしょうがないし。
0551デフォルトの名無しさんNGNG
>>544
他にどうやって書くの?
0552通りすがりNGNG
>>540
意味がないことはない。
例えば、著作権が侵害された場合なんかは、
侵害側がその著作権の所属につき善意を主張した場合、
その抗弁として使用できる。
0553デフォルトの名無しさんNGNG
>>552
そういう意味はあるかもね。
でも「著作権を生じさせる手続き」としては無意味だろ。
0554デフォルトの名無しさんNGNG
>>550
それどういう意味?
>速度もそんなに変わらんし
インタプリタをインタプリタで駆動すんだから、
むちゃくちゃ遅くなるんじゃないの?
コンパイルするってオチですか?
0555デフォルトの名無しさんNGNG
>>552
2周年おめ。
0556デフォルトの名無しさんNGNG
>>554
オチもなにも…
まともな処理系なら*当然*コンパイラがあるだろ。
0557デフォルトの名無しさんNGNG
C言語でprolog作れる人なら
prologでprologを作れる可能性が高いけど

prologでprologが作れても
C言語でprologを作れる気がしないので、

prologでprologを作れると自慢してる奴はアフォ。
0558デフォルトの名無しさんNGNG
>>554
あのなあ、
インタプリタがすでにあるんならインタプリタ書く必要ねーじゃねえか。
コンパイラにきまっとるだろヴォケ。
0559デフォルトの名無しさんNGNG
突然ですが。ぜんぜんまったりしていません。
0560デフォルトの名無しさんNGNG
>>557
自慢も何も、ふつうそうしてるし…
なぜC言語でPrologコンパイラ書けると偉いのかにゃ?
ただ余計な回り道してるだけに思えるが。
0561デフォルトの名無しさんNGNG
>>556 >>558
え?
>>518にインタプリタを*書く*って書いてあるけど?
0562デフォルトの名無しさんNGNG
PrologをC言語に落とすコンパイラならあるよ。
SchemeをCに落とすコンパイラはたくさんある。

そんなのをCで書いてたらアフォだがナー
0563デフォルトの名無しさんNGNG
>>561
だから、CなりPrologなりのコンパイラがまずあって、
Prologインタプリタがまだ無いときの話だろ?
頭があればそれくらい分かる。
0564デフォルトの名無しさんNGNG
>>562
C言語に落とすやつだと制限あるんじゃないの?
同じ動作しなかったり。
0565デフォルトの名無しさんNGNG
VMを想定したアルゴリズムを使うインタプリタは
バイナリーにしても速度はほとんど変わらないよ。

メタインタプリタを実装してバイナリーにすると
速度がどうなるかは実際やった事ないけど、
VMと同じ様な動きになる気がするので・・・
という事は遅いとも限らないのか。
頭がこんがらがった。
0566デフォルトの名無しさんNGNG
>>561
まあ、黙って本格的な処理系のソース読んでみろや。
インタプリタは無かったり、コンパイラ使って書いてあったりするから。
0567デフォルトの名無しさんNGNG
つーか>>550が話の流れを追ってないバカって事だろ。
0568デフォルトの名無しさんNGNG
>>564
制限は機能よりむしろ性能だろうな。
アセンブリ言語に落とすのに比べて、どうしてもペナルティがある。
インタプリタとコンパイラの動作の違いは、
SchemeやCommon Lispなら問題にならないと思う。
Prologは知らん。ISO Prologなら大丈夫じゃないの?

>>565
なんでVMが出てくるの?
0569デフォルトの名無しさんNGNG
>>567
なんで?
アフォはどうみても>>544だろ。
0570デフォルトの名無しさんNGNG
>>567
お前がな(w
0571デフォルトの名無しさんNGNG
インタプリタだ、つってんのに、
なんでいきなりコンパイラの話になるんだろうね?
0572デフォルトの名無しさんNGNG
>>571
なぜか、インタプリタをインタプリタで書くなんていう
とんでもない想像をしたアフォがいるからだろうね。
0573デフォルトの名無しさんNGNG
>なぜC言語でPrologコンパイラ書けると偉いのかにゃ?
そりゃ、STLがあるから線形リスト作れなくてもいいって
言ってるのと同じだな。
いい悪いじゃなくて、
能力的に、線形リストを作れる/作れない
の違いがあるだけ。

gccがあるからCコンパイラなんて作れなくても
いいというのは正論だけれど、
Cコンパイラが作れるという理由で
雇ってくれる会社はあるのでは?

要するに
PrologでPrologが作れる事は
100歩譲ってちょっとすごいと表現すれば、
CでPrologが作れる事は
かなりすごいのでは?

君が面接官で
二人の志願者からの情報が
1人がPrologでPrologつくれます。
もう一人がCでPrologつくれます。
どっちが優秀かの判定は簡単だよね?
0574デフォルトの名無しさんNGNG
>>572
>>518のことかな?
0575デフォルトの名無しさんNGNG
>>573
ああ、つまりお勉強って事ね。
既に能力のあるプログラマには関係ない話だな。

ChezやSicstusは、わざわざおべんきょのために、
Cでインタプリタ書くような無駄なことをして
能力を実証する必要など無い。
0576デフォルトの名無しさんNGNG
>いや実際、製品ではそうしてるけど。
なんで誰も具体的な商品名と、
ベースにした処理系を聞かないんだ?
0577デフォルトの名無しさんNGNG
>>572
>インタプリタをインタプリタで書く
意味がわからんのだが。
0578デフォルトの名無しさんNGNG
PrologでPrologつくれます の方だろう。ま、センスの問題になるんだが。
0579デフォルトの名無しさんNGNG
>>574
いや、>>554のこと。
0580デフォルトの名無しさんNGNG
PrologでProlog作るのと、
LISPでProlog作るのと、
CでProlog作るのと、
どれが一番良い?
0581デフォルトの名無しさんNGNG
>>576
「ベースにした処理系」ってどういう意味?
0582デフォルトの名無しさんNGNG
>>575
そうそう、勉強というか
実力を測る基準にはなるでしょ?
明らかに必要となる知識が違うしさ。
ただ時間がかかるだけじゃないよ。

あとは、やっぱり高速化って仕事もあるだろうから
C++で書いて自分で高速化したり
他の処理系が使ってる高速化アルゴリズムを知るのも
有益かもね。

>能力を実証する必要など無い。
関係ないけど、
実証しないと誰も認めてくれないよ。
0583デフォルトの名無しさんNGNG
>>579
もっとさかのぼって話の流れを追えよバカ。
0584デフォルトの名無しさんNGNG
>>582
いや、ChezやSicstusは、そんなアフォなことしないでも
みんな能力を認めてると思うんだけど(w
0585デフォルトの名無しさんNGNG
つーか、70年代ごろから、LispはLispで書いてあるっつーに。
MacLispもLisp Machine LispもZetaLispも、その時点で最高速
だった製品は皆そうだったYo。
0586デフォルトの名無しさんNGNG
>>584
二人とも俺は知らないけど
(前がlispで後ろがprolog?)
他に業績があれば認めてもらえるのでは?

0587デフォルトの名無しさんNGNG
まあ、オベンキョにアセンブラやCでインタプリタを
書いてみるのは良いと思うよ。
コンパイラ書いたほうが勉強になると思うけど。

実用的な処理系を(低レベルルーチンだけならともかく全体を)
Cでわざわざ書いたらちょっと…
と思うけど。
0588デフォルトの名無しさんNGNG
>>585
>つーか、70年代ごろから、LispはLispで書いてあるっつーに。
これって、インタプリタを書くわけじゃないよね?
この辺を勘違いしてる人がいるみたいなので。
0589デフォルトの名無しさんNGNG
>>585
単純なLispの上に複雑なLispを載せるという意味?
0590デフォルトの名無しさんNGNG
つまり、>>585の言う、「LispはLispで書いてある」というのは、
SICPの教科書の第4章みたいな*インタプリタではない*
ということ?
その辺ぼかして書かれると、知らんやつは誤解するぞ。
0591デフォルトの名無しさんNGNG
>>586
Chez SchemeはCadence ResearchのScheme製品。
Sicstus Prologはスゥェーデンコンピュータサイエンス研究所のProlog製品。
どっちもその性能で超有名。シェアもトップ。

…これらを知らないのに偉そうなこと言ってるの???
0592デフォルトの名無しさんNGNG
>実用的な処理系を(低レベルルーチンだけならともかく全体を)
>Cでわざわざ書いたらちょっと…
処理系をインプリする事が目的なら、高速化とか拡張は不要なのでは?
実際に使うために作るのか、処理系を作って勉強してみるのかでは
ずいぶん違うと思うよ。
0593デフォルトの名無しさんNGNG
インタプリタ上でインタプリタを書くのはもっと研究目的だと思うんだが。
研究目的なら手早く書けるほうがいいのでprologはprolog、schemeはschemeで書く。
c/c++やjavaでも性能に目をつぶれば書くのはそんなに難しくはないけどさ。
部分評価器、コンパイラコンパイラあたりで調べてみてください。
0594デフォルトの名無しさんNGNG
>>588
>>588
コンパイラもインタプリタも。

ちょっと想像してみろよ。
Cコンパイラと、デバッグ用のCインタプリタをセットにした製品を売るとする。
これらを両方ともCで書いてバイナリを売るのが、そんなに不思議か?

LispやPrologでも同じ事じゃないか。いったい何を不思議がっているのか…
0595デフォルトの名無しさんNGNG
>>591
別に俺は処理系マニアじゃないんで。
そんな事知らなくても良くない?
ダメ?

sicstus Prologは聞いたことあるけど
あれは作った人の名前なんだ。
日本の会社は日本産の有名なprologを買ってると思うんだけど
そんな事も知らない?
学生かな?
0596デフォルトの名無しさんNGNG
>>592
処理系作成者にとって、高速化や拡張性は重要だと思うけどなー。
0597デフォルトの名無しさんNGNG
Lispをバイナリに落とすのもPrologをバイナリに落とすのも
ソースとインタプリタを一つのファイルに
まとめるだけじゃなかったっけ?
違ったらスマン
0598デフォルトの名無しさんNGNG
>>595
いや、SICSはSweden Institute of Computer Science。研究所の名前。
最初はQuintus互換の高速フリー処理系として広まったが、その後Quintusを
しのぐ製品となった。QuintusはSICSに買収された。
0599デフォルトの名無しさんNGNG
>>597
んなバカな。
0600デフォルトの名無しさんNGNG
>>597
LispやSchemeのコンパイラで関数呼び出しのベンチマーク
(例えばAckerman)とかやると、Cより速いよ。
0601デフォルトの名無しさんNGNG
まとめると結論は2つ
1
Cでインタプリタを作るには
メタインタプリタを作る以上に技術が必要。

2
メタインタプリタも実用的に使える。
0602デフォルトの名無しさんNGNG
日本産の有名なPrologってなによ。まさかKABAとか(w
で、それはCで書いてあるのかい?
0603デフォルトの名無しさんNGNG
>>601
君の顔と同じくらい歪んでるな。
0604デフォルトの名無しさんNGNG
Cよりどれくらい速いの?
データを教えて
0605デフォルトの名無しさんNGNG
>>602
ググレばすぐわかるよ
0606デフォルトの名無しさんNGNG
>>600
つーかそのベンチ試した処理系何?
0607デフォルトの名無しさんNGNG
結論はこうだろ。

1. Cの実用処理系はたいていCで書いてある。Lispの実用処理系はLispで、
 Prologの実用処理系はPrologで書いてある。
2. お勉強のためにLispでCインタプリタを書いたり、CでLispインタプリタを
 書いたりする人もいる。他人が感心してくれるかどうかは疑問。
0608デフォルトの名無しさんNGNG
Scheme→Cトランスレーターを使って
SchemeメタインタプリタをCに変換すると
何ができるの?
0609デフォルトの名無しさんNGNG
http://www.bagley.org/~doug/shootout/bench/ackermann/
http://www.bagley.org/~doug/shootout/bench/fibo/
0610デフォルトの名無しさんNGNG
>>608
Schemeインタプリタだろ?
0611デフォルトの名無しさんNGNG
>>607
1について詳しく書いてあるWEB知ってたら教えて。
0612デフォルトの名無しさんNGNG
神戸大のなんとかって教授がプロローグオタだよね
0613デフォルトの名無しさんNGNG
>>600
そのベンチを試した処理系は何なの?
0614デフォルトの名無しさんNGNG
>>612
最近は線形論理型言語やってるのでは。
0615デフォルトの名無しさんNGNG
>>613
CMUCLとAllegro CLとgcc
マシンはSun Ultra-10
0616デフォルトの名無しさんNGNG
>615
schemeは?
0617デフォルトの名無しさんNGNG
一番はじめのpc用のprologはなにで書いたの?
まさかオブジェクトコード生?そこの話がこんがらがってないですかな。
0618デフォルトの名無しさんNGNG
>>613
Chez Scheme Version 6とgcc 2.95.2。
0619デフォルトの名無しさんNGNG
>>617
聞き飽きた話だが、Cでも同じだろ。
0620デフォルトの名無しさんNGNG
最初のLispはIBM 7040のFortranで書かれた。
Prologは知らん。DEC-10のアセンブラかな?
マルセイユPrologの方が先か。Lispかもね。
0621デフォルトの名無しさんNGNG
>>619
会話になってねーよ。
さっきから頭痛い原因はおまえか。
0622デフォルトの名無しさんNGNG
>>621
いるんだよな。「クロス開発した」っていうと
「最初は?」って聞く厨房(藁
0623デフォルトの名無しさんNGNG
一番はじめのpc用のアセンブラはなにで書いたの?
まさかオブジェクトコード生?そこの話がこんがらがってないですかな。
0624デフォルトの名無しさんNGNG
>>622
なにか悔しいことでもあったんでしゅか?
0625デフォルトの名無しさんNGNG
>>621
わかった。ちゃんと答える。
「Cコンパイラと同様、クロス開発したものと思われ」
0626デフォルトの名無しさんNGNG
printfってけっこう重くなかったっけ?

gccのソース
int main(int argc, char *argv[]) {
int n = ((argc == 2) ? atoi(argv[1]) : 1);

printf("Ack(3,%d): %d\n", n, Ack(3, n));
/* sleep long enough so we can measure memory usage */
sleep(1);
return(0);
}
0627デフォルトの名無しさんNGNG
>>626
でも、せいぜい数マイクロ秒でしょ。
0628デフォルトの名無しさんNGNG
なんかすっきりしないんだけど
gnu prologはC言語で書いてあるし、
prologで書かれたprologなんて無くない?

lispでかかれたlispってどれ?
実用的なものを除けば、ほとんどCで書かれてそうだけど。
0629デフォルトの名無しさんNGNG
>>626
それ言ったらformatだって遅いんでは。
つーかあのベンチ自体あんまり信用できないんだけど。
0630デフォルトの名無しさんNGNG
そのベンチってコンパイルの時間込みって事はないよね・・・・
logって所を押すと・・・
0631デフォルトの名無しさんNGNG
CMLCLもCだよね?
LISPコンパイラはLISPで書かれてるけど。
0632デフォルトの名無しさんNGNG
>LISPコンパイラはLISPで書かれてるけど。
ホームページがあればお願いします
0633デフォルトの名無しさんNGNG
なんかメタインタプリタしか作れない奴の言い訳が
たくさん書かれている。
0634631NGNG
>632
これね。
http://www.cons.org/cmucl/
0635デフォルトの名無しさんNGNG
>lispでかかれたlispってどれ?
>>585
0636デフォルトの名無しさんNGNG
http://www.jah.ne.jp/~naoyuki/Writings/Writings.html
schemeの作り方だよーん。
メタインタプリタを作るのが簡単なのは、
perlで正規表現が簡単に使えるのと同じ。
正規表現のモジュールを使える事と、
正規表現のモジュールを作れる事は違います!!
0637デフォルトの名無しさんNGNG
線形論理型言語ってやたら難しそうな響きの言語だね。
0638デフォルトの名無しさんNGNG
だからメタインタプリタってのはちがうっつーに…
0639デフォルトの名無しさんNGNG
>>634
ftp://ftp.averillpark.net/cmucl/src/lisp/
C言語で作られてるみたいだけど・・・
0640デフォルトの名無しさんNGNG
>>638
解説よろしこ
0641デフォルトの名無しさんNGNG
「Cが速い」っていうバイアスがかかってるやつが
多いな。
0642デフォルトの名無しさんNGNG
lispでインタプリタ作ってわかった気になってるバカ死ね
0643631NGNG
>>639
ちゃんと>>631とソース読んでね。
0644デフォルトの名無しさんNGNG
Lispで作られてる実用的なLisp求む
0645デフォルトの名無しさんNGNG
>>636
そのschemeは末尾再帰展開しない上にやたら遅い。
学習には不向き。
0646デフォルトの名無しさんNGNG
Spice Lispは?
0647デフォルトの名無しさんNGNG
LarcenyもOrbitもSchemeで書いてあるよね。
0648デフォルトの名無しさんNGNG
>>647
LarcenyはランタイムがCだと思ったけど。
0649デフォルトの名無しさんNGNG
ランタイムはまあしょうがないよな。
Unixで走らせるなら。
0650デフォルトの名無しさんNGNG
>Orbit
非実用的だけどね
0651デフォルトの名無しさんNGNG
Tは?
0652デフォルトの名無しさんNGNG
なんでこんな時間に盛り上がる?
0653デフォルトの名無しさんNGNG
Tってもう誰もメンテしてないよね?
公開されてる分については。
0654デフォルトの名無しさんNGNG
ちなみにYale大学のT-Schemeのことだよね?
あれは何から何まで全部scheme。
ブートストラップにscheme自身が必要だったかと。
0655デフォルトの名無しさんNGNG
SBCLもCMUCLからブートストラップ。
0656デフォルトの名無しさんNGNG
Larcenyも、コンパイラやインタプリタは全部Schemeだね。
0657デフォルトの名無しさんNGNG
S-1 というスーパーコンピュータ上のCommon Lispは、
bignum演算からgcまで全部Lispで書いてあった。
0658655NGNG
SBCLはランタイムがCだった。スマソ。
0659デフォルトの名無しさんNGNG
レイジーエバリュエーションってなんでつか?得意な言語とかあるんでつか?
素人まるだちでついまちえん
0660デフォルトの名無しさんNGNG
怠け者評価
0661デフォルトの名無しさんNGNG
>>659
多少スレ違いの気もするが、マジレスすると、
関数の実引数を、値が本当に必要になるまで
評価しない方式のこと。

詳しくはHaskellスレか関数型言語スレで聞こう。
0662デフォルトの名無しさんNGNG
d-listは遅延評価と関係ありますか?
0663デフォルトの名無しさんNGNG
prologで延滞評価はできないの?
0664デフォルトの名無しさんNGNG
「評価」ってのは関数言語の概念だから、
ぴったり当てはまるものはないんじゃないの。

似たものとしては、制約プログラミングとか?
0665デフォルトの名無しさんNGNG
>Larcenyも、コンパイラやインタプリタは全部Schemeだね。
http://www.ccs.neu.edu/home/will/Larceny/
本当だ。
Chezの上に作ってるね。
それはそうと、メタインタプリタを作る事と
インタプリタを作る事の違いが誰もわかってないみたいなので
解説する。

極端な事を言えば、メタインタプリタを作るという事は
インタプリタのソースコードが提供されていて
そのソースコードを利用してインタプリタを作る事と等価である。
prologでprologを作るというのは
3行でmainルーチンが書けてしまうようなライブラリを使って
作っているだけに過ぎない。

一方プログラムを作る一番原始的な方法は
アセンブラで書くことだけれど、
実際にはプログラミング言語を使う。
それはコードの見易さと言語に実装されている機能があるから。
あるプログラミング言語Aでプログラミング言語Bを実装するには
BにはあってAにはない言語機能を実装する事になる。
GCのある言語を使えば、GCのある別の言語を実装するのに
GCを実装する必要はない。
しかし、GCの無い言語を使う場合、必ずGCを実装しなくてはならない。
0666デフォルトの名無しさんNGNG
prologでprologを作るのは
本当にprologを作った事になるのか?
この答えは微妙である。
あるプログラムを作ったとしよう。
99%が他人の作ったライブラリーを使っている時
それを自分で作ったと言い切れるか?
ブラウザを作るのは簡単と言っているVB厨を認めるか?

個人的な意見を書けば、prologでprologを書く事に意味はないので
(有益な機能を追加したprologを作る事には意味がある)
prologを作るというのは、prologの持つ言語機能を
実装する事を指すと思う。
しかしながらアセンブラでやれとは言わない。
なぜなら、プログラミングにライブラリーはつき物だから。
でも、スタックを実装するのにVectorを使うバカはいないよね?
prolog「特有」の言語機能を持たない言語で作る事
が普通だと思う。
そうする事には意味があって、
例えばC言語でGCを実装すれば
C言語でGCが使いたい時はそれを使う事ができる。

prologでprologを作るのは
perlで正規表現モジュールを作るのと同じくらいバカげた事である。
0667デフォルトの名無しさんNGNG
最後に
メタインタプリタをネイティブコンパイラ
(あるいはトランスレーター)でコンパイルすると
何が出てくるか?
という質問があったけれど、適切な答えが無かったので。

答えはインタプリタ(コンパイラも同じ?)を作った事のある人間なら簡単。
インタプリタの実行過程を考えると、
ソースコードをまず内部表現に置き換えるわけだ。
内部表現はC++ならクラスとかに切り分けて表現されるのだけれど。
トランスレーターはそのインスタンスを実際に作った物
コンパイラはそのトランスレーターで出したコードを
コンパイルした物とほとんど変わらない。

つまり、コンパイルしても起動速度以外は
速くならない・・・理論的には。

以上
prologをlispに置き換えてもらっても同じです。
0668デフォルトの名無しさんNGNG
prologをVBでつくってうp希望
0669デフォルトの名無しさんNGNG
>>665-667
ただのアフォ?

それはそうと、メタインタプリタを作る事と
インタプリタを作る事の違いが誰もわかってないみたいなので
解説する。

>極端な事を言えば、メタインタプリタを作るという事は
>インタプリタのソースコードが提供されていて
>そのソースコードを利用してインタプリタを作る事と等価である。
>prologでprologを作るというのは
>3行でmainルーチンが書けてしまうようなライブラリを使って
>作っているだけに過ぎない。
Prologで「ちゃんとした」Prologインタプリタだって書けるが。

>個人的な意見を書けば、prologでprologを書く事に意味はないので
>(有益な機能を追加したprologを作る事には意味がある)
じゃあ、CでCを書くことにも意味は無いわけだ。何で書くの?

>メタインタプリタをネイティブコンパイラ
>(あるいはトランスレーター)でコンパイルすると
>何が出てくるか?
>という質問があったけれど、適切な答えが無かったので
>>608-610 のこと?答出てるじゃんか。

>つまり、コンパイルしても起動速度以外は
>速くならない・・・理論的には。
何と比べてるんだろ。
普通、インタプリタはコンパイルしてから実行するもんだが。
0670デフォルトの名無しさんNGNG
「PrologでPrologを書く」というのが理解できない香具師らは、
「CでCを書く」のも理解できないのか?

Cの処理系だって、(setjmpやva_argsなど)Cでは書けない部分が
たくさんあって、一部はインラインアセンブラ等でかかれている
わけだが、そうすると「Cで書いたとは呼べない」とか?
0671デフォルトの名無しさんNGNG
コンパイラ=ネイティブコンパイラだと思われ
0672デフォルトの名無しさんNGNG
>Cの処理系だって、(setjmpやva_argsなど)Cでは書けない部分が
>たくさんあって
動作を実現するだけならできると思うよ。
できないと思うオペレーションがあったら書いてみて。
0673デフォルトの名無しさんNGNG
>Prologで「ちゃんとした」Prologインタプリタだって書けるが。
「ちゃんとした」って何?
C言語で書くなら
soloveとcloseを実装するだけだけど
C言語のスタックだと解探索の途中で結果を見る事ができないから
自分でスタックを作らないと厳しいのかな。
VMクラスが提供されてるなら
vm.setGoal(clause);
vm.solve();
で終わりだけどねw
prologのソースはたくさん落ちてるから
それを使えば簡単。
Prologを使ってPrologを作るってのは
VMクラスを使ってPrologを作る事と大差ないな・・・

CでCを書くことにどんな意味があるんだろう・・・
0674672NGNG
なんかわかりにくい日本語だ。
C言語のインタプリタならC言語で作れると思うけど。
Cコンパイラの事を指してるなら、
機械語を生成するプログラムだから
また話は別だと思うよ。
コンパイラが作れれば、ソースコードをコンパイルして実行する
という過程を経てインタープリタができるという人もいるかもしれないけど
実はCPUっていうVMにあたる物を利用してるわけでして。
だから、コンパイラが作れればインタープリタが作れるというのは
ちょっと違う気がする。

それうじゃないとしても、
インタープリタとコンパイラを区別して
話を進めても問題ないよね。

ところで、C++のインタープリタって作れる人いる?
俺はたぶん無理だ。
0675引き篭もりNGNG
> prologでprologを作るのは
> 本当にprologを作った事になるのか?

PerlでPerl処理系を作ったら本当にPerl処理系を作ったことになるのか?


> ところで、C++のインタープリタって作れる人いる?

今は作れないけどちょびっとずつ努力はしている。
0676デフォルトの名無しさんNGNG
>PerlでPerl処理系を作ったら本当にPerl処理系を作ったことになるのか?

1.PerlでPerlコンパイラを書き、
2.それを使って「Perlで書いたPerlインタプリタ」をコンパイルし、
3.Perlインタプリタのバイナリが得られた。
としたら、そりゃ「本当にPerlを作った」としか言いようが無いだろ。
CもPrologも同じ。SICStusはそうやって作られている。
0677デフォルトの名無しさんNGNG
メタとかリフレクションとか、よく知らない用語を振り回す前に
問題を整理しろよ。

・PrologでPrologコンパイラは書けるか?
もちろん書けるよな。
・PrologでPrologインタプリタは書けるか?
もちろん書けるよな。
・「Prologで書いたPrologインタプリタ」をコンパイルしたものは、実用的か?
実際、代表的な処理系がそうやって作られているよな。
・「PrologでPrologインタプリタを書く」のは、Cで書くより楽か?
楽だよな。
・実用プログラムを書くとき、より楽な方法で書くのは悪いことか?
お勉強とか実力を示すとかの目的じゃなくて、できあがったプログラムが欲しい
だけなら、より楽な方法で書くほうが良いに決まってるわな。

…で、何が問題なんだっけ?
0678デフォルトの名無しさんNGNG
Squeak は Smalltalk -> C のトランスレータと処理系を Smalltalk で書いて、
C のコードをコンパイルしているらしいね。

>>676
Perl で Perl コンパイラを書くってのが怠そうだけど、C で書くよりも Perl
で書いた方が書き易いのかは気になる所。Scheme で Scheme コンパイラ書く
のは書き易いの?
0679デフォルトの名無しさんNGNG
PerlでPerlコンパイラか…
パーザを手で書くならCより楽だろうな。
でもCにはyaccがあるし。Perlを吐くパーザジェネレータってあったっけ?
パーザ以降の段階は、Perl5ならCより楽だろう。メモリ管理とか気を使わないで良いし。

SchemeでScehemコンパイラを書くのは激楽だよ。つか、インタプリタはともかく、
コンパイラはどの処理系もほとんどSchemeで書いてあるんでは?
いわゆる「パーザ」の部分は単に(read)と書くだけだし、
マクロ展開→最適化→コード生成まで、すべてリスト処理だからな。
0680デフォルトの名無しさんNGNG
>…で、何が問題なんだっけ?
PrologでPrologを作るのと
CでPrologを作る事の本質的な違い。

Prologには既にバックトラックが実装されているから
PrologでPrologを作るのにはバックトラックを実装する必要はない。

C言語にはバックトラックが実装されていないから
C言語でPrologを作るのにバックトラックを実装する必要がある。

以降同様に、データ表現になどについて同じことが言える。

ただし、C言語にバックトラックや、データ表現などに関するライブラリがある場合
C言語でPrologは3行で書ける。
solve(Goal goal,Argument arg){
prolog_solve(goal,arg);
}
結果はフックである関数が呼び出されてそこで処理する。

この事から
PrologでPrologを作る事は
ライブラリを利用しているだけにすぎない。

という事が過去ログに書いてあったよ。
0681デフォルトの名無しさんNGNG
>SchemeでScehemコンパイラを書くのは激楽だよ。
これは自分でマシン語を生成するんですか?
という事は、CPU(機械語)の知識がないと作れない?
それともマシン語生成ライブラリみたいなのが
Schemeについているから、CPUの知識は不要?
わかる人いたら教えてください。
0682デフォルトの名無しさんNGNG
あげ
0683デフォルトの名無しさんNGNG
コンパイラを書くにはCPUを知らなきゃならなくて
それが一番大変だと思うんだが。
パーサーなんてコンパイラコンパイラ使えばいいし。
0684デフォルトの名無しさんNGNG
>Prologには既にバックトラックが実装されているから
>PrologでPrologを作るのにはバックトラックを実装する必要はない。

「PrologでPrologインタプリタを書く」時についてはそのとおり。
だから、わざわざCで書くのは馬鹿馬鹿しいだけだよね。
コンパイラを書くときには(いったんWAMなどに落として)バックトラックを
実装するコードを出す。出すコードは何で実装しても同じ。

>>681
当然CPUの知識は必要。機械語じゃなくてアセンブリ言語でたいてい
間に合うけど。(CISCでコードサイズを最小化するなら、機械語が何バイト
になるか気にする必要がある。) ただ、出すコードについては何で
書こうと基本的に変わらない。Schemeのソースプログラムを操作したり、
中間表現を最適化したり、アセンブリ言語レベルでピープホール最適化を
したりするのが、CでやるよりSchemeでやったほうが楽。
0685デフォルトの名無しさんNGNG
>バックトラックを実装するコードを出す。
これはどういう意味?
WAMそのもの?
0686デフォルトの名無しさんNGNG
JavaでPrologインタプリタを作った。
次はPrologコンパイラに挑戦しよう。
0687デフォルトの名無しさんNGNG
>インタプリタを作った人
test(A,A).
test1(A,B):-not(A=B),test(A,B).
こういうのをバックトラックするとき
データ構造はどうしてますか?
0688デフォルトの名無しさんNGNG
Prologコンパイラって単独で実行できる
(WindowsでいうとEXEファイルのような)
ファイル出力できます?

Prologコンパイラの出力って単独で実行できないけど
インタプリタより速度が速い中間言語みたいのを
指すんですよね?(間違っていたらすいません)
0689デフォルトの名無しさんNGNG
prologネイティブコンパイラは実行ファイルを出す。
中間言語にコンパイルするものもある。
0690デフォルトの名無しさんNGNG
さらに質問
test(A,A).
test1(A,B):-not(test(A,B)),A=1,B=1.
とあった時

test1(A,B).
とするとNOと返ってきますが、
これはどういう風に考えればいいのですか?
0691デフォルトの名無しさんNGNG
高階のnotは標準Prologにない特殊な拡張。
Prologがきちんと扱えるのは1階述語論理だけ。
0692デフォルトの名無しさんNGNG
>>687
「こういう」も何も、Prologランタイムのデータ構造といったら、
global, local, trail, controlの4本のスタックでしょ。あとヒープ。

>>691
test(A,B)が成功した瞬間にnot(test(A,B))はfailするよね。
0693デフォルトの名無しさんNGNG
global stack=heapじゃなかったっけ?
どっかに詳しい資料ないかな・・・
0694デフォルトの名無しさんNGNG
>>693
structureは確かにglobal stackに割り付けられるが、
atomやfunctorはヒープに割り付けられる。
0695デフォルトの名無しさんNGNG
prologの実装ってなんか難しそうだな。
0696デフォルトの名無しさんNGNG
効率よい実装はそれなりに難しい。
どんな言語でも。
0697デフォルトの名無しさんNGNG
(((;゚Д゚)))ここは本当にPrologでマターリスレか?ハァハァ
0698デフォルトの名無しさんNGNG
論理プログラミングって、いまいち概要が掴めないんだが、
どんな方向に逝ってるの?
0699デフォルトの名無しさんNGNG
prologで殺伐スレです
0700デフォルトの名無しさんNGNG
fib(30,X).
X = 832040
はできるのわかるけど、

fib(X,832040).
X = 30
ってできるの?
0701デフォルトの名無しさんNGNG
>>700
それはおそらく制約論理プログラミングの領域だと思う
0702誰かNGNG
Prologインタプリタを作ってつまづいてるのですが、
ソースコードを見てアドバイスをしてくれる神はいますか?
0703デフォルトの名無しさんNGNG
0=0, 1=s(0), 2=s(s(0)),... とかいう表現形式にして
add(X, 0, X).
add(X, s(Y), s(Z)) :- add(X, Y, Z).
fib(0, s(0)).
fib(s(0), s(0)).
fib(s(s(X)), W) :- fib(X, Y), fib(s(X), Z), add(Y, Z, W).
とかやればできるかもしれない。
832040の表現が大変だけど。
0704702NGNG
あきらめました。
凡人には無理でした。
バックトラックする時、どこまで探索したかを記録するのを
忘れていました。
0705デフォルトの名無しさんNGNG
prologなどの実業務への適用って、ちゃんとあるんですね

http://www.ifcomputer.com/News/SpectaclesDesign/home_jp.html
http://www.ifcomputer.com/News/NikkeiAward/home_jp.html
0706デフォルトの名無しさんNGNG
>>702,704
バックトラックを実装するのは自分でも言ってるとおり
どこまで探索したかを保持しておけばいいんで別に難しくないが。
カットがあると多少めんどくさいけど。
0707704NGNG
>>706
そうかなー。
保持しておいて、再開する時どうすればいいのかとか
よくわからんです。
もしよければ、単純な物の概要みたいなのをソースコード風な表現で
書いてもらえるとうれしいのですが。

あとは引数の受け渡しがよくわかりません。
a(A,B):-b(A,C),c(C,B).
b(A,C):-A=C
とすると
必要な変数は
ABCとなるのはわかるんですが
b(A,C)が実行された後
どういうやりとりを行えばいいのかよくわかりません。
つまりA=Cというデータを渡すにはどうすればいいのでしょうか?
0708デフォルトの名無しさんNGNG
http://japan.pinkserver.com/under/index.html
勝手に他人のサイトを直リンク!!
「法的根拠はない!!」
「だから直リンしてます」
ハァ?
ネチケットも守れない痛い厨のサイト晒し
0709デフォルトの名無しさんNGNG
pinkserverってアダルトサイトじゃなかったっけ? 宣伝か?
0710デフォルトの名無しさんNGNG
age
0711デフォルトの名無しさんNGNG
>>707
[A/C]という単一化のデータでいいのでは?
0712デフォルトの名無しさんNGNG
すごい短絡的だねw
0713711NGNG
>>712
俺に言ってる?何か間違ってること言った?
0714デフォルトの名無しさんNGNG
f(A,B,X):-A=B,!,X=equal.
f(_,_,notequal).
これと
f(A,B,equal):-A=B,!.
f(_,_,notequal).
は同じですか?教えてください!
0715名無しさん@XEmacsNGNG
>>714
> は同じですか?教えてください!

同じじゃないでつ。
0716デフォルトの名無しさんNGNG
具体的な答えが書ける奴っていないねw
0717デフォルトの名無しさんNGNG
上は ?- f(1,1,notequal). で no となるが、
下は yes となる。
0718デフォルトの名無しさんNGNG
f(A,B,equal):-A=B,!.
f(_,_,notequal).

これのカットは不要でしょ
0719デフォルトの名無しさんNGNG
>>718
いると思う。?- f(1,1,R). でセミコロンを入れて、別解を求めると
R = notequal のほうも答えで出てきてしまう。
f(A,B,equal) :- A=B.
f(A,B,notequal) :- \+ A=B.
ならカットなしでOK。ちなみに \+ は not の意味
0720デフォルトの名無しさんNGNG
>>719
なるほど
0721デフォルトの名無しさんNGNG
not(A=B)
って、単一化のときどうなってるんだろ。
ある程度有効なんだけど。
このへんがわかってないで、prolog組んでるのは
使える便利な機能があるのに
使ってないような気分になっていや。
0722デフォルトの名無しさんNGNG
>>721
not(A=B) は、A=B に失敗したというだけの意味なので、
論理的には正しくです。たとえば
?- A=1, B=2, not(A=B). は成功するけど
?- not(A=B), A=1, B=2. は失敗してしまう。
SICStus Prolog の dif(A,B) を使えば、AとBが異なることを
論理的に正しく表現できます。
0723デフォルトの名無しさんNGNG
722 の修正
> 論理的には正しくです。たとえば
論理的には正しくないです。たとえば
0724デフォルトの名無しさんNGNG
なんでdif/2を使えば上手くできるの?
0725722NGNG
>>724
dif(A,B) は,一種の遅延評価で実現されてて,
A, Bの中身が決まるまでは,実行がブロックされてます.
だから ?- dif(A,B), A=1, B=2. でもOK!
ただし,SWI PrologやGNU Prologでは使えないと思う.
0726デフォルトの名無しさんNGNG
そうそう
なんでprologって遅延評価を積極的にとりいれないんだろうね?
基本的には
節の前後を入れ替える事には問題がないはずなのに。
0727デフォルトの名無しさんNGNG
節に順序があると非単調推論に拡張しやすいからとか
0728デフォルトの名無しさんNGNG
>>726
うーん、Prologという言語では、節の前後関係は非常に重要で、入れ替えは困難では。
節の前後関係を意識しないでPrologでプログラミングできる局面は限られると思うな。
それで論理型言語を標榜するのはおこがましいという批判はあるかもしれないけどさ。

例えばカットの入れ方なんて、節の前後関係と強く癒着してしまってるでしょ?

Prologに遅延評価を入れたら、...
えーと、ここで例えばリスト操作で困る具体例を挙げようとしたんだけど、うぅ思いつかない。
ということは愛着や気分だけで遅延評価を嫌ってるんか?(w >俺
0729デフォルトの名無しさんNGNG
確かにカットはまずいんだけど、
カットはなくても大丈夫?なはずだから。
0730デフォルトの名無しさんNGNG
素人です。
CやPascalのコンパイラのように単独で実行できるファイルが生成できる
Prologはありますか?
本来、Prologではそのようなコンパイルには不向きですか?
0731デフォルトの名無しさんNGNG
Prologで実行ファイルって、、、
0732デフォルトの名無しさんNGNG
>>730-731
昔ボーランドが出してた Turbo Prolog は確かコンパイラ付きで
実行ファイルが生成できたが、
かなり方言のきつい処理系だった様な思い出が…。

今手に入る処理系でも探せば結構ある。
ttp://kaminari.scitec.kobe-u.ac.jp/logic/lp.html
0733デフォルトの名無しさんNGNG
ダブルクリックすれば実行できるものがほとんどだけど
それじゃダメなのかな?
インタプリタは実行ファイルだし。
0734デフォルトの名無しさんNGNG
>>732
>昔ボーランドが出してた Turbo Prolog は確かコンパイラ付きで
興味深いお話ですね。今もあれば見てみたいところです。
>今手に入る処理系でも探せば結構ある。
ありがとうございます。
見たところProlog to Cという形で変換してからコンパイルすれば
希望が達成できそうです。
ただ、Prolog to Cが出来るのに直接Prologからコンパイルは
無いんですかね?
(Prolog to Cでも出来ると分かっただけでも収穫です。)

以前K-Prologがコンパイルできると聞いて試してみると
単独で実行できなくてがっかりしました。
(これはこれで、デバッグがすんだプログラムを高速化できて
評価できるものでしたが‥‥)
0735デフォルトの名無しさんNGNG
>> 734
> 以前K-Prologがコンパイルできると聞いて試してみると
> 単独で実行できなくてがっかりしました。

dllかsoが必要だから単独では実行できないという話ですか?

> ただ、Prolog to Cが出来るのに直接Prologからコンパイルは
> 無いんですかね?
>(Prolog to Cでも出来ると分かっただけでも収穫です。)

Cにしておくと移植コストがかからないので、楽なんじゃないでしょうか。
K-Prologの中間コードはほとんどマクロみたいだから、中身を機械語に
なおせばできるかも??
0736デフォルトの名無しさんNGNG
なんかまたメタインタプリタの話がぶり返してきそうな。
Prologってのはバックトラックみたいなのが言語に組み込まれているというか
それを前提にプロログソースコードを書くわけだ。

コンパイルって言ってるのは、機械語へのコンパイルの事を指している
と思うのだが、
結局、機械語へコンパイルしても
プロログのソースコードを処理するコード+誰かが書いたプロログソースコードの
内部表現
という形になるだけなんだよ。

Prolog to Cも同じ。
結局のところ出力された機械語を最適化できないので、
ネイティブコンパイラの存在にはあまり意味がない。
(機械語の最適化なんてできないだろうけど)
って、そういう意味じゃないのかな?

>希望が達成できそうです。
つーか、何を希望しているのかよくわからない。

配布する時の事を考えているのなら、
インタプリタとソースコードをセットで配布すれば
いいのでは?
windowsならバッチファイルを使うなりすればいいと思うけど。
0737デフォルトの名無しさんNGNG
>736
>なんかまたメタインタプリタの話がぶり返してきそうな。

お前が話したいだけじゃないのか?
わざわざageやがって
0738デフォルトの名無しさんNGNG
>>736
ちょっとわからないのですが
> 結局、機械語へコンパイルしても
> プロログのソースコードを処理するコード+
> 誰かが書いたプロログソースコードの
> 内部表現
内部表現って機械語のことですか?

機械語って最適化できないのでしょうか?
WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
思うのですが..
0739デフォルトの名無しさんNGNG
>>738
>WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
大変興味深いお話です。
このような情報はありがたいです。

>735
>K-Prologの中間コードはほとんどマクロみたいだから、中身を機械語に
>なおせばできるかも??
これもWAMから機械語という内容が理解できれば
筋道が見えてきそうですね。

>>736
>プロログのソースコードを処理するコード+誰かが書いたプロログソースコードの
>内部表現
>という形になるだけなんだよ。
これは残念な情報です。私もこれを危惧しています。
>Prologってのはバックトラックみたいなのが言語に組み込まれているというか
>それを前提にプロログソースコードを書くわけだ。
バックトラックも含めてPrologをコンパイルするには何らかの工夫なくしては
実現不可能な動作がいくつかあるようでそれらを扱っていそうな研究も
”かつてずいぶんあった[738]”ということですのでこれらの研究と
その実装結果に興味があります。特に実装結果に(^^;
0740デフォルトの名無しさんNGNG
>>739
何をしたいのかが良くわからないから、
目的をはっきり書いてもらった方がいいかも。

俺が想像しているのは、
インタプリタにprologのソースコードを食わせるのと
コンパイラでprologのソースコードをマシン語にしたものを実行するのでは
処理内容が違うのでは?
という事を言っている気がするけど、
同じだよ。
処理の仕方が全然違うようなアルゴリズムを見つけられたら神なんだけど、
でも、コンパイラで実装できるものはインタプリタでもできるし
その逆も成り立つ。

>内部表現って機械語のことですか?
内部表現っていうのは、
例えば
述語や、節(WAMではTerm)は
あるデータフォーマット(構造体、クラス)として
記録されるわけだけど。
機械語じゃなくて、メモリへどういう形で配置するかという事。

>WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
言ってる事が良くわからないけど、
WAMをベースとしたインタプリタの高速化の研究は当然合ったと思うけど
WAMが処理する中間言語を機械語へどうマッピングするかなんて
工夫しようがないけど。
0741デフォルトの名無しさんNGNG
もう少し書いてみると、
バックトラックという言葉からもなんとなく予想できるけど、
prologのソースコードの中に定義された述語が
木を構成する事は理解できるだろうか?
すなわち、prologのソースコードを書くことは
木を定義する事とほぼ見て取れる。
あとは、その探索をインタプリタがするだけ。

でも、一方で
C言語のような直線的?なプログラムを書いているような気分で
プログラムできる事も間違いなくて、
だから、そういうプログラムに対して無駄な
バックトラックを省いた(というよりもバックトラックしない)
機械語が生成できるような気がしてしまうのもわかる気がする。
でも、そうやって作った直線的なプログラムは
バックトラックのコストは小さかったりする。
すなわち、木の高さは高くても、ノード数が少ない。
0742デフォルトの名無しさんNGNG
>>740 >>741
本当にWAMの勉強したことあるの?

> 内部表現っていうのは、
> 例えば
> 述語や、節(WAMではTerm)は
> あるデータフォーマット(構造体、クラス)として
> 記録されるわけだけど。

WAMでは、述語や節は、WAM機械語命令の列にコンパイルされるよ。
データとして記録はされないです。
0743デフォルトの名無しさんNGNG
WAMの教科書のサイト
ttp://www.vanx.org/archive/wam/wam.html

下のコンパイル例を見れば明らかなように
述語や節はWAMの命令列にコンパイルされる

appendのコンパイルの例 (上記教科書の82ページ)

append/3 : switch_on_term C1a,C1,C2,fail
C1a : try_me_else C2a
C1 : get_constant [],A1
get_value A2,A3
proceed
C2a : trust_me
get_list A1
unify_variable X4
unify_variable A1
get_list A3
unify_value X4
unify_variable A3
execute append/3

0744740&741&....NGNG
>>742
俺はあまりWAMについてよく知らないけど。
資料だけはPCにあるよ(そのうち読んでみようとは思うけど)
その資料によると、Termは
クエリーを受けて、ヒープに作られるって書いてあるけど。
Figure2.1を見てくれた方がいいかと。
内部表現=内部representation
内部って何?internal?

ところで、WAMを勉強する意味って何?

>WAMでは、述語や節は、WAM機械語命令の列にコンパイルされるよ。
>データとして記録はされないです。
正直これを見た感想としては、インタプリタの内部構造について
何も知らないんだなーと。
間違ってたらスマソ。
まあ、そうであれば自分でWAMベースのインタプリタを実装してみるといいよ。
本当はWAMなんて参考にしないで、0から自分で考えるといいと思うけど。
0745デフォルトの名無しさんNGNG
WAMってなんですか?
ラストクリトリスですか?
0746デフォルトの名無しさんNGNG
warren's abstract machine
JAVAで言うVM
0747デフォルトの名無しさんNGNG
>> 744
>>WAMでは、述語や節は、WAM機械語命令の列にコンパイルされるよ。
>>データとして記録はされないです。
>正直これを見た感想としては、インタプリタの内部構造について
>何も知らないんだなーと。
>間違ってたらスマソ。

多分、744の方のPrologインタプリタ・コンパイラへの見方が狭いんじゃないかと
思います。どういう内部構造を仮定しているのでしょうか?

>>740
> WAMが処理する中間言語を機械語へどうマッピングするかなんて
> 工夫しようがないけど。
WAMについては良くご存知なのですか?
0748デフォルトの名無しさんNGNG
>どういう内部構造を仮定しているのでしょうか?
へ?
何が知りたいのかすらよくわからん。
バックトラック以外になんかあるの?
clauseとsolveの実装の仕方を聞いているの?w
どのあたりの見方が狭いのか指摘してもらえると、
参考になるんだけどな。
漠然と「狭い」って言われても、何の事を言ってるのか
よくわからん。

>WAMについては良くご存知なのですか?
そりゃ、WAMがどうこうじゃなくて中間言語の話。
逆に聞くけど、中間言語の機械語へのマッピングでどこを工夫できるの?
WAMについてよく知ってるか?っていう問いだけど
「知ってる」の意味にはいろいろあるからね。
インストラクションを覚えてたりとかはしないことは確か。
でも、資料に目を通して概要を把握している事も確か。
自分でインタプリタを作ってれば、考えている事が
似ている事も確か。

つーか、今気づいたけど、
743見てなかったよ。
資料ってそれくらいしかないよね。
そのPDFを読めばWAMについて全てがわかると思う。
図2.1って言ったのも、そのPDFの図2.1ね。
まあ、補足する必要はないと思うけど念のため。
0749初心者NGNG
ハイレベルな議論が繰り広げられているスレはここでつか?(((;゚Д゚)))ガクガク
サパリワカラン!(・∀・)
0750初心者2NGNG
>>749
俺もわからん。安心しる
0751デフォルトの名無しさんNGNG
>>750
絶望しますた。
0752デフォルトの名無しさんNGNG
レベルとかじゃなくて、
興味あるかないか
あるいは、知っているかいないかの問題だと思うけどね。
WAMについては、
http://www.vanx.org/archive/wam/wam.html
のPDFを読めばいいんだけど
英語という壁がね。
その前に、prologという言語について知る必要があるし。
0753デフォルトの名無しさんNGNG
3〜4年前のことです。
Prolog使いの方から。
Prologでプロトタイプを組んでうまくいったら
他の言語で書き直すといいというお話を伺ったことがあります。
ただあいまいな記憶で何か前提条件とか特定の場合を指していた
ような記憶があるのですが思い出せません。
そのときは、ただ納得していました。
もし、Prolog使いの方とかなんとなくわかる方がいらっしゃれば
「Prologで組んでから他の言語で」という方法が良い場合を
書き込んでいただけませんか?

余談ですが、
そのProlog使いの方は、Prologでは長い(大きい)プログラムを
いくつか構築していましたが、それらは他の言語に移植されておらず、
その方のプログラムの中では割と短い(小さい)プログラムしか
他の言語で書き直していないようでした。
(長いとか短いとか主観的な表現ですいません。)
0754デフォルトの名無しさんNGNG
俺は思いつかないかも。
でも、JAVAじゃなくてPROLOGを使いたいケースなら
思いつくけど。
やっぱり、普通(普通の意味は置いといて)のプログラムは
C++とかJAVAで書きたい。

話の途中で悪いけど
オブジェクト指向のPrologって知ってる?
どう思う?

どこかにホームページがあったので探してきます。
0755デフォルトの名無しさんNGNG
http://www.geocities.co.jp/SiliconValley-PaloAlto/1037/technical.html
これだ。
なんか途中で読むの挫折した。
0756デフォルトの名無しさんNGNG
オブジェクト指向PrologってCLOSみたいな感じ?
適当なこと言ってないで755読めって?ごもっとも。
0757デフォルトの名無しさんNGNG
> つーか、今気づいたけど、
> 743見てなかったよ。
> 資料ってそれくらいしかないよね。
> そのPDFを読めばWAMについて全てがわかると思う。
> 図2.1って言ったのも、そのPDFの図2.1ね。
> まあ、補足する必要はないと思うけど念のため。

740, 741 がコンパイラとインタプリタを混同して,
とんちんかんな発言を繰り返している理由がわかった.

図2.1は,本当のWAMコンパイラを説明している図では
ありません.ちゃんと5章まで読んでちょーだい.

繰り返しになるがもう一度.JavaがJVMの命令にコンパイル
されるように,PrologはWAMの命令にコンパイルされる.
述語や節の内部形式(木構造)は保持されていない.

0758デフォルトの名無しさんNGNG
>述語や節の内部形式(木構造)は保持されていない.
どういう意味?
内部形式って何?
述語が複数の節から構成されている事を木構造と呼んでるの?

で、話の流れが良くわからなくなったので
もう一度振り返ると
俺が「内部表現」という発言をして
「WAMには内部表現はない」という主張をしているんだと思うんだけど
Prologのソース=述語の定義
がいったん中間言語にコンパイルされるのはいいけど、
それをWAMインタプリタが読み込んだときにWAMインタプリタがどういう風に
それをメモリに配置するかの事を内部表現というわけだ。
つまりインタプリタに入ってくるデータは述語の定義なの。
内部表現は、述語が中間言語でどう表現されていようが
関係ないことはわかったかな?
図2.1はメモリ空間を表現してるんだよね(たぶん)

>プロログのソースコードを処理するコード+誰かが書いたプロログソースコードの
>内部表現
そういうわけで、これの意味がわかってくれたかな?
もしわからないなら、自分でProlog/Cトランスレーターを作れば
意味がわかるよ。
0759デフォルトの名無しさんNGNG
内部構造とやらを図にして説明してくれ。
さっぱりわからん
0760デフォルトの名無しさんNGNG
>>758

740 で
> 述語や、節(WAMではTerm)は
> あるデータフォーマット(構造体、クラス)として
> 記録されるわけだけど。
って書いてるのがウソだと主張しています.
たとえばappend/3は,743のようにコンパイルされるわけで
マシン語やJVMと同じく,単なるビット列です.

> もしわからないなら、自分でProlog/Cトランスレーターを作れば
> 意味がわかるよ。
Prologインタプリタも,WAMへのコンパイラも,Cへのトランスレータも
作ったことあるので,ご心配なく
0761デフォルトの名無しさんNGNG
何かfjでの論争みたい。
知識のある人どうしで論争になると、
お互いゆずらないね。
0762デフォルトの名無しさんNGNG
知識のある人とない人の論争。
740,741が後者だな。
0763デフォルトの名無しさんNGNG
自作自演カコワルイ
0764デフォルトの名無しさんNGNG
>>762
つーかお前は何様だ?(w
それよりちゃんと引用してくれよ。見てくるのめんどくさ
>>740-741
0765デフォルトの名無しさんNGNG
必死だなw
0766デフォルトの名無しさんNGNG
やーいやーい
お前のかーチャンクラミジア
0767デフォルトの名無しさんNGNG
記録されていないのなら
appendの定義はどうやって取り出すんだろうか・・・・
0768デフォルトの名無しさんNGNG
>Prologインタプリタも,WAMへのコンパイラも,Cへのトランスレータも
>作ったことあるので,ご心配なく
必死さがよく伝わってくる(プ

0769デフォルトの名無しさんNGNG
>>768
別の分野だけどある程度能力のある人間からは別に普通に見えるがな。
文の表層を見ているだけでも >>758 より >>760 の方がまともなのは
瞭然としているのだが。
0770デフォルトの名無しさんNGNG
また、必死だ(ププー
0771738NGNG
>>739
>実現不可能な動作がいくつかあるようでそれらを扱っていそうな研究も
>”かつてずいぶんあった[738]”ということですのでこれらの研究と
>その実装結果に興味があります。特に実装結果に(^^;

Native code compilerの作り方についてのお気楽な方向付けですので、
実装には手間隙かかることも覚悟してください
1.オープンソースのインタプリタを1つ手に入れる。例えばSWIやGNU。
 もちろん自分で書いても良い。
2.述語のコンパイラを作り、インタプリタに述語として組み込む。
 生成するコードは次のように作ればよい。
 述語に対してWAMコンパイラが生成するWAMコードをWAMが実行するときに
 通過するコードの軌跡を求める。WAMインタプリタが Cで書かれていれば
 これはCのソースの列となる。これを部分評価してその結果を
 いくつかの関数として実現すればよい。
 注意すべきことは、WAMなどでは末尾再帰の最適化が行われるので、
 各種スタックはうまく調整されGCに耐えるようになっている。
 ナイーブに考えるとC言語のスタックをオーバーフローさせてしまう
 アーキテクチャになってしまうが、ここは、
 continuation という技法を使って凌ぐ。
/* ↑ このあたりを知りたかったのではないか? 例えば、
www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/prolog/prg/part1/faq-doc-11.html から
J. L. Boyd and G. M. Karam, "Prolog in C", Carleton niversity,Ottawa, 1988.
これは実は読んでいないのだが。*/
 さらにいえば、とらんぽりんを使うことも考えられるが、とらんぽりんに
 よるPrologの実装は見たことがない。
3.コンパイル結果の関数をCコンパイラでdllにコンパイルしロードして
 インタプリタに述語として登録するための述語を組み込む。
4.これで、インタプリタに内蔵する形のnative code compilerが出来上がる。
 スタンドアローンで実行できることをお望みなのかもしれないが、
 動的に変化する述語も実行しなければいけないので、インタプリタまたは
 コンパイラを内蔵する必要があり、価値があるかどうかわからない。
0772デフォルトの名無しさんNGNG
そんなことする意味があるのだろうか。
0773デフォルトの名無しさんNGNG
>>767
> 記録されていないのなら
> appendの定義はどうやって取り出すんだろうか・・・・

やっぱりインタプリタとコンパイラを混同している...

SICStus PrologでもGNU Prologでも,
コンパイルしたappendの定義は,clauseでは取り出せないです.

Cのプログラムと同じことです.
Prologコンパイラだけが特殊だと考えるのがおかしい.
0774730,734,739NGNG
>>771
ありがとうございます、これもまた大変参考になるお話です。

>Native code compilerの作り方についてのお気楽な方向付けですので、
‥‥
>4.これで、インタプリタに内蔵する形のnative code compilerが出来上がる。
大体の趣旨は分かったつもりです‥‥
末尾再帰の問題はLisp関連の情報を時々目にしたことがあったので、
詳しい実装方法なども探せば見つけられるのではないかと思っていました。
WAM関連ではその存在も知りませんでした。
(と言うよりWAMについてはその詳細を何もまだ理解していません。
本当に素人です。)

>動的に変化する述語も実行しなければいけないので、インタプリタまたは
>コンパイラを内蔵する必要があり、価値があるかどうかわからない。
私も実行中に述語がassertされたりretractされる事を考えると
その解決策の1つとして「‥内蔵される必要があり‥」は考えました。
それでも、つぎの2つに関心がありました。
�T.「価値があるかどうかわからない」そのコンパイラ
�U.「‥内蔵される必要があり‥」以外の解決方法
�Tに関しては、そのもの自体について
いろいろ話をしたい(伺いたい)ところですが、
それ以前に必要と思われる知識に関するソース(英文)と
キーワードを提示していただきましたので
時間を見てぼちぼち読んで理解できればと思います。
�Uに関しては解決方法が無いと分かるまで考えてみたいとは思っています。
ただ、PrologにはCやFortranなどにあるコンパイラと同様なコンパイラが
見当たらない事を考えると�Uに関しては考えるだけ無駄かもしれません。
�T、�U以外にもPrologを特徴付ける動作についてその動作とコンパイルとの
関係をよく考察できればと思います。
0775774NGNG
今のところ私は、PrologCompilerについて知識と理解が少ないようなので
しばらくは手前で考えたり提示されたソースを読でみたいと思います。


関係ない話ですが753もわたしです。
0776デフォルトの名無しさんNGNG
prologの逆コンパイルは簡単。

0777デフォルトの名無しさんNGNG
PrologっぽいインタプリタをJavaで作成中なんですが
これってsourceforgeでプロジェクト立てる価値ありますか?
0778デフォルトの名無しさんNGNG
SDKで印刷プレビューを作るにはどうしたらいいでしょうか?
ネットやVC6についていたサンプルソースなどをあさってみたのですが
よく分かりませんでした。

ここのサンプルを見ろ!とかありましたらお願いします。
0779デフォルトの名無しさんNGNG
>>778
あ、2回も誤爆しました。スマソ・・・
0780749NGNG
うっうっ(TД⊂ヽ
Prologコンパイラキボン
0781777NGNG
とりあえず、プロジェクト立てる事にしました。
このインタプリタのメリットがなんなのかはよくわかりませんが。
しかも、prologについて無知なので、仕様は満たしていないはず。
とりあえず、0から自分で考えてみたというのがポイントかも。
0782デフォルトの名無しさんNGNG
GHCについてのスレが見つからない・・・(ノ_<。)うっうっうっ
誘導してくれる神きぼん
0783デフォルトの名無しさんNGNG
「The Glasgow Haskell Compiler」のこと?
そうなら
関数型プログラミング言語Haskell
http://pc3.2ch.net/test/read.cgi/tech/1013846140/
0784デフォルトの名無しさんNGNG
>>783
サンクス!この御恩は10分間忘れません!
0785デフォルトの名無しさんNGNG
もう忘れてしまったわけだが
0786デフォルトの名無しさんNGNG
>>782-783
prologスレでGHCって聞かれたらGuarded Horn Clausesじゃないのかよ!
ま、本人が納得してるんならいいが。
0787デフォルトの名無しさんNGNG
>>786
すまん。
方々手を尽くして、なんとか自分で解決した後に
スレ誘導のカキコがあったから、内容を確認せずに
感謝してみた
0788IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0789デフォルトの名無しさんNGNG
                   /\        /\
                   /:::::::ヽ____/::::::::ヽ、
                  丿 ::.__  .:::::::::::::  __  ::::ヽ_
                 / /。 ヽ_ヽv /: /。ヽ  ::::::ヽ
 -┼-   丿~~~|     / / ̄ ̄√___丶  ̄ ̄\  ::::|            ■ ■
 -┼-   /~~~~/ ━━━ | .:::::::::: / / tーーー|ヽ     ..::::: ::|━━━━━━  ▼ ▼ 
  .|       丿      | .:::::.  ..: |    |ヽ        ::|            ● ●
                | :::    | |⊂ニヽ| |      :::::| \
              / /| :    | |  |:::T::::| !      .::| \ \\
             / / \:    ト--^^^^^┤      丿 \\\ \\\

                      お、大阪・・・・   
0790デフォルトの名無しさんNGNG
>4 名前:心得をよく読みましょう 投稿日:03/01/08 17:14 ID:OzjReOrp
>>>1
>
>あっ!
>
>唇オバケだ!



ワロタ
0791デフォルトの名無しさんNGNG
>単純に鯖の負担は2倍

閉鎖
0792デフォルトの名無しさんNGNG
早くIP記録禁止法を作って、勝手にIPを記録した人間を逮捕するようにすべきだな。
0793デフォルトの名無しさんNGNG
ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39

ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39

ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39

ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39

ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39 ID:ZBsKvw39
0794デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0795デフォルトの名無しさんNGNG
>>713
ぅ
 ゎ
  ぁ
0796デフォルトの名無しさんNGNG
弱虫と優しさの協奏曲。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。





















ガンバレオマエラ
0797デフォルトの名無しさんNGNG
>>145
掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
0798デフォルトの名無しさんNGNG
>>149
君は何がしたいんだい?(^_^;)
0799デフォルトの名無しさんNGNG
一番簡単そうなのは各オフなどで一人200円くらいカンパして
ひろゆきに送るのが早い気が。
0800デフォルトの名無しさんNGNG
>>652
いや、そんなことないって。
引用っぽくないし。

CPUクーラー総合スレッド vol.12
http://pc3.2ch.net/test/read.cgi/jisaku/1038085079/
こことか白血病UDスレとかに
0801デフォルトの名無しさんNGNG
 誘導です。
削除議論板雑談&質問スレ 4
http://qb.2ch.net/test/read.cgi/sakud/1036230237/l50

残り少ないレス数を更に減らさないで下さい。

復帰人さんでしたらICQぐらい持っていると
思いますが、Qの方が早いのでは?

水面下で折衝・調整が進行中みたいです。

今頃提案すること自体如何なものかと思います。
0802デフォルトの名無しさんNGNG


ハングルへ速やかにお帰りください
0803デフォルトの名無しさんNGNG
>>356
( ´_ゝ`)フーン
0804デフォルトの名無しさんNGNG
2chでIP記録実験が始まる
http://headlines.yahoo.co.jp/hl?a=20030109-00000021-zdn-sci
0805デフォルトの名無しさんNGNG
削除しなかったことが問題であって、IP取得は全くの見当違いだと思うんだが
それよかズボラな削除体制どーにかしろって感じだな

どさくさに紛れて都合の良い法律案を盛りこむ議会みたい
管理批判の多い板から記録してるっつーのもなんだかなあ
0806デフォルトの名無しさんNGNG
釣りじゃないのなら実に現実味のない意見だ
0807デフォルトの名無しさんNGNG
健介氏を招き、来て下さるのを待ちます

危機的にキてますので。【本来は私は2CH人員で無いのに書き込んでるのが自分自身不自然で、辛い所 素で。)

15分後程度に又。
0808デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0809デフォルトの名無しさんNGNG
IP記録って何のことです
0810デフォルトの名無しさんNGNG
みたいなのを"うにゅうにゅ"するためにIP記録ができたのです。
0811デフォルトの名無しさんNGNG
多少。
「関係者」の発言(大学時代の成績とか)
はある程度公益。但しプライバシー。

醜態は避けるべきかも、。
本人が「いいや」て思える事ならいいし。

逆に
「本人が駄目」って云って成績悪い人とかは
品性とか出るしね。皆にも嫌われるし。

そこらへんは微妙だし
マスコミの問題とか 社会のすごい「コレから」決める事だし。

だからさっさとけんすう系統だして下さい
では。
0812デフォルトの名無しさんNGNG
ネットはカルトより強し。
ネットは日々進化している。
カルトに進化無し、一時の流行に過ぎんからね。
0813デフォルトの名無しさんNGNG
閉鎖〜閉鎖〜(´人`)ナムナム
0814デフォルトの名無しさんNGNG
てすと
0815デフォルトの名無しさんNGNG
2ちゃんねるがアクセスログ記録を始めましたが、あなたの考えは?
http://newspolls.yahoo.co.jp/public/archives/2076384460/p-ne6-7?m=r
0816デフォルトの名無しさんNGNG
どうも、無責任体質が身にしみている方が多いようで。
0817デフォルトの名無しさんNGNG
メロンパン=ソンゴクウということで民事訴訟されるわけか?ただアク禁ではたりんな!!
0818デフォルトの名無しさんNGNG
ひもいき
0819デフォルトの名無しさんNGNG
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0820デフォルトの名無しさんNGNG
GAっていつのまに2ちゃんねるアニメランキング1位になったんだ?(w
0821デフォルトの名無しさんNGNG
2ちゃんを叩く連中の主張には一辺の理もないの
アンダスタン?(^_^;)
0822デフォルトの名無しさんNGNG
gannbattekudasai
0823山崎渉NGNG
(^^)
0824山崎渉NGNG
(^^)
0825C++厨NGNG
待て
ダット落ちはイカン
0826デフォルトの名無しさんNGNG
インターネプコにアイザックが出展してたよ
0827山崎渉NGNG
(^^)
0828デフォルトの名無しさんNGNG
フランスのエスプリとシックさが漂うPrologが
好き�
0829斉藤守NGNG
吉祥寺にある大検・大学受験予備校の中央高等学院
ここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
0830デフォルトの名無しさんNGNG
prologで
「f(x)を満たす全てのxがg(x)を満たす」
という命題を表現できますか?
0831デフォルトの名無しさんNGNG
g(X) :- f(X).
じゃないのか?
0832デフォルトの名無しさんNGNG
prologだと
全称記号とか存在記号とかはどうなるの?
0833デフォルトの名無しさんNGNG
存在記号 -> スコーレム化して消去
全称記号 -> すべての変数は全称記号で束縛されているとみなされるので省略
0834デフォルトの名無しさんNGNG
あーーーーーー、ネタがねぇぇぇぇえええ!!
0835デフォルトの名無しさんNGNG
?-ネタ(X).
fail.
0836デフォルトの名無しさんNGNG
誰か本格的なオブジェクト指向Prolog知らない?
SICStusのオブジェクト指向Prologは使いにくい。
0837デフォルトの名無しさんNGNG
すべてprologで住所管理データベースとそれを利用した
宛名ラベル印刷ソフトを作って会社で使いたい!
データベースはフレーム型で将来容易に拡張可能な
ものにしたい。
料金別納マークなどマークも印字するので画像も
登録して利用したい!
出来ればバーコードも生成しラベルに印字できれば
郵便料金が安くなるので作りこみたいのだが、
簡単に出来ないかな?
0838デフォルトの名無しさんNGNG
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/l50




0839デフォルトの名無しさんNGNG
>>837

prologでやらないことが簡単な方法
0840デフォルトの名無しさんNGNG
SWI-Prolog インスコ中!
0841デフォルトの名無しさんNGNG
インスコ完了!
しかしインタプリタは常に質問モード?のままのよーだ。
対話的に事実や述語を定義することはできないのかな?
0842デフォルトの名無しさんNGNG
assertとか使うしかないんじゃない?
0843デフォルトの名無しさんNGNG
できますた。アリガト-!
0844デフォルトの名無しさんNGNG
>>841
>>842

ふつうファイルに書いてよみこませるよ。
0845山崎渉NGNG
(^^)
0846ミ・д・ミNGNG
保守。
0847デフォルトの名無しさんNGNG
昔、Prologで記述されたConcurrent Prologが、
bit誌に3ページくらいの大きさで紹介されてた。
当時は第五世代コンピュータがにぎやかな時代で、
ストリームベースの並列オブジェクト指向プログラミングを
実際に手元で動かせることに感動して夢中になって触っていた。
その後、就職先で制御系のシステム設計を担当したけど、
ガードや有限バッファ制御の概念は役に立ったと思う。
0848デフォルトの名無しさんNGNG
prologを極める殊によって、日常業務で何か役に立った事って、
ありますか。仕様の矛盾に気付きやすくなったとか?
0849山崎渉NGNG
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0850デフォルトの名無しさんNGNG
文字列のソートってどうやったらできるんでつかね?
|?- moji_order([monar,age,giko],X).

X=[age,giko,monar]?

yes

ってかんじで。内部で使いそうなクイックソートは
実装したんですけどね。
quick( [X | Xs], Ys ) :-
partition( Xs, X, Littles, Bigs ),
quick( Littles, Ls ),
quick( Bigs, Bs ),
append( Ls, [X | Bs], Ys ).
quick( [], [] ).

partition( [X | Xs], Y, [X | Ls], Bs ) :-
X =< Y, partition( Xs, Y, Ls, Bs ).
partition( [X | Xs], Y, Ls, [X | Bs] ) :-
X > Y, partition( Xs, Y, Ls, Bs ).
partition( [], Y, [], [] ).

append( [], X, X ).
append( [X | L], Y, [X | Z] ) :- append( L, Y, Z ).
1文字ずつのソートじゃなくて、単語でソートってところが分かりません。
誰か分かる方いらっしゃいます?
0851デフォルトの名無しさんNGNG
name/2で文字コードのリストに分解すればいいやん
0852山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0853デフォルトの名無しさんNGNG
あげとこ

http://www.swi-prolog.org/
May 27, 2003 Released SWI-Prolog 5.2.0, consolidating multi-threaded execution, many fixes and new libraries distributed in the 5.1.x beta series.
0854デフォルトの名無しさんNGNG
prolog って普通の(っていうと語弊があるか)プログラム書けるんですか?
例えばマルチメディア系とかネットワークとか。
0855デフォルトの名無しさんNGNG
まあかけんことはないがな
http://www.swi-prolog.org/packages/xpce/sc_draw.html
0856デフォルトの名無しさんNGNG
>>854
プッ
0857デフォルトの名無しさんNGNG
これおもしろそう。
帰納論理プログラミングと関係データベースのSQLによる連結
http://bruch.sfc.keio.ac.jp/Ilp/ilp_rdb/ilp_rdb.html

Progol って使ってるひといるかな?
↓ここからダウンロードできます。
ftp://ftp.cs.york.ac.uk/pub/ML_GROUP/
0858山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0859デフォルトの名無しさんNGNG
age
0860デフォルトの名無しさんNGNG
全然関係ない話ですが、
人生にバックトラックがあったらなぁって思ったことはありませんか?
0861デフォルトの名無しさんNGNG
もっと効率のいい探索方法の方がいいと思うぞ。
0862デフォルトの名無しさんNGNG
oracle。これ最強。
まあ素人はheuristicsから学んでおけってこった。
0863デフォルトの名無しさんNGNG
バックトラックがあったとしてどこまでさかのぼれば
勝ち組みと言うパターンにマッチさせることができるのかが
問題だ
0864山崎 渉NGNG
(^^)
0865山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0866デフォルトの名無しさんNGNG
なにをするの?
0867デフォルトの名無しさんNGNG
これはバグですか?
SWI-Prologで、ファイルをconsultしてからlisting(member)とするとNoになる。
member以外の組み込みでも同様。
ただし、SWI-Prolog起動後にlisting(member)としてYesが返ってから
ファイルをconsultしてlisting(member)とすると、正常に表示される。

つまり、ファイルをconsultすると組み込みが使えなくなってしまう。
しかし、consult以前に組み込みを呼び出していた場合、問題は起きない。
0868デフォルトの名無しさんNGNG
>>867
自己レスです。
どうやらファイルに
:- unknown(_,fail).
の記述があるのが原因のようです。
しかしどうしてこれが原因になるのでしょうか?
0869デフォルトの名無しさんNGNG
?- shuffle([a,b,c], S).
S = [b,a,c]

のようにリストをランダムにシャッフルするプログラムを作ったのですが、
ソースが以下のように異常に長くなってしまいました。
もっと簡単にする方法はないでしょうか?

shuffle_sub1([],[],[]).
shuffle_sub1([A|L],X,Y) :-
shuffle_sub1(L,X1,Y1),
(random(2) =:= 0 -> (X=[A|X1], Y=Y1);
(X=X1, Y=[A|Y1])).

shuffle_sub2(A,X,[],X,[A]) :- !.
shuffle_sub2(A,[],Y,[A],Y) :- !.
shuffle_sub2(A,X0,Y0,X,Y) :-
random(2) =:= 0 -> (X=[A|X0], Y=Y0);
(X=X0, Y=[A|Y0]).

shuffle_sub3([A|L],X,Y) :-
shuffle_sub1(L,X0,Y0),
shuffle_sub2(A,X0,Y0,X,Y).

shuffle([E],[E]).
shuffle(L,S) :-
shuffle_sub3(L,A,B),
shuffle(A,A1), shuffle(B,B1),
append(A1,B1,S), !.
0870869NGNG
自己解決しました。
順列生成処理を応用すれば簡単に実現できることに気が付きました。
スレ汚しスマソ

select_nth(0,H,[H|L],L).
select_nth(N,E,[H|L],[H|R]) :-
    N > 0, N1 is N-1,
    select_nth(N1,E,L,R).

shuffle([],[]).
shuffle(Xs,[Z|Zs]) :-
    length(Xs,N),
    R is random(N),
    select_nth(R,Z,Xs,Ys),
    shuffle(Ys,Zs), !.
0871デフォルトの名無しさんNGNG
初心者な質問なんですけど、下のようにデータベースに同じ物
がある場合、birth(A,B) :- person(A, Y), person(B, Y).
としてbirth(Yoko,B)とするとTadashiが3回でますよね。これを回避
するにはどうしたらいいですか?一応リストにいれてマッチさせたり
してるんだけどうまくいかないので。

person('Tadashi', 1977).
person('Yoko', 1977).
person('Tadashi', 1977).
person('Naoki', 1977).
person('Tadashi', 1977).
0872デフォルトの名無しさんNGNG
なんで同じもんがあんだYO。setofあたりで誤魔化せば?
0873デフォルトの名無しさんNGNG
オブジェクト指向prologってないでつか?
0874デフォルトの名無しさんNGNG
>>873
ICOTが初期にやってたESPでは、節の空間を継承で木構造に整理できました。
これをもってICOTはESPを「オブジェクト指向Prolog」と称していました。
でもオブジェクト指向の他の側面、たとえばカプセル化の概念は
とりこんでたんだっけかな...

ESPの初期だけしかみてないので、後は詳しい人続けて↓↓↓
0875デフォルトの名無しさんNGNG
>>873 ありますがなにか?
0876875NGNG
うぐぅ、874読んでなかった。
0877874NGNG
おーい、詳しい人まだぁ〜?(AA略

ICOTのことでいぢめたりしないから、おねがい来て〜(はぁと
0878ミ・д・ミNGNG
秋葉のLAOXの書籍コーナー移転・縮小で
AI系の本が消えた・・鬱
0879デフォルトの名無しさんNGNG
非手続き型(バックトラックつき?)オブジェクト指向言語
ってないでつか。ちょいとしたもんつくるにはいいんじゃないかと
おもってるんだけど。
0880デフォルトの名無しさんNGNG
Uranus,Prolog/KR
http://www5a.biglobe.ne.jp/~sasagawa/MLEdit/uranus/index.html
0881デフォルトの名無しさんNGNG
>>880

なんじゃこれ。
0882デフォルトの名無しさんNGNG
どんなもんかはわからんが

>これはUniversal Representation Aimed Novel Uranus
>System というリカーシヴな名前になっている。

ここで萎えた。。誰か代わりに読んで
0883デフォルトの名無しさんNGNG
多重世界機構は面白い。そしてLispとPrologのハイブリッドという感じもあり。
述語論理の中に関数的な記述もできる。
0884GO MAXIMANGNG
>>880
でも [times 2 3] はエラーやし 動いてない部分が多いんじゃない?
有限群論をのっけようかと すこしいじったけどまだ無理みたい。
>883 動けば面白いだろうがね。
0885デフォルトの名無しさんNGNG
Uranus V-19.8 on GCL

:(* 2 3 *x)
(* 2 3 6)
:(+ 1 2 3 4 5 *x)
(+ 1 2 3 4 5 15)
:(with Japanese (assert (first-number ichi)))
(with English (assert (first-number one)))
(with French (assert (first-number un)))
:(with english (first-number *x))
(WITH ENGLISH (FIRST-NUMBER ONE))

:(with w0 (assert (thing *x) (bird *x))
(assert (bird *x) (canary *x))
(assert (bird *x) (penguin *x))
(assert (canary Tweety))
(assert (penguin Fred)))
(with w1 (deny (fly *x)))
(with w2 (assert (fly *x) (bird *x)))
(with w3 (deny (fly *x) (penguin *x)))

:(with w0 (with w1 (with w2 (with w3 (fly Tweety)))))

(WITH W0 (WITH W1 (WITH W2 (WITH W3 (FLY TWEETY)))))
:(with w0 (with w1 (with w2 (with w3 (fly Fred)))))

NIL
:
0886デフォルトの名無しさんNGNG
松葉崩しを体得したいのですが教えてもらえますか?
0887デフォルトの名無しさんNGNG
(assert (perm () ()))
(assert (perm (*x . *y) *z) (perm *y *w) (insert *x *w *z))
(assert (insert (*x () *x)))
(assert (insert *x *y (*x . *y)))
(assert (insert *x (*y . *z) (*y . *w)) (insert *x *z *w))
(assert (quicksort *x *y) (qsort *x *y ()))
(assert (qsort () *y *y))
(assert (qsort (*x1 . *x2) *y1 *y2)
(partition *x1 *x2 *u1 *u2)
(qsort *u1 *y1 (*x1 . *u3))
(qsort *u2 *u3 *y2))
(assert (partition *x () () ()))
(assert (partition *x (*y . *z) (*y . *u1) *u2)
(>= *x *y)
(partition *x *z *u1 *u2))
(assert (partition *x (*y . *z) *u1 (*y . *u2))
(< *x *y)
(partition *x *z *u1 *u2))
(defun rand-sequence (n)
(if (= n 0)
'()
(cons (random 100) (rand-sequence (- n 1)))))
(assert (test *n) (eval (rand-sequence *n) *x) (time (quicksort *x *y)) (print *y))
:(test 1000)
real time : 3.600 secs
run time : 3.600 secs
(0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4
4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 8 8 8 8 8 . ?)
(TEST 1000)
0888デフォルトの名無しさんNGNG
>間違ったプランにより生成された世界は後で消せばよい。
>時系列と概念・・( ´・ω・`)
0889GO MAXIMANGNG
>>885 >>887
何かコンパイルに失敗していたみたいで、ファイルを再展開して
コンパイルし直したら動いた。ありがとう。
かなり面白そうだ。
0890885,887NGNG
>>889
お役に立てて何よりです。
0891デフォルトの名無しさんNGNG
制約論理プログラミング考えてるんだけど、
代表的な処理系ってある?
0892デフォルトの名無しさんNGNG
Prolog処理系作ろうかと思っているのですが、参考になるような
最低限のセットないでしょうか?
0893デフォルトの名無しさんNGNG
a
0894デフォルトの名無しさんNGNG
GO MAXIMAさん、こんなところにも顔出してるのか。
良コテの鏡のような人だからな。マジで尊敬してます。
0895デフォルトの名無しさんNGNG
GNU hosh
0896デフォルトの名無しさんNGNG
A . G . E .
0897デフォルトの名無しさんNGNG
a
0898デフォルトの名無しさんNGNG
人工知能の現状を知るべし
http://page.freett.com/intteliart/index.htm
0899デフォルトの名無しさんNGNG
PrologとXMLって関係深いですか?
0900デフォルトの名無しさんNGNG
全然
0901デフォルトの名無しさんNGNG
最近は「全然あり」と言う語法もあるんだが・・・
0902デフォルトの名無しさんNGNG
"全然あり"じゃなくて単に"全然"と言ったらどっちを指すかは暗黙の了解。
0903デフォルトの名無しさんNGNG

 prolog処理系をc等の他の言語で1から記述するには、どのような処理をさせたら良いか悩んでいます。
 というのも、これから勉強をかねて自分用に安易なオリジナルの言語を記述する気になりましたが、その前にどうしてもprologがどの様に処理されているのか気になってしようがないからです。
 prolog自体のコーディングはある程度わかるのですが、それがどのように処理されているのか推測できません。
 私の場合、cやpascal等であれば、形態素解析の後、文法解析を行って、アセンブラへの変換をこつこつ記述して試していくという方向性で納得してますが、prologの場合、形態素解析の後、文法解析を行ってもその後の処理のイメージが想像できあせん。
 prologの設計経験のある方がここを知っているのか、しかも、読んでいるのかさへも疑問ですが、コメントをいただけると幸いです。
経験のない方でも、コメントなりアドバイスが頂ければ嬉しく思います。
 よろしくお願いいたします。

0904デフォルトの名無しさんNGNG
だまされたと思って適当なLispの教科書読んでみ。
0905デフォルトの名無しさんNGNG
> 903
素直にswi-prologや、g-prologのソースを落として、解析すれば
いいだけのような気がする。
0906デフォルトの名無しさんNGNG
データ型やアルゴリズムの考え方はLISPとよく似ているから
LISP勉強するのが結局早かったり。
0907デフォルトの名無しさんNGNG
>>903
レゾリューションは分かっているのか?
0908903NGNG
>>906
>データ型やアルゴリズムの考え方はLISPとよく似ているから
> LISP勉強するのが結局早かったり。
そうですね。LISPだと簡単にprologがコーディングできますからprologでなくてもLISPの仕組みでも私の目的には合ってそうです。

>>905
>素直にswi-prologや、g-prologのソースを落として、解析すれば
> いいだけのような気がする。
> >素直にswi-prologや、g-prologのソースを落として、解析すれば
> いいだけのような気がする。
そうですね、今までの私はそれが面倒で避けていましたが、これからは頑張って並行してソースも見ていきます。ついでに中間言語に落とす方法とそれを使った高速化も解って面白そうですし。

>>907
>レゾリューションは分かっているのか?
いえ、(今通勤中なので)後で言葉の意味を調べてみます。(言葉は分かりませんが原理を知っていると良いのですが)

>>904
>>905
>>906
>>907
皆さんありがとうございます。
また、ご意見・コメントなど有りましたらよろしくお願いいたします。
0909903NGNG
すいません
>>908
で、1部引用に失敗してました。

(武蔵野線が止まって時間が空いてしまいまいた。ちょうど良いのでlispの方もちょっと読んでみます。)
0910デフォルトの名無しさんNGNG
じゅん for Java に入っている sra.jun.goodies.prolog なんかコンパクトで読みやすいんじゃないだろうかttp://www.sra.co.jp/people/nisinaka/Jun4Java/index_ja.html
0911デフォルトの名無しさんNGNG
プロローグについて質問です。
SWI-Prologのplwin Version5.2.13でプログラムを組んでいます。
atomに重複があれば最初のatomは残して後ろの重複したatomは消す、という
プログラムを作りたいのですが…できません。

動作は
remdup([a, b, c, a, d, c], X).
は
X=[a, b, c, d]
となるはずです。

本に載っていたのを試したのですが
順番が逆になってしまいます。↓

remdup(L, M) :- dupacc(L, [], M).
dupacc([], A, A).
dupacc([H|T], A, L) :- member(H, A), dupacc(T, A, L).
dupacc([H|T], A, L) :- dupacc(T, [H|A], L).

結果:
1 ?- remdup([a, b, c, a, d, c], X).
X = [d, c, b, a]

reverse()を「使わずに」どうにか完成させたいのですが
できますでしょうか?
ちなみにmember()やappend()、atomp()、listp()、last()など基本的な関数は既に作りました、
ですからそれらは使えます。
どうかお助けください。m(__)m
0912デフォルトの名無しさんNGNG
どうして reverse() を使いたくないの?
0913デフォルトの名無しさんNGNG
>>911
dupacc([H|T], A, L) :- dupacc(T, [H|A], L).
を
dupacc([H|T], A, L) :- append(A, [H], X), dupacc(T, X, L).
に変更する。

遅くなると思うが。
0914911NGNG
出来ましたっ!
最初の結果の後";"を押していくと
どの順番で重複が消されたのかまで分かるおまけ付きです。
僕も人を助けられるようになりたいです。もっと勉強します。
913さん、カコイイ!!
ありがとうございました!
0915デフォルトの名無しさんNGNG
>>911

remdup(L,M) :- remdupdiff(L, M, M).

remdupdiff([], DH, DT) :- DT=[].
remdupdiff([H|T], DH, DT) :- memberdiff(H, DH, DT),!,remdupdiff(T, DH, DT).
remdupdiff([H|T], DH, DT) :- DT=[H|NewDT], remdupdiff(T,DH,NewDT).

memberdiff(E, DH, DT) :- DH==DT,!,fail.
memberdiff(E, [H|T], DT) :- E=H,!.
memberdiff(E, [H|T], DT) :- memberdiff(E, T, DT).
0916911NGNG
>>915

こちらのヴァージョンも動きました。
どのように動作しているかを理解するのは僕にはまだ難しいです。
こちらは一発で[a b c d]を導き出すのですね(";"を押すとすぐにNoでExitです)。
将来どうしてもPrologの知識が必要となるのでこれからもっと勉強します。
ありがとうございました。
0917デフォルトの名無しさんNGNG
すみません、
prime(N) っていうファンクションで、N以下の全ての素数を入れたリスト
を返すのってどうやればいいのでしょうか???
突然つまづきました。。
0918デフォルトの名無しさんNGNG
>>917
Prologの話ですよね?
?-prime(N).
というゴールは、失敗するか成功するかのどちらかで、
CやLispの関数のように値(ここではリスト)は返せませんよ。

多分、
primeList(N,List) ; N以下の全ての素数を入れたリストがListなら成功
のような述語を定義して、
?-primeList(100,List).
のような使い方をするのがPrologっぽいと思います。このゴールは成功して、
ついでにListに何か値が割り当てられて(unifyされて)終わるはずです。

Nが素数かどうか判定するには、√Nまでの自然数で割り切れるか調べれば
十分と知られています。だから、1〜√Nまでの自然数の倍数を全部取り除けば、
N以下の素数のリストができあがります。これをリスト操作に翻訳すればOK。
0919デフォルトの名無しさんNGNG
prime(X) :- prime1(X,2).

prime1(X,I) :- I*I =< X,
X mod I =\= 0,
I1 is I+1,
!, prime1(X,I1).
prime1(X,I) :- I*I =< X,
X mod I =:= 0,
!, fail.
prime1(X,I) :- I*I > X.

prime_list(N,L) :- prime_list1(2,N,L).

prime_list1(I,N,L) :- I =< N,
prime(I), L=[I | L1],
I1 is I+1,
!, prime_list1(I1, N, L1).
prime_list1(I,N,L) :- I =< N,
I1 is I+1,
!, prime_list1(I1, N, L).
prime_list1(I,N,L) :- L=[].
0920919NGNG
字下げが全部消えてる・・・。
0921GOD-NGNG
ちょっと考えてみ!

?- flat([[a,[b,c],[d]],e,[f,[g,f]]]).
↓
[a,b,c,d,e,f]

と出力するflat.
!(バックトラック)とappend使うらしい・・。
0922デフォルトの名無しさんNGNG
述語をリスト構造で取得する述語ってありますか?

listing(hoge).だとhogeのプログラムが表示されますよね。表示じゃなくてプロ
グラムを取得したいので。
0923922NGNG
SWI-Prologを使ってます。
0924デフォルトの名無しさんNGNG
>>922
プログラム内での述語→リスト変換なら、
X =.. f(a,b)で
(見えづらいが =.. イコールのあとにピリオド二つ)
Xに [f, a, b]がユニファイされる。
0925デフォルトの名無しさんNGNG
>>924
間違えた。
述語=..リストだった。
正しくは f(a,b)=..X で
Xに [f, a, b]が入る
0926924NGNG
いや、意味が違いましたね。
ファイルの入出力なら
http://www.geocities.co.jp/SiliconValley-Oakland/1680/prolog/prolog13.html
が分かりやすい
0927922NGNG
>>924
サンクスです。
functorを使えばよかったみたいです。

今度は、変数名から値を取得する述語を探してますが、
ありますか?
0928デフォルトの名無しさんNGNG
>>927
集合述語findallやbagofを使えば、変数に入るすべての解をリストに
集めることが出来ます。
例:
parent(tom, ann).
parent(tom, john).
があったとき
findall( X, parent(tom, X), L).
により L=[ann, john] となる
0929デフォルトの名無しさんNGNG
>>928
( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー

その述語、どの処理系にもあるの?
とりあえずSICSTUSとBは明日試してみよう。
0930デフォルトの名無しさんNGNG
パターンマッチとバックトラックによるprologの実行過程と,
導出原理による充足性の判定アルゴリズムがうまく結び
つけられずにいます.

prologの実行において導出原理はどこで使われているの
でしょうか?
0931名無しさん@お腹いっぱい。NGNG
>>930
,
0932デフォルトの名無しさんNGNG
2000年に生まれたスレなので記念カキコ
0933デフォルトの名無しさんNGNG
?-ぬるぽ.
0934デフォルトの名無しさんNGNG
ガッ
no
|
0935デフォルトの名無しさんNGNG
課題でProlog使うことになったんだが、なんだこれは。
Cとかしかやったことないから、なんだか新鮮だよ。
よし、勉強してくる!
0936デフォルトの名無しさんNGNG
ところでprologってさ・・・何が出来るの?
身近で活躍しているprologのプログラムって何かあるのかな?
0937デフォルトの名無しさんNGNG
>>936
SQL
0938デフォルトの名無しさんNGNG
>>937
???
0939デフォルトの名無しさんNGNG
 test
0940デフォルトの名無しさんNGNG
test 
0941デフォルトの名無しさんNGNG
 test
0942デフォルトの名無しさんNGNG
test 
0943名無しさん@お腹いっぱい。NGNG
>>936
お前の身近ってどこよ? (w

あんまりないんじゃない?
アルゴリズムが固まってしまうと、解探索を言語に依存しないで、
他の言語で自分で書いた方が速くなるから。
アルゴリズムの研究する時は便利だけども。
0944774NGNG
BPrologにおいて、Cのincludeでbprolog.hを要求されるのですが、
どこにもありません。
どこかに落ちているものなんでしょうか。
0945デフォルトの名無しさんNGNG
誰か助けてください!両替の問題を解いてください.
?- ryougae([24, 11, 3], 27, X).とすると
X=[1, 0, 1]
X=[0, 0, 9] 
と答える述語を書いてください.
prolog始めて3週間で出た学校の課題です><;
0946デフォルトの名無しさんNGNG
宿題は自分でやらないと意味ないよ。
0947デフォルトの名無しさんNGNG
ryougae([24, 11, 3], 27, [1, 0, 1]).
ryougae([24, 11, 3], 27, [0, 0, 9]).
0948デフォルトの名無しさんNGNG
変数の中身がスペースで区切られたものをリスト化することが出来る関数は無い?
A = 'a b c d e'
を
B = [a,b,c,d,e]
みたいに。
0949デフォルトの名無しさんNGNG
あげ
0950デフォルトの名無しさんNGNG
とても素人っぽいsplit。

split(A, B) :- name(A, X), split2(X, B, []).

split2([], [], []) :- !.
split2([], [D], C) :- !, name(D, C).
split2([32|T], R, []) :- !, split2(T, R, []).
split2([32|T], [D|R], C) :- !, name(D, C), split2(T, R, []).
split2([H|T], R, C) :- !, append(C, [H], D), split2(T, R, D).

玄人のスマートな解答を希望。
0951デフォルトの名無しさんNGNG
Prologを始めたばかりなんですが、今悩んでる問題があります。

【問題】
3点(X1,Y1), (X2,Y2), (X3,Y3)の座標が与えられたとき,その3点を直線で結ぶと三角形になるという
関係san(X1/Y1, X2/Y2, X3/Y3)がある。

?- san(0/0,4/0,4/3). → yes
?- san(0/0,5/5,3/3). → no

という問題です。
座標の位置関係を記述することができればいいのではないかと考えているのですが、
分かりません。
誰か解いてもらえませんか?お願いしますm(_ _)m
0952デフォルトの名無しさんNGNG
三角形にならない場合を考えよう。
それは3点が一直線上にあるときのみ。3点が一直線にあるなら、
一つの点から別の2点へ向かう2つのベクトルが張る面積がゼロ。
つまり内積がゼロ。

っていう論理をPrologの節にエンコードすればいいじゃんか。
0953デフォルトの名無しさんNGNG
triangle_ineq(A, B, C) :- A + B > C.
distance(X1, Y1, X2, Y2, D) :- D is sqrt((X1 - X2) ** 2 + (Y1 - Y2) ** 2).
is_triangle(X1, Y1, X2, Y2, X3, Y3) :-
distance(X1, Y1, X2, Y2, A),
distance(X2, Y2, X3, Y3, B),
distance(X3, Y3, X1, Y1, C),
triangle_ineq(A, B, C),
triangle_ineq(B, C, A),
triangle_ineq(C, A, B).

ところで、
> 関係san(X1/Y1, X2/Y2, X3/Y3)がある。
ここのスラッシュはどういう意味?
0954デフォルトの名無しさんNGNG
>>952
なるほど。内積を使うのか。
目から鱗というか、気づかなかった自分が情けない。



…って。内積が0なら直角三角形じゃないですか。
外積だよね。
0955デフォルトの名無しさんNGNG
>>953

> 関係san(X1/Y1, X2/Y2, X3/Y3)がある。
>ここのスラッシュはどういう意味?

951ではないが、レスする。

スラッシュは本来、変数間の除算を表す記法。
ただし、数式として評価しなければ、単なる
データ構造を構成する記号の中間記法になる。
X1/X2は /(X1,X2)と同じ。 Z is X1/X2とかすると除算を実行する。

このプログラムでは point(X1,X2)とかにした方がいいと思う。


0956デフォルトの名無しさんNGNG
>>955
そういうことでしたか。
ありがとうございます。
0957デフォルトの名無しさんNGNG
>>950
おお、動きました。
遅くなりましたがthx.
0958デフォルトの名無しさんNGNG
>>948
> 変数の中身がスペースで区切られたものをリスト化
atom_chars/2 を使って、結果のリストからスペースの分を除くのはどう?
0959デフォルトの名無しさんNGNG
今prologを実習してるんですけど全然わかりません
リストの辺りでボロボロです。
初心者はココを見ろ!的なHPありませんか?
0960デフォルトの名無しさんNGNG
prologの前にLISPやっとけ
0961デフォルトの名無しさんNGNG
初心者ですいません。
次のように二重になってるリストの中身を置換させる
述語の書き方がわかりません。

?-replace([a,[b,c],d],b,[e,f],X).
X=[a,[[e,f],c],d].

二重になってない場合ならわかったのですが…
その先にどうしても進めません。
どなたかよろしくお願いします。
0962デフォルトの名無しさんNGNG
>>961
replace([],A,B,[]) :- !.
replace([A|T],A,B,[B|C2]) :- !, replace(T,A,B,C2).
replace([H|T],A,B,[C1|C2]) :- !, replace(H,A,B,C1), replace(T,A,B,C2).
replace(A,A,B,B) :- !.
replace(D,A,B,D) :- !.

とても雑なので,参考程度に.
0963961NGNG
>>962
ありがとうございました!
0964デフォルトの名無しさんNGNG

算術式を入力して、それが算術式かどうか判定するプログラムを作りたいのですが
うまくいきません。教えていただけないでしょうか?


aexp( 5+7*8 ).
yes
みたいなのを。
算術式は、とりあえず、整数と、変数の+,-,*を考えています。

/*自分がかんがえたもの */

aexp(X):-number(X)
aexp(X);-var(X).
aexp(X1*X2):-aexp(X1), aexp(X2).
aexp(X1+X2):-aexp(X1), aexp(X2).
aexp(X1-X2):-aexp(X1), aexp(X2).


0965デフォルトの名無しさんNGNG
>>964
若干修正してみた。

aexp(X):-number(X).
aexp(X):-atom(X).
aexp(X1*X2):-aexp(X1), aexp(X2).
aexp(X1+X2):-aexp(X1), aexp(X2).
aexp(X1-X2):-aexp(X1), aexp(X2).
0966デフォルトの名無しさんNGNG
すばいやい、回答ありがとうございます。
0967デフォルトの名無しさんNGNG
Prolog ではまったり
0968デフォルトの名無しさんNGNG
member(X,[X|Y]).
member(X,[Y|Z]) :- member(X,Z).

remove(X,[X|Rest],Rest).
remove(X,[Y|Rest],[Y|L]):- remove(X,Rest,L).

member(),remove使って、setsubst(L1,L2,L3)
L2のリスト要素から、L1のリスト要素を取り除いた結果がL3
という述語ってどう書けばいいのでしょうか?
0969デフォルトの名無しさんNGNG
setsubst([],L,L) :- !.
setsubst([H|T],L2,L4) :- member(H,L2),remove(H,L2,L3),setsubst([H|T],L3,L4),!.
setsubst([_|T],L2,L3) :- setsubst(T,L2,L3),!.

効率が良いかはわからないが、指定通りmember,removeを使ってみた。
0970968NGNG
!があまりよくわかってないので、!の使いどころでハマッってました。
あとで、試してみます。
ありがとうございました。
0971968NGNG
setsubst([1,2],X,[3,4])を実行したところ、無限ループになってしまいました。
setsubst([f(X,Y),f(Z,W)],[f(a,b),f(c,d),g(e,f),f(i,j)], Result).
では、Result=[f(a,b),g(e,f)], [f(c,d),g(e,f)], [g(e,f),f(i,j)]
という結果を期待したのですが、一通りしか返ってきませんでした。
うーむ、どうすればいいのやら。。。
0972デフォルトの名無しさんNGNG
>>971
複数の解を期待するなら、 cut しちゃだめでしょ。
0973デフォルトの名無しさんNGNG
[[7,1],[7,2],[7,3],[6,1],[6,2],[6,3],[5,1],[5,2],[5,3],[4,1],[4,2],[4,3],
[3,1],[3,2],[3,3],[2,1],[2,2],[2,3],[0,1],[0,2],[0,3]]

というリストがあるのですが、これを

�@[[0,1],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3],[0,2],[4,1],[4,2],[4,3],
 [5,1],[5,2],[5,3],[0,3],[6,1],[6,2],[6,3],[7,1],[7,2],[7,3]]

という順序にしたいのです。

�A[[0,1],[0,2],[0,3],[2,1],[2,2],…,[7,2],[7,3]]

という場合は、クイックソートの考え方で並べ替えることができました。
しかし、�@の場合だと…
どなたかよろしくお願いします。
0974デフォルトの名無しさんNGNG
意味がわからない
0975デフォルトの名無しさんNGNG
語彙解析
 単語の品詞と意味の表を用意し、スペースで区切られた単語列
を一行読み込み、各単語にその品詞名と意味を付けたリストにする
プログラムを教えてください
0976デフォルトの名無しさんNGNG
語彙解析(_文字列,_辞書付き語彙ならび):-
  atom_chars(_文字列,_文字ならび),
  辞書付き語彙ならび(_文字ならび,_辞書付き語彙ならび).
辞書付き語彙ならび([],[]) :- !.
辞書付き語彙ならび([A|R],R2):-
  区切り文字(A),
  辞書付き語彙ならび(R,R2),!.
辞書付き語彙ならび([A|R],[[_語彙,_品詞,_語意]|R2]) :-
  区切り文字(A),
  辞書付き語彙ならび(R,R2),!.
辞書付き語彙ならび([A|R],[[_語彙,_品詞,_語意]|R2]) :-
  \+(区切り文字(A)),
  語彙の切り取り([A|R],_語彙の文字ならび,R3),
  concat_atom(_語彙の文字ならび,_語彙),
  辞書(_語彙,_品詞,_語意),辞書付き語彙ならび(R3,R2),!.
語彙の切り取り([],[],[]) :- !.
語彙の切り取り([A|R],[A|R2],R3) :-
    \+(区切り文字(A)),語彙の切り取り(R,R2,R3),!.
語彙の切り取り([A|R],[],R) :- 区切り文字(A),!.
区切り文字(' ').
辞書(prolog,[名詞],[みればわかるもの]).
辞書(run,[動詞],[歩くことと同義]).
語彙のリストを作り上げてから、改めて辞書引きするのが普通ですが
再帰的な述語の構造をはっきりさせるため、中に入れました。
0977デフォルトの名無しさんNGNG
ごめんなさい。下のところ間違ってました。訂正。
辞書付き語彙ならび([A|R],R2) :-  /* ←ここです */
  区切り文字(A),
  辞書付き語彙ならび(R,R2),!.
辞書付き語彙ならび([A|R],[[_語彙,_品詞,_語意]|R2]) :-
  \+(区切り文字(A)),
  語彙の切り取り([A|R],_語彙の文字ならび,R3),
  concat_atom(_語彙の文字ならび,_語彙),
  辞書(_語彙,_品詞,_語意), /* ←改行入れました */
  辞書付き語彙ならび(R3,R2),!.
0978折れ目もNGNG
Adventure in Prolog
http://www.amzi.com/AdventureInProlog/
0979デフォルトの名無しさんNGNG
>>978
>>321
0980デフォルトの名無しさんNGNG
>975 これでどうです。
語彙解析(_文字列,X):-atomic_length(X,Length),語彙解析(_文字列,1,1,0,Length,X).

語彙解析(_文字列,_,Start,W,Length,[]):-Start > Length,W=0,!.
語彙解析(_文字列,Start0,Start,W,Length,[[_語彙,_品詞,_語意]]):-
  Start > Length,W > 0,
  atom_part(_文字列,Start0,W,G),
  辞書(_語彙,_品詞,_語意),!.
語彙解析(_文字列,Start0,Start,W,Length,[[_語彙,_品詞,_語意]|R]):-
  atom_part(_文字列,Start,1,A),区切り文字(A),W>0,
  atom_part(_文字列,Start0,W,G),
  辞書(_語彙,_品詞,_語意),
  Start2 is Start+1,
  語彙解析(_文字列,Start2,Start2,0,Length,R),!.
語彙解析(_文字列,Start,Start,W,Length,X):-
  atom_part(_文字列,Start,1,A),
  区切り文字(A),W=0,
  Start2 is Start+1,
  語彙解析(_文字列,Start2,Start2,0,Length,X),!.
語彙解析(_文字列,Start0,Start,W,Length,X):-
  atom_part(_文字列,Start,1,A),
  \+(区切り文字(A)),
  Start2 is Start+1,W2 is W+1,
  語彙解析(_文字列,Start0,Start2,W2,Length,X),!.
0981デフォルトの名無しさんNGNG
atomic_length/2とatom_part/4はISO標準でなかったので
atom_length/2とsub_atom/5で書き直し
語彙解析(_文字列,X):-atom_length(_文字列,Length),語彙解析(_文字列,0,Length,X).

語彙解析(_,0,0,[]) :- !.
語彙解析(_文字列,W,0,[[_語彙,_品詞,_語意]]):-
  W > 0,
  sub_atom(_文字列,Start,W,_,G),
  辞書(_語彙,_品詞,_語意),!.
語彙解析(_文字列,W,Length,[[_語彙,_品詞,_語意]|R]):-
  sub_atom(_文字列,W+1,1,_,A),区切り文字(A),W>0,
sub_atom(_文字列,1,W,RLength,_残り文字列),
  辞書(_語彙,_品詞,_語意),
  語彙解析(_残り文字列,0,RLength,R),!.
語彙解析(_文字列,0,Length,X):-
  sub_atom(_文字列,1,1,RLength,A),
  区切り文字(A),
  sub_atom(_文字列,2,RLength,_,_残り文字列),RLength2 is RLength-1,
  語彙解析(_残り文字列,0,RLength2,X),!.
語彙解析(_文字列,W,Length,X):-
  sub_atom(_文字列,W+1,1,_,A),
  \+(区切り文字(A)),
  W2 is W+1,
  語彙解析(_文字列,W2,Length,X),!.
0982デフォルトの名無しさんNGNG
>981 これだと最後の文字が区切り文字だとW<0となりfailします。
0983デフォルトの名無しさんNGNG
次スレきぼん。どなたか宜しくです。
レス数が950を超えています。1000を超えると書き込みができなくなります。