Prolog初心者のスレ
これは良い言語だ…
【論理】Prolog【初心者】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2010/11/06(土) 13:00:56202デフォルトの名無しさん
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.49283デフォルトの名無しさん
2011/10/22(土) 16:47:53.03284デフォルトの名無しさん
2011/10/22(土) 18:15:36.25285デフォルトの名無しさん
2011/10/22(土) 23:23:48.25 このfor/3を実装するのに、結構試行錯誤したわ
http://www.ifcomputer.com/IFProlog/Manuals/v4.1/reference/for/home_en.html
Prologって全然直感的じゃないな
http://www.ifcomputer.com/IFProlog/Manuals/v4.1/reference/for/home_en.html
Prologって全然直感的じゃないな
286デフォルトの名無しさん
2011/10/22(土) 23:51:13.94 >>285
これはC言語等の下劣な仕様に阿っているのが悪いのであって、
第二引数と第三引数を交換するだけで、
(分かりやすくするため 最終値 >= 初期値 のケースだけにする)
for(_初期値_式,_最終値_式, _カウンタ) :-
_初期値_式 > _最終値_式,!,fail.
for(_初期値_式,_最終値_式, _カウンタ) :-
_カウンタ is _初期値_式.
for(_初期値_式,_最終値_式, _カウンタ) :-
_初期値_式_2 is _初期値_式 + 1,
for(_初期値_式_2,_最終値_式, _カウンタ).
当たり前のPrologの述語となる。強いてちょっと
気持ち悪いのは第一節の !,fail. くらい。
これはC言語等の下劣な仕様に阿っているのが悪いのであって、
第二引数と第三引数を交換するだけで、
(分かりやすくするため 最終値 >= 初期値 のケースだけにする)
for(_初期値_式,_最終値_式, _カウンタ) :-
_初期値_式 > _最終値_式,!,fail.
for(_初期値_式,_最終値_式, _カウンタ) :-
_カウンタ is _初期値_式.
for(_初期値_式,_最終値_式, _カウンタ) :-
_初期値_式_2 is _初期値_式 + 1,
for(_初期値_式_2,_最終値_式, _カウンタ).
当たり前のPrologの述語となる。強いてちょっと
気持ち悪いのは第一節の !,fail. くらい。
287デフォルトの名無しさん
2011/10/22(土) 23:59:17.38288286
2011/10/23(日) 00:10:58.32 一般にPrologでは
foo(S,E,X) :- の形式をとり、
Sはカウンタ、X でそれを取り出す。
Eは限界値を示す。
これで数値カウンタループ述語を構成する。
for/3は
repeat.
repeat :- repeat.
のrepeatパターンの述語。
member/2やappend/3もこのパターン。
どれも非決定性述語である。
member(A,[A|_]).
member(A,[_|R]) :- member(A,R).
append([],L,L).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
?- append(_,_,_), ・・・ とするとrepeatと同じ機能となる。
(ただし繰り返しが多くなるとスタックオーバーフローが起きるかも知れない)
foo(S,E,X) :- の形式をとり、
Sはカウンタ、X でそれを取り出す。
Eは限界値を示す。
これで数値カウンタループ述語を構成する。
for/3は
repeat.
repeat :- repeat.
のrepeatパターンの述語。
member/2やappend/3もこのパターン。
どれも非決定性述語である。
member(A,[A|_]).
member(A,[_|R]) :- member(A,R).
append([],L,L).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
?- append(_,_,_), ・・・ とするとrepeatと同じ機能となる。
(ただし繰り返しが多くなるとスタックオーバーフローが起きるかも知れない)
290デフォルトの名無しさん
2011/10/23(日) 00:14:27.91 ありがちなミス
for(Lower,X,Upper) :-
Lower = X ; for(Lower+1,X,Upper).
for(Lower,X,Upper) :-
Lower = X ; for(Lower+1,X,Upper).
291デフォルトの名無しさん
2011/10/23(日) 00:19:43.74292デフォルトの名無しさん
2011/10/23(日) 00:30:08.03 >>291
立派なコードだと思うけど。
立派なコードだと思うけど。
293デフォルトの名無しさん
2011/10/23(日) 03:56:31.01294デフォルトの名無しさん
2011/10/23(日) 04:32:16.76 >>293
ここでやってるforはCやJavaのforとは無関係で、Haskellの[from..to]みたいなもの。
処理は、
for(L,X,H), do(X,C).
みたいに書いて、最後にfailさせるかメタ述語で全解生成する。
Haskellなら[ do x | x <- [from..to]]だね。
ここでやってるforはCやJavaのforとは無関係で、Haskellの[from..to]みたいなもの。
処理は、
for(L,X,H), do(X,C).
みたいに書いて、最後にfailさせるかメタ述語で全解生成する。
Haskellなら[ do x | x <- [from..to]]だね。
295デフォルトの名無しさん
2011/10/23(日) 04:51:07.54296デフォルトの名無しさん
2011/10/23(日) 07:21:02.39 >>293
数値を順に生成するもの。
?- for(1,N,3),write(a),N=3.
aaa
?- for(1,N,3),write(a),fail.
aaa
false
?- for(1,N,3),M is N * 2,write(M),nl,N=3.
2
4
6
?- for(1,N,3),M is N * 2,write(M),nl.
2
N = 1,
M = 2;
4
N = 2,
M = 4;
6
N = 3,
M = 6;
false
% findall/3と併用。組合せや順列の処理の時しばしば使う。
?- findall(N,for(1,N,10),L).
L = [1,2,3,4,5,6,7,8,9,10]
数値を順に生成するもの。
?- for(1,N,3),write(a),N=3.
aaa
?- for(1,N,3),write(a),fail.
aaa
false
?- for(1,N,3),M is N * 2,write(M),nl,N=3.
2
4
6
?- for(1,N,3),M is N * 2,write(M),nl.
2
N = 1,
M = 2;
4
N = 2,
M = 4;
6
N = 3,
M = 6;
false
% findall/3と併用。組合せや順列の処理の時しばしば使う。
?- findall(N,for(1,N,10),L).
L = [1,2,3,4,5,6,7,8,9,10]
297デフォルトの名無しさん
2011/10/23(日) 11:25:08.28 >>296
ふーむ・・・
数列をただ生成してるだけだけど、Prologだといろんな使い方がある訳か・・・
Haskellだと数列リスト作って後から加工する形かな?
for n m _ | m n == False = []
for n m s = n: for (s n) m s
使用例
*Main> mapM (print.(*2)) (for 1 (<=3) (1+))
2
4
6
[(),(),()]
確かに、>>294の言うとおり、リスト内包表記使う方が自然だね
for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]
使用例
*Main> for 1 (<=) 3 (1+)
[1,2,3]
prologの方が、手続き型のforに使い方が近くなるのか
ふーむ・・・
数列をただ生成してるだけだけど、Prologだといろんな使い方がある訳か・・・
Haskellだと数列リスト作って後から加工する形かな?
for n m _ | m n == False = []
for n m s = n: for (s n) m s
使用例
*Main> mapM (print.(*2)) (for 1 (<=3) (1+))
2
4
6
[(),(),()]
確かに、>>294の言うとおり、リスト内包表記使う方が自然だね
for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]
使用例
*Main> for 1 (<=) 3 (1+)
[1,2,3]
prologの方が、手続き型のforに使い方が近くなるのか
298デフォルトの名無しさん
2011/10/23(日) 11:27:36.00 あう・・・
>for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]
の"fn"は無視して・・・
>for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]
の"fn"は無視して・・・
299286
2011/10/24(月) 08:20:39.22 >これはC言語等の下劣な仕様に阿っているのが悪いのであって
は適切な書き込みでありませんでした。恐縮ですが、無いことにしてください。
は適切な書き込みでありませんでした。恐縮ですが、無いことにしてください。
300デフォルトの名無しさん
2011/10/24(月) 16:05:09.28 >>293
for/3の典型的な使い方。 findall/3 の中で使う。
ふたつ取り出す(_リスト,_一つ目,_二つ目) :-
length(_リスト,_リストの長さ),
findall(N,for(1,N,_リストの長さ),L),
順列(L,2,[M,N]),
nth1(M,_リスト,_一つ目),
nth1(N,_リスト,_二つ目).
?- ふたつ取り出す([赤,青,緑],_一つ目,_二つ目).
_一つ目 = '赤',
_二つ目 = '青';
_一つ目 = '赤',
_二つ目 = '緑';
_一つ目 = '青',
_二つ目 = '赤';
_一つ目 = '青',
_二つ目 = '緑';
_一つ目 = '緑',
_二つ目 = '赤';
_一つ目 = '緑',
_二つ目 = '青';
false
for/3の典型的な使い方。 findall/3 の中で使う。
ふたつ取り出す(_リスト,_一つ目,_二つ目) :-
length(_リスト,_リストの長さ),
findall(N,for(1,N,_リストの長さ),L),
順列(L,2,[M,N]),
nth1(M,_リスト,_一つ目),
nth1(N,_リスト,_二つ目).
?- ふたつ取り出す([赤,青,緑],_一つ目,_二つ目).
_一つ目 = '赤',
_二つ目 = '青';
_一つ目 = '赤',
_二つ目 = '緑';
_一つ目 = '青',
_二つ目 = '赤';
_一つ目 = '青',
_二つ目 = '緑';
_一つ目 = '緑',
_二つ目 = '赤';
_一つ目 = '緑',
_二つ目 = '青';
false
301デフォルトの名無しさん
2011/10/24(月) 19:07:03.79 >>300
ご存知かもしれませんが、select/3を使うと、もっとシンプルに書けますよ。
choice2(L, E1, E2) :- select(E1, L, L1), select(E2, L1, _).
ご存知かもしれませんが、select/3を使うと、もっとシンプルに書けますよ。
choice2(L, E1, E2) :- select(E1, L, L1), select(E2, L1, _).
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★3 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 秋田内陸縦貫鉄道「列車が脱線、転覆」と通報 北秋田市、萱草駅付近 [蚤の市★]
- 玉木雄一郎「日本は労働時間が短すぎる!これが経済の足を引っ張っている。労働増・企業に投資減税・教育予算増、これで財政破綻回避 [256556981]
- まさか日本政府より中国政府のほうが信用できる時代がくるとは思わなかったな。日本政府てか高市政権か [472617201]
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- 家の中から女の笑い声が聞こえるけど3年くらい無視してるが
- 今年の漢字、きょう発表😉 [583597859]
- (*´ω`*)朝はヨーグルトと納豆
