Prolog でまったり
■ このスレッドは過去ログ倉庫に格納されています
0001人工無能
NGNGそんなPrologについてまったり話しましょう
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNGbignum演算からgcまで全部Lispで書いてあった。
0658655
NGNG0659デフォルトの名無しさん
NGNG素人まるだちでついまちえん
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG多少スレ違いの気もするが、マジレスすると、
関数の実引数を、値が本当に必要になるまで
評価しない方式のこと。
詳しくはHaskellスレか関数型言語スレで聞こう。
0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNGぴったり当てはまるものはないんじゃないの。
似たものとしては、制約プログラミングとか?
0665デフォルトの名無しさん
NGNGhttp://www.ccs.neu.edu/home/will/Larceny/
本当だ。
Chezの上に作ってるね。
それはそうと、メタインタプリタを作る事と
インタプリタを作る事の違いが誰もわかってないみたいなので
解説する。
極端な事を言えば、メタインタプリタを作るという事は
インタプリタのソースコードが提供されていて
そのソースコードを利用してインタプリタを作る事と等価である。
prologでprologを作るというのは
3行でmainルーチンが書けてしまうようなライブラリを使って
作っているだけに過ぎない。
一方プログラムを作る一番原始的な方法は
アセンブラで書くことだけれど、
実際にはプログラミング言語を使う。
それはコードの見易さと言語に実装されている機能があるから。
あるプログラミング言語Aでプログラミング言語Bを実装するには
BにはあってAにはない言語機能を実装する事になる。
GCのある言語を使えば、GCのある別の言語を実装するのに
GCを実装する必要はない。
しかし、GCの無い言語を使う場合、必ずGCを実装しなくてはならない。
0666デフォルトの名無しさん
NGNG本当にprologを作った事になるのか?
この答えは微妙である。
あるプログラムを作ったとしよう。
99%が他人の作ったライブラリーを使っている時
それを自分で作ったと言い切れるか?
ブラウザを作るのは簡単と言っているVB厨を認めるか?
個人的な意見を書けば、prologでprologを書く事に意味はないので
(有益な機能を追加したprologを作る事には意味がある)
prologを作るというのは、prologの持つ言語機能を
実装する事を指すと思う。
しかしながらアセンブラでやれとは言わない。
なぜなら、プログラミングにライブラリーはつき物だから。
でも、スタックを実装するのにVectorを使うバカはいないよね?
prolog「特有」の言語機能を持たない言語で作る事
が普通だと思う。
そうする事には意味があって、
例えばC言語でGCを実装すれば
C言語でGCが使いたい時はそれを使う事ができる。
prologでprologを作るのは
perlで正規表現モジュールを作るのと同じくらいバカげた事である。
0667デフォルトの名無しさん
NGNGメタインタプリタをネイティブコンパイラ
(あるいはトランスレーター)でコンパイルすると
何が出てくるか?
という質問があったけれど、適切な答えが無かったので。
答えはインタプリタ(コンパイラも同じ?)を作った事のある人間なら簡単。
インタプリタの実行過程を考えると、
ソースコードをまず内部表現に置き換えるわけだ。
内部表現はC++ならクラスとかに切り分けて表現されるのだけれど。
トランスレーターはそのインスタンスを実際に作った物
コンパイラはそのトランスレーターで出したコードを
コンパイルした物とほとんど変わらない。
つまり、コンパイルしても起動速度以外は
速くならない・・・理論的には。
以上
prologをlispに置き換えてもらっても同じです。
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNGただのアフォ?
それはそうと、メタインタプリタを作る事と
インタプリタを作る事の違いが誰もわかってないみたいなので
解説する。
>極端な事を言えば、メタインタプリタを作るという事は
>インタプリタのソースコードが提供されていて
>そのソースコードを利用してインタプリタを作る事と等価である。
>prologでprologを作るというのは
>3行でmainルーチンが書けてしまうようなライブラリを使って
>作っているだけに過ぎない。
Prologで「ちゃんとした」Prologインタプリタだって書けるが。
>個人的な意見を書けば、prologでprologを書く事に意味はないので
>(有益な機能を追加したprologを作る事には意味がある)
じゃあ、CでCを書くことにも意味は無いわけだ。何で書くの?
>メタインタプリタをネイティブコンパイラ
>(あるいはトランスレーター)でコンパイルすると
>何が出てくるか?
>という質問があったけれど、適切な答えが無かったので
>>608-610 のこと?答出てるじゃんか。
>つまり、コンパイルしても起動速度以外は
>速くならない・・・理論的には。
何と比べてるんだろ。
普通、インタプリタはコンパイルしてから実行するもんだが。
0670デフォルトの名無しさん
NGNG「CでCを書く」のも理解できないのか?
Cの処理系だって、(setjmpやva_argsなど)Cでは書けない部分が
たくさんあって、一部はインラインアセンブラ等でかかれている
わけだが、そうすると「Cで書いたとは呼べない」とか?
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG>たくさんあって
動作を実現するだけならできると思うよ。
できないと思うオペレーションがあったら書いてみて。
0673デフォルトの名無しさん
NGNG「ちゃんとした」って何?
C言語で書くなら
soloveとcloseを実装するだけだけど
C言語のスタックだと解探索の途中で結果を見る事ができないから
自分でスタックを作らないと厳しいのかな。
VMクラスが提供されてるなら
vm.setGoal(clause);
vm.solve();
で終わりだけどねw
prologのソースはたくさん落ちてるから
それを使えば簡単。
Prologを使ってPrologを作るってのは
VMクラスを使ってPrologを作る事と大差ないな・・・
CでCを書くことにどんな意味があるんだろう・・・
0674672
NGNGC言語のインタプリタならC言語で作れると思うけど。
Cコンパイラの事を指してるなら、
機械語を生成するプログラムだから
また話は別だと思うよ。
コンパイラが作れれば、ソースコードをコンパイルして実行する
という過程を経てインタープリタができるという人もいるかもしれないけど
実はCPUっていうVMにあたる物を利用してるわけでして。
だから、コンパイラが作れればインタープリタが作れるというのは
ちょっと違う気がする。
それうじゃないとしても、
インタープリタとコンパイラを区別して
話を進めても問題ないよね。
ところで、C++のインタープリタって作れる人いる?
俺はたぶん無理だ。
0675引き篭もり
NGNG> 本当にprologを作った事になるのか?
PerlでPerl処理系を作ったら本当にPerl処理系を作ったことになるのか?
> ところで、C++のインタープリタって作れる人いる?
今は作れないけどちょびっとずつ努力はしている。
0676デフォルトの名無しさん
NGNG1.PerlでPerlコンパイラを書き、
2.それを使って「Perlで書いたPerlインタプリタ」をコンパイルし、
3.Perlインタプリタのバイナリが得られた。
としたら、そりゃ「本当にPerlを作った」としか言いようが無いだろ。
CもPrologも同じ。SICStusはそうやって作られている。
0677デフォルトの名無しさん
NGNG問題を整理しろよ。
・PrologでPrologコンパイラは書けるか?
もちろん書けるよな。
・PrologでPrologインタプリタは書けるか?
もちろん書けるよな。
・「Prologで書いたPrologインタプリタ」をコンパイルしたものは、実用的か?
実際、代表的な処理系がそうやって作られているよな。
・「PrologでPrologインタプリタを書く」のは、Cで書くより楽か?
楽だよな。
・実用プログラムを書くとき、より楽な方法で書くのは悪いことか?
お勉強とか実力を示すとかの目的じゃなくて、できあがったプログラムが欲しい
だけなら、より楽な方法で書くほうが良いに決まってるわな。
…で、何が問題なんだっけ?
0678デフォルトの名無しさん
NGNGC のコードをコンパイルしているらしいね。
>>676
Perl で Perl コンパイラを書くってのが怠そうだけど、C で書くよりも Perl
で書いた方が書き易いのかは気になる所。Scheme で Scheme コンパイラ書く
のは書き易いの?
0679デフォルトの名無しさん
NGNGパーザを手で書くならCより楽だろうな。
でもCにはyaccがあるし。Perlを吐くパーザジェネレータってあったっけ?
パーザ以降の段階は、Perl5ならCより楽だろう。メモリ管理とか気を使わないで良いし。
SchemeでScehemコンパイラを書くのは激楽だよ。つか、インタプリタはともかく、
コンパイラはどの処理系もほとんどSchemeで書いてあるんでは?
いわゆる「パーザ」の部分は単に(read)と書くだけだし、
マクロ展開→最適化→コード生成まで、すべてリスト処理だからな。
0680デフォルトの名無しさん
NGNGPrologで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これは自分でマシン語を生成するんですか?
という事は、CPU(機械語)の知識がないと作れない?
それともマシン語生成ライブラリみたいなのが
Schemeについているから、CPUの知識は不要?
わかる人いたら教えてください。
0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNGそれが一番大変だと思うんだが。
パーサーなんてコンパイラコンパイラ使えばいいし。
0684デフォルトの名無しさん
NGNG>PrologでPrologを作るのにはバックトラックを実装する必要はない。
「PrologでPrologインタプリタを書く」時についてはそのとおり。
だから、わざわざCで書くのは馬鹿馬鹿しいだけだよね。
コンパイラを書くときには(いったんWAMなどに落として)バックトラックを
実装するコードを出す。出すコードは何で実装しても同じ。
>>681
当然CPUの知識は必要。機械語じゃなくてアセンブリ言語でたいてい
間に合うけど。(CISCでコードサイズを最小化するなら、機械語が何バイト
になるか気にする必要がある。) ただ、出すコードについては何で
書こうと基本的に変わらない。Schemeのソースプログラムを操作したり、
中間表現を最適化したり、アセンブリ言語レベルでピープホール最適化を
したりするのが、CでやるよりSchemeでやったほうが楽。
0685デフォルトの名無しさん
NGNGこれはどういう意味?
WAMそのもの?
0686デフォルトの名無しさん
NGNG次はPrologコンパイラに挑戦しよう。
0687デフォルトの名無しさん
NGNGtest(A,A).
test1(A,B):-not(A=B),test(A,B).
こういうのをバックトラックするとき
データ構造はどうしてますか?
0688デフォルトの名無しさん
NGNG(WindowsでいうとEXEファイルのような)
ファイル出力できます?
Prologコンパイラの出力って単独で実行できないけど
インタプリタより速度が速い中間言語みたいのを
指すんですよね?(間違っていたらすいません)
0689デフォルトの名無しさん
NGNG中間言語にコンパイルするものもある。
0690デフォルトの名無しさん
NGNGtest(A,A).
test1(A,B):-not(test(A,B)),A=1,B=1.
とあった時
test1(A,B).
とするとNOと返ってきますが、
これはどういう風に考えればいいのですか?
0691デフォルトの名無しさん
NGNGPrologがきちんと扱えるのは1階述語論理だけ。
0692デフォルトの名無しさん
NGNG「こういう」も何も、Prologランタイムのデータ構造といったら、
global, local, trail, controlの4本のスタックでしょ。あとヒープ。
>>691
test(A,B)が成功した瞬間にnot(test(A,B))はfailするよね。
0693デフォルトの名無しさん
NGNGどっかに詳しい資料ないかな・・・
0694デフォルトの名無しさん
NGNGstructureは確かにglobal stackに割り付けられるが、
atomやfunctorはヒープに割り付けられる。
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNGどんな言語でも。
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGどんな方向に逝ってるの?
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNGX = 832040
はできるのわかるけど、
fib(X,832040).
X = 30
ってできるの?
0701デフォルトの名無しさん
NGNGそれはおそらく制約論理プログラミングの領域だと思う
0702誰か
NGNGソースコードを見てアドバイスをしてくれる神はいますか?
0703デフォルトの名無しさん
NGNGadd(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の表現が大変だけど。
0704702
NGNG凡人には無理でした。
バックトラックする時、どこまで探索したかを記録するのを
忘れていました。
0705デフォルトの名無しさん
NGNGhttp://www.ifcomputer.com/News/SpectaclesDesign/home_jp.html
http://www.ifcomputer.com/News/NikkeiAward/home_jp.html
0706デフォルトの名無しさん
NGNGバックトラックを実装するのは自分でも言ってるとおり
どこまで探索したかを保持しておけばいいんで別に難しくないが。
カットがあると多少めんどくさいけど。
0707704
NGNGそうかなー。
保持しておいて、再開する時どうすればいいのかとか
よくわからんです。
もしよければ、単純な物の概要みたいなのをソースコード風な表現で
書いてもらえるとうれしいのですが。
あとは引数の受け渡しがよくわかりません。
a(A,B):-b(A,C),c(C,B).
b(A,C):-A=C
とすると
必要な変数は
ABCとなるのはわかるんですが
b(A,C)が実行された後
どういうやりとりを行えばいいのかよくわかりません。
つまりA=Cというデータを渡すにはどうすればいいのでしょうか?
0708デフォルトの名無しさん
NGNG勝手に他人のサイトを直リンク!!
「法的根拠はない!!」
「だから直リンしてます」
ハァ?
ネチケットも守れない痛い厨のサイト晒し
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNG[A/C]という単一化のデータでいいのでは?
0712デフォルトの名無しさん
NGNG0714デフォルトの名無しさん
NGNGf(_,_,notequal).
これと
f(A,B,equal):-A=B,!.
f(_,_,notequal).
は同じですか?教えてください!
0715名無しさん@XEmacs
NGNG> は同じですか?教えてください!
同じじゃないでつ。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG下は yes となる。
0718デフォルトの名無しさん
NGNGf(_,_,notequal).
これのカットは不要でしょ
0719デフォルトの名無しさん
NGNGいると思う。?- f(1,1,R). でセミコロンを入れて、別解を求めると
R = notequal のほうも答えで出てきてしまう。
f(A,B,equal) :- A=B.
f(A,B,notequal) :- \+ A=B.
ならカットなしでOK。ちなみに \+ は not の意味
0720デフォルトの名無しさん
NGNGなるほど
0721デフォルトの名無しさん
NGNGって、単一化のときどうなってるんだろ。
ある程度有効なんだけど。
このへんがわかってないで、prolog組んでるのは
使える便利な機能があるのに
使ってないような気分になっていや。
0722デフォルトの名無しさん
NGNGnot(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> 論理的には正しくです。たとえば
論理的には正しくないです。たとえば
0724デフォルトの名無しさん
NGNG0725722
NGNGdif(A,B) は,一種の遅延評価で実現されてて,
A, Bの中身が決まるまでは,実行がブロックされてます.
だから ?- dif(A,B), A=1, B=2. でもOK!
ただし,SWI PrologやGNU Prologでは使えないと思う.
0726デフォルトの名無しさん
NGNGなんでprologって遅延評価を積極的にとりいれないんだろうね?
基本的には
節の前後を入れ替える事には問題がないはずなのに。
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGうーん、Prologという言語では、節の前後関係は非常に重要で、入れ替えは困難では。
節の前後関係を意識しないでPrologでプログラミングできる局面は限られると思うな。
それで論理型言語を標榜するのはおこがましいという批判はあるかもしれないけどさ。
例えばカットの入れ方なんて、節の前後関係と強く癒着してしまってるでしょ?
Prologに遅延評価を入れたら、...
えーと、ここで例えばリスト操作で困る具体例を挙げようとしたんだけど、うぅ思いつかない。
ということは愛着や気分だけで遅延評価を嫌ってるんか?(w >俺
0729デフォルトの名無しさん
NGNGカットはなくても大丈夫?なはずだから。
0730デフォルトの名無しさん
NGNGCやPascalのコンパイラのように単独で実行できるファイルが生成できる
Prologはありますか?
本来、Prologではそのようなコンパイルには不向きですか?
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG昔ボーランドが出してた Turbo Prolog は確かコンパイラ付きで
実行ファイルが生成できたが、
かなり方言のきつい処理系だった様な思い出が…。
今手に入る処理系でも探せば結構ある。
ttp://kaminari.scitec.kobe-u.ac.jp/logic/lp.html
0733デフォルトの名無しさん
NGNGそれじゃダメなのかな?
インタプリタは実行ファイルだし。
0734デフォルトの名無しさん
NGNG>昔ボーランドが出してた Turbo Prolog は確かコンパイラ付きで
興味深いお話ですね。今もあれば見てみたいところです。
>今手に入る処理系でも探せば結構ある。
ありがとうございます。
見たところProlog to Cという形で変換してからコンパイルすれば
希望が達成できそうです。
ただ、Prolog to Cが出来るのに直接Prologからコンパイルは
無いんですかね?
(Prolog to Cでも出来ると分かっただけでも収穫です。)
以前K-Prologがコンパイルできると聞いて試してみると
単独で実行できなくてがっかりしました。
(これはこれで、デバッグがすんだプログラムを高速化できて
評価できるものでしたが‥‥)
0735デフォルトの名無しさん
NGNG> 以前K-Prologがコンパイルできると聞いて試してみると
> 単独で実行できなくてがっかりしました。
dllかsoが必要だから単独では実行できないという話ですか?
> ただ、Prolog to Cが出来るのに直接Prologからコンパイルは
> 無いんですかね?
>(Prolog to Cでも出来ると分かっただけでも収穫です。)
Cにしておくと移植コストがかからないので、楽なんじゃないでしょうか。
K-Prologの中間コードはほとんどマクロみたいだから、中身を機械語に
なおせばできるかも??
0736デフォルトの名無しさん
NGNGPrologってのはバックトラックみたいなのが言語に組み込まれているというか
それを前提にプロログソースコードを書くわけだ。
コンパイルって言ってるのは、機械語へのコンパイルの事を指している
と思うのだが、
結局、機械語へコンパイルしても
プロログのソースコードを処理するコード+誰かが書いたプロログソースコードの
内部表現
という形になるだけなんだよ。
Prolog to Cも同じ。
結局のところ出力された機械語を最適化できないので、
ネイティブコンパイラの存在にはあまり意味がない。
(機械語の最適化なんてできないだろうけど)
って、そういう意味じゃないのかな?
>希望が達成できそうです。
つーか、何を希望しているのかよくわからない。
配布する時の事を考えているのなら、
インタプリタとソースコードをセットで配布すれば
いいのでは?
windowsならバッチファイルを使うなりすればいいと思うけど。
0737デフォルトの名無しさん
NGNG>なんかまたメタインタプリタの話がぶり返してきそうな。
お前が話したいだけじゃないのか?
わざわざageやがって
0738デフォルトの名無しさん
NGNGちょっとわからないのですが
> 結局、機械語へコンパイルしても
> プロログのソースコードを処理するコード+
> 誰かが書いたプロログソースコードの
> 内部表現
内部表現って機械語のことですか?
機械語って最適化できないのでしょうか?
WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
思うのですが..
0739デフォルトの名無しさん
NGNG>WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
大変興味深いお話です。
このような情報はありがたいです。
>735
>K-Prologの中間コードはほとんどマクロみたいだから、中身を機械語に
>なおせばできるかも??
これもWAMから機械語という内容が理解できれば
筋道が見えてきそうですね。
>>736
>プロログのソースコードを処理するコード+誰かが書いたプロログソースコードの
>内部表現
>という形になるだけなんだよ。
これは残念な情報です。私もこれを危惧しています。
>Prologってのはバックトラックみたいなのが言語に組み込まれているというか
>それを前提にプロログソースコードを書くわけだ。
バックトラックも含めてPrologをコンパイルするには何らかの工夫なくしては
実現不可能な動作がいくつかあるようでそれらを扱っていそうな研究も
”かつてずいぶんあった[738]”ということですのでこれらの研究と
その実装結果に興味があります。特に実装結果に(^^;
0740デフォルトの名無しさん
NGNG何をしたいのかが良くわからないから、
目的をはっきり書いてもらった方がいいかも。
俺が想像しているのは、
インタプリタにprologのソースコードを食わせるのと
コンパイラでprologのソースコードをマシン語にしたものを実行するのでは
処理内容が違うのでは?
という事を言っている気がするけど、
同じだよ。
処理の仕方が全然違うようなアルゴリズムを見つけられたら神なんだけど、
でも、コンパイラで実装できるものはインタプリタでもできるし
その逆も成り立つ。
>内部表現って機械語のことですか?
内部表現っていうのは、
例えば
述語や、節(WAMではTerm)は
あるデータフォーマット(構造体、クラス)として
記録されるわけだけど。
機械語じゃなくて、メモリへどういう形で配置するかという事。
>WAMから変換する機械語の最適化の研究はかつてずいぶんあったように
言ってる事が良くわからないけど、
WAMをベースとしたインタプリタの高速化の研究は当然合ったと思うけど
WAMが処理する中間言語を機械語へどうマッピングするかなんて
工夫しようがないけど。
0741デフォルトの名無しさん
NGNGバックトラックという言葉からもなんとなく予想できるけど、
prologのソースコードの中に定義された述語が
木を構成する事は理解できるだろうか?
すなわち、prologのソースコードを書くことは
木を定義する事とほぼ見て取れる。
あとは、その探索をインタプリタがするだけ。
でも、一方で
C言語のような直線的?なプログラムを書いているような気分で
プログラムできる事も間違いなくて、
だから、そういうプログラムに対して無駄な
バックトラックを省いた(というよりもバックトラックしない)
機械語が生成できるような気がしてしまうのもわかる気がする。
でも、そうやって作った直線的なプログラムは
バックトラックのコストは小さかったりする。
すなわち、木の高さは高くても、ノード数が少ない。
0742デフォルトの名無しさん
NGNG本当にWAMの勉強したことあるの?
> 内部表現っていうのは、
> 例えば
> 述語や、節(WAMではTerm)は
> あるデータフォーマット(構造体、クラス)として
> 記録されるわけだけど。
WAMでは、述語や節は、WAM機械語命令の列にコンパイルされるよ。
データとして記録はされないです。
0743デフォルトの名無しさん
NGNGttp://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俺はあまりWAMについてよく知らないけど。
資料だけはPCにあるよ(そのうち読んでみようとは思うけど)
その資料によると、Termは
クエリーを受けて、ヒープに作られるって書いてあるけど。
Figure2.1を見てくれた方がいいかと。
内部表現=内部representation
内部って何?internal?
ところで、WAMを勉強する意味って何?
>WAMでは、述語や節は、WAM機械語命令の列にコンパイルされるよ。
>データとして記録はされないです。
正直これを見た感想としては、インタプリタの内部構造について
何も知らないんだなーと。
間違ってたらスマソ。
まあ、そうであれば自分でWAMベースのインタプリタを実装してみるといいよ。
本当はWAMなんて参考にしないで、0から自分で考えるといいと思うけど。
0745デフォルトの名無しさん
NGNGラストクリトリスですか?
0746デフォルトの名無しさん
NGNGJAVAで言うVM
0747デフォルトの名無しさん
NGNG>>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サパリワカラン!(・∀・)
0751デフォルトの名無しさん
NGNG絶望しますた。
0752デフォルトの名無しさん
NGNG興味あるかないか
あるいは、知っているかいないかの問題だと思うけどね。
WAMについては、
http://www.vanx.org/archive/wam/wam.html
のPDFを読めばいいんだけど
英語という壁がね。
その前に、prologという言語について知る必要があるし。
0753デフォルトの名無しさん
NGNGProlog使いの方から。
Prologでプロトタイプを組んでうまくいったら
他の言語で書き直すといいというお話を伺ったことがあります。
ただあいまいな記憶で何か前提条件とか特定の場合を指していた
ような記憶があるのですが思い出せません。
そのときは、ただ納得していました。
もし、Prolog使いの方とかなんとなくわかる方がいらっしゃれば
「Prologで組んでから他の言語で」という方法が良い場合を
書き込んでいただけませんか?
余談ですが、
そのProlog使いの方は、Prologでは長い(大きい)プログラムを
いくつか構築していましたが、それらは他の言語に移植されておらず、
その方のプログラムの中では割と短い(小さい)プログラムしか
他の言語で書き直していないようでした。
(長いとか短いとか主観的な表現ですいません。)
0754デフォルトの名無しさん
NGNGでも、JAVAじゃなくてPROLOGを使いたいケースなら
思いつくけど。
やっぱり、普通(普通の意味は置いといて)のプログラムは
C++とかJAVAで書きたい。
話の途中で悪いけど
オブジェクト指向のPrologって知ってる?
どう思う?
どこかにホームページがあったので探してきます。
■ このスレッドは過去ログ倉庫に格納されています