Prolog でまったり
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001人工無能
NGNGそんなPrologについてまったり話しましょう
0002名無し娘。
NGNG実際人工知能ってどれくらいのもの作れるの?
0003名無しさん@お腹いっぱい。
NGNG1自身がよく判ってないので終了。
0004(V)o\o(V)
NGNGちなみに、Prologについは全くしりません
0005名無しさん@お腹いっぱい。
NGNG文法すらわからん。
フリーの処理系ありますか?
00062
NGNG1じゃね〜ぞ!!
00072
NGNG0008名無しさん@お腹いっぱい。
NGNGここになにかあるよ。
0009名無しさん@お腹いっぱい。
NGNG0010名無しさん@お腹いっぱい。
NGNG0011名無しさんi486
NGNG0012名無しさんi486
NGNG0013名無しさん@お腹いっぱい。
NGNG歴史とか背景とか
0014名無しさん@お腹いっぱい。
NGNGhttp://www.ifcomputer.com/home_jp.html
とくにここなんかはどう?
http://www.ifcomputer.com/Products/IFProlog/Manuals/v4.1/user_guide/concept/home_en.html
00158
NGNGhttp://www.latech.edu/~acm/helloworld/prolog.html
0016初心者ちゃん
NGNG0017Prolog
NGNG0018名無しさん@お腹いっぱい。
NGNGJAVAの足元にも及ばない位、すごくないです。
0019名無しさん@お腹いっぱい。
NGNGCよりもすごい
00205
NGNGさっそく gprolog インストール中です。
0021名前ついてますか?
NGNGでも Prologって本当につかえるソース見たことないや。
パズル解くぐらいなら書いたけどねえ。
でも ICOTでは Prologマシン作ってたんだっけ?
0022名無しさん@お腹いっぱい。
NGNGと印字するプログラムを教えてください
00235
NGNGmember(X, [X|_]).
member(X, [_|L]) :- member(X, L).
になると 理解できるけど、書けません(x_x)。
こんなの思いつきません(x_x)。
しかし.....楽しい^^)
0024名無しさん@お腹いっぱい。
NGNGそうそう、ユニフィケーションと代入の大きな違いだね。
>>23
リストを先頭と2番目以降に分けて考えるやりかたは、
prolog出現前にlispでしゃぶりつくされた常套手段だから
当たり前のように使えるようになっておくといいよ。
0025名無しさん@お腹いっぱい。
NGNGICOTが作っていたのは非ノイマン型の「第五世代コンピュータ」。
色々な研究が為されて成果もあったけど、結局のところは、
「ノイマン型で高速化・高集積化する方が産業的に成功する」
という現実に叩き潰されたと思う。
0026名無しさん@お腹いっぱい。
NGNGなんかで読んだけど計算機を作ったときに
「俺の次に計算の速い奴が確定した」
とか言ってた話を読んだことがあるけど
0027名無しさん@お腹いっぱい。
NGNG0028名前ついてますか?
NGNGで、調子に乗って 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ってもしかすると KL/1だったっけ。並列 Prologの一種の。
>>26 すごいっす。やつがいなかったら日本は被爆国になってません。
# いや、多分。
0030名無しさん@お腹いっぱい。
NGNGロスアラモスで、エッカート(だったかなぁ)が計算機を、
ファインマンが計算尺をそれぞれ忙しく操作している時、
傍らに座ったノイマンが暗算で最も速く答を出していた、
というようなエピソードが「御冗談でしょうファインマンさん」
に載ってる。
0031名無しさん@お腹いっぱい。
NGNGノイマンが爆縮レンズを考案しなかったら、
核爆弾の完成はかなり遅れただろうね。
0032名無しさん@お腹いっぱい。
NGNGCIAにマークされたかもしれんな。
ヤバイ情報を収集すると特殊機関にマークされるらしい。
これで俺も有名人!!
0033名無しさん@お腹いっぱい。
NGNG0034名無しさん@お腹いっぱい。
NGNG0035名無しさん@お腹いっぱい。
NGNGずらいのかな
0036デフォルトの名無しさん
NGNGmember(_, []) :- 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それだけじゃ、で?って感じだけど...
もっとPrologならではっての無いの?
0038デフォルトの名無しさん
NGNGPrologで解答をお願いします。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGPrologの特徴を十二分に表現してると思うけど。
0042デフォルトの名無しさん
NGNGちなみに、36さんの奴をcにするとどうなるの?
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGPrologでは関係の記述がプログラミング。
命令の記述とは(全てではないが)データの流れの制御。
Prologではデータの流れは結果として起こる事でありプログラムがデータの流れを記述しているわけではない。
そのためmemberのようにある変数が入力ともなり得るし出力ともなり得る。
0045名無しさん@
NGNGhttp://www.lpa.co.uk/ppp.htm
0046名前ついてますか
NGNGalgorithmを書かないようにしてみたけど、当然実用的ではない。(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う〜む。なにか、人間の言葉みたいだけど、
なぜだかかえってわかりにくいな・・・
0048デフォルトの名無しさん
NGNG同意します。
頭がそっちに入ってる時には非常に分かりやすく感じるんだけど、突然見せられるとなかなか難解。
このあたりがPrologが普及しなかった(すでに過去形・・・)最大の理由だと思う。
結局人間にとっては手続き的思考の方が容易という事なのであろうか。
0049デフォルトの名無しさん
NGNG0050名前ついてますか?
NGNGでも実はそれじゃ使い物にならなくて (46の sortみたいな)
動作に依存した手続き的な書き方をしなきゃいけない場面も多くて。
そこらへんの切り替えが慣れないと大変なのかなあ。と思いました。
0051Pure Cer
NGNGなななな、何をやってるのかさっぱりわからない。
0052デフォルトの名無しさん
NGNGHPを知ってるかた居ませんでしょうか?
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNGこういう問題のことです、はい。
0055デフォルトの名無しさん
NGNGHP教えてクレクレタコら
0056デフォルトの名無しさん
NGNG0057タケ
NGNGともかく「性質」をならべるだけでいいのだから。
・大量のデータをファクトで置いとくときの
探索は非常に強力
・手続き的な部分が必要な場合、例えば、
解を複数出したくないときは!をどうしても
使わないといけない。
・ある述語が必ず成功するのか、失敗することも
あるのかを考えないといけない。
・他の手続き的言語とうまく組み合わせることが大事
なんじゃないかなあ。
以上!!
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG8QUEEN のことか?
http://www.geocities.co.jp/SiliconValley-Oakland/1680/prolog/prolog12.html
0061デフォルトの名無しさん
NGNGつーかプログラムか?あれ?SQLの方が
近いのではないかしらん。
0062>61
NGNG使い道おしえてくれ
0063デフォルトの名無しさん
NGNG第五世代コンピュータの開発に用いられたらしいですけど・・・
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG言葉の意味をおせーてくれ!たのむ!!
0067デフォルトの名無しさん
NGNGタイショウ率 R(Y,X) :- R(X,Y).
水位率 R(X,Z) :- R(X,Y),R(Y,Z).
かな〜
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGそのまま書けばいいんでない?処理系によるけど。
0071デフォルトの名無しさん
NGNG0072関数型牽制揚げ
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGUNIX版では結構あるんですけど、、、
0075デフォルトの名無しさん
NGNGwindowsに移植するってのは?
(ひょっとするとcygwin環境でそのままコンパイルできるかもしれないし。)
あとは、日本語に対応したlispやschemeの上で使うとか。
scheme上で動くのはschelogってのがあった様な。
0076デフォルトの名無しさん
NGNGレスありがとうございます。
基本的に初心者にも簡単に使用できるシステムを考えているもので、
cygwinでの動作はシステムの趣旨から反してしまうので、、、
せっかく教えていただいたのに、自分勝手ですみません。
schelogは知りませんでした。
調べてみようと思います。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGhttp://www.cs.rice.edu/CS/PLT/packages/schelog/
0084
NGNG0085デフォルトの名無しさん
NGNGって可能?
0086デフォルトの名無しさん
NGNGPlorog
Soralis
て間違えそうだな。
きをつけないと!
0087デフォルトの名無しさん
NGNGOOですか?
試してみれば?
008885
NGNGObject Prolog もできないかな〜ってことです。
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG009185
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG大丈夫だったか?その卒研。
0094デフォルトの名無しさん
NGNGObjectごとに「それぞれ違う論理」を学習していき、
最終的にObject同士の対話が成り立たなくなる、
バベルの塔のようなシステムっすか?(藁
009585
NGNGおっしゃるとおり卒研ボロボロでした。
どうも失礼しました
0096デフォルトの名無しさん
NGNGそれ素敵ですねw
0097デフォルトの名無しさん
NGNG本読まされて、所属研究室で開発したソフトのマンマシン部分にPrologイン
タプリタをC言語で組み込むっていうのをやったんだけど、その時読んだ本
が思い出せない…
なんとかウォーレンとかいう人の書いた本(もちろん洋書)なんだけど…
原始的な処理系の実装から始めて、高速化、最適化、バイトコード化していく
という内容なんだけど。誰か、いま読んでる人いない!?
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNGSQLとは次元が異なる
SQLみたいなのは、帰納的って事だろうね
0102デフォルトの名無しさん
NGNGかな?難しい漢字
0103デフォルトの名無しさん
NGNGWarren Abstract Machineか.懐かしいな.
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG0107105
NGNGけれども個人的にはシックリくる言語
0108106
NGNGあなたがプログラム組めないけど好き、という意味かと思った(w
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGチンポ自分でこすってるの?
おれは今こすられてるよ!ハァハァ
0112デフォルトの名無しさん
NGNG011397
NGNGそう!それ!
今のProlog勉強する学生さんは読まないのかな?
0114デフォルトの名無しさん
NGNGなんでprologとチンポが結び付いたのかが気になる
0115デフォルトの名無しさん
NGNGいまや(てか歴史上ずっと?)SQLしか存在しないに等しいけど、
Datalogってのがあったの。
関係論理に基づく問い合わせ言語なの。
Prologからカットをなくしたような言語だったらしいの。
動くのみたこ都内の。
0116>>115
NGNG出てたように思われ…
0117デフォルトの名無しさん
NGNG> SQL勉強してるんだけど、Prologってデータベースと何か関係ある?
論理述語はrelationと関係が深いので大あり。
Datalogは、Prolog知る者にとっては、SQLよりずっとpretty。
"Reational" databaseという事の意味も分かりやすい。
0118デフォルトの名無しさん
NGNG乱暴に言えば、SQLのテーブル名がDatalogでは関係を示す
述語名になると思われ
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG嗤
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デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGこれって効率悪いのかな。
0125デフォルトの名無しさん
NGNG理工書か?
0126デフォルトの名無しさん
NGNG2回も落として4回生まで残ったときは
マジで焦って勉強しました。
ハノイを解くプログラムを書け、って問題があって
筆記でガリガリ書きましたよ。
なつかしい・・・。
ちなみに、Masterでもその先生の授業を取って
詰め将棋をひたすら検索して解くプログラムとか
作りました。
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNGhttp://www.cs.mu.oz.au/research/mercury/index.html
只今.NET関連言語調査中につきダウソ中。
0130デフォルトの名無しさん
NGNGHaskellに乗り換えちゃった・・・
0131デフォルトの名無しさん
NGNG新しいの出てるね。
これが一応.NETのProlog処理系標準となるのかな?
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG推論?
0134デフォルトの名無しさん
NGNG言語仕様。
0135デフォルトの名無しさん
NGNGがあったので買いました。
推論の入門によさげです。
本に参考文献ってあるけど半分以上入手できない予感・・・。
0136デフォルトの名無しさん
NGNG伝統的なPrologのメリデメが分るから。
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNGメリデメってなに
0141デフォルトの名無しさん
NGNG0142functor
NGNGおまえら、普通 cut ! の作用を「副作用」と呼ぶものでしょうか?
厨房(老後目前だけど)の漏れは,、副作用というと、解の soundness(つまり、得られた解が論理的に正しいかどうか)に影響するものを連想します。
例えば破壊的代入や、Prolog でいえば assert のようなものです。
cut をどのように使っても、得られた解は sound であることが保証されています。(もちろん得られるはずだった解が得られなくなることが起きる)
そのような、穏やかな副作用(一般用語)でも、「副作用」(コンピュータ科学用語)っていうのでしょうかゴルァ
0143デフォルトの名無しさん
NGNG持つ以上の動作をすると副作用である。殆どの組み込み述語が
該当するほか、!も真であると同時に再充足を妨害するので
これを副作用と呼んでいる。
あくまで私がそう呼んでいるだけだが
0144デフォルトの名無しさん
NGNGFDのデータは家のマシンのどっかに眠ってるはずだけど....
0145デフォルトの名無しさん
NGNGって日本語でprologってみたいんだけど。
あるの?
0146デフォルトの名無しさん
NGNGK-prologかSWI-prologはできてた気がします。
0147デフォルトの名無しさん
NGNGlearn+linear+logic=prolog
0148デフォルトの名無しさん
NGNGイパーイありすぎて何がなんだかサパーリ分からん。
0149デフォルトの名無しさん
NGNGPrologを組み込んだ言語などはありますか?
Prologだけで何かを書くことはむずかしいので、他の言語に組み込む形で
つかうのが現実的であると思いますがいかがでしょうか。
たとえば、MLに論理型をくっつけたらしいMercuryとか
HaskellにあるらしいPrologのライブラリですとか。
#MLもHaskellも使えないから私にはどうかわからん
JavaとかC++に組み込んで使えるものがあったらうれしいのですが。l
0150デフォルトの名無しさん
NGNGこういうの?
http://www.kprolog.com/jipl/jipl_e.html
0151デフォルトの名無しさん
NGNG問題勘違いして間違えまくった…鬱
0152デフォルトの名無しさん
NGNGどんなことでしょうか?
いまいち用途が見つからずに悩んでるですが・
0153デフォルトの名無しさん
NGNG本気で言ってる?
0154デフォルトの名無しさん
NGNG英語の構文解析のプログラムとかはprologでやると簡単かも……。
確かに、MP3のエンコードとかそういうのには、
あまり役に立たないかも知れませんね(笑)。
0155デフォルトの名無しさん
NGNG「関数型言語に」であって別に「MLに」ってわけじゃないと思うよ。
つか、「論理型に関数型を」な気がしないでもない。
0156ざっしょくもの
NGNGあ、Prologの冒険なつかしいすねー!持ってます!
高校時代、好奇心でPrologやってみたくて買ったです。
ただ、5インチFDを読める環境が無く、
実際にプログラム組みたくても組めなくてもんもんとした覚えです。
0157デフォルトの名無しさん
NGNG構文解析って、他の言語でやってもそれほど骨ではないです。
他の言語では地獄を見るようなものってあるかな?
0158デフォルトの名無しさん
NGNGJava上のPrologならいろいろある。
アプリに組み込み可能なPrologエンジンとしては、ilogが有名。
http://www.ilog.com/
用途は、経路探索とか縦型検索問題、その他。
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNGArtificial 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デフォルトの名無しさん
NGNGArtificial 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デフォルトの名無しさん
NGNGArtificial 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デフォルトの名無しさん
NGNGbody_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デフォルトの名無しさん
NGNGtime_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デフォルトの名無しさん
NGNGbody_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デフォルトの名無しさん
NGNGArtificial 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デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173とをりすがりでしてご回答はムリですが...
NGNG#ソースコード乗せまくりで、いい感じ!
0174デフォルトの名無しさん
NGNGProlog って不思議な言語だねぇ。
ところで、Prolog って「ぷろろぐ」? それとも「ぷろろーぐ」?
0175デフォルトの名無しさん
NGNGえ?荒らしじゃないの?
0176デフォルトの名無しさん
NGNGQuestion 1
1. ?- symptom(Disease,_).
てことか?もしこんなウォーミングアップ程度からわかんないなら、
キミ相当ヤバイ。正直、出直した方がいいだろ。
>>174
日本じゃプロログが主流と思われ。国際的にはたぶんプロローグ。
0177宿題助けて下さいな
NGNG'?-' とかははじめからある前提でお願いします。
こっちではプロローグです。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG真性?
0181親切な人
NGNGヤフーオークションで、凄い人気商品、発見!!!
「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0182デフォルトの名無しさん
NGNG文法をほとんどそのままDCGで書くとそれが
動いてくれるってのはイイ!くない?
0183[ ◆rJF0ZGiM
NGNG?-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
NGNG0185挑戦 ◆rJF0ZGiM
NGNGこれはこれで簡単。
?-symptom(flu,X).
Q1-3.
これもこの1行でいいんじゃないかな?
?-symptom(X,headache).
0186挑戦 ◆rJF0ZGiM
NGNG0187デフォルトの名無しさん
NGNGGuile みたいかんじで。
Scheme で Prolog みたいな動作をさせるためには、
どんな勉強すればいいかな?
とりあえず、バックトラッキングだけでもいいんだけど。
っていうか、SchemeもPrologもまだほとんど覚えてないんだけど。
0188デフォルトの名無しさん
NGNG「Prologの技芸」に目をつけていたんですが、品切れ中の模様です。
0189デフォルトの名無しさん
NGNG再帰。
深さ優先探索とか、幅優先探索とか調べて見なされ。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG『機能論理プログラミング』という
Prologを使った機械学習とかそいういうのについて書いた本を
少し前に買ってちょっとだけ読んでみた。
難しくてまだ半分も理解してない。。。
0193デフォルトの名無しさん
NGNGごめん。
×『機能論理プログラミング』→○『帰納論理プログラミング』
でした。
0194デフォルトの名無しさん
NGNG制約論理プログラミングとかもあるらしいね。
方程式とか解けるのか?
0195デフォルトの名無しさん
NGNG探索木の枝を切るって事が分かれば難しくないよ。
簡単なメタインタープリタを書いてみると良く分かると思うよ。
0196デフォルトの名無しさん
NGNGを買ったけどよくわかりません。
とくにバックトラックを図で説明しているのですが、ああいうのはどうなんでしょうか。
カットにいたってはさっぱりわかりません。
0197デフォルトの名無しさん
NGNGttp://citeseer.nj.nec.com/cachedpage/225686/4
0198デフォルトの名無しさん
NGNGPrologのペトリネットはみたことあるけど。
0199デフォルトの名無しさん
NGNG短信があったと思うがどんなんだろう。
0200名無しさん@お腹いっぱい。
NGNG0201デフォルトの名無しさん
NGNGつまり儲かるような仕事(研究)に使える言語なんでしょうか?
0202デフォルトの名無しさん
NGNGで、論理式はホーン形式に限られている。
もっと、一般の論理式の真偽を求めれるプログラムないのか。
量化子なんかもOkのやつがいいね。
タブロー法あたりをプログラム化したものないかな。
0203デフォルトの名無しさん
NGNG絶版だったりどうでもいい本だったりして困ってます。
定番な良書や、この本で開眼した、というような推薦書はありませんか?
0204デフォルトの名無しさん
NGNGhttp://homepage2.nifty.com/logic/
http://homepage2.nifty.com/logic/ai6.htm にあるように
イベントが発生するとき、ゴールが設定されるというのは面白い。
でも、文章からはイタサが漂う。
0205名無しさん@お腹いっぱい。
NGNGワラタ
0206デフォルトの名無しさん
NGNGタワラ
0207デフォルトの名無しさん
NGNGWindowsの一部はPrologで書かれてるとかこないだ聞いた。
具体的にどこにどう使われてるかとかは知らんけど。聞いただけの話だから。
詳しい人いたら補足レスきぼんぬ。
0208デフォルトの名無しさん
NGNGまさか、Windows の一部は、Prolog と Epilog で
書かれているというオチではなかろうね。
0209デフォルトの名無しさん
NGNG言語のことじゃなくて、識別子のことね(Epilog
という一種の Prolog 言語があるから)。
0210デフォルトの名無しさん
NGNG「論理の木構造の深さ優先探索」て理解でいいんじゃなーい?
木の根の所にカニがいて、枝の先端にある柿をたびたいと思ってる。
カニは進行方向を見て歩けないし、カニにとって木は巨大な構造体だから、事前に最短経路を考えて辿ることはできない。
しょうがないから蟹知恵で、枝の分岐点の組み合わせをシラミ潰しに探索する(深さ優先探索)。
枝先端へ行って柿がなければ、一つ前の分岐に戻って(バックトラック)別の枝を試す。
カニは柿を食ったら別の作業をしたいが、その作業が失敗したからといって柿採りに戻りたくないからカット!
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG誰かユニフィケーションとバックトラックについて詳しく説明してください。
このままじゃレポートかけない・・・・・。
0213デフォルトの名無しさん
NGNGhttp://www.google.com/
0214厨房ですよ@Prolog
NGNG調べる=項の評価し、その結果を見ること。
バックトラック=ゴールが見つかったのに、別のゴールが無いか調べること
0215デフォルトの名無しさん
NGNGわー、わかりやすいー。
柿を食った後の作業で失敗しても、
柿を食う前には戻らないちゅうことですね。
0216デフォルトの名無しさん
NGNG0217age
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGLisp、Schemeの専売特許じゃなかったんだ。
知らんかった〜。
0220デフォルトの名無しさん
NGNG学生時代にやってもう忘れたけど、マジカルバナナをするプログラムとか言うのを演習で提出した覚えがある。懐かしい・・・。
0221デフォルトの名無しさん
NGNGWindowsのLispで動くかな?
0222デフォルトの名無しさん
NGNGその後名前が裏茄子に変わったと、本に書いてあったよね。
UTILISPはかなり前にインターネット上で公開されてたと記憶。
中島秀之せんせーって、今も産総研で活躍されてるよね。
メールで聞いてみたら?
0223デフォルトの名無しさん
NGNGCommon Lisp 用に書き直されてないかいな。
マジに聞いてみようか。(なんと恐れ多い)
入門書の付録のPrologはCommon Lispに書き直されたもの
が存在するんだよね。
多重世界機構かぁ。
0224デフォルトの名無しさん
NGNG0225名無しさん@お腹いっぱい。
NGNG0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGhttp://www.swi-prolog.org/
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGPCH creation point
ってなんですか?
よろしくお願いします
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG五世代プロジェクトの
0232名無しさん@XEmacs
NGNG> KLCはどうですか。
> 五世代プロジェクトの
KL1 ね。で、UNIXen で動くその言語処理系が KLIC。
Prolog とはかなり趣を異にするけど、これはこれで結構面白い言語だ
わな。副作用なしで入出力が扱えたりするところとかね。
0233貼っとく
NGNGhttp://dir.goo.ne.jp/computers/00941/00979/00988/
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG実行ファイル(.EXE)は作成されないの??
0237デフォルトの名無しさん
NGNGTurbo Prolog では作れたよ。
0238デフォルトの名無しさん
NGNGども。
0239デフォルトの名無しさん
NGNG0240okd
NGNG0241デフォルトの名無しさん
NGNGしかし、シフトJISコードの2バイト目に \ とかがあると
モロ化けるので、フォントを設定するくらいではどうしようもないね。
0242デフォルトの名無しさん
NGNGここみんな必見だよ
プロログの動作原理
http://web.sfc.keio.ac.jp/~tozaki/LP/01/handout/prolog-dousa/
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG?- available(girl,X).
no.
0250デフォルトの名無しさん
NGNG>>247 微妙
>>248 本当
0251デフォルトの名無しさん
NGNG深夜に自作自演ですか?
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGYes.
0255デフォルトの名無しさん
NGNGなかなか意味不明ですた
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG俺も始めたさー。
なかなか意味不明だよねん。
でも意味わからないままさくさく書けるようになってしまう自分も
意味不明なんよね。
まぁゆっくりいきましょか。
ちなみにうちはK-prologとProlog Cafeっす。
0259
NGNG0260デフォルトの名無しさん
NGNG同じく。只今いろいろといじり中
0261デフォルトの名無しさん
NGNGClauses of hoge/4 are not together in the source-file
というワーニングに苦しめられてます
hoge/4 はいっぱい書いてあんのになぁ
一応、ちゃんと動いてくれてんだけど
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGメッセージの通り、同じ述語を定義するファクトやルールを、
同じ所に並べて書いてないんだと思われ。
hoge(1). hoge(2). hage(hage). hoge(3).
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNGおお、スタイルに対して文句をいわれていたのかアレは・・・
ありがとう、おかげで綺麗に動くようにナタヨ・・・
0267デフォルトの名無しさん
NGNG・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つーか、差分リストってなんか役に立つの?
0270267
NGNG>>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デフォルトの名無しさん
NGNGPrologやってる人ってこんなのも簡単に書けちゃうのかな。
始めたばっかなんで漏れには激しく難しかったんですけど。
・a、b、c、dの4人でレースをした。
・赤、緑、青、黒の服のうち、それぞれ違うのを着ている。
・w、x、y、zの形のブローチのうち、それぞれ違うのを着けている。
・赤服に続いてaがゴール。aに続いてyブローチがゴール。
・zブローチの次にb。bに続いて青服。
・wブローチの次に黒服のc。
Q:1位、2位、3位、4位はだれで何色の服でなんのブローチか?
0272デフォルトの名無しさん
NGNGふつうはまず、「順列を(全とおり)作る述語」を作ると思う。
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デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG?- S = s(S), copy_term(S,T).
ひょっとして使える方が変なのか
0275271
NGNG最初に条件同士が成り立つ組み合わせを求めて、あとで並べ替えを
当てはめてみる感じでやってみました。(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]
次レスにソース。
0276271
NGNGcondition([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デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNGX=[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).
って書かれてるとして、
こういうのも差分リストで効率化できる?
0279278
NGNGrotateの間違い。
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNGgetSet(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
ううん、それで十分効率的だと思うのですが。
0282281
NGNGgetSet(SET,[],SET).
getSet(OLD,[X|XL],NEW2):- addSet(OLD,X,NEW), getSet(NEW,XL,NEW2).
答えはgetSetにもOLD,NEWふたつつけることでした
0283デフォルトの名無しさん
NGNG--------------------------------------
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)
--------------------------------------
0284283
NGNGsplit_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).
0285283
NGNG0286283
NGNGつーかこんなの↑使わないか。
rotate_d(A-AX,B-BX) :- split_d(A-AX,L-BX,B-L).
さらにややこしく
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGここはやさしくないのかな
0289278
NGNGお疲れ様でした。
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の効率がよくなかったってことか。
それにしても難解…
幾何の補助線みたいに考えればいいのかな。
0290278
NGNGrotate_d2(A, B) :- append(A, AX, As), split_d(As-AX,L-[],B-L).
0291デフォルトの名無しさん
NGNG日本語訳があるのはいいね(笑)
あと主要なbuiltin predicateが書いてあったらもっと良
0292デフォルトの名無しさん
NGNGhttp://web.sfc.keio.ac.jp/~tozaki/LP/02/handout/theory/lp.html
難しめの事もわりと平易に書いてる気がするんだけど。
0293デフォルトの名無しさん
NGNG[a,b,c|T]-T なんて差分リストを作りたいのだけど
どしたらいいんでしょ??
逆なら簡単なんだけど・・・
0294293
NGNG0295デフォルトの名無しさん
NGNGTの頭にc,b,aと足し込んで行くしか思い浮かばないんですが、
O(1)でやりたいってことですよね。きっと。
できるとしたらその解でも、できないならその証明でも
どっちでも面白そうなんで、識者の方、ご教示おながいします。
0296295
NGNGどう解決したんですか?>294
まさかappendとか・・・
0297293
NGNGappendデス(笑)
とは言え、私の使ってる奴は
appendが組み込みで、リストの分解
とかには使えないんで、
myappend([],L,[]).
myappend([X|L1],L2,[X|L3]):-myappend(L1,L2,L3).
list_dlist(L,H-T):-myappend(L,T,H).
です。
効率は悪いけど、殆どの処理を差分リストを用いて、
必要な部分だけ上のを使うってのでいいかなーって
思ってるのですが・・・
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG知ってた?
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG知らんかった。<LISPとかだと思った。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG知らんかった。<Cとかだと思った。
0307デフォルトの名無しさん
NGNGしらんかった。<中に本物の犬が入ってると思ってた。
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG文字列もリスト構造になってるんで、有名なKMPとかを使ってもあんまり効率
は改善できそうにないし・・・
0312デフォルトの名無しさん
NGNGCでかく
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNGそうなの?
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNGhttp://www.t.ring.gr.jp/pub/GNU/gprolog/gprolog-1.2.13.tar.gz
その情報ならここにあるよ。変なURLかも知れないけれど、確実。
0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGprologの研究をしてる振りなのでprologが読めなかったり(苦笑
0320318
NGNG0321デフォルトの名無しさん
NGNGhttp://www.amzi.com/AdventureInProlog/
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG書いたプログラムを添削して下さいませんか?
/* 犬と、犬の主人と、
ヒンズー教の男と、牛が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デフォルトの名無しさん
NGNGselect( 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デフォルトの名無しさん
NGNGmember( 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デフォルトの名無しさん
NGNGSb == 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レベル高すぎ。俺は
mortal(ore).
mortal(omae).
とかだったぞ。
?-mortal(X)
とかやって、動いた、感動した、単位取れた、終わり、だったな。
0328デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGだれ(どれ)が、(安全に?)川を渡ればいいの?
ふれーむもんだいかな?
0331デフォルトの名無しさん
NGNGmortal っすか。
0332デフォルトの名無しさん
NGNG初めて自力で書いた(ある程度まとまった意味のある処理をする)プログラム
ということでよろしく。
mortal(X). で感動できたんなら、俺よりセンスありそうだ。感動は大事っす。
>>330
全員が川岸から反対の川岸まで、犠牲者を出すことなく渡ればOKっす。
0333デフォルトの名無しさん
NGNG情報学部系の人は授業などでやるようですね。
しかし仕事で使うことはまず無い言語ですよね?
0334デフォルトの名無しさん
NGNG案外難しいですね。
ループしないように履歴をもってないといけないと。
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNGなにそれ
0339デフォルトの名無しさん
NGNGアメリカのアフガニスタン攻撃作戦の名前でわ。
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNG誰か意見があればどうぞ。
0343デフォルトの名無しさん
NGNGエッチさせろ。
0344デフォルトの名無しさん
NGNGCould you insert your penis to my anal!
0345デフォルトの名無しさん
NGNGC++からも呼べるようにしといて。
0346デフォルトの名無しさん
NGNGProlog -> WAM のコンパイラをうpしてください。
ソースは、C,C++,Javaあたりでお願いします。
Prologで作ったPrologコンパイラばかりで困ってます。
0347デフォルトの名無しさん
NGNGコンパイルの時間が遅いってこと?
0348デフォルトの名無しさん
NGNGWAMがわからんってことです。
Prologソースも読めないし。
0349デフォルトの名無しさん
NGNGttp://member.nifty.ne.jp/K-8_PLANT/tsuka/bsiq150.html
0350デフォルトの名無しさん
NGNG[[], a, [b, [], [], c, []], [[[]]], [[[a]], [b]], []] が
[a, [b, c], [[[a]], [b]]] となる述語。
できそうでできませんでした(泣)
0351デフォルトの名無しさん
NGNGremove_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デフォルトの名無しさん
NGNGremove_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ってしてカットを抜いたほうがきれいかも
0355デフォルトの名無しさん
NGNGis_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和文が希望ですが、和文以外でもよいものがあればご教授ください。
Prologの動作の仕組みなどに興味があります。
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGママンのtitsでも吸ってろ!
0361デフォルトの名無しさん
NGNGJavaからPrologを利用できる
0363デフォルトの名無しさん
NGNG冗談にしてはつまらないな。
もうちょっとまともな事書けばと思ってしまった。
参考になればいいけど
0364bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0365356です
NGNG西門#さん
ありがとうございます。
Warren's Abstract Machine<A TUTORIAL RECONSTRUCTION>[wambook.pdf]の
「Prolog in a Nutshell 91」
「The WAM at a glance 97」
がよさそうですね。日本語の文献がよかったんですが、なさそうなので
とりあえずこれを読んでみます。
ありがとうございました。
0366デフォルトの名無しさん
NGNGためしに作ってみたんだけど、あまりにも簡単すぎて。
これでいいのかな。
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNGまさか Brainfuck で書いてないよね?
0369デフォルトの名無しさん
NGNGhttp://pauillac.inria.fr/~diaz/gnu-prolog/ から取れます。
何でもPrologプログラムをCプログラムにコンパイルしてくれるようで楽しみ。
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNGその会話サンクス
ちょーど質問しよーとしてたとこだた
0372デフォルトの名無しさん
NGNGただ動くだけのインタプリタなら、100行足らずで書けるよね。
効率よく動かそうと思うと1万行とかになるけど。
0373デフォルトの名無しさん
NGNG何が出来ればprologなの?
0374デフォルトの名無しさん
NGNG自分、prologすらつかったことありません・・・
0375デフォルトの名無しさん
NGNGhttp://www.ece.pdx.edu/~mperkows/CLASS_ROBOTICS/LISP/tanimoto/PROLOG.CL
とか?
もっと短くなりそうですけどね。
Horn節のresolutionができればPrologなんじゃない?
0376デフォルトの名無しさん
NGNGやはりSicstus Prologでは?
0377デフォルトの名無しさん
NGNGSicstusはQuintusの模造品。
0378デフォルトの名無しさん
NGNGexecute(P) :- predicate_property(P, built_in), !, P.
execute(P) :- my_clause((P :- Q)), execute(Q).
3行で書けたよ。
0379デフォルトの名無しさん
NGNGC言語しかわからない。・゚・(ノД`)・゚・。 うえええん
0380デフォルトの名無しさん
NGNGPrologをCへコンパイルするコンパイラを
Prologで書けばよい。きっと百行で書ける。
0381デフォルトの名無しさん
NGNGありませんでしょうか?
ラインエディタでは使いにくくて・・・・
外部でエディットしてconsult('filename'). 使ってファイル読み込めばいいのですけどね。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNGそれを使ってC→Prologの変換もできるよね?
0386デフォルトの名無しさん
NGNG親(ママ,花子).
兄弟(X,Y) :- 親(P,X),親(P,Y).
?- 兄弟(太郎,X)
太郎
兄弟(X,Y) :- 親(P,X),親(P,Y),X\=Y.
?- 兄弟(太郎,X)
花子
今はこれが精一杯。
0387デフォルトの名無しさん
NGNG性別をfactに持たせて、叔父、叔母、その他いとこやおじいさんおばあさんも
作ってみよう。
0388デフォルトの名無しさん
NGNGただの否定じゃ駄目なの?
0389デフォルトの名無しさん
NGNGバックトラックで問題にならないのかな。
0390デフォルトの名無しさん
NGNGnot_p(x) :- p(x), !, fail.
not_p(x) :- true.
cutがないと、上の節は必ず失敗するが、下の節があるので
結局かならず成功してしまう。
あと、双方向性がいらないときや、非決定性がいらないとき、
cutを使うと効率が良くなる。
>>389
問題になるよ。
副作用を使ったら、cutと同じく、双方向性や
非決定性が制限される。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG勝手にバックトラックして変な解まで見つけてしまうことがある。
それとか、最初の一つの解が見つかった所で処理を止めて次
に移りたい時とか。
0393デフォルトの名無しさん
NGNG> 激しくなつかすぃ「Prologの冒険」
> http://www.amzi.com/AdventureInProlog/
日本語翻訳本は絶版っぽいので、がんばって読み始めました。
激しく面白いです。
はやくパズルとかを解けるようにがんばります。
教えてくれてありがとう!
0394デフォルトの名無しさん
NGNG図書館にあるよ
0395デフォルトの名無しさん
NGNG0396356です
NGNGブラトコ(?)の本(多分「Prologの技芸」)にパスカルのサブセットを
マシン語にコンパイルする例があったと思うけどやたら簡単だった。
1日も必要ない。1時間もあれば理解できるじゃないかな?
0397356です
NGNG松田利夫 訳の本でした。ちなみに共立出版です。
(えっ、知ってた?)
0398356です
NGNGlispは簡単にprologを構築できると聞いたことがあるのですが、
そのあたりご存知な方いらっしゃいますか?
0399デフォルトの名無しさん
NGNG>>375
0400デフォルトの名無しさん
NGNGLISPのは、ちょっと厚い本には大抵載ってるよ。
>>375のは主要なオペレータが揃ってなかったり不完全な気がするけど。
schemeもschelog(本体はschemeコードで500行程度)
つーのがあったり、
SICPというschemeを例にしたアルゴリズム教科書に、
非決定性や論理型プログラミングの解説がある。
0401デフォルトの名無しさん
NGNGLispで書いたPrologインタプリタを使ってたと思う。
だから、例題も全部Lisp風の文法。
0402デフォルトの名無しさん
NGNGサンプルプログラム読むとふむふむと理解でき(た気になれ)るけど
いざ自分で書こうとすると何書いていいかわかんなくなる
0403デフォルトの名無しさん
NGNGとりあえずHello World的なプログラムを試してみたいんですが。
0404403
NGNG[../demo/likes].
とは書けないのね。
?- cd(../demo)
?- [likes].
でうまくいきました。
0405デフォルトの名無しさん
NGNGこれなんかけっこう簡単な割には
機能的には充分だと思うんだけど、どうかな?
0406デフォルトの名無しさん
NGNGCやJavaの方がまだマシだよ。ってかCとかJavaに慣れちゃってる人には
Prologって根本的に違うからわかりづらいね。
基本的なことはわかったけど、どう応用してよいのやらわからんよ。
「Prologへの入門」あべ著にあったプログラムをコピペしても走らなかったりするしさ〜
同じような境遇の人いたら同情しまっせ。
0407デフォルトの名無しさん
NGNG0408引き篭もり
NGNG0409デフォルトの名無しさん
NGNG0410406
NGNGテーマは強制的です。やりたくてやってたんじゃないんですよ〜
ちゃんと初めはやりたいことあったんですが「駄目だ!」と一蹴。
「うちの研究室では初めての分野だし・・・」とあーだこーだと
論点すりかえて説得され続けるのがいやになってあきらめたんです。
ツッコミ入れると面白いくらいあせってつくろうし。ガキみたいな教授です。
って愚痴ってしまってすいません。
がんばりますよ!
0411デフォルトの名無しさん
NGNGこんなとこで愚痴たれるお前の方がガキだろ。
いやなら教授殴ってやめちまえ。
0412デフォルトの名無しさん
NGNG差分リスト以外は
0413デフォルトの名無しさん
NGNGやらせようとすると脳内シミュレートが重荷で大変だと思った。
0414デフォルトの名無しさん
NGNG困難から逃げるのが好きな漏れはProlog絡みの卒研を履修放棄した。
0415デフォルトの名無しさん
NGNGテーマの内容は何?
0416デフォルトの名無しさん
NGNGどうしていいかよくわかりません。
誰か救いの手をお願いします。
0417デフォルトの名無しさん
NGNG既存の処理系のソース読破汁!!
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNGGNU-Prologのソースコードなら
http://gnu-prolog.inria.fr/
にあるじゃん。
0420デフォルトの名無しさん
NGNG>>417
>読破汁!!
2ちゃん語って非常に気持ち悪いんだけど、慣れないと駄目ですか?
0421デフォルトの名無しさん
NGNG2ちゃんねる見なきゃ大丈夫。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG2ちゃん語なんてものはありません。
ただ日本語すらまともに使えていないバカが多いだけです。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG0429Prolog
NGNG0430デフォルトの名無しさん
NGNGあれってprologで実装するもの?
0431416
NGNGある程度作って、だいたい動くようになったのですが
バックトラックが上手く実装できていないのと、
あと
test(A,A).
test1(A,B):-test(A,C),test(B,C),A=1.
の単一化を実現する上手い方法が思いつきません。
誰かバックトラックの実装方法と
上記の単一化を実現する実装方法を教えてください。
0432デフォルトの名無しさん
NGNG何が知りたいのかわからないけど、
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自信ないけど、アルゴリズムデバックじゃなく
アルゴリズミックデバッギングのように表記しない?
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-----------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デフォルトの名無しさん
NGNGfib(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).
とやる。
0438デフォルトの名無しさん
NGNGcutがないと、fib(0,0)にいったん成功して、その後バックトラックする時に
下の選択肢を探すことになる。(そのための情報がスタックに積まれる。)
でも、fib(0,0)に成功したならば、下の選択肢は無意味なので、cutで取り除い
てやる。
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNG実際には、cut無しでは実用的なプログラムが書けない。
0441デフォルトの名無しさん
NGNG制御が無いと駄目でしょ。
0442デフォルトの名無しさん
NGNGフィボナッチを分割統治とは渋いな。
っていうか何がうーむなのか。
0443デフォルトの名無しさん
NGNGファイル入出力は無くてもいいからね。
関数としてはカットは不要だと思う。
0444デフォルトの名無しさん
NGNGいや定義式どおりのありふれたアルゴリズムなんだけど。
指数オーダーなので実用には使っちゃ駄目なんだけど。
>>443
ファイル入出力がいるプログラムもあるんだけど。
関数じゃないんだけど。
0445デフォルトの名無しさん
NGNG計算論知ってる?
帰納関数知ってる?
0446デフォルトの名無しさん
NGNG知ってますが何か?
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGお前らに見せる価値はありますか?
0451デフォルトの名無しさん
NGNGワショーイ!!
0452デフォルトの名無しさん
NGNGそんなこと言われても(´・ω・`)ショボーン
見てみないと価値なんかわからないっす。
0453デフォルトの名無しさん
NGNGインタプリターの価値じゃなくて、
評価してもらう価値あるかって事では?
まあ、俺はたぶん読めるだろうけど
過去ログからもわかるように
バックトラックの実装すらよくわかってない奴が
ほとんどだと思うから
ここで公開しても、へたれコメントしか出てこないと思われ。
そもそも自分でインタプリター作れる奴はそれ程多くないし、
2chにはたぶんいない。
0454デフォルトの名無しさん
NGNG7行スレからパクッたのか?
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNG>そもそも自分でインタプリター作れる奴はそれ程多くないし、
>2chにはたぶんいない。
チミのレベルで他人を判断しないように。
研究者仲間でも、2ch読んでる人は多いよ最近。
0458デフォルトの名無しさん
NGNGむしろ、どういうレベルなの?
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGんー、チューリング賞はとれそうに無いが、
日本の学会の論文賞なら皆とっている。
0462デフォルトの名無しさん
NGNG分野によりけりだろ。
まあ、ためしにprologインタプリターでも作ってみろって
どうせ作れないだろうけど。
0463デフォルトの名無しさん
NGNGそれはあまりに簡単すぎる。
0464デフォルトの名無しさん
NGNG見せたいなら
もったいぶらずに
早く見せろやゴルァ!
0465デフォルトの名無しさん
NGNG以外といろんな人が見てますよ。さすがにプロフェッサーはないだろうけども。
0466デフォルトの名無しさん
NGNGネタかな?
0467デフォルトの名無しさん
NGNGもっと難しい課題の提案よろしく
自称レベル高いだから、さぞかしすごい事ができそうだ。
prologインタプリターを自動生成するprologのプログラムとか
0468デフォルトの名無しさん
NGNGschemeはちょっとセンスがいる。
両方ともインタプリタのままだと無茶苦茶遅いけど。
0469デフォルトの名無しさん
NGNG末尾再帰の最適化ってどうやるの?
パターン判定するの?
0470デフォルトの名無しさん
NGNG>>378 にあるとおり。
0471デフォルトの名無しさん
NGNGSchemeで書けば、自動的に末尾再帰は最適化される。
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNGそれを言うならメタサーキュラーインタプリタだろ。ハズカシ…
でも、どっちもインタプリタだよ。同じ事。
0474デフォルトの名無しさん
NGNGたいていCommon Lispで書いてあるしな。
0475デフォルトの名無しさん
NGNGPrologのインタプリタもフツーPrologで書くよ。
インタプリタの速度なんて誰も気にしないし、
コンパイルすればじゅうぶん速い。
0476デフォルトの名無しさん
NGNGメタインタプリタ>>メタサーキュラーインタプリタ
同じ意味だろ。
じゃあ、perlもrubyもevalで終わりか。
作れない言い訳にしては普通すぎるというか。
0477デフォルトの名無しさん
NGNGほんとに無知だな。
eval自身をその言語で書くのがメタインタプリタ。
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGlispでlispインタプリターを作る意味は何ですか?
0480デフォルトの名無しさん
NGNGそれが一番楽で実際的だから。
0481デフォルトの名無しさん
NGNGソースキボーン
0482デフォルトの名無しさん
NGNG作成言語はC++ with STLです。C++の勉強のために作った代物。
実は作成したのはscheme likeなlispなのですが、同じといえば同じ。
ガベージコレクションがたいへんでした。
しかし、そんなに難しいものじゃない。効率考えなきゃ、だれでも作れるでしょう。
0483デフォルトの名無しさん
NGNGネタ?
0484デフォルトの名無しさん
NGNGおまえ、ソースきぼんとかうぷしろとか
さっきからしつこいけど、アホだろ?
0485482
NGNG私に言っています?
すでにあげてるのですが、研究室のサーバに挙げてるので
おしえたくねー。疑われそうではあるけど、仕方ない。
どこにあげればいい?鯖いってくれりゃ、あげまっせ。
ちなみにmainとatom以外はtemplateで書いてるから、読みにくいよー。
0486デフォルトの名無しさん
NGNGメタインタプリタを作るのか
はっきりしやがれ
0487デフォルトの名無しさん
NGNG「SchemeでSchemeインタプリタを書く」のはメタサーキュラーインタプリタ。
メタインタプリタは、メタレベルのインタプリタ。
インタプリトされているプログラム(オブジェクトレベル)と
インタプリタ自身(メタレベル)は、意味的に『別』の言語、『別』のデータ
で表される。
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNGSchemeでSchemeコンパイラを書くのは何なんですか?
0490デフォルトの名無しさん
NGNGすげー
0491デフォルトの名無しさん
NGNGネタだと思われ。
0492デフォルトの名無しさん
NGNG何だろうね。別にメタとは言わないね。
理論屋がその言語自身のコンパイラで何かするとしたら、
「操作的意味論」と呼ぶかもな。
0493デフォルトの名無しさん
NGNGウプロダ
0494デフォルトの名無しさん
NGNGLispのプログラマを書いたことのある人間なら
別に意外でもないと思う。
たぶん、「型判定にvirtualメソッドを使う」とか
やってるんじゃないかな。
C++に慣れたプログラマだと「スマートポインタでGC」
とかやりたくなるかもしれないけど、それは止めたほうが無難。
0495490
NGNG>ちなみにmainとatom以外はtemplateで書いてるから、読みにくいよー。
この辺がネタ臭さを出してるけど、
でも、templateで書いてるなら普通にすごいかも。
0496490
NGNG0497490
NGNG期待してます。
是非、見せてください。
0498デフォルトの名無しさん
NGNG0499482
NGNGまじっす。まじっす。ほんとっす。
でも、defun,cons,cond,eq,car,cdr,print,terpri,...
程度の基本の基本しか実装してないです。凄いの想像したならごめんです。
入出力込みで2000行程度の代物。
もう少しすてきな感じになったら、世の知れたところに出しますので
そのときはよろしく(作ってて楽しくなった)。
キーワードは いろんなデータ構造をatomとして使えるLISP です(ありきたり)
LISP on design patterned でよろしゅうに。名前は未定さん。
0500デフォルトの名無しさん
NGNGまったく同じか、ちょっと違うかの違いだろ。
0501デフォルトの名無しさん
NGNGメタインタプリタはリフレクション用語。
0502482
NGNGごめんなさい、GCにスマートポインタをまさに使ってます。
遅い遅い。
すこしだけ、アップロードとやらをしてみます。
全部はダメぴょん。
0503デフォルトの名無しさん
NGNGネタ率95%
0504デフォルトの名無しさん
NGNGウザイ
0505デフォルトの名無しさん
NGNGコンパイルして動く程度はウプしないと
途中で挫折したくせに強がった厨房ケテーイ
となると思うけど
期待してるよ。
0506デフォルトの名無しさん
NGNG>どこにあげればいい?鯖いってくれりゃ、あげまっせ。
って書いてるんだから、仕方ないのでは?
0507506
NGNG0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNG0510482
NGNGこんなところに書くから、根幹は秘密の関係ないとこだけ。
名前空間省略!インクルード省略!!
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デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG0513490
NGNG題名
内容
URL
添付
ってなってるから
添付のところにウプしたいファイルを指定するだけだですよ。
0514デフォルトの名無しさん
NGNG書いた人を神とあがめるアフォが集まるスレはここですか?
0515490
NGNG俺にはできないけどなぁ
Lispもあまりよくわかっていなかったりする。
0516デフォルトの名無しさん
NGNGおめーもできないだろ、カス
メタインタプリタ作ってインタプリタ作ったつもりになってるバカですか?
0517デフォルトの名無しさん
NGNGまだメタインタプリタとメタサーキュラーの区別がついてない厨房がいる(w
0518デフォルトの名無しさん
NGNGでも、遊びならともかく、PrologインタプリタはPrologで書くのが
実際的だし、SchemeインタプリタはSchemeで書くのが有利だろ。
あらゆる意味で。
0519482
NGNGありゃ、こんなこと書かれてる。よけい火に油を注いだ形になりそうな予感。
しかし、もし挙げたら神になれるのかしら。迷うな。
正直なところ、あまり見せたくないんだわ。
こんなに重宝な感じでいわれると、もう少し、立派なところで公開したくなりました。もしかして、これって凄いのとかいう勝手な妄想。
コピー公開とかされたらムカつくので、ライセンスとってから公開します。
お騒がせごめんなさい。
0520デフォルトの名無しさん
NGNGインデントがないから激しく読みにくい(笑
0521デフォルトの名無しさん
NGNG見せなくて良いよ。
自分でインタプリタも書けないような厨房ども、どうせ見ても理解できない。
だいいちスレ違いだし(w
0522デフォルトの名無しさん
NGNGライセンス取るってお前アホ?
ライセンスってのはソースの片隅に
著作権アリって書くって意味だろうが。
作れる能力は確かにすごいだろうけど
作った物自体はたいした事ないでしょ。
同じ機能なら俺も1日あればできるよ。
その部分的なコードを見るとすごくネタなきがするんだけど・・・
心配ならsourceforge使え
0523522
NGNGくらいにしか興味ないから別にウプしなくてもいいけど。
この流れでやめたら釣り師だよな(笑)
0524デフォルトの名無しさん
NGNG>著作権アリって書くって意味だろうが。
うわ、すげーアフォだ(藁
0525522
NGNGprologなんかはバックトラックなどを実装する事に意味があると思うけど。
ふと思った、あれを幅優先で実装するとどうなるんだ?
カットを除けば、結果はかわらないだろうけど
なんか意味があるのだろうか。
0526デフォルトの名無しさん
NGNGもちろん結果は同じ。
空間計算量が異なる。
0527522
NGNGあれ、違うの?
スマン、説明お願い。
0528482
NGNGGNUライセンスなら結局そんな感じになりますがね。
でもコードに色々著作埋め込んだり、形式を一応整えたりと手間はあるんです。
ちなみにtemplateはclassをatomとして扱えるようにしてます。
結局的にatomの演算をatom自身に持たせたというところ。
簡単には足し算はatomの概念によってかわるから、うんたらみたいに。
そこをtemplateとabstruct virtual classでよいこら(ここが味噌だからさ)とね。
微妙にboostのpreprocessをつかってね。
釣り師です。以上です。
0529デフォルトの名無しさん
NGNG0530490
NGNG気分的には
「だったら言うなよ・・・」
ってとこですが、
見せてもらう側なので文句は言えませんが。
0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG主張しなきゃねーよ
0534522
NGNG具体性が全然ないんだけど。
無駄にtemplate使ってるだけなきがしてきたよ。
0535デフォルトの名無しさん
NGNGおいおい。ヴェルヌ条約加盟以前のアメリカならともかく、
日本やヨーロッパや今のアメリカは無方式主義だよ。
主張は不要。著作権は手続き無しで自動的に生じる。
0536デフォルトの名無しさん
NGNG0537482
NGNGよくわかってらっしゃることで。もしかして、あなたも作ろうとしたのかな?
正味、インタプリタとして用いるならtemplateは使わない方が簡潔に書ける
と思われます。ただし書く効率は別として。
ただ、別のプログラムの内部処理に組み込むことを考えていますので、
そのためのtemplateの意味もあります。
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGそんな事ないでしょ。
ソースコードは著作物だけど
権利を主張しない限りは、勝手にコピーされても
文句は言えない
0540デフォルトの名無しさん
NGNGおいおい…
Copyright (C) ....
が法律的に何の意味ももたないことを本当に知らないのか?
「無方式主義」でぐぐってみろや。
0541482
NGNG本当はインタープリターなんて作れないんです。
もう何も言わないでください。
0542482
NGNGせめてインタプリタとかいてほしかった。
ネタでしたごめんなさい。
0543482
NGNG0544デフォルトの名無しさん
NGNG>でも、遊びならともかく、PrologインタプリタはPrologで書くのが
>実際的だし、SchemeインタプリタはSchemeで書くのが有利だろ。
>あらゆる意味で。
実際的って何?何が有利?
作り方のお勉強程度の意味しかないじゃん。
0545デフォルトの名無しさん
NGNGスレ違いもいいところ。
0546デフォルトの名無しさん
NGNG本当にそう思ってたのか????
そこまで遅れているやつがこの世にいたとは…
0548デフォルトの名無しさん
NGNG俺はインタープリンタだと思ってた。プリンタの一種(w
0549デフォルトの名無しさん
NGNG鏡みろよ、かがみ。
0550デフォルトの名無しさん
NGNGいや実際、製品ではそうしてるけど。
そのほうが生産性ははるかにいいし、速度もそんなに変わらんし、
だいいちインタプリタの速度を気にしてもしょうがないし。
0551デフォルトの名無しさん
NGNG他にどうやって書くの?
0553デフォルトの名無しさん
NGNGそういう意味はあるかもね。
でも「著作権を生じさせる手続き」としては無意味だろ。
0554デフォルトの名無しさん
NGNGそれどういう意味?
>速度もそんなに変わらんし
インタプリタをインタプリタで駆動すんだから、
むちゃくちゃ遅くなるんじゃないの?
コンパイルするってオチですか?
0555デフォルトの名無しさん
NGNG2周年おめ。
0556デフォルトの名無しさん
NGNGオチもなにも…
まともな処理系なら*当然*コンパイラがあるだろ。
0557デフォルトの名無しさん
NGNGprologでprologを作れる可能性が高いけど
prologでprologが作れても
C言語でprologを作れる気がしないので、
prologでprologを作れると自慢してる奴はアフォ。
0558デフォルトの名無しさん
NGNGあのなあ、
インタプリタがすでにあるんならインタプリタ書く必要ねーじゃねえか。
コンパイラにきまっとるだろヴォケ。
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG自慢も何も、ふつうそうしてるし…
なぜC言語でPrologコンパイラ書けると偉いのかにゃ?
ただ余計な回り道してるだけに思えるが。
0561デフォルトの名無しさん
NGNGえ?
>>518にインタプリタを*書く*って書いてあるけど?
0562デフォルトの名無しさん
NGNGSchemeをCに落とすコンパイラはたくさんある。
そんなのをCで書いてたらアフォだがナー
0563デフォルトの名無しさん
NGNGだから、CなりPrologなりのコンパイラがまずあって、
Prologインタプリタがまだ無いときの話だろ?
頭があればそれくらい分かる。
0564デフォルトの名無しさん
NGNGC言語に落とすやつだと制限あるんじゃないの?
同じ動作しなかったり。
0565デフォルトの名無しさん
NGNGバイナリーにしても速度はほとんど変わらないよ。
メタインタプリタを実装してバイナリーにすると
速度がどうなるかは実際やった事ないけど、
VMと同じ様な動きになる気がするので・・・
という事は遅いとも限らないのか。
頭がこんがらがった。
0566デフォルトの名無しさん
NGNGまあ、黙って本格的な処理系のソース読んでみろや。
インタプリタは無かったり、コンパイラ使って書いてあったりするから。
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG制限は機能よりむしろ性能だろうな。
アセンブリ言語に落とすのに比べて、どうしてもペナルティがある。
インタプリタとコンパイラの動作の違いは、
SchemeやCommon Lispなら問題にならないと思う。
Prologは知らん。ISO Prologなら大丈夫じゃないの?
>>565
なんでVMが出てくるの?
0569デフォルトの名無しさん
NGNGなんで?
アフォはどうみても>>544だろ。
0570デフォルトの名無しさん
NGNGお前がな(w
0571デフォルトの名無しさん
NGNGなんでいきなりコンパイラの話になるんだろうね?
0572デフォルトの名無しさん
NGNGなぜか、インタプリタをインタプリタで書くなんていう
とんでもない想像をしたアフォがいるからだろうね。
0573デフォルトの名無しさん
NGNGそりゃ、STLがあるから線形リスト作れなくてもいいって
言ってるのと同じだな。
いい悪いじゃなくて、
能力的に、線形リストを作れる/作れない
の違いがあるだけ。
gccがあるからCコンパイラなんて作れなくても
いいというのは正論だけれど、
Cコンパイラが作れるという理由で
雇ってくれる会社はあるのでは?
要するに
PrologでPrologが作れる事は
100歩譲ってちょっとすごいと表現すれば、
CでPrologが作れる事は
かなりすごいのでは?
君が面接官で
二人の志願者からの情報が
1人がPrologでPrologつくれます。
もう一人がCでPrologつくれます。
どっちが優秀かの判定は簡単だよね?
0574デフォルトの名無しさん
NGNG>>518のことかな?
0575デフォルトの名無しさん
NGNGああ、つまりお勉強って事ね。
既に能力のあるプログラマには関係ない話だな。
ChezやSicstusは、わざわざおべんきょのために、
Cでインタプリタ書くような無駄なことをして
能力を実証する必要など無い。
0576デフォルトの名無しさん
NGNGなんで誰も具体的な商品名と、
ベースにした処理系を聞かないんだ?
0577デフォルトの名無しさん
NGNG>インタプリタをインタプリタで書く
意味がわからんのだが。
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNGいや、>>554のこと。
0580デフォルトの名無しさん
NGNGLISPでProlog作るのと、
CでProlog作るのと、
どれが一番良い?
0581デフォルトの名無しさん
NGNG「ベースにした処理系」ってどういう意味?
0582デフォルトの名無しさん
NGNGそうそう、勉強というか
実力を測る基準にはなるでしょ?
明らかに必要となる知識が違うしさ。
ただ時間がかかるだけじゃないよ。
あとは、やっぱり高速化って仕事もあるだろうから
C++で書いて自分で高速化したり
他の処理系が使ってる高速化アルゴリズムを知るのも
有益かもね。
>能力を実証する必要など無い。
関係ないけど、
実証しないと誰も認めてくれないよ。
0583デフォルトの名無しさん
NGNGもっとさかのぼって話の流れを追えよバカ。
0584デフォルトの名無しさん
NGNGいや、ChezやSicstusは、そんなアフォなことしないでも
みんな能力を認めてると思うんだけど(w
0585デフォルトの名無しさん
NGNGMacLispもLisp Machine LispもZetaLispも、その時点で最高速
だった製品は皆そうだったYo。
0586デフォルトの名無しさん
NGNG二人とも俺は知らないけど
(前がlispで後ろがprolog?)
他に業績があれば認めてもらえるのでは?
0587デフォルトの名無しさん
NGNG書いてみるのは良いと思うよ。
コンパイラ書いたほうが勉強になると思うけど。
実用的な処理系を(低レベルルーチンだけならともかく全体を)
Cでわざわざ書いたらちょっと…
と思うけど。
0588デフォルトの名無しさん
NGNG>つーか、70年代ごろから、LispはLispで書いてあるっつーに。
これって、インタプリタを書くわけじゃないよね?
この辺を勘違いしてる人がいるみたいなので。
0589デフォルトの名無しさん
NGNG単純なLispの上に複雑なLispを載せるという意味?
0590デフォルトの名無しさん
NGNGSICPの教科書の第4章みたいな*インタプリタではない*
ということ?
その辺ぼかして書かれると、知らんやつは誤解するぞ。
0591デフォルトの名無しさん
NGNGChez SchemeはCadence ResearchのScheme製品。
Sicstus Prologはスゥェーデンコンピュータサイエンス研究所のProlog製品。
どっちもその性能で超有名。シェアもトップ。
…これらを知らないのに偉そうなこと言ってるの???
0592デフォルトの名無しさん
NGNG>Cでわざわざ書いたらちょっと…
処理系をインプリする事が目的なら、高速化とか拡張は不要なのでは?
実際に使うために作るのか、処理系を作って勉強してみるのかでは
ずいぶん違うと思うよ。
0593デフォルトの名無しさん
NGNG研究目的なら手早く書けるほうがいいのでprologはprolog、schemeはschemeで書く。
c/c++やjavaでも性能に目をつぶれば書くのはそんなに難しくはないけどさ。
部分評価器、コンパイラコンパイラあたりで調べてみてください。
0594デフォルトの名無しさん
NGNG>>588
コンパイラもインタプリタも。
ちょっと想像してみろよ。
Cコンパイラと、デバッグ用のCインタプリタをセットにした製品を売るとする。
これらを両方ともCで書いてバイナリを売るのが、そんなに不思議か?
LispやPrologでも同じ事じゃないか。いったい何を不思議がっているのか…
0595デフォルトの名無しさん
NGNG別に俺は処理系マニアじゃないんで。
そんな事知らなくても良くない?
ダメ?
sicstus Prologは聞いたことあるけど
あれは作った人の名前なんだ。
日本の会社は日本産の有名なprologを買ってると思うんだけど
そんな事も知らない?
学生かな?
0596デフォルトの名無しさん
NGNG処理系作成者にとって、高速化や拡張性は重要だと思うけどなー。
0597デフォルトの名無しさん
NGNGソースとインタプリタを一つのファイルに
まとめるだけじゃなかったっけ?
違ったらスマン
0598デフォルトの名無しさん
NGNGいや、SICSはSweden Institute of Computer Science。研究所の名前。
最初はQuintus互換の高速フリー処理系として広まったが、その後Quintusを
しのぐ製品となった。QuintusはSICSに買収された。
0599デフォルトの名無しさん
NGNGんなバカな。
0600デフォルトの名無しさん
NGNGLispやSchemeのコンパイラで関数呼び出しのベンチマーク
(例えばAckerman)とかやると、Cより速いよ。
0601デフォルトの名無しさん
NGNG1
Cでインタプリタを作るには
メタインタプリタを作る以上に技術が必要。
2
メタインタプリタも実用的に使える。
0602デフォルトの名無しさん
NGNGで、それはCで書いてあるのかい?
0603デフォルトの名無しさん
NGNG君の顔と同じくらい歪んでるな。
0604デフォルトの名無しさん
NGNGデータを教えて
0605デフォルトの名無しさん
NGNGググレばすぐわかるよ
0606デフォルトの名無しさん
NGNGつーかそのベンチ試した処理系何?
0607デフォルトの名無しさん
NGNG1. Cの実用処理系はたいていCで書いてある。Lispの実用処理系はLispで、
Prologの実用処理系はPrologで書いてある。
2. お勉強のためにLispでCインタプリタを書いたり、CでLispインタプリタを
書いたりする人もいる。他人が感心してくれるかどうかは疑問。
0608デフォルトの名無しさん
NGNGSchemeメタインタプリタをCに変換すると
何ができるの?
0609デフォルトの名無しさん
NGNGhttp://www.bagley.org/~doug/shootout/bench/fibo/
0610デフォルトの名無しさん
NGNGSchemeインタプリタだろ?
0611デフォルトの名無しさん
NGNG1について詳しく書いてあるWEB知ってたら教えて。
0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNGそのベンチを試した処理系は何なの?
0614デフォルトの名無しさん
NGNG最近は線形論理型言語やってるのでは。
0615デフォルトの名無しさん
NGNGCMUCLとAllegro CLとgcc
マシンはSun Ultra-10
0616デフォルトの名無しさん
NGNGschemeは?
0617デフォルトの名無しさん
NGNGまさかオブジェクトコード生?そこの話がこんがらがってないですかな。
0618デフォルトの名無しさん
NGNGChez Scheme Version 6とgcc 2.95.2。
0619デフォルトの名無しさん
NGNG聞き飽きた話だが、Cでも同じだろ。
0620デフォルトの名無しさん
NGNGPrologは知らん。DEC-10のアセンブラかな?
マルセイユPrologの方が先か。Lispかもね。
0621デフォルトの名無しさん
NGNG会話になってねーよ。
さっきから頭痛い原因はおまえか。
0622デフォルトの名無しさん
NGNGいるんだよな。「クロス開発した」っていうと
「最初は?」って聞く厨房(藁
0623デフォルトの名無しさん
NGNGまさかオブジェクトコード生?そこの話がこんがらがってないですかな。
0624デフォルトの名無しさん
NGNGなにか悔しいことでもあったんでしゅか?
0625デフォルトの名無しさん
NGNGわかった。ちゃんと答える。
「Cコンパイラと同様、クロス開発したものと思われ」
0626デフォルトの名無しさん
NGNGgccのソース
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でも、せいぜい数マイクロ秒でしょ。
0628デフォルトの名無しさん
NGNGgnu prologはC言語で書いてあるし、
prologで書かれたprologなんて無くない?
lispでかかれたlispってどれ?
実用的なものを除けば、ほとんどCで書かれてそうだけど。
0629デフォルトの名無しさん
NGNGそれ言ったらformatだって遅いんでは。
つーかあのベンチ自体あんまり信用できないんだけど。
0630デフォルトの名無しさん
NGNGlogって所を押すと・・・
0631デフォルトの名無しさん
NGNGLISPコンパイラはLISPで書かれてるけど。
0632デフォルトの名無しさん
NGNGホームページがあればお願いします
0633デフォルトの名無しさん
NGNGたくさん書かれている。
0634631
NGNGこれね。
http://www.cons.org/cmucl/
0635デフォルトの名無しさん
NGNG>>585
0636デフォルトの名無しさん
NGNGschemeの作り方だよーん。
メタインタプリタを作るのが簡単なのは、
perlで正規表現が簡単に使えるのと同じ。
正規表現のモジュールを使える事と、
正規表現のモジュールを作れる事は違います!!
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNGftp://ftp.averillpark.net/cmucl/src/lisp/
C言語で作られてるみたいだけど・・・
0640デフォルトの名無しさん
NGNG解説よろしこ
0641デフォルトの名無しさん
NGNG多いな。
0642デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNGそのschemeは末尾再帰展開しない上にやたら遅い。
学習には不向き。
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNGLarcenyはランタイムがCだと思ったけど。
0649デフォルトの名無しさん
NGNGUnixで走らせるなら。
0650デフォルトの名無しさん
NGNG非実用的だけどね
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNG公開されてる分については。
0654デフォルトの名無しさん
NGNGあれは何から何まで全部scheme。
ブートストラップにscheme自身が必要だったかと。
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って知ってる?
どう思う?
どこかにホームページがあったので探してきます。
0755デフォルトの名無しさん
NGNGこれだ。
なんか途中で読むの挫折した。
0756デフォルトの名無しさん
NGNG適当なこと言ってないで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デフォルトの名無しさん
NGNG740 で
> 述語や、節(WAMではTerm)は
> あるデータフォーマット(構造体、クラス)として
> 記録されるわけだけど。
って書いてるのがウソだと主張しています.
たとえばappend/3は,743のようにコンパイルされるわけで
マシン語やJVMと同じく,単なるビット列です.
> もしわからないなら、自分でProlog/Cトランスレーターを作れば
> 意味がわかるよ。
Prologインタプリタも,WAMへのコンパイラも,Cへのトランスレータも
作ったことあるので,ご心配なく
0761デフォルトの名無しさん
NGNG知識のある人どうしで論争になると、
お互いゆずらないね。
0762デフォルトの名無しさん
NGNG740,741が後者だな。
0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNGつーかお前は何様だ?(w
それよりちゃんと引用してくれよ。見てくるのめんどくさ
>>740-741
0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNGお前のかーチャンクラミジア
0767デフォルトの名無しさん
NGNGappendの定義はどうやって取り出すんだろうか・・・・
0768デフォルトの名無しさん
NGNG>作ったことあるので,ご心配なく
必死さがよく伝わってくる(プ
0769デフォルトの名無しさん
NGNG別の分野だけどある程度能力のある人間からは別に普通に見えるがな。
文の表層を見ているだけでも >>758 より >>760 の方がまともなのは
瞭然としているのだが。
0770デフォルトの名無しさん
NGNG0771738
NGNG>実現不可能な動作がいくつかあるようでそれらを扱っていそうな研究も
>”かつてずいぶんあった[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デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNG> 記録されていないのなら
> appendの定義はどうやって取り出すんだろうか・・・・
やっぱりインタプリタとコンパイラを混同している...
SICStus PrologでもGNU Prologでも,
コンパイルしたappendの定義は,clauseでは取り出せないです.
Cのプログラムと同じことです.
Prologコンパイラだけが特殊だと考えるのがおかしい.
0774730,734,739
NGNGありがとうございます、これもまた大変参考になるお話です。
>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を特徴付ける動作についてその動作とコンパイルとの
関係をよく考察できればと思います。
0775774
NGNGしばらくは手前で考えたり提示されたソースを読でみたいと思います。
関係ない話ですが753もわたしです。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNGこれってsourceforgeでプロジェクト立てる価値ありますか?
0778デフォルトの名無しさん
NGNGネットやVC6についていたサンプルソースなどをあさってみたのですが
よく分かりませんでした。
ここのサンプルを見ろ!とかありましたらお願いします。
0779デフォルトの名無しさん
NGNGあ、2回も誤爆しました。スマソ・・・
0780749
NGNGPrologコンパイラキボン
0781777
NGNGこのインタプリタのメリットがなんなのかはよくわかりませんが。
しかも、prologについて無知なので、仕様は満たしていないはず。
とりあえず、0から自分で考えてみたというのがポイントかも。
0782デフォルトの名無しさん
NGNG誘導してくれる神きぼん
0783デフォルトの名無しさん
NGNGそうなら
関数型プログラミング言語Haskell
http://pc3.2ch.net/test/read.cgi/tech/1013846140/
0784デフォルトの名無しさん
NGNGサンクス!この御恩は10分間忘れません!
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNGprologスレでGHCって聞かれたらGuarded Horn Clausesじゃないのかよ!
ま、本人が納得してるんならいいが。
0787デフォルトの名無しさん
NGNGすまん。
方々手を尽くして、なんとか自分で解決した後に
スレ誘導のカキコがあったから、内容を確認せずに
感謝してみた
0788IP記録実験
NGNGhttp://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>>>1
>
>あっ!
>
>唇オバケだ!
ワロタ
0791デフォルトの名無しさん
NGNG閉鎖
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNGID: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デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 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ぅ
ゎ
ぁ
0796デフォルトの名無しさん
NGNGガンバレオマエラ
0797デフォルトの名無しさん
NGNG掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
0798デフォルトの名無しさん
NGNG君は何がしたいんだい?(^_^;)
0799デフォルトの名無しさん
NGNGひろゆきに送るのが早い気が。
0800デフォルトの名無しさん
NGNGいや、そんなことないって。
引用っぽくないし。
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( ´_ゝ`)フーン
0804デフォルトの名無しさん
NGNGhttp://headlines.yahoo.co.jp/hl?a=20030109-00000021-zdn-sci
0805デフォルトの名無しさん
NGNGそれよかズボラな削除体制どーにかしろって感じだな
どさくさに紛れて都合の良い法律案を盛りこむ議会みたい
管理批判の多い板から記録してるっつーのもなんだかなあ
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG危機的にキてますので。【本来は私は2CH人員で無いのに書き込んでるのが自分自身不自然で、辛い所 素で。)
15分後程度に又。
0808デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG「関係者」の発言(大学時代の成績とか)
はある程度公益。但しプライバシー。
醜態は避けるべきかも、。
本人が「いいや」て思える事ならいいし。
逆に
「本人が駄目」って云って成績悪い人とかは
品性とか出るしね。皆にも嫌われるし。
そこらへんは微妙だし
マスコミの問題とか 社会のすごい「コレから」決める事だし。
だからさっさとけんすう系統だして下さい
では。
0812デフォルトの名無しさん
NGNGネットは日々進化している。
カルトに進化無し、一時の流行に過ぎんからね。
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNGhttp://newspolls.yahoo.co.jp/public/archives/2076384460/p-ne6-7?m=r
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGアンダスタン?(^_^;)
0822デフォルトの名無しさん
NGNG0823山崎渉
NGNG0824山崎渉
NGNG0825C++厨
NGNGダット落ちはイカン
0826デフォルトの名無しさん
NGNG0827山崎渉
NGNG0828デフォルトの名無しさん
NGNG好き�
0829斉藤守
NGNGここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
0830デフォルトの名無しさん
NGNG「f(x)を満たす全てのxがg(x)を満たす」
という命題を表現できますか?
0831デフォルトの名無しさん
NGNGじゃないのか?
0832デフォルトの名無しさん
NGNG全称記号とか存在記号とかはどうなるの?
0833デフォルトの名無しさん
NGNG全称記号 -> すべての変数は全称記号で束縛されているとみなされるので省略
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGfail.
0836デフォルトの名無しさん
NGNGSICStusのオブジェクト指向Prologは使いにくい。
0837デフォルトの名無しさん
NGNG宛名ラベル印刷ソフトを作って会社で使いたい!
データベースはフレーム型で将来容易に拡張可能な
ものにしたい。
料金別納マークなどマークも印字するので画像も
登録して利用したい!
出来ればバーコードも生成しラベルに印字できれば
郵便料金が安くなるので作りこみたいのだが、
簡単に出来ないかな?
0838デフォルトの名無しさん
NGNGhttp://science.2ch.net/test/read.cgi/rikei/1046173479/l50
0839デフォルトの名無しさん
NGNGprologでやらないことが簡単な方法
0840デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNGしかしインタプリタは常に質問モード?のままのよーだ。
対話的に事実や述語を定義することはできないのかな?
0842デフォルトの名無しさん
NGNG0843デフォルトの名無しさん
NGNG0845山崎渉
NGNG0846ミ・д・ミ
NGNG0847デフォルトの名無しさん
NGNGbit誌に3ページくらいの大きさで紹介されてた。
当時は第五世代コンピュータがにぎやかな時代で、
ストリームベースの並列オブジェクト指向プログラミングを
実際に手元で動かせることに感動して夢中になって触っていた。
その後、就職先で制御系のシステム設計を担当したけど、
ガードや有限バッファ制御の概念は役に立ったと思う。
0848デフォルトの名無しさん
NGNGありますか。仕様の矛盾に気付きやすくなったとか?
0849山崎渉
NGNG0850デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0852山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0853デフォルトの名無しさん
NGNGhttp://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例えばマルチメディア系とかネットワークとか。
0855デフォルトの名無しさん
NGNGhttp://www.swi-prolog.org/packages/xpce/sc_draw.html
0856デフォルトの名無しさん
NGNGプッ
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デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG人生にバックトラックがあったらなぁって思ったことはありませんか?
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGまあ素人はheuristicsから学んでおけってこった。
0863デフォルトの名無しさん
NGNG勝ち組みと言うパターンにマッチさせることができるのかが
問題だ
0864山崎 渉
NGNG0865山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGSWI-Prologで、ファイルをconsultしてからlisting(member)とするとNoになる。
member以外の組み込みでも同様。
ただし、SWI-Prolog起動後にlisting(member)としてYesが返ってから
ファイルをconsultしてlisting(member)とすると、正常に表示される。
つまり、ファイルをconsultすると組み込みが使えなくなってしまう。
しかし、consult以前に組み込みを呼び出していた場合、問題は起きない。
0868デフォルトの名無しさん
NGNG自己レスです。
どうやらファイルに
:- unknown(_,fail).
の記述があるのが原因のようです。
しかしどうしてこれが原因になるのでしょうか?
0869デフォルトの名無しさん
NGNGS = [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), !.
0870869
NGNG順列生成処理を応用すれば簡単に実現できることに気が付きました。
スレ汚しスマソ
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デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGICOTが初期にやってたESPでは、節の空間を継承で木構造に整理できました。
これをもってICOTはESPを「オブジェクト指向Prolog」と称していました。
でもオブジェクト指向の他の側面、たとえばカプセル化の概念は
とりこんでたんだっけかな...
ESPの初期だけしかみてないので、後は詳しい人続けて↓↓↓
0875デフォルトの名無しさん
NGNG0876875
NGNG0877874
NGNGICOTのことでいぢめたりしないから、おねがい来て〜(はぁと
0878ミ・д・ミ
NGNGAI系の本が消えた・・鬱
0879デフォルトの名無しさん
NGNGってないでつか。ちょいとしたもんつくるにはいいんじゃないかと
おもってるんだけど。
0880デフォルトの名無しさん
NGNGhttp://www5a.biglobe.ne.jp/~sasagawa/MLEdit/uranus/index.html
0881デフォルトの名無しさん
NGNGなんじゃこれ。
0882デフォルトの名無しさん
NGNG>これはUniversal Representation Aimed Novel Uranus
>System というリカーシヴな名前になっている。
ここで萎えた。。誰か代わりに読んで
0883デフォルトの名無しさん
NGNG述語論理の中に関数的な記述もできる。
0884GO MAXIMA
NGNGでも [times 2 3] はエラーやし 動いてない部分が多いんじゃない?
有限群論をのっけようかと すこしいじったけどまだ無理みたい。
>883 動けば面白いだろうがね。
0885デフォルトの名無しさん
NGNG:(* 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デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNG(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>時系列と概念・・( ´・ω・`)
0890885,887
NGNGお役に立てて何よりです。
0891デフォルトの名無しさん
NGNG代表的な処理系ってある?
0892デフォルトの名無しさん
NGNG最低限のセットないでしょうか?
0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNG良コテの鏡のような人だからな。マジで尊敬してます。
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGhttp://page.freett.com/intteliart/index.htm
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNGprolog処理系をc等の他の言語で1から記述するには、どのような処理をさせたら良いか悩んでいます。
というのも、これから勉強をかねて自分用に安易なオリジナルの言語を記述する気になりましたが、その前にどうしてもprologがどの様に処理されているのか気になってしようがないからです。
prolog自体のコーディングはある程度わかるのですが、それがどのように処理されているのか推測できません。
私の場合、cやpascal等であれば、形態素解析の後、文法解析を行って、アセンブラへの変換をこつこつ記述して試していくという方向性で納得してますが、prologの場合、形態素解析の後、文法解析を行ってもその後の処理のイメージが想像できあせん。
prologの設計経験のある方がここを知っているのか、しかも、読んでいるのかさへも疑問ですが、コメントをいただけると幸いです。
経験のない方でも、コメントなりアドバイスが頂ければ嬉しく思います。
よろしくお願いいたします。
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG素直にswi-prologや、g-prologのソースを落として、解析すれば
いいだけのような気がする。
0906デフォルトの名無しさん
NGNGLISP勉強するのが結局早かったり。
0907デフォルトの名無しさん
NGNGレゾリューションは分かっているのか?
0908903
NGNG>データ型やアルゴリズムの考え方はLISPとよく似ているから
> LISP勉強するのが結局早かったり。
そうですね。LISPだと簡単にprologがコーディングできますからprologでなくてもLISPの仕組みでも私の目的には合ってそうです。
>>905
>素直にswi-prologや、g-prologのソースを落として、解析すれば
> いいだけのような気がする。
> >素直にswi-prologや、g-prologのソースを落として、解析すれば
> いいだけのような気がする。
そうですね、今までの私はそれが面倒で避けていましたが、これからは頑張って並行してソースも見ていきます。ついでに中間言語に落とす方法とそれを使った高速化も解って面白そうですし。
>>907
>レゾリューションは分かっているのか?
いえ、(今通勤中なので)後で言葉の意味を調べてみます。(言葉は分かりませんが原理を知っていると良いのですが)
>>904
>>905
>>906
>>907
皆さんありがとうございます。
また、ご意見・コメントなど有りましたらよろしくお願いいたします。
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNGSWI-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デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGdupacc([H|T], A, L) :- dupacc(T, [H|A], L).
を
dupacc([H|T], A, L) :- append(A, [H], X), dupacc(T, X, L).
に変更する。
遅くなると思うが。
0914911
NGNG最初の結果の後";"を押していくと
どの順番で重複が消されたのかまで分かるおまけ付きです。
僕も人を助けられるようになりたいです。もっと勉強します。
913さん、カコイイ!!
ありがとうございました!
0915デフォルトの名無しさん
NGNGremdup(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).
0916911
NGNGこちらのヴァージョンも動きました。
どのように動作しているかを理解するのは僕にはまだ難しいです。
こちらは一発で[a b c d]を導き出すのですね(";"を押すとすぐにNoでExitです)。
将来どうしてもPrologの知識が必要となるのでこれからもっと勉強します。
ありがとうございました。
0917デフォルトの名無しさん
NGNGprime(N) っていうファンクションで、N以下の全ての素数を入れたリスト
を返すのってどうやればいいのでしょうか???
突然つまづきました。。
0918デフォルトの名無しさん
NGNGPrologの話ですよね?
?-prime(N).
というゴールは、失敗するか成功するかのどちらかで、
CやLispの関数のように値(ここではリスト)は返せませんよ。
多分、
primeList(N,List) ; N以下の全ての素数を入れたリストがListなら成功
のような述語を定義して、
?-primeList(100,List).
のような使い方をするのがPrologっぽいと思います。このゴールは成功して、
ついでにListに何か値が割り当てられて(unifyされて)終わるはずです。
Nが素数かどうか判定するには、√Nまでの自然数で割り切れるか調べれば
十分と知られています。だから、1〜√Nまでの自然数の倍数を全部取り除けば、
N以下の素数のリストができあがります。これをリスト操作に翻訳すればOK。
0919デフォルトの名無しさん
NGNGprime1(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=[].
0920919
NGNG0921GOD-
NGNG?- flat([[a,[b,c],[d]],e,[f,[g,f]]]).
↓
[a,b,c,d,e,f]
と出力するflat.
!(バックトラック)とappend使うらしい・・。
0922デフォルトの名無しさん
NGNGlisting(hoge).だとhogeのプログラムが表示されますよね。表示じゃなくてプロ
グラムを取得したいので。
0923922
NGNG0924デフォルトの名無しさん
NGNGプログラム内での述語→リスト変換なら、
X =.. f(a,b)で
(見えづらいが =.. イコールのあとにピリオド二つ)
Xに [f, a, b]がユニファイされる。
0925デフォルトの名無しさん
NGNG間違えた。
述語=..リストだった。
正しくは f(a,b)=..X で
Xに [f, a, b]が入る
0926924
NGNGファイルの入出力なら
http://www.geocities.co.jp/SiliconValley-Oakland/1680/prolog/prolog13.html
が分かりやすい
0927922
NGNGサンクスです。
functorを使えばよかったみたいです。
今度は、変数名から値を取得する述語を探してますが、
ありますか?
0928デフォルトの名無しさん
NGNG集合述語findallやbagofを使えば、変数に入るすべての解をリストに
集めることが出来ます。
例:
parent(tom, ann).
parent(tom, john).
があったとき
findall( X, parent(tom, X), L).
により L=[ann, john] となる
0929デフォルトの名無しさん
NGNG( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
その述語、どの処理系にもあるの?
とりあえずSICSTUSとBは明日試してみよう。
0930デフォルトの名無しさん
NGNG導出原理による充足性の判定アルゴリズムがうまく結び
つけられずにいます.
prologの実行において導出原理はどこで使われているの
でしょうか?
0931名無しさん@お腹いっぱい。
NGNG,
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNGno
|
0935デフォルトの名無しさん
NGNGCとかしかやったことないから、なんだか新鮮だよ。
よし、勉強してくる!
0936デフォルトの名無しさん
NGNG身近で活躍しているprologのプログラムって何かあるのかな?
0937デフォルトの名無しさん
NGNGSQL
0938デフォルトの名無しさん
NGNG???
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNG0943名無しさん@お腹いっぱい。
NGNGお前の身近ってどこよ? (w
あんまりないんじゃない?
アルゴリズムが固まってしまうと、解探索を言語に依存しないで、
他の言語で自分で書いた方が速くなるから。
アルゴリズムの研究する時は便利だけども。
0944774
NGNGどこにもありません。
どこかに落ちているものなんでしょうか。
0945デフォルトの名無しさん
NGNG?- ryougae([24, 11, 3], 27, X).とすると
X=[1, 0, 1]
X=[0, 0, 9]
と答える述語を書いてください.
prolog始めて3週間で出た学校の課題です><;
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNGryougae([24, 11, 3], 27, [0, 0, 9]).
0948デフォルトの名無しさん
NGNGA = 'a b c d e'
を
B = [a,b,c,d,e]
みたいに。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGsplit(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【問題】
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デフォルトの名無しさん
NGNGdistance(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なるほど。内積を使うのか。
目から鱗というか、気づかなかった自分が情けない。
…って。内積が0なら直角三角形じゃないですか。
外積だよね。
0955デフォルトの名無しさん
NGNG> 関係san(X1/Y1, X2/Y2, X3/Y3)がある。
>ここのスラッシュはどういう意味?
951ではないが、レスする。
スラッシュは本来、変数間の除算を表す記法。
ただし、数式として評価しなければ、単なる
データ構造を構成する記号の中間記法になる。
X1/X2は /(X1,X2)と同じ。 Z is X1/X2とかすると除算を実行する。
このプログラムでは point(X1,X2)とかにした方がいいと思う。
0956デフォルトの名無しさん
NGNGそういうことでしたか。
ありがとうございます。
0957デフォルトの名無しさん
NGNGおお、動きました。
遅くなりましたがthx.
0958デフォルトの名無しさん
NGNG> 変数の中身がスペースで区切られたものをリスト化
atom_chars/2 を使って、結果のリストからスペースの分を除くのはどう?
0959デフォルトの名無しさん
NGNGリストの辺りでボロボロです。
初心者はココを見ろ!的なHPありませんか?
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG次のように二重になってるリストの中身を置換させる
述語の書き方がわかりません。
?-replace([a,[b,c],d],b,[e,f],X).
X=[a,[[e,f],c],d].
二重になってない場合ならわかったのですが…
その先にどうしても進めません。
どなたかよろしくお願いします。
0962デフォルトの名無しさん
NGNGreplace([],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) :- !.
とても雑なので,参考程度に.
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若干修正してみた。
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デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGmember(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デフォルトの名無しさん
NGNGsetsubst([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を使ってみた。
0970968
NGNGあとで、試してみます。
ありがとうございました。
0971968
NGNGsetsubst([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複数の解を期待するなら、 cut しちゃだめでしょ。
0973デフォルトの名無しさん
NGNG[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デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG単語の品詞と意味の表を用意し、スペースで区切られた単語列
を一行読み込み、各単語にその品詞名と意味を付けたリストにする
プログラムを教えてください
0976デフォルトの名無しさん
NGNGatom_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折れ目も
NGNGhttp://www.amzi.com/AdventureInProlog/
0979デフォルトの名無しさん
NGNG>>321
0980デフォルトの名無しさん
NGNG語彙解析(_文字列,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デフォルトの名無しさん
NGNGatom_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デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。