1 名前:デフォルトの名無しさん [2007/10/26(金) 08:26:46 ] 過去スレ PrologでまったりPart 2 pc11.2ch.net/test/read.cgi/tech/1102664221/ Prolog でまったり pc5.2ch.net/test/read.cgi/tech/976462999/ リンク集 www.summa.jp/lang/logic/prolog.htm bach.istc.kobe-u.ac.jp/prolog/ チュートリアル www.amzi.com/AdventureInProlog/ computing.unn.ac.uk/staff/cgpb4/prologbook/ www.intranet.csupomona.edu/~jrfisher/www/prolog_tutorial/pt_framer.html bach.istc.kobe-u.ac.jp/prolog/intro/ www.geocities.jp/m_hiroi/prolog/ www.asahi-net.or.jp/~JF1T-YSD/prologV2/
192 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:04:19 ] Prolog compiler の実装は、WAMが公開されたのでそれが主流になっている。 WAMでググってPDFファイルを熟読汁!
193 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:27:46 ] Prologを効率よく実行するためには、こういうアーキテクチャのコンピュータがあればよい、という、モデルとして、「Warrenの抽象機械(Warren's Abstrusion Machine)」というものがあります。 WAMはDavid Warrenという人が考案したものです。WAMは、そもそも、WarrenがPrologのコンパイリングの研究のために考えたものです。 そして、WAMは Prolog実行の本質をついていたので、WAM以降、 Prologマシンのアーキテクチャは強くWAMの影響を受けました。 WAM はレジスタベースの汎用マシンアーキテクチャを意識して, DEC-10 Prolog(当時主流だった Prolog 処理系)より洗練された機械語命令セットを持つコンパイル技術を提案しました。 今ではこの命令セットを持つ仮想マシンを WAM(Warren Abstract Machine) と呼びます。ちなみに標準のJavaバーチャルマシーンはスタックベースです。 WAM は,バックトラックが少なく,複雑なユニフィケーションも少ないという設計思想を前提に高速化を実現しようとしました。 David WarrenはSB-Prologの作者の一人です。SB-PrologはStony BrookにあるSUNYのDavid WarrenとSuzanne Dietrichによって作られ、メンテナンスがアリゾナ大学に移って、現在に至ります。 SB-Prologの実行系は、実は、WAMのインタープリタです。つまり、CでWAMの仮想マシン・インタープリタを記述し、実行はWAMインタープリタが行います。 SB-Prologでは、そのほとんどの機能がPrologで記述してあり、Prologのコンパイルがネイティブな機械語でなく、WAMへコンパイルします。 WAMは、極力"ごみ"データが少なくなるように工夫されていますが、大規模な応用プログラムを扱うためには Garbage Collectionが必要となってくるのでWAMを拡張した抽象マシンがいくつか研究されています。 SB-Prologのソースを読むと質問の答が得られると思います。
194 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:36:12 ] AndroidにはJavaのサブセット内で書かれたDalvik VMが含まれているが、これはレジスタベースになっている。 Dalvikは現在インタプリタ形式だが実機発売時期に合わせてJITに変更するらしい。
195 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:42:33 ] WAMの命令セットは、Prologの本質をついてるかはわからんが、暗黙的な操作が 多くて大変扱いづらい。手続き型言語の悪い所の見本のような感じ。 誰かがそろそろPrologのVMを再設計してもいい頃。
196 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:48:29 ] Prolog のコンパイルスキーム Prologコード → WAM (Warren's Abstract Machine) コード → アセンブリコード → 実アセンブリ WAMは、レジスタの少ないCPUには向かないのでSWI-Prologは遅いです。 それに比べるとSICStus/QUINtus は、Threaded code というのを使っているのでかなり速い。 AndroidのDalvikもたとえJITにしてもレジスタの少ないCPUでは速度がでないことはほとんど自明です。
197 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:52:37 ] >>195 >誰かがそろそろPrologのVMを再設計してもいい頃。 すでにある。 >>193 >WAMを拡張した抽象マシン >>196 >SICStus/QUINtus は、Threaded code というのを使っている
198 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:34:50 ] WAM に問題があるというよりCPUとのマッチングの問題じゃね?
199 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:36:33 ] threaded codeは実装のテクニックであって、VM/AMの命令セット設計の話 とは無関係ですよ。
200 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:59:36 ] SICStus/QUINtus はWAMを使っていないから全く異なる命令セット設計のVM/AMになっている。
201 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:13:32 ] WAMは滅びたんだ。よかった。
202 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:36:16 ] 商業ベースでは滅んだ。しかし、我々が使う全てのフリーの実装ではどうしてWAMが使われているのか?
203 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:45:41 ] >>201 こいつムカつくな
204 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:37:01 ] ああよかったよかった、Prologが滅びてw
205 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:19:54 ] >>189 トン それだとyaccで作れる構文木って複合項とかに禿げしく限定されない? :-とか優先度1200の演算子は任せられるか。後は単なるatom? それだったら自前でパーザ書いても大差なさそうだな >>190 壮絶に的外れ。 CやJavaでPrologコンパイラを書く場合に構文解析をどうするかって話。 WAMはその後の話。盛り上がってるからいいけど >>192 MIT PRESSのWAM本は読んだ。
206 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:32:56 ] prologの授業頑張ってたけど もっと頑張っとけばよかった・・・
207 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:36:57 ] >壮絶に的外れ。 親切にレスしてくれてるのによくこんな言葉遣いできるよな
208 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:48:33 ] Prologerには自意識過剰で人を見下す傾向がありますからw
209 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:51:10 ] ぶっちゃけ>190の読解力は目を覆わんばかり
210 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 01:55:16 ] WAM厨w
211 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 01:57:15 ] >>208 たしかにPrologerは電波出してる奴多いんだよw
212 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 13:19:23 ] >>209 同感w
213 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 14:59:08 ] ぶっちゃけ>>190 はネタだと思って笑い飛ばしていたんだが、マジだったのだろうか
214 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 18:11:46 ] たまにスレが伸びてると思ったら喧嘩ですか。
215 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:57:25 ] こんな過疎スレにも荒らしがきてるのか。必死に自演しても見るのは数人しかいないと思うが…
216 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 20:15:17 ] 喧嘩にはなってないだろ。>>190 がフルボッコなだけw >>190 の読み違いはプギャーだが顔真っ赤にして反論しないのは大人
217 名前:>>188=205 mailto:sage [2008/05/31(土) 01:09:36 ] 荒れる原因作ってスマソ だが本題のレスが>189だけなのは残念 ここの住人はProlog処理系もPrologで書くような人達なんだろうな 参考になる資料見つけた(PDF) THE DESIGN AND IMPLEMENTATION OF A PROLOG PARSER USING JAVACC ttp://digital.library.unt.edu/permalink/meta-dc-3251:1 JavaCCはPCCTS由来のLL(k)パーザジェネレータで>189と同じやり方。 HaskellのパーザコンビネータParsecをJavaにポートしたJParsecでは 動的な文法が扱える。これらを試してみる
218 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 06:44:21 ] >ここの住人はProlog処理系もPrologで書くような人達なんだろうな それが基本だし,今のCPUなら結構使える 他の方法使っても定数倍だろ?
219 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 07:15:42 ] ただし、日本語だけは勘弁な
220 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 07:24:46 ] こんなに人居たんだこのスレ・・・
221 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 07:33:45 ] >>219 ?
222 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 08:22:36 ] Parsecねえ www.lab2.kuis.kyoto-u.ac.jp/~hanatani/tmp/Parsec.html > が、 LL(1) 文法と同等の性能を出します。 www.haskell.org/haskellwiki/Parsec > but it performs best on predictive (LL[1]) grammars. なんか言ってること違う気がw
223 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:52:05 ] >>188 CMU Prolog Repository ttp://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/prolog/0.html にPrologで書かれたPrologパーサとCで書かれたPrologパーサが あったと思います.
224 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:56:02 ] >>193 DEC-10 PrologとWAMの作者のDavid Warrenは,David H. D. Warrenで ttp://www.informatik.uni-trier.de/~ley/db/indices/a-tree/w/Warren:David_H=_D=.html SB-Prologの作者のDavid Warrenは,David Scott Warrenで別人です. ttp://www.informatik.uni-trier.de/~ley/db/indices/a-tree/w/Warren:David_Scott.html
225 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:25:12 ] www.cs.vu.nl/~dick/Summaries/CS/PrologImplementation.html > Note that David S. Warren is not David H.D. Warren, the author of the Warren Abstract Machine. やべ知らなかったw
226 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 18:12:58 ] >>224 乙。
227 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:57:40 ] >>218 演算子を追加できる言語の代表格としてここで聞いてみただけで 対象の言語はPrologじゃないんだ。つか俺にPrologで実装は無理w >>223 禿げしくトン。これのことかな ttp://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/code/parsing/lp/0.html リンク先が切れてるけどここにあった ftp://ftp.elis.rug.ac.be/prolog/prolog.parser.tar.Z K&RのCなんて読むの久しぶりだw
228 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 06:54:55 ] rterm.cのreduceで順序立ててるみたいだから、結局同じなんじゃないの
229 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:38:10 ] >>228 同じって何と?>189と同じなら>205 > それだったら自前でパーザ書いても大差なさそうだな
230 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:14:22 ] 「演算子っぽいもの」っていうよりも、節を構成する項の列全体(「.」まで)を一旦スタックに積む感じだったよ
231 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:16:44 ] 「項の列」はちょっとまずいか。言い方わかんねw
232 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:36:16 ] >>230-231 >205の >:-とか優先度1200の演算子は任せられるか ってことだよね。','は優先度1000で':-'より強いから
233 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:54:23 ] >>200 > SICStus/QUINtus はWAMを使っていないから全く異なる命令セット設計のVM/AMになっている。 そのVM/AMについて調べたいのですが、どこかに情報あるでしょうか? 「Optimizing the SICStus Prolog virtual machine instruction set」 ftp://ftp.sics.se/pub/SICS-reports/Reports/SICS-T--2001-01--SE.ps.Z という資料があったのですが、これはWAMを拡張したVMのようです。
234 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 08:10:51 ] >>188 亀レスだが。一番普通に皆がやってるのは、 SWI-Prologのソースを参照する(盗む)ことだと思う。
235 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:55:42 ] >>234 質問する前に見たw 188で質問したのは「どうパーズするか?」じゃないんだ。 「パーザジェネレータで」できるかってこと。 動的といってもたかがしれてるんだから構文解析表を 操作すればできるんじゃないかと思ったんだけどね。
236 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:52:51 ] じゃあこれで en.wikipedia.org/wiki/Operator-precedence_parser >$ ./parenthesise a \* b + c ^ d / e >((((a))*((b)))+(((c)^(d))/((e))))
237 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:30:01 ] >>236 それ>188=235へのレス? 演算子順位法なんてコンパイラの本に普通に出てくるんだが。 そんなことも知らないと見下されてるわけか。バカにされたもんだな。 自前でパーズする方法を聞いてるんじゃないってことがなぜ伝わらないのか。 「○○というパーザジェネレータを使うと動的に演算子を追加できる」という情報が あるなら教えて欲しい、それだけだ。
238 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:51:09 ] ネタってことがなぜ伝わらないのか
239 名前:デフォルトの名無しさん [2008/06/14(土) 11:25:57 ] 後出しジャンケンって嫌われる傾向にある
240 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:10:23 ] 喧嘩腰w
241 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:20:34 ] >自前でパーズする方法を聞いてるんじゃないってことがなぜ伝わらないのか。 書き方が悪いってことがなぜ伝わらないのか。
242 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:26:15 ] >>241 少なくとも>235で伝わらないのは読み手の問題だろ。
243 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:48:06 ] 自演までしてネタにマジレスカッコ悪いw 頭悪いんじゃねw
244 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:59:05 ] >>243 スマン、俺は>>241 だがどこが自演なのか教えてくれないか
245 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:04:14 ] Prologの話しろよクソども
246 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:55:57 ] >>245 だいべんしてくれてありがとう
247 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:39:19 ] >>245-246 糞TALK(藁
248 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:44:26 ] バカ専用 普通 ハッカー ウィザード ┝ - - - - ┿━━━┿━━━┥ ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / | ( _●_) |ノ / 今はここら辺クマーー!! 彡、 |∪| ,/ / ヽノ /
249 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:21:02 ] まったりするスレだってことがなぜ伝わらないのか
250 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 03:50:56 ] 2chでスレ荒らし 普通 ハッカー ウィザード ┝ - - - - ┿━━━┿━━━┥ ∩___∩ /)
251 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 05:36:33 ] Ubuntu7.1 で Progol4_4 をmakeするとエラーに なるのですが、なにかご存知の方、 コメントをください。 # sudo sh expand.sh ・・・解凍して展開・・・ gcc -O2 -c -o command.o command.c command.c: In function 'c_interp': command.c:55: error: 代入として無効な左辺値です とメッセージがでます。
252 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 06:53:04 ] command.c:55: error: 代入として無効な左辺値だってことがなぜ伝わらないのか
253 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 07:07:11 ] >>252 それは、判るのですが、どうすればいいのでしょうか?
254 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:24:24 ] 左辺値をキャストしちゃダメなんだそうで。 c-faq.com/ptrs/castincr.html www.kouno.jp/home/c_faq/c4.html#5 > キャスト は変換演算子であって、それは右辺値を生みだすと定義されている。 > 右辺値であるとするなら、代入することも++で足し算することもでき ないことになる > (pccから派生したコンパイラやgccの拡張機能が上の ような式を受け付けることは例外である)。 書き直す(左辺値用のマクロを用意する?)のが正しいと思うけれど、 gccのオプションをいじればどうにかなるのかも、なんて思ったりして。
255 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:28:15 ] いや、なんか適当にポインタを取ったりすればいいのかもしれない。適当。
256 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:01:28 ] しったかぶってただけでしたw
257 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:02:57 ] >>251 gcc.gnu.org/ml/gcc-help/2007-05/msg00082.html この人の場合、どうやら古いgccでコンパイルしなおしたらしい。 pagaddedって何かわかんないけど
258 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:45:24 ] そんなことも知らないと見下されてるわけか。バカにされたもんだな。 そういうことを聞いてるんじゃないってことがなぜ伝わらないのか。 情報があるなら教えて欲しい、それだけだ。
259 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:54:17 ] > By the way, I'm running the latest version of gcc on a Sunblade 100 workstation. だからpkgadd(ed)、かな
260 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 20:42:27 ] command.c > CTYPE(cclause)=pdot0; progol.h > typedef int BOOL, INT; > typedef long int LONG; > typedef double DOUBLE; > typedef char *STRING; > typedef char *POINTER; : > #define I_GET(i) ((i)->obj) : > #define CTYPE(c) ((LONG)I_GET(F_ELEM(2l,(c)))) : > struct item { : > POINTER obj; 世の中間違ってる
261 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 20:51:16 ] > #define CTYPE(c) ((LONG)I_GET(F_ELEM(2l,(c)))) #define CTYPE(c) (*(LONG *)&I_GET(F_ELEM(2l,(c)))) こんなんできたっけ
262 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:50:26 ] 普通 まったり 超まったり dat落ち寸前 ┝ - - - - ┿━━━━┿━━━━━┥ ∩___∩ /)
263 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:26:45 ] >>262 2ちゃんに「普通」なんつー概念はありえねーw
264 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:32:25 ] 自分以外を「2chでスレ荒らし」と言ってる奴だから、対話は成立しないだろ。ほっとけ。
265 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:23:04 ] Prologって何の問題を解くのに向いているのでしょう? 手続き的な処理には不向きな気がします。 私はこのスレを読んでシステムの用件定義時に個別の用件の妥当性 をチェックするなどに使えるかな?と思っています。 ミナサンはどんな問題を解くのに使われていますか? ちなみに、Javaや.Netなどから呼び出せたりするPrologってありませんか?
266 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:50:23 ] kaminari.scitec.kobe-u.ac.jp/PrologCafe/ www.cs.kuleuven.ac.be/~bmd/PrologInJava/
267 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:18:30 ] >>264 何か誤解されているようですが。
268 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:48:04 ] P# というのもあります。 homepages.inf.ed.ac.uk/jcook/psharp/psharp-1.1.3/dlpsharp.html Prolog から C# へのトランスレータということになります。 >>266 にでてくる PrologCafe で書かれています。
269 名前:251 mailto:sage [2008/06/17(火) 02:59:52 ] 皆さんの示唆によりまして、 めでたく、Progolの起動まで漕ぎ着けました。 ひとまず、ありがとうございます。 ひとまずというのは、 >>261 はその通り直したのですが、同様にエラーのでた (LONG) を「なんか適当にポインタを取ったり」という感じで コメントアウトしてしまったらうまく行った、ということです。 それでは、問題があるかもしれないから、今日 (LONG)を生かす方法を試みます。
270 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:38:51 ] >>265 Prologの手続的解釈というのもあります。あくまで、Prologをどう読むかということですが。 プログラマが副作用に着目している以上、深さ優先探索を「悪用」して、 あーやって、つぎにこうやって、という具合に読んでいくことは現実味があります。 関数型ではPrologから影響を受けたErlangが似た構文を持っています。
271 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:37:35 ] >>261 です piza.2ch.net/tech/kako/968/968727266.html >1 名前: 厨房エログラマ 投稿日: 2000/09/12(火) 11:54 > unsigned long a = 0xcccccccc; > (unsigned char)a = 0xff; > このようなコードをみました。 > VC++で試したところ、拡張子CPPではエラーになりましたが、 > 拡張子Cでは問題なく通り、aの値は 0xccccccff になりました。 > この代入はC言語の規則上では正しいのでしょうか? >10 名前: >8 投稿日: 2000/09/13(水) 08:15 > ANSIでは(unsigned char)aは左辺値じゃないから代入文の左辺に > は置けない。これはANSIでは「処理系依存」ではない。 > > この記述ができるコンパイラはANSIに従っていない。このため > VC6も-ZaでこのMS拡張仕様を無効にする手段を用意している。 > > gccではコンパイルできるが結果は0xccccccffでなく > 0x000000ffになる。同様に-ansi -pedanticをつけて厳格に > ANSIに準拠させるとエラーとなる。 > > 言語仕様を(暗記せよとはいわないが)調べるぐらいしたら sizeof(LONG) == sizeof(POINTER) という仮定がされている、という仮定をしてしまった気がするとです