Prolog初心者のスレ
これは良い言語だ…
探検
【論理】Prolog【初心者】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2010/11/06(土) 13:00:56182デフォルトの名無しさん
2011/05/11(水) 18:48:08.31 自然言語の曖昧さとかに依存してるなら難しいけど、
(有名な例では、
「宵の明星は金星である」「金星は宵の明星である」
「明けの明星は金星である」「金星は明けの明星である」はいずれも真である。
では、「宵の明星は明けの明星である」は真か、みたいな)
入り組んでいるだけなら論理として扱えると思うけどね。
(有名な例では、
「宵の明星は金星である」「金星は宵の明星である」
「明けの明星は金星である」「金星は明けの明星である」はいずれも真である。
では、「宵の明星は明けの明星である」は真か、みたいな)
入り組んでいるだけなら論理として扱えると思うけどね。
183デフォルトの名無しさん
2011/05/11(水) 21:02:08.06184デフォルトの名無しさん
2011/05/11(水) 21:12:23.17 訂正
× Socrates
○ socrates
だった。
あと女の子の応答もYes/Noだ。
× Socrates
○ socrates
だった。
あと女の子の応答もYes/Noだ。
185デフォルトの名無しさん
2011/05/21(土) 23:11:01.23 あるリストから要素数Nの部分集合が全部ほしいんですがどうすればいいでしょうか?
186デフォルトの名無しさん
2011/05/21(土) 23:54:31.20 >>185
http://www.geocities.jp/m_hiroi/prolog/prolog02.html
部分集合の判定
selects([], Ys).
selects([X | Xs], Ys) :- select(X, Ys, Ys1), selects(Xs, Ys1).
http://www.geocities.jp/m_hiroi/prolog/prolog02.html
部分集合の判定
selects([], Ys).
selects([X | Xs], Ys) :- select(X, Ys, Ys1), selects(Xs, Ys1).
187デフォルトの名無しさん
2011/05/22(日) 00:13:53.59 >>186
はい、自分もそこを見て
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z)
みたいにして要素数Zの部分集合を得て、さらに並べ替えがいらないんで
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z),sort(Xs,Xs).
みたいにしたんですが、なんかすごくブサイクな感じなんでなんかないかなーと思いまして
はい、自分もそこを見て
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z)
みたいにして要素数Zの部分集合を得て、さらに並べ替えがいらないんで
selects(Xs,Ys,Z):-selects(Xs,Ys),length(Xs,Z),sort(Xs,Xs).
みたいにしたんですが、なんかすごくブサイクな感じなんでなんかないかなーと思いまして
188デフォルトの名無しさん
2011/05/22(日) 00:33:02.43 全生成して要素数N以外を捨てる
これが富豪か
これが富豪か
189デフォルトの名無しさん
2011/05/22(日) 02:41:57.82 >>187
http://www.geocities.jp/m_hiroi/prolog/yapp02.html
●問題32
?- combination(3, [a, b, c, d, e], X).
X = [a, b, c] ;
X = [a, b, d] ;
X = [a, b, e] ;
X = [a, c, d] ;
X = [a, c, e] ;
X = [a, d, e] ;
X = [b, c, d] ;
X = [b, c, e] ;
X = [b, d, e] ;
X = [c, d, e] ;
false.
http://www.geocities.jp/m_hiroi/prolog/yapp02.html
●問題32
?- combination(3, [a, b, c, d, e], X).
X = [a, b, c] ;
X = [a, b, d] ;
X = [a, b, e] ;
X = [a, c, d] ;
X = [a, c, e] ;
X = [a, d, e] ;
X = [b, c, d] ;
X = [b, c, e] ;
X = [b, d, e] ;
X = [c, d, e] ;
false.
190デフォルトの名無しさん
2011/05/22(日) 03:13:51.21191デフォルトの名無しさん
2011/05/27(金) 23:13:42.01 今、学生がprologを学ぶ意義って何だろう?
いや、個人的には活用してるけど、俺みたいな言語おたく以外の
普通の学生が、カットの挙動やら、失敗駆動ループやらを
頑張って勉強する価値はあるのかな。
たぶん、大多数はprologなんて一生使わないと思われる。
いや、個人的には活用してるけど、俺みたいな言語おたく以外の
普通の学生が、カットの挙動やら、失敗駆動ループやらを
頑張って勉強する価値はあるのかな。
たぶん、大多数はprologなんて一生使わないと思われる。
192デフォルトの名無しさん
2011/05/28(土) 00:09:52.15 この言語をマスターしたら論破できるようになるの?
193デフォルトの名無しさん
2011/05/28(土) 00:13:38.05194デフォルトの名無しさん
2011/05/28(土) 03:31:59.08 >>191
今後使うためとしか答えられない。我々の思考に最も
近い言語はやはりこの言語なのであって、その事が
評価される時が再び来るということだろう。
興味深いことは、結構優秀な学生にとっても
Prologは決してやさしくはないということ。これが謎。
今後使うためとしか答えられない。我々の思考に最も
近い言語はやはりこの言語なのであって、その事が
評価される時が再び来るということだろう。
興味深いことは、結構優秀な学生にとっても
Prologは決してやさしくはないということ。これが謎。
195デフォルトの名無しさん
2011/05/28(土) 05:00:47.97196デフォルトの名無しさん
2011/05/28(土) 08:26:06.18 >>195
大学の講座は論理学絡みだからね。前提が。
実務では、実際appendしか使いませんね。
append使うためにはリストに取らなくては
ならないから、変換器として、findallは
多用するけどね。
大学の講座は論理学絡みだからね。前提が。
実務では、実際appendしか使いませんね。
append使うためにはリストに取らなくては
ならないから、変換器として、findallは
多用するけどね。
197デフォルトの名無しさん
2011/05/28(土) 08:33:14.38 >>191
学ぶ意義のある言語というと、JavaとかCとか?
つまらん学校だw
本当の学校ってのは、遊びに行くところ。
prologの授業受けてトラウマ/コンプレックス/やみつきになるくらいでちょうど良い。
学ぶ意義のある言語というと、JavaとかCとか?
つまらん学校だw
本当の学校ってのは、遊びに行くところ。
prologの授業受けてトラウマ/コンプレックス/やみつきになるくらいでちょうど良い。
198デフォルトの名無しさん
2011/05/28(土) 08:36:19.95 SLDNFが人間の思考に近いとは思えんなあ。
prologで普遍的な価値があるのは純粋論理の部分だけじゃないか。
prologで普遍的な価値があるのは純粋論理の部分だけじゃないか。
199デフォルトの名無しさん
2011/05/28(土) 09:07:38.68200デフォルトの名無しさん
2011/05/28(土) 09:22:22.26201デフォルトの名無しさん
2011/05/28(土) 09:54:25.63202デフォルトの名無しさん
2011/05/28(土) 10:34:32.82 >>201
私もそれで十分だと思うけど。
私もそれで十分だと思うけど。
203デフォルトの名無しさん
2011/05/28(土) 10:43:29.71 要は事務屋のSQL代わりってわけか。
そんなものに多大な国家予算をつぎこんだ日本って…
そんなものに多大な国家予算をつぎこんだ日本って…
204デフォルトの名無しさん
2011/05/28(土) 11:07:06.71205デフォルトの名無しさん
2011/05/28(土) 15:33:51.21206デフォルトの名無しさん
2011/05/28(土) 15:37:15.41 >>194
>Prologは決してやさしくはない
手続き型がマシなだけで、関数型も論理
型も宣言型も同等にわかりにくいんだろ。
トップダウンのルールベースってのが
鬼門なんだろうな。
オレも、ややこしくなると結局、逐次的に
手続き的に処理を追っかけていくしな。
>Prologは決してやさしくはない
手続き型がマシなだけで、関数型も論理
型も宣言型も同等にわかりにくいんだろ。
トップダウンのルールベースってのが
鬼門なんだろうな。
オレも、ややこしくなると結局、逐次的に
手続き的に処理を追っかけていくしな。
207デフォルトの名無しさん
2011/05/28(土) 16:29:30.76 appendって何?リストの追加?
208デフォルトの名無しさん
2011/05/28(土) 16:48:35.26 >>207
?- append(L0,[X|R],[1,2,3]).
L0 = [],
X = 1,
R = [2,3];
L0 = [1],
X = 2,
R = [3];
L0 = [1,2],
X = 3,
R = [];
no.
?-
?- append(L0,[X|R],[1,2,3]).
L0 = [],
X = 1,
R = [2,3];
L0 = [1],
X = 2,
R = [3];
L0 = [1,2],
X = 3,
R = [];
no.
?-
209デフォルトの名無しさん
2011/05/28(土) 18:19:29.52 >>207
?- length(L0,3),append(L0,[X,Y|R],[1,2,3,4,5,6]).
L0 = [1,2,3],
X = 4,
Y = 5,
R = [6];
no.
?- length(L0,3),append(L0,[X,Y|R],[a,b,c,d,e,a]),append(_,[Z|_],L0),append(_,[Z|_],R).
L0 = [a,b,c],
X = d,
Y = e,
R = [a],
_ = [],
Z = a,
_ = [b,c],
_ = [],
_ = [];
no.
?-
?- length(L0,3),append(L0,[X,Y|R],[1,2,3,4,5,6]).
L0 = [1,2,3],
X = 4,
Y = 5,
R = [6];
no.
?- length(L0,3),append(L0,[X,Y|R],[a,b,c,d,e,a]),append(_,[Z|_],L0),append(_,[Z|_],R).
L0 = [a,b,c],
X = d,
Y = e,
R = [a],
_ = [],
Z = a,
_ = [b,c],
_ = [],
_ = [];
no.
?-
210デフォルトの名無しさん
2011/05/28(土) 18:24:29.21 >>207
select(A,L,X) :- append(L0,[A|R],L),append(L0,R,X).
?- select(A,[1,2,3],X).
A = 1,
X = [2,3];
A = 2,
X = [1,3];
A = 3,
X = [1,2];
no.
?-
select(A,L,X) :- append(L0,[A|R],L),append(L0,R,X).
?- select(A,[1,2,3],X).
A = 1,
X = [2,3];
A = 2,
X = [1,3];
A = 3,
X = [1,2];
no.
?-
211デフォルトの名無しさん
2011/05/28(土) 18:40:40.85212デフォルトの名無しさん
2011/05/28(土) 19:07:00.82 >>207
カンマで括られた文字列の検索(_文字列,_適合文字列) :-
atom_chars(_文字列,Chars),
append(_,[','|L1],Chars),
append(L01,[','|_],L1),
\+(append(_,[','|_],L01)),
atom_chars(_適合文字列,L01).
カンマで括られた文字列の検索(_文字列,_適合文字列) :-
atom_chars(_文字列,Chars),
append(_,[','|L1],Chars),
append(L01,[','|_],L1),
\+(append(_,[','|_],L01)),
atom_chars(_適合文字列,L01).
213デフォルトの名無しさん
2011/05/28(土) 20:29:06.72 なにこれ、こわい
214デフォルトの名無しさん
2011/05/28(土) 21:25:53.31 >213
自分のやってることの意味を考えずに生きてきて、
ついにコードを見せることしかできなくなった
哀れな技術者の末路です
そっとしておいてあげてください。
自分のやってることの意味を考えずに生きてきて、
ついにコードを見せることしかできなくなった
哀れな技術者の末路です
そっとしておいてあげてください。
>>203
このスレ 残滓で満ちてそう…
このスレ 残滓で満ちてそう…
216デフォルトの名無しさん
2011/05/28(土) 22:46:02.81217デフォルトの名無しさん
2011/05/28(土) 22:51:48.86 そうだね、100通りでも200通りでもかけるね。
そうやって、無意味なことに貴重な税金を無駄遣いしてきたわけか。
そうやって、無意味なことに貴重な税金を無駄遣いしてきたわけか。
218デフォルトの名無しさん
2011/05/28(土) 23:20:33.96219デフォルトの名無しさん
2011/05/28(土) 23:28:52.02 だから、その行為をどう意義づけているの?
それは70年近いプログラミングの発展史のなかでどう位置づけられるの?
それを語らずにコードを垂れ流しても何の意味もない。
それは70年近いプログラミングの発展史のなかでどう位置づけられるの?
それを語らずにコードを垂れ流しても何の意味もない。
220デフォルトの名無しさん
2011/05/29(日) 03:43:12.57 Prolog製の商用アプリケーションにGeneXusってのあるから何が出来るのか調べてみたらどうだい。
http://www.atmarkit.co.jp/im/cae/reports/0701/01.html
http://www.nikkei.com/tech/business/article/g=96958A9C93819499E2EAE2E2838DE2EAE3E0E0E2E3E2E2E2E2E2E2E2
http://itpro.nikkeibp.co.jp/article/COLUMN/20101207/354963/
http://itpro.nikkeibp.co.jp/article/Watcher/20101001/352528/
http://www.atmarkit.co.jp/im/cae/reports/0701/01.html
http://www.nikkei.com/tech/business/article/g=96958A9C93819499E2EAE2E2838DE2EAE3E0E0E2E3E2E2E2E2E2E2E2
http://itpro.nikkeibp.co.jp/article/COLUMN/20101207/354963/
http://itpro.nikkeibp.co.jp/article/Watcher/20101001/352528/
221デフォルトの名無しさん
2011/05/29(日) 06:49:35.85 >[注2]「シーシャープ」と読む。CやC++をベースに米マイクロソフトが開発し、2000年6月に発表したプログラミング言語。
>従来のCやC++との違いは、インターネット経由でアプリケーション・サービスを提供するWebサービスに対応すること
日経・・・
>従来のCやC++との違いは、インターネット経由でアプリケーション・サービスを提供するWebサービスに対応すること
日経・・・
222デフォルトの名無しさん
2011/05/29(日) 07:38:29.49 > 「プログラマはもう要らない」。
> 大手物流会社のシステム子会社で新技術の社内展開を進めるマネージャーはこう言い切る。
> ここでいうプログラマとは、企業情報システムの開発プロジェクトでプログラムを作成する担当者を指す。
お前ら、もう要らないらしいw
> 大手物流会社のシステム子会社で新技術の社内展開を進めるマネージャーはこう言い切る。
> ここでいうプログラマとは、企業情報システムの開発プロジェクトでプログラムを作成する担当者を指す。
お前ら、もう要らないらしいw
223デフォルトの名無しさん
2011/05/29(日) 07:53:41.82224デフォルトの名無しさん
2011/05/29(日) 08:26:23.42 この記事を使って、リストラが進められそうだな。
「ツール導入で生産性が20倍になりますので、人員を1/20に削減します」
「ツール導入で生産性が20倍になりますので、人員を1/20に削減します」
225デフォルトの名無しさん
2011/05/29(日) 08:50:03.16226デフォルトの名無しさん
2011/05/29(日) 08:52:30.24 どんどんやって、どんどん潰れっちまえ
227デフォルトの名無しさん
2011/05/29(日) 09:27:54.50 それはいいが、prologの名前をこんないんちき商売に
使うのはやめて欲しい。
使うのはやめて欲しい。
228デフォルトの名無しさん
2011/05/29(日) 09:52:32.48 >>227
使ってみたことあるのかい?
使ってみたことあるのかい?
229デフォルトの名無しさん
2011/05/29(日) 12:15:34.41 >従来のCやC++との違いは、インターネット経由でアプリケーション・サービスを提供するWebサービスに対応すること
.NETをインターネットの事か何かだと思ったんだろうな
.NETをインターネットの事か何かだと思ったんだろうな
230デフォルトの名無しさん
2011/05/31(火) 08:36:17.56231デフォルトの名無しさん
2011/06/01(水) 12:41:08.98 >>230 引数一切なし?
232デフォルトの名無しさん
2011/06/04(土) 16:42:06.23 Prologって業務ロジックを抽象的に表すのには向いているんじゃないだろうか
流行りの(?)DSLとかの代わりにならないかな
流行りの(?)DSLとかの代わりにならないかな
233デフォルトの名無しさん
2011/06/04(土) 18:05:49.85 >>232
これ以上向いている言語はないと思うけど。
速度を要求されない、複雑化の可能性のあるロジックに
ついては、開発速度、プログラマの養成の容易さ、
保守のしやすさ、全ての点で優れている。
欠点はオブジェクト指向言語でなくて、.NETから外れて
いることかな。
これ以上向いている言語はないと思うけど。
速度を要求されない、複雑化の可能性のあるロジックに
ついては、開発速度、プログラマの養成の容易さ、
保守のしやすさ、全ての点で優れている。
欠点はオブジェクト指向言語でなくて、.NETから外れて
いることかな。
234デフォルトの名無しさん
2011/06/04(土) 20:53:49.88 おおすごい。
なんで普及していない/普及しなかったんだろう?
なんで普及していない/普及しなかったんだろう?
235デフォルトの名無しさん
2011/06/05(日) 06:47:44.50 swi-prolog 5.11.14 で日本語が通りません。
'親子'('茂雄', '一茂')
.
のような日本語述語や日本語の項はUTF-8で書いて、
クォートでくくれば読み込めるんですが
listing しても文字化けしています。
日本語述語で問い合わせしても、そんな述語はないといわれます。
何か設定等必要なのでしょうか?
環境はwindows xp sp2です。
'親子'('茂雄', '一茂')
.
のような日本語述語や日本語の項はUTF-8で書いて、
クォートでくくれば読み込めるんですが
listing しても文字化けしています。
日本語述語で問い合わせしても、そんな述語はないといわれます。
何か設定等必要なのでしょうか?
環境はwindows xp sp2です。
236デフォルトの名無しさん
2011/06/11(土) 18:07:04.52 750 :デフォルトの名無しさん[sage]:2008/12/23(火) 10:10:50
>>747
http://www.swi-prolog.org/versions.html
UTF-8対応は5.6.x(開発版では5.5.x)から
>>747
http://www.swi-prolog.org/versions.html
UTF-8対応は5.6.x(開発版では5.5.x)から
237デフォルトの名無しさん
2011/06/11(土) 18:08:07.51 おっと5.11.14かごめんw
238天使 ◆uL5esZLBSE
2011/07/01(金) 18:39:03.66239デフォルトの名無しさん
2011/07/11(月) 10:57:06.09 ぷろろぐ
240デフォルトの名無しさん
2011/07/13(水) 20:40:07.15 探索とかもろ並列処理できそうな
マルチコア時代の今なら並列prologとか出てこないかしら?
マルチコア時代の今なら並列prologとか出てこないかしら?
241デフォルトの名無しさん
2011/07/13(水) 21:37:00.70 お好きなのをどうぞ
concurrent prolog
parlog
ghc
kl1
strand
concurrent prolog
parlog
ghc
kl1
strand
242デフォルトの名無しさん
2011/07/13(水) 23:41:15.56243デフォルトの名無しさん
2011/07/14(木) 04:09:18.84 統合失調症の人にそんなこと言っても無駄
244デフォルトの名無しさん
2011/07/14(木) 14:41:46.26245デフォルトの名無しさん
2011/07/15(金) 03:23:58.99246デフォルトの名無しさん
2011/07/15(金) 05:33:59.23 >>240
http://nojiriko.asia/prolog/c135_256.html
AZ-Prolog処理系作者によって書かれたMPIライクな
マルチプロセス並列処理機能の使用プログラム。
http://nojiriko.asia/prolog/c135_256.html
AZ-Prolog処理系作者によって書かれたMPIライクな
マルチプロセス並列処理機能の使用プログラム。
247デフォルトの名無しさん
2011/08/21(日) 10:38:06.34 JVM上で動作し、Javaからも呼び出し可能なprologがあれば!
248デフォルトの名無しさん
2011/08/22(月) 09:38:53.46 prolog cafeがありますよ
249デフォルトの名無しさん
2011/08/22(月) 15:03:23.52250デフォルトの名無しさん
2011/09/07(水) 11:51:09.81 完全な素人です。素朴な疑問なのですが、
同じ事をする場合、手続き的言語と比べて明らかに効率が悪くなる処理とかありますか?
例えばユニフィケーションって処理的にかなり重い気がします。
他にも配列と比べるとリストでは先頭の値しか扱えないとか、再帰呼び出しで
(一つ減らして)全要素を毎回コピーするとか手続き型の先入観を持ってると
効率が悪い気がするのですが、理屈の上では処理が増えるとか言う事は無いのでしょうか?
記憶領域もN^2/2とか必要になりそうですし。
ユニフィケーションのコストってどの位と見積もれるものでしょうか?
事実の数が10倍になると10倍の処理が必要なのですか?
それともSQLのインデックスみたいな事、もしくはキャッシュみたいなものを持っていて
それ程増えないのでしょうか?
変な事を書いているかも知れませんので、疑問自体がおかしいみたいな指摘でも結構です。
よろしくお願いします。
同じ事をする場合、手続き的言語と比べて明らかに効率が悪くなる処理とかありますか?
例えばユニフィケーションって処理的にかなり重い気がします。
他にも配列と比べるとリストでは先頭の値しか扱えないとか、再帰呼び出しで
(一つ減らして)全要素を毎回コピーするとか手続き型の先入観を持ってると
効率が悪い気がするのですが、理屈の上では処理が増えるとか言う事は無いのでしょうか?
記憶領域もN^2/2とか必要になりそうですし。
ユニフィケーションのコストってどの位と見積もれるものでしょうか?
事実の数が10倍になると10倍の処理が必要なのですか?
それともSQLのインデックスみたいな事、もしくはキャッシュみたいなものを持っていて
それ程増えないのでしょうか?
変な事を書いているかも知れませんので、疑問自体がおかしいみたいな指摘でも結構です。
よろしくお願いします。
251デフォルトの名無しさん
2011/09/07(水) 18:21:14.48 >>250
Prologは最も速いコンパイラ言語の100倍以上遅いでしょう。
その理由の過半がユニフィケーションと変数の繰り返し出現検査に
あると思います。指摘されたように配列がないこともある場合には
原因となります。それに比べればトレイルスタック等の追加的処理は
大きなコストになっていないはずです。
明らかに遅くて使えないのはビットマップの処理ですね。繰り返し
数百万のビットに対して演算する場合です。RPGも無理でしょう。
Prologはオンメモリデータベースですから、そこそこ速いのですが、
Prologが再起するためには、あなたが指摘したとおり、インデックス
などによる最適化によって、定義アトムを検索する能力を高める
必要があると思います。現在のレベルでは、数百万節の検索を
掛ける気になりません。
Prologは最も速いコンパイラ言語の100倍以上遅いでしょう。
その理由の過半がユニフィケーションと変数の繰り返し出現検査に
あると思います。指摘されたように配列がないこともある場合には
原因となります。それに比べればトレイルスタック等の追加的処理は
大きなコストになっていないはずです。
明らかに遅くて使えないのはビットマップの処理ですね。繰り返し
数百万のビットに対して演算する場合です。RPGも無理でしょう。
Prologはオンメモリデータベースですから、そこそこ速いのですが、
Prologが再起するためには、あなたが指摘したとおり、インデックス
などによる最適化によって、定義アトムを検索する能力を高める
必要があると思います。現在のレベルでは、数百万節の検索を
掛ける気になりません。
252250
2011/09/07(水) 19:29:25.63 >>251
丁寧な回答ありがとうございます。
確かにエンコードなんかで大量のデータをランダムに走査するとか不得意そうですね。
100倍程度なら何とか許容出来るのかもしれません。
ただ、ユニフィケーションの実際の動作が見えないのが気になるんです。
現在の処理系では検索用のヒントみたいなのは指定出来ないと言う事ですよね?少し不安です。
全体で100万件位の事実を想定しているもので。
ユニフィケーションの速度を上げたいのですが、
事実を分割して該当しそうなもののみ指定して検索させるとか可能でしょうか?
(デーブルを分割する様なイメージです)
グループ分けの規則を介する事になってかえって遅くなったりします?
丁寧な回答ありがとうございます。
確かにエンコードなんかで大量のデータをランダムに走査するとか不得意そうですね。
100倍程度なら何とか許容出来るのかもしれません。
ただ、ユニフィケーションの実際の動作が見えないのが気になるんです。
現在の処理系では検索用のヒントみたいなのは指定出来ないと言う事ですよね?少し不安です。
全体で100万件位の事実を想定しているもので。
ユニフィケーションの速度を上げたいのですが、
事実を分割して該当しそうなもののみ指定して検索させるとか可能でしょうか?
(デーブルを分割する様なイメージです)
グループ分けの規則を介する事になってかえって遅くなったりします?
253デフォルトの名無しさん
2011/09/07(水) 20:17:55.44 >>252
PSI(新世代コンピュータ開発機構が開発したPrologマシン)では
確か、第一引数にハッシュでインデックスが自動付加されたように
記憶していますが、その程度のものはコンパイラにはあると思います。
しかし、全ての引数にBtreeに類するインデックスを設定できる
コンパイラはないのではないか。
PSI(新世代コンピュータ開発機構が開発したPrologマシン)では
確か、第一引数にハッシュでインデックスが自動付加されたように
記憶していますが、その程度のものはコンパイラにはあると思います。
しかし、全ての引数にBtreeに類するインデックスを設定できる
コンパイラはないのではないか。
254250
2011/09/07(水) 21:39:48.53255デフォルトの名無しさん
2011/09/13(火) 00:06:34.91 Prologを極めることによって、ディベートに強くなれますか?
256デフォルトの名無しさん
2011/09/13(火) 00:18:33.33 NO
257デフォルトの名無しさん
2011/09/13(火) 00:21:14.76 Prologを極めると友達が一人もいなくなります
258デフォルトの名無しさん
2011/09/13(火) 00:23:26.60 むしろPrologがお友達になります
259デフォルトの名無しさん
2011/09/14(水) 01:28:33.81 Prolog極めてないのに友達がいないのですがどうすればいいですか?
260デフォルトの名無しさん
2011/09/14(水) 01:36:13.38 ロンリープログラミングですね。わかりますん
261デフォルトの名無しさん
2011/09/20(火) 07:51:09.68262デフォルトの名無しさん
2011/09/20(火) 08:03:20.00 最近、うちの子がパソコンを眺めて「ともだち…ともだち…ウヘ」と独り言ちているのですが、どうしたらいいでしょうか。
263デフォルトの名無しさん
2011/09/20(火) 11:25:37.87 友達を蹴ったり、食べたりしないように注意しとけ
264デフォルトの名無しさん
2011/10/06(木) 20:49:10.98 すげー今更だけど、
>>70
あたりで定義してる get_line って、
きょうびのProlog処理系だとこんな感じでいいと思う
get_line(Line):-
findall(C,(
repeat,
get_char(C),
(C=='\r' -> fail
;C=='\n' -> !,fail
;true)
),Chars),
atom_chars(Line,Chars).
あんまり論理プログラミングっぽくはないが
>>70
あたりで定義してる get_line って、
きょうびのProlog処理系だとこんな感じでいいと思う
get_line(Line):-
findall(C,(
repeat,
get_char(C),
(C=='\r' -> fail
;C=='\n' -> !,fail
;true)
),Chars),
atom_chars(Line,Chars).
あんまり論理プログラミングっぽくはないが
265264
2011/10/06(木) 21:07:32.12 あと、ストリーム指定付きを作るなら、ストリーム指定付きを定義して、
ストリーム指定なしから呼び出すようにしたほうががスマート
get_line(Line):- current_input(Stream), get_line(Stream,Line).
get_line(Stream,Line):-
〜〜
get_char(Stream,C),
〜〜
current_input/1 が無ければ seeing/1 でも使うべし
ストリーム指定なしから呼び出すようにしたほうががスマート
get_line(Line):- current_input(Stream), get_line(Stream,Line).
get_line(Stream,Line):-
〜〜
get_char(Stream,C),
〜〜
current_input/1 が無ければ seeing/1 でも使うべし
266デフォルトの名無しさん
2011/10/07(金) 20:59:08.63 '\r'消しちゃうのはまずいような・・・
get_line(Line) :-
findall(C, (
repeat,
get_char(C),
(C = '\n', !, fail; true)), X),
(append(Y, ['\r'], X), !; Y = X), atom_chars(Line, Y).
get_line(Line) :-
findall(C, (
repeat,
get_char(C),
(C = '\n', !, fail; true)), X),
(append(Y, ['\r'], X), !; Y = X), atom_chars(Line, Y).
267264
2011/10/09(日) 21:23:06.10 >>266
標準入力かファイルからの入力で、一行読むとき、
キャリッジリターンが行中に出てくるシチュ、
それからもし出てきたとしてそれを生かしておく意味、
というのが想像つかないので、解説よろしくお願いしますっ
標準入力かファイルからの入力で、一行読むとき、
キャリッジリターンが行中に出てくるシチュ、
それからもし出てきたとしてそれを生かしておく意味、
というのが想像つかないので、解説よろしくお願いしますっ
268デフォルトの名無しさん
2011/10/10(月) 09:24:01.55 個人的に意味のない良いケースだから!って言って、
内容を勝手に改変しちゃうような処理に一般的な名前を付けちゃうのはどうかと思いますっ!
get_line_without_CRとでもしてはどうでしょうかっ
内容を勝手に改変しちゃうような処理に一般的な名前を付けちゃうのはどうかと思いますっ!
get_line_without_CRとでもしてはどうでしょうかっ
269デフォルトの名無しさん
2011/10/10(月) 11:24:47.45 >>268
ISO標準になっていないこのような定義は、どんなものを標準的なライブラリに
加えればよいか、まだ手探りの状態ですから、このような細かな点を議論する
ことに意義があると思います。できるだけ、細部を反映するような述語名を
与えるべしとするのは卓見だと思います。
ISO標準になっていないこのような定義は、どんなものを標準的なライブラリに
加えればよいか、まだ手探りの状態ですから、このような細かな点を議論する
ことに意義があると思います。できるだけ、細部を反映するような述語名を
与えるべしとするのは卓見だと思います。
270264
2011/10/10(月) 18:46:18.46 なんかノリが変だ・・・
本当に、何か見落としがあるなら教えて欲しかったし、
煽ったつもりはなかったんだけど
自分のコードは、>>73 で追加されたCR無視などを参考に、
書き方を変えただけのものなのだが、
ちゃんと 'end_of_file' を扱っていないとかアウトだ・・・ゴメン
もし入出力として一般化したいなら、
一文字入力の時に改行コードがどうなるかの標準に照らして書く、
の一点だと思う。
が、標準がある項目についても沿っていない処理系も多いPrologなので、
現状、挙動にあわせて処理を書くしかないのでは?
そうなると、単体CRを改行扱いした方がいい環境や、
単体LFを改行扱いしてはいけない環境もありそうだが
本当に、何か見落としがあるなら教えて欲しかったし、
煽ったつもりはなかったんだけど
自分のコードは、>>73 で追加されたCR無視などを参考に、
書き方を変えただけのものなのだが、
ちゃんと 'end_of_file' を扱っていないとかアウトだ・・・ゴメン
もし入出力として一般化したいなら、
一文字入力の時に改行コードがどうなるかの標準に照らして書く、
の一点だと思う。
が、標準がある項目についても沿っていない処理系も多いPrologなので、
現状、挙動にあわせて処理を書くしかないのでは?
そうなると、単体CRを改行扱いした方がいい環境や、
単体LFを改行扱いしてはいけない環境もありそうだが
271264
2011/10/10(月) 18:48:13.44 >どんなものを標準的なライブラリに加えればよいか
なんて議論の、末端にいる気持ちすらなかったし、
名前に拘りがある訳でももちろんなく、
get_line_without_CR は確かに実態に則した名前だと思うので、
そのような名前が必要な場合には各場で命名すればいいと思う。
ああ、必死だな、おれ
めっちゃ恥ずかしい
Prolog初心者スレって敷居高いな・・・
しばらくROMってます
なんて議論の、末端にいる気持ちすらなかったし、
名前に拘りがある訳でももちろんなく、
get_line_without_CR は確かに実態に則した名前だと思うので、
そのような名前が必要な場合には各場で命名すればいいと思う。
ああ、必死だな、おれ
めっちゃ恥ずかしい
Prolog初心者スレって敷居高いな・・・
しばらくROMってます
272264=270
2011/10/10(月) 18:57:55.89 ROMってるとか言ってさっそくだけど、一文抜けてたので。
>現状、挙動にあわせて処理を書くしかないのでは?
という段落の次に、
「だから俺自身は、実務上必要そうな実装の雛形の一提案をしたつもりでしかなかったので」
を挟んで、
>>どんなものを標準的なライブラリに加えればよいか
>なんて議論の、末端にいる気持ちすらなかったし、
に続くつもり。
なんだか意味のない煽りにしか見えなかったのが、
言い訳がましく見えるようになる一文を加えさせていただいて、さようなら
>現状、挙動にあわせて処理を書くしかないのでは?
という段落の次に、
「だから俺自身は、実務上必要そうな実装の雛形の一提案をしたつもりでしかなかったので」
を挟んで、
>>どんなものを標準的なライブラリに加えればよいか
>なんて議論の、末端にいる気持ちすらなかったし、
に続くつもり。
なんだか意味のない煽りにしか見えなかったのが、
言い訳がましく見えるようになる一文を加えさせていただいて、さようなら
273デフォルトの名無しさん
2011/10/12(水) 10:53:53.39 '\n'か'\r'か'\r\n'という問題は、環境にあまりに依存するから、現在のところ、改行は'\n'のみ、
'\r'は一応アルファベット扱いするしかないと思う。
なぜかというと、
?- ・・・concat_atom([_行1,_行2,_行3],_区切り文字,_ファイル全体の文字列),
というような処理は日常的に存在する。完全に復元するには、行に分解した際の
改行コードがなんであったかをファイルごとに出力モード引数で取得して
保存しておかなくてはならないが、これはあまりにも煩雑。
行の中に'\r'や'\n'を含めるのは実務的にさらに不可。ということになります。
'\r'は一応アルファベット扱いするしかないと思う。
なぜかというと、
?- ・・・concat_atom([_行1,_行2,_行3],_区切り文字,_ファイル全体の文字列),
というような処理は日常的に存在する。完全に復元するには、行に分解した際の
改行コードがなんであったかをファイルごとに出力モード引数で取得して
保存しておかなくてはならないが、これはあまりにも煩雑。
行の中に'\r'や'\n'を含めるのは実務的にさらに不可。ということになります。
274デフォルトの名無しさん
2011/10/18(火) 23:18:23.05 単純な好奇心なんだが、prologでクイックソートってどう書くの?
275デフォルトの名無しさん
2011/10/18(火) 23:39:33.53 Wikipediaのプログラム例にあるよ
276デフォルトの名無しさん
2011/10/19(水) 00:07:32.26 wikipediaとかしばらく見てなかった・・・
ありがとう
見てくる
ありがとう
見てくる
277デフォルトの名無しさん
2011/10/19(水) 00:24:36.08 haskellのリスト内包表記に相当する部分で複雑に見えてしまってますね・・・
(たぶん、リスト内包表記使わない方法だと同じくらいのコード量)
prologにはリスト内包表記に相当するものは無いのでしょうか?
(たぶん、リスト内包表記使わない方法だと同じくらいのコード量)
prologにはリスト内包表記に相当するものは無いのでしょうか?
findall使えばWikipediaのやつよりはHaskellっぽくなるかも(´・ω・`)こんな感じ
quicksort([], []).
quicksort([H|T], Sorted) :-
findall(E, (member(E, T), E @> H), GTs),
findall(E, (member(E, T), E @=< H), LEs),
quicksort(GTs, GTs2),
quicksort(LEs, LEs2),
append(LEs2, [H|GTs2], Sorted).
quicksort([], []).
quicksort([H|T], Sorted) :-
findall(E, (member(E, T), E @> H), GTs),
findall(E, (member(E, T), E @=< H), LEs),
quicksort(GTs, GTs2),
quicksort(LEs, LEs2),
append(LEs2, [H|GTs2], Sorted).
279デフォルトの名無しさん
2011/10/19(水) 06:47:22.49280デフォルトの名無しさん
2011/10/22(土) 13:46:29.58 ええー、どう見たって関数型言語のほうがコードがシンプルじゃん…
281デフォルトの名無しさん
2011/10/22(土) 14:02:35.00 >>280
partitionで分解する所がPrologの値打ちなんでね。
partitionで分解する所がPrologの値打ちなんでね。
282デフォルトの名無しさん
2011/10/22(土) 16:30:19.49■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 地震 [Hitzeschleier★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 【話題】好きな鍋は?! 「寄せ鍋」「キムチ鍋」「水炊き」「もつ鍋」「豆乳鍋」「ちゃんこ鍋」「ごま坦々鍋」「トマト鍋」 [ひぃぃ★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 【地震】 茨城 栃木 埼玉 千葉 震度4 [KingFisherは魚じゃないよ★]
- 台湾「韓国との関係を全面的に検討し直す」表記巡り最後通牒 台湾・高市枢軸で宣戦布告か🇯🇵 [399259198]
- J( 'ー`)し「で、アンタなんで働かないの?」 ワイ👶「理由は2つありまして~」🏡
- ムミィ🥺いる❓🏡
- おさかなさんあつまれえ
- ナマポなんだけど焼肉奢ってほしいのだ!ボーナス出たんだべ?
- 自民党、金融所得課税30%で決定か。株を売ったり、配当金が入ると国が30%持って行きます [838847604]
