[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 12/23 11:34 / Filesize : 227 KB / Number-of Response : 759
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Prologでまったり Part4



1 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:23:54 ]
過去スレ
Prologでまったり Part3
pc11.2ch.net/test/read.cgi/tech/1193354806/
PrologでまったりPart 2
pc11.2ch.net/test/read.cgi/tech/1102664221/
Prolog でまったり
pc5.2ch.net/test/read.cgi/tech/976462999/
リンク集
www.summa.jp/lang/logic/prolog.htm
bach.istc.kobe-u.ac.jp/prolog/

チュートリアル
www.amzi.com/AdventureInProlog/
computing.unn.ac.uk/staff/cgpb4/prologbook/
www.intranet.csupomona.edu/~jrfisher/www/prolog_tutorial/pt_framer.html
bach.istc.kobe-u.ac.jp/prolog/intro/
www.geocities.jp/m_hiroi/prolog/
www.asahi-net.or.jp/~JF1T-YSD/prologV2/

301 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 12:50:30 ]
>>299
[X|Ys] Prologでは(注1)これは二通りの意味に解釈します。

1)・・Xはリストの最初の要素である。ただしリストとは [X|Ys] のことです。
2)・・リストYsに最初の要素としてXを付加する。できたリストは [X|Ys] です。

[X|Ys] の表現は99% 1) か 2) の意味で使われていますから、
どちらの意味であるか読み抜きましょう。

注1)・・Ysがリストでない例えば X=3,Ys=5, で [3|5] というものもあり得るのですが、
Prologではほとんど使うことがないのでこの際無視しましょう。



302 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 13:57:34 ]
kti.mff.cuni.cz/~bartak/prolog/recursion.html
ここだとまず、元のリストが奇数番目から始まるか偶数番目から始まるかを
ずっと保存しながら扱っているね。
> even_odd(L,E,O):-odd(L,E,O).

最初は1番、つまり奇数番と考えてodd/3を呼ぶ、と。

> odd([],[],[]).
> odd([H|T],E,[H|O]):-even(T,E,O).
>
> even([],[],[]).
> even([H|T],[H|E],O):-odd(T,E,O).


303 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 14:07:07 ]
つまり、偶数番どうし、奇数番どうしの対応に注目するなら…
divide([A|BCDE…],[A|CE…],BD…) :- divide(BCDE…,BD…,CE…).
divide([A|BABA…],[A|AA…],BB…) :- divide(BABA…,BB…,AA…).

304 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:13:33 ]
>>300さん
なるほど([A,B|Xs]でリストXsをつくり次に
[A|Ys]Xsを踏まえたうえでで奇数番をつくり
[B|Zs])で偶数番を作るんですね!?
>>301さん
[X|Ys] に二種類の解釈があるということをうまく理解できていませんでした。ありがとうございます
>>302さん >>303さん
貴重な書き込みありがとうございます
divide([A|BABA…],[A|AA…],BB…) :- divide(BABA…,BB…,AA…).
は偶数と奇数に分けている事を強調して書いてあるんですね?

305 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 22:53:16 ]
ちょっとまだ言葉遣いが混乱していると思うけど、
(「[A|Ys]Xsを踏まえたうえでで」とか)
大体わかったみたいでよかったね

306 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 23:02:46 ]
500億かけただけあってGHCは全容が見えなさ過ぎる。
調べれば調べるだけ話題が出てくる。なんなんだ、この言語。

307 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 23:11:19 ]
皆さん、本当にありがとうございました
まだ完全ではないですが理解できました

なんだか軽く荒らし兼、笑いものになってた気がしますが寛大な心で
許してください><

308 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 10:56:16 ]
?-g1.
input=taro.
input=jiro.
input=2
input=..
.
input=end.
yes
endが入力されるまで繰り返し、入力をしるg1を作りたいんですけど、全くわかりません。知恵を貸して下さい。

309 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:13:56 ]
>>308
g1 :- repeat,write('input='),read(X),(X=end;assertz(tmp(X)),fail).

repeat.
repeat :- repeat.



310 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:15:59 ]
>>308
g1(L) :- findall(X,(repeat,write('input='),read(X),(X=end,!,fail;true)),L).

311 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:18:38 ]
>>308
g1(L) :- g1_prompt,read(X),g1_2(X,L).

g1_2(end,[]).
g1_2(A,[A|R]) :- g1_prompt,read(B),g1_2(B,R).

g1_prompt :- write('input=').

312 名前:311 mailto:sage [2009/06/24(水) 12:23:19 ]
>>308 この方が自然かな。

g1(L) :- g1_read(X),g1_2(X,L).

g1_2(end,[]).
g1_2(A,[A|R]) :- g1_read(B),g1_2(B,R).

g1_read(X) :- write('input='),read(X).

313 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 17:42:30 ]
>>308
g1 :- repeat, write('input='), read(X), X = end, !.
終わったらrepeatへの後戻りをカットしないとまずいかもしれないよ。

g1 :- write('input='), read(X), X \= end, g1.
g1.
おまけの再帰版。

314 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 17:50:28 ]
おっと「知恵を貸して」か。なら…

>>308
g1 :- repeat, write('input='), read(X), fail.

g1 :- write('input='), read(X), g1.

こうすると止まらない。そこで…
・X=endのとき止めるには、条件をどこにどのように課せばいいか。
・止まったとき成功するようにするには、どうすればいいか。
・?- g1, fail.と呼び出したとき困ることはないか、困るならどう回避するか。
(もう遅いってw)

315 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:04:27 ]
X \= end や X = end は、
X \== end や X == end としたほうがいいかもしれない。
read/1だと変数も入力できてしまうし。

316 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:27:03 ]
ごめん、>>313の再帰版にもカットが必要だった。
?- g1, X=X.などとすると余計な成功が生じているのがわかると思う。
うーん勉強になるw

317 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 04:36:56 ]
>>316
g1 :- write('input='),read(X),X==end,!.
g1 :- g1.

がスマートで推奨版なのかな。インタプリタのトップからの使いやすさから、
repeat/0を利用してしまうが。

318 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:01:43 ]
失敗駆動ループを使うならrepeatのほうがいいかと

319 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:03:29 ]
えーっとつまり、値を蓄積したいなら再帰で、という



320 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:48:54 ]
>>319
こういうのはあるか。
g1(X) :- write('input='),read(X).
g1(_) :- g1(_).

?- g1(X), ... ,X==end.

最後に ... の中でendが消費されてしまうのが難。

321 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 07:52:29 ]
匿名変数だとダメなのかな。

g1(X) :- write('input='),read(X).
g1(X) :- g1(X).

でないと。

322 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:06:07 ]
repeatから一歩も出てないねw

323 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:24:52 ]
表面上カットを使わない方法を挙げると、
g1 :- once(( repeat, write('input='), read(X), X == end )).
あるいは
g1 :- \+ \+ ( repeat, write('input='), read(X), X == end ).

いわゆる「生成検査戦略」の枠組み
\+ ( 生成(X), \+ ( 検査(X) ) )
で考えてもおもしろいのでは。

g1 :- \+ \+ ( repeat, write('input='), read(X), \+ ( X \== end ) ).
(証明終了までに入力されるXはすべて X \== end を満たす、わけでもない、ということを証明する)

324 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:30:01 ]
なんか「生成検査」という言葉の使い方を間違えた気がするw

325 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:49:31 ]
<実行結果>
split(5, [3,7,2,6,5,8], Before, After).

Before = [3,2,5] (5と同じか、小さい数のリスト)
After = [7,6,8] (5より大きい数のリスト)
となるのを作りたいのですがどうしたら良いのでしょうか?

326 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 20:50:19 ]
/*停止条件*/
split([],[],[]).
split([A],[A],[]).
/*再帰条件*/
/*入力した変数Nより小さい場合 */
split([A,B|R],[A|T1],[B|T2]) :-
A >= B,
split(R,[A|T1],T2).
/* 入力した変数Nより大きい場合 */
split([A,B|R],[A|T1],[B|T2]) :-
A < B,
split(R,T1,[B|T2]). と作ってみたのですが・・・・。だめでした

327 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:05:00 ]
引数の数が違うようですが

328 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:10:09 ]
>>325-326
swi-prologで作ってみました。
参考にしてみてください。

split(_, [], [], []).
split(X, [H|L], [H|B], A) :-
H =< X,
!,
split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).


329 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:11:22 ]
すみません。見づらいので、張りなおします。

split(X, [], [], []).
split(X, [H|L], [H|B], A) :-
        H =< X,
        !,
        split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
        split(X, L, B, A).




330 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:11:46 ]
split(5,[3, ...
この辺を見て「3 =< 5」、つまり3は小さい側だな、と判断
split(5,[3, ...],[3, ...],[...])
ここまで決まる
split(N,[H|L1],[H|Before1],After) :- H =< N, ...
変数に置き換えて考える

こんな感じでは

331 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 23:36:42 ]
>>327さん 
ご指摘ありがとうございます
>>328-330さん
split(X, [], [], []).
split(X, [H|L], [H|B], A) :-
H =< X,
!,
split(X, L, B, A).
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
と入れたら
* [X] - singleton variables in user:split/4
* Approximate lines: 1-2, file: 'と出てしまったのですがどうすればいいのでしょうか?

332 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 23:38:11 ]
split(X, [], [], []).ではXを空リスト3つに分けているのですか?
否定(?)を利用してますがなくても問題ないですよね?

連レスすいません


333 名前:328 mailto:sage [2009/06/26(金) 00:27:34 ]
>>331-332

ちょうど書き込み時間が重なったので、勘違いされたと思いますが、
>>328-329は私ですが、>>330は別の方の書き込みです。
splitの仕様は、>>325に合わせました。
* [X] - singleton variablesの警告は、1行目のsplitにおいて、左辺にあるXが
右辺で使われていませんよ、という意味です。
split(_, [], [], [])と書き直せば、この警告は消えると思います。

カットは必須ではありませんが、カットを使わない場合、
>>326のA>=B、A<Bのように背反となる条件を各々splitの定義に含める
必要があります。

334 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 01:22:10 ]
>>332
まだ問題の理解が十分ではないようですね。その段階で>>325のように、
「〜というものを作りたいのですが」という言い方をするのはよくないと思います。

335 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 01:26:37 ]
スミマセン、なんか言い過ぎましたw
そんなによくなくもないかもしれません

336 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:52:07 ]
>>332
なかなか、よい発想をされますね。[]の分割問題ですね。これは、
あなたが、「 []を分割してBefore=[] After=[] なんて許さん。偽だ。」と
考えるなら、この述語は
split(X,[H],[H],[]) :- H=<X,!.
split(X,[H],[],[H]) :- H>X,!.
split(X,[H|L],[H|A],B) :- H=<X,split(X,L,A,B).
split(X,[H|L],A,[H|B]) :- H>X,split(X,L,A,B).
となります。普通私たちは、
?- split(5,[],A,B).
A = [],
B = []
が好ましい仕様だと思い込んでいるのですが、
少々Prolog呆けしているのかも知れません。

337 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:09:00 ]
私たちって言うな

338 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:23:14 ]
>>337
リストの再帰で、
[]になった場合の検証から入るプログラマって
そんなにいるかな。まあ、時間的には一瞬だけど。
もし、変数が来たらは、常に注意を張りながらだと思うけど。

339 名前:デフォルトの名無しさん [2009/06/26(金) 05:37:18 ]
>>338
宣言的でありたいというのがある。
できることなら停止節なんて省略したい。
こういう姿勢だから、考えないね。




340 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 05:47:30 ]
微妙すぎる。>>332は明確に否定するのが親切だと思うけど、
そもそもどこかの宿題を乱暴に投げているだけような気配がするw

341 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 06:01:59 ]
>>339
それだ! 停止節省略指示子の導入。
帰納論理がそこそこ行けるんだったら、
それくらい処理系にやらせたっていいじゃないか。

342 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:33:08 ]
途中まで作って、トレースモードにして、正解を問い合わせればいい
| ?-split(5,[3,7,2,6,5,8],[3,2,5],[7,6,8]).
+ (1) 1 Call: split(5,[3,7,2,6,5,8],[3,2,5],[7,6,8]) ?l
+ (4) 2 Call: split(5,[7,2,6,5,8],[2,5],[7,6,8]) ?l
+ (5) 3 Call: split(5,[2,6,5,8],[2,5],[6,8]) ?l
+ (8) 4 Call: split(5,[6,5,8],[5],[6,8]) ?l
+ (9) 5 Call: split(5,[5,8],[5],[8]) ?l
+ (12) 6 Call: split(5,[8],[],[8]) ?l
+ (13) 7 Call: split(5,[],[],[]) ?l
+ (13) 7 Fail: split(5,[],[],[]) ?l
+ (12) 6 Fail: split(5,[8],[],[8]) ?l

343 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:35:25 ]
「トレースモードにして」じゃなくて「スパイ点を設定して」か

344 名前:デフォルトの名無しさん [2009/06/26(金) 21:10:24 ]
>>333さん
すいませんでした。
なるほど、カットするとそこで探索を停止するからですね?
>>334-335さん
おっしゃるとおりです・・・。prolog理解するのとても難しいです
>>336さん
空リストを停止条件に持っていく場合とそうでない場合の見極めが難しいです
>>337さん
落ち着いてください
>>339さん
て、停止節ですか?
>>340さん
丸投げではないです・・・。
>>342さん
すいません。僕の使ってるprologは未完成での実行はできないです

345 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:13:40 ]
split(X, [H|L], B, [H|A]) :-
split(X, L, B, A).
でH =< Xではない時をマッチングさせるんでよね?

346 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:44:57 ]
カット(!)はまだ勉強していない、という前提で進めた方がいいんでしょうか

347 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:47:54 ]
>>332
> 否定(?)を利用してますがなくても問題ないですよね?

これはなぜそう思ったんですか

348 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 21:56:13 ]
>>326
> /*入力した変数Nより小さい場合 */
> split([A,B|R],[A|T1],[B|T2]) :-
> A >= B,
> split(R,[A|T1],T2).

この「変数N」というようなコメントは、問題についていたヒントか何かですか

349 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:31:18 ]
Prologって面白すぎ。もっと流行ればよいのに。



350 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 01:46:01 ]
>>346さん
軽く説明された程度です
>>347さん
授業の説明だと余分なところまでマッチングしないようにするためだと聞いたので
なくてもいいのかなぁと
>>348さん
そこは自分でプログラムするときわかりやすいように書いてみただけです
>>349さん
面白いですけど難しくて頭が痛くなりますw

351 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:26:10 ]
>>344
> すいません。僕の使ってるprologは未完成での実行はできないです

デバッグ機能がないというのはちょっと考えにくいので、
差し支えなければ処理系の名前を、参考までに。
一つ一つの確認を細かくしないと、Prologのプログラムはなかなか組めないんじゃないかと思います。

352 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:43:19 ]
>>325 >>344
リストがそれぞれ何らかの「集合」を表していると解釈すれば自明ではないでしょうか。
・空集合の部分集合は(どんな条件がついても)空集合だけ
・空集合を表すリストは空リストだけ

353 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 06:05:07 ]
>>350
いろんな言語で宿題スレ
pc12.2ch.net/test/read.cgi/tech/1242876647/
にPrologのプログラムが沢山載っています。
間違ってるところや、それを逐次修正していく過程が晒されている部分。
処理系依存(あるPrologでは動くが別のPrologでは述語未定義となり動かない)の
ところも多いから、いろいろな意味で勉強になると思います。

354 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 08:44:23 ]
自演乙

355 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:22:10 ]
>>351さん
terateamを使ってLinuxにアクセスしてemacsやらsicstusを入力してやってます
>>352さん
貴重なご意見感謝します
うまく見分けれるように頑張ります
>>353さん
prologの宿題スレになってますねw
こっちのスレを回ってみようと思います。情報ありがとうございました
>>354さん
いったい何と戦っているんですか?ここで自演して自分に有益になるとは到底思えませんが?
とりあえず落ち着いてください

356 名前:353 mailto:sage [2009/06/27(土) 16:39:14 ]
>>354
いろんな言語で宿題スレに大量に書き込んでいるのは私ですが、
それがなにか?
これは前スレで、よそのスレに載っているプログラムや課題を
このスレでPrologに書き直そうという提唱や、
Prolog10000Tipsを目指す活動の手始めです。

357 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:09:40 ]
prologプログラムの無限ループバグを防ぐtipsを教えてください。

C以上に暴走しやすい危険な言語ですね。

358 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:31:14 ]
>>356
>>338-339>>341もあなたではないかと思っているのですが、ひょっとして…?w

359 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:35:50 ]
>>357
> 暴走しやすい

これはいつだか、大学の先生がPrologで作ったCGIが無限ループしてひどいことになっていたのを見て思った



360 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:48:12 ]
>>356
これまでの観察によれば
・動作確認をしないことが多い。
・ISOから外れた述語を断りなく多用する。not/1など。
・勘違いを書いても明確に訂正しない。
このへんはちょっとどうかと思っています。
2ちゃんねるだからアリ、という考えなのかもしれませんが。

361 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:55:39 ]
オウフ語
・”F”は、太ったものに当てはまる。
・”G”は、貪欲なものに当てはまる。
・”a”は、アルバートを表示する。
・”b”は、ベティを表示する。
・主語述語形式の文”Pn”が新であるのが、”n”が表示するものが、
 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。
・”¬A”という形式の文が新であるのは、文Aが真で無いとき、
 かつ、そのときに限る。
・”A&B”という形式の文が新であるのは、文Aと文Bがともに新であるとき、
 かつ、そのときに限る。

362 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 23:57:11 ]
誤字多すぎた。も一回。
オウフ語
・”F”は、太ったものに当てはまる。
・”G”は、貪欲なものに当てはまる。
・”a”は、アルバートを表示する。
・”b”は、ベティを表示する。
・主語述語形式の文”Pn”が真であるのは、”n”が表示するものが、
 ”P”が当てはまるもののクラスの要素であるとき、かつ、そのときに限る。
・”¬A”という形式の文が真であるのは、文Aが真で無いとき、
 かつ、そのときに限る。
・”A&B”という形式の文が真であるのは、文Aと文Bがともに真であるとき、
 かつ、そのときに限る。

363 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 00:06:31 ]
>>359で言ったCGIですが、今探してみたら、ちょっと様子が違いました。
ttp://web.sfc.keio.ac.jp/~mukai/2004-LP/cgi-in-prolog/index.html
> # 卓上計算機の実行
> # 卓上計算機 Prolog CGI ソース (calculator.cgi)

・「実行」のリンクが切れている。
・「CGI ソース」のリンク先は無限ループになるが、本来実行されないもののように見える。

364 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 00:10:06 ]
表示的意味論付き単純言語オウフ。
例えば、アルバートを表示する、というのはアルバートという人がそこにいる
事態を指す/結びつける。

365 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 00:50:38 ]
参考文献も表示したほうがいいのではw

366 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 01:02:45 ]
>>363
つまりこういうことかも。
・POSTなりGETなりの方式で入力が与えられることを前提にしている。
・無入力の場合に暴走するように書いてしまっている。
・読ませるためのソースに実行可能フラグをつけてしまった。

367 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 02:35:52 ]
用語が変だった
"実行可能フラグ" の検索結果 約 291 件中 1 - 10 件目 (0.19 秒)
> 真ということ は、実行可能フラグが立っていることを表すに過ぎません
> True indicates only that the execute flag is on.
"execute flag" -"No Execute flag" の検索結果 約 963 件中 1 - 10 件目 (0.13 秒)

「実行許可(ビット)」あたりかな

368 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 04:42:04 ]
>>360
しっかりと、観察して下さったようで、ありがとうございます。
すでに利用していて、それを多少読みやすく書き換えたものも
ありますが、Firefoxの六行の小さな窓の中で上から書きながしたものが
ほとんどで実際動作実行をしたものはあまりありません。
Upしたものを読み返して、間違ってるなと気がついた時は訂正して
いると思いますが。C/C++の宿題スレの更新速度が急でコーヒー休憩に
少しづつ課題をUpして次の休憩にコードを書きなぐるという書き込みな
ので、実行確認は今後もしないと思います。間違いは指摘してください。
標準の組み込み述語に限定すると、2chの1レス枠に入らなくなる
課題が多いため、繰り返し使われるものについてはライブラリに
あるものとして、いちいちの定義を省略しています。
get_line/1または2、get_lines/2、split/3、concat_atom/3、append/4、
などがそれです。他の言語との比較と言う観点からはフェアでないとも
言えますが、書き込みの目的がチュートリアルの草稿としてこれを公開
することにあるのであまりその点は気にしていません。not/1は\+より
こちらの方が誰にでも意味がわかるいう理由でこれで通しています。

369 名前:368 mailto:sage [2009/06/28(日) 05:01:05 ]
>>358
>>336>>338>>340は私だが、>>339は違うよ。この時間帯に
読んでくれているのが誰だかは知っているがw



370 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:08:06 ]
と、いう人がいるので注意してください。

371 名前:368 mailto:sage [2009/06/28(日) 05:13:09 ]
10000Tipsについては、著作権の問題が出てくるようで
弁護士に相談中。いちいち著作者に了解をとることは
コスト的に無理なようなので。
試しにスポーツルールの述語化をしてみようと思ったの
ですが、ただただベースボールマガジン社が発行している
著作物を編集し直した物になってしまいました。

372 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:15:58 ]
>>368
>>309-312はまだちゃんと訂正していないような気が

373 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:30:15 ]
>>370
ところであなたも早朝派ですか?
私は早朝ジョギング派なので3時半起きで、2chの書き込みも
その後1-2時間の間にしますが、それに関してのメールが6時前に
到着しているので驚くのですが。結構多いんですね。

374 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:43:54 ]
>>311 サービスで仕様を拡張していますが、そこはそのままにすると、
g1(L) :- g1_prompt,read(X),g1_2(X,L).

g1_2(end,[]).
g1_2(A,[A|R]) :- \+(A==end),g1_prompt,read(B),g1_2(B,R).

g1_prompt :- write('input=').

ですか。

375 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:44:31 ]
早朝派じゃないのに書き込んでみるテスト

Prologって研究には良さそうでも就職にはヤヴァそう
C, C++, Java辺りを必須という求人は何度も見たことはあるが
Prolog必須という求人は見たことがない

376 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 05:52:09 ]
なぜか日本では皆無ですね。
うちがそのうちのせますが。いまはきゅうじんのよゆうなし。

377 名前:374 mailto:sage [2009/06/28(日) 06:15:11 ]
何の話か明確にすると、
?- ... , g1(L), ... ,fail.

のように、一度end入力で終了したg1がバックトラックによって、
再び実行の可能性が生まれた場合に、意図通りの結果になるかと
いうことです。

378 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 07:47:04 ]
それから、いろんな言語で宿題スレですが、私のPrologコードは
課題を示したレス番号の頭にtをつけたHTMLファイルを
nojiriko.asia/prolog/ というディレクトリに全部コピーすることに
しています。メールなどで間違っているんじゃないかと指摘を受けた
場合は、このサイトの方はできるだけ速やかに訂正しますが、宿題スレ
の方にはその旨の書き込みはしません。いつの間にか書き換わって
いることも多いのでちょっと覗いてみてください。


379 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:03:33 ]
>>375
いまやビジネスの世界はひたすら論理。今まで日本は会社規則があっても
無視してたり。契約書作成しようと思うと取引先から敬遠されたりと、
論理的なことを何かと回避できる環境にあった。
んでまぁそういう時代は終わりを迎えている。

今や本屋の自己啓発本コーナに行けば論理が大事だ、という本が置かれ、
論理に対する需要と言うのはかなり上がっている。

確かに一般に普及する可能性は低いけど、上記の論理的な力を必要とする層
(金融とかコンサルとか上流の方々ね)には教育用ツールとして需要がある
可能性はある。例えば、『〜論理トレーニング』という本の内容として
prologによる論理トレーニングとか。
あとは、企業の訴訟リスクが上がっているとかなんとか理由つけて法律の
エキスパートシステム作ってみるとか。
裁判所の判例はもはや膨大で、弁護士費用は高い。とりあえず、抱えている案件に
合致する判例があるかどうか探索するシステムとか作れば結構いけるんじゃない。
法律家の助けが必要だけど。差別化は結構できるんじゃないかね。



380 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:08:52 ]
あと、心理学の人と、認知科学の人、哲学の人も必須だな。
普通にやると第五世代と同じ末路になる。

あと問題は日本語文のパターンマッチかな。

381 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:12:55 ]
うーん。微妙な日本語だ。

382 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 08:30:47 ]
あと20年前と違うのはWebの発展なんだから、セマンティックウェブ関連で
なんか出来そう。
500億かけた研究結果がそのまんま公開されてて、しかもどうやらあんまり
中身を見られていないみたいなんだし、意外と宝の山かもしれないよ。
(評価計算の方法がわからないし、現在価値としては下がっているけど
少なくとも数千万ぐらいの資本価値はあると考えてもいいはず。いきなり
数千万資本をゲットできるというのはそれなりにお得な気はする。)

見直す価値がある可能性はある。

383 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 14:59:53 ]
「いろんな言語で宿題スレ」の中で
pc12.2ch.net/test/read.cgi/tech/1242876647/168
pc12.2ch.net/test/read.cgi/tech/1242876647/225
といったProlog向き問題が未回答となっています。
どなたか、よろしくお願いします。

384 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 05:45:20 ]
前に10000Tipsは著作権の問題が出てくるということを書いたのですが、
意味がわからんとのご意見メールをいただきました。
私の「Tip」のイメージを示します。これで2Tips。

燃ゆる頬(ラグビーの頬傷ほてる海見ては).
燃ゆる頬(車輪繕う地のたんぽゝに頬つけて).
燃ゆる頬(目つむりていても吾を統ぶ五月の鷹).
燃ゆる頬(沖もわが故郷ぞ小鳥湧き立つは).
<以下略>

句集(燃ゆる頬,寺山修司,ラグビーの頬傷ほてる海見ては).
句集(燃ゆる頬,寺山修司,車輪繕う地のたんぽゝに頬つけて).
句集(燃ゆる頬,寺山修司,目つむりていても吾を統ぶ五月の鷹).
句集(燃ゆる頬,寺山修司,沖もわが故郷ぞ小鳥湧き立つは).
<以下略>


385 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 07:48:21 ]
----- ここまで役に立つTipなし

386 名前:デフォルトの名無しさん [2009/06/30(火) 15:44:51 ]
Tips というより、データベースでは?

387 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 17:06:38 ]
>>386
Prologですからデータベースですが、それをTipという感覚でやろうということです。
福島さんが100mの日本記録出した時、何歩で走ったか。これをビデオで確認したから
述語としておこう。これでひとつ。
Googleで検索できない対象というのがありますね。一つには過去の文献や文学作品の
内容に関する部分。無尽蔵にあります。これはTipとして復活するだけで価値がある。
構造のしっかりしたデータベースである必要もないし、述語として十分に機能する
必要さえない。気楽に日常的に拾い上げられることだけが大事です。


388 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:55:33 ]
天気(神奈川,20090630,晴れ).

389 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:58:04 ]
好き(イチノ,理美).



390 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 21:26:12 ]
% p(原因, 結果)
?- p(X, 俺に彼女ができる).
false


391 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:15:02 ]
マル得Prologトリビア探検隊
gollem.science.uva.nl/SWI-Prolog/Manual/DocIndex.html
SWI-Prolog 5.6.60 Reference Manual
> \
> +/1
> /2
> 1
> =/2
> ==/2
> =@=/2

www.ic.unicamp.br/~meidanis/courses/mc600/200002/Manual-Prolog/Index.html
SWI-Prolog 3.2.9 Reference Manual
> \
> /1
> /2
> 1
> /2
> =/2
> @=/2

\+と\=の消え方が変化している

392 名前:387 mailto:sage [2009/07/01(水) 05:32:35 ]
気楽にと書きましたが、逆に徹底してとか、偏執狂的にというのも
あるでしょう。ある書物を徹底的に述語化してしまうとなどがこれ
です。古典的なものはもちろん現代の例えば白書的なものでも、
表、グラフの述語化は十分に有用で希少価値を持ちます。社会的に
文章、表、グラフなどの中立をする形式は未開拓であり、未完成に
放置しても、後に利用、発展が自然に可能なProlog述語への書き換
えは有力なものではないでしょうか。


393 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 05:59:28 ]
>>391
わからないです(><;)

394 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 06:13:14 ]
前スレに書いたことですが、私のインタプリタ環境で
?- 相模(X).
と質問すると答えが返ってきます。相模/1は未定義ですが。
未定義の質問が(導出の最中でも)現れると、その述語名の
性質を調べて、関係ありそうな分野からの検索します。分野には
古典文学->歴史文献->地名等 の優先順位がつけられているため
?- 相模(X).
X = 花ならぬなぐさめもなき山里に桜はしばし散らずもあらなむ;
X = なにか思ふなにをか嘆く春の野に君よりほかに菫つませじ;
X = 見わたせば波のしがらみかけてけり卯の花さける玉川の里
no という具合になります。この歌並びからこれは千人万首を
検索してるだけだなとわかってしまいますw
セマンティックウェブの話もありましたが、ウェブに頼らずこういった
情報発信を自らPrologサーバからやろうではないかということです。
多くのボランティア的献身によって(千人万首もそうだ)我々のウェブ
環境は豊かになりましたが、的確に得られる情報は未だ極々僅かです。
負担にならない蒐集・表示形式としてPrologが活躍する余地は大きい
ように思いますが如何でしょうか?

395 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 06:38:23 ]
www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-58.html
> Tabbing commands
> * \= (set tab)
:
> * \+ (indent; move margin right)

www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-164.html
> Exceptions to this rule:
> * \ itself because \\ has its own special meaning. Use $\backslash$.

このへんだな

396 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:04:07 ]
やばい>>395のLaTeX説は眉唾だった。\/が消える説明がつかない。
prolog.cs.vu.nl/git/pl.git?a=tree;f=man;hb=HEAD
Perlでひたすらs/.../.../g;していたとは。。

397 名前:デフォルトの名無しさん [2009/07/01(水) 12:16:39 ]

split(5, [3,7,2,6,5,8], Before, After).

Before = [3,2,5] (5と同じか、小さい数のリスト)
After = [7,6,8] (5より大きい数のリスト)
このようにリストの中を与えた数より大きいか小さいかで分けたいのですが
どうすればよいのでしょうか?

398 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 12:24:08 ]
>>325以降をどうぞ

399 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:01:03 ]
>>387
opencycとかWordnetの日本版ってこと?




400 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 06:39:12 ]
>>399
そうですねとは、さすがにいえないw まだ何も始まってないから。
ライブラリを目指すのではなく、
断簡、反古として知識、ルールの切れっ端を
可能な限り隙間なく集める。述語とする。
ありとあらゆる分野に於いて。
使い手は適宜、論理変数を補充して、自分にふさわしい
使い方を見つける。
10000Tipsとは極度に控えめに言っている。
10000があっという間ではないかと予感させる一例を。

典拠不詳(古墳多くは少年の人).
/* でも、 */
古墳多くは少年の人(求塚,世阿弥,典拠不詳).
/* でも */
述語にしておこうと思い立った人が閃いた形式で登録すればよい。
典拠不詳であることが大事なのか、世阿弥の求塚という作品に
「古墳多くは少年の人」という一節があることを伝えたいのか、
そんなことはどうでもよい。心にとまったことを書き付ける形式が
ひとつあるということだけが大事なのだ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<227KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef