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

Prolog でまったり

■ このスレッドは過去ログ倉庫に格納されています
0001人工無能NGNG
Cなどの言語とは全く得意分野も構造もちがうProlog。
そんなPrologについてまったり話しましょう
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自身が必要だったかと。
■ このスレッドは過去ログ倉庫に格納されています