[表示 : 全て 最新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/

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

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

401 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 15:48:03 ]
Prologトリビア探検隊・予感編
ttp://dspace.wul.waseda.ac.jp/dspace/bitstream/2065/772/1/3603u104.pdf
> 充足する必要のある 2 つの別の目標 (goal) からなる質問の組み合わせは、
:
> ゴールの充足が試みられたとき、箱の中にある節と適合してその節の
:
> 1. クエリーとして、hoge(F, name5)が入力されたとき、

C&M邦訳を要約したと思われる部分だけカタカナ語が少ない。

402 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:28:35 ]
>>400
意図としては大体了解できたと思う。ただ、

>>ありとあらゆる分野に於いて。

というのは、気を悪くして欲しくないけど、それは危険フラグだ。
辞書爆発が問題で使い物にならないといわれているのに、
改めてそれに無策で挑むというのは、人を説得しきれない。

むしろ分野を限りなく限定させてしまったほうが面白い結果が
得られるかもしれない、と無責任に思う。

403 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:01:58 ]
abelard.flet.keio.ac.jp/ontology/


404 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:44:42 ]
言語哲学にどう接続させるか。

405 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 10:01:55 ]
sourceforge.jp/projects/prologpedia/
> あらゆる情報を Prolog のプログラムとして蓄積する為の基盤作りをしようと思います。

> 登録日: 2009-07-01 08:05

またそういう

406 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:10:06 ]
人は壁にぶつかって成長していく。静かに見守ろう。

407 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:01:35 ]
切れっ端ならtipsじゃなくてchipsだね

408 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:06:53 ]
辞書でchipを引くとひどい意味ばかりあるw



409 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:33:05 ]
最近まったりが足りない。

410 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 03:34:34 ]
Prologではったり


411 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:33:31 ]
この言語極めたらガンダムのハロとかオートマトン作れんの?

412 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:36:30 ]
うん

413 名前:デフォルトの名無しさん [2009/07/11(土) 09:55:54 ]
失礼します初心者です。

Prologで(C言語的な意味で)普通の計算式ってどういう風に書くのですか。
x=50
y=100
z=x^2+2*y+5
print(z)

みたいなかんじのことをProlog風に書くとどうなるのでしょうか。






414 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 11:26:30 ]
>>413 Prolog風かどうかは疑問ですが。どこが違うかよく見てください。
?-
X=50,
Y=100,
Z is X^2+2*Y+5,
write(Z).

415 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:27:01 ]
>>413
>>1に上がっているサイトにもいくつかあります
bach.istc.kobe-u.ac.jp/prolog/intro/arith.html
www.geocities.jp/m_hiroi/prolog/prolog01.html#chap5
その他
www.kprolog.com/doc/ja/builtins/math.html


416 名前:413 [2009/07/18(土) 06:57:50 ]
遅くなりました。プロバイダがアク禁だったので。
おかげさまで計算することができました。ありがとうございました。



417 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:29:08 ]
他スレで質問したのですが流れてしまったのでこちらで質問させてください
?- con2(2, [1,3]).
no
?- con2(1, [2,3]).
yes
と答えるようにしたいのですがどうしたらよいのでしょうか?

418 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:06:42 ]
con2(1, [2,3])だけをyesとしたいのであれば、

con2(1, [2,3]).

と定義するだけでOK。



419 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:08:42 ]
>>417
con2(X,Y) :- X = 1, Y = [2,3].


420 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:29:14 ]
>>418さん>>419さん
言葉が足りていませんでした・・・。
今、ハノイの塔の問題を作っていて
ペグの上に載るディスクは常にそのペグの最小ではならないと
移動先でもディスクは最小でないとならないって言う制約の判定をする部分を
作っていてそこに当たる部分なんですが・・・。

途中までは作って制約の部分の製作がわからなかったのでこちらで質問させて
いただきました

未完成のプログラム乗せたほうがいいですか?

421 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 02:35:46 ]
>>420
一番上の円盤(B)がAより大きい
con2(A,[B|R]) :- A < B.

422 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 02:54:44 ]
>>420

'Aの一番上の円盤がBの一番上の円盤より小さい'(A,B) :- A=[A1|_],B=[B1|_],A1 < B1.

'Aには現在載せられない'(A,B,C) :- A=[A1|_],B=[B1|_],C=[C1|_],A1 < B1,A1 < C1.

423 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 06:21:32 ]
>>420
本当に必要な述語はどんなものかという分析ができているのかどうか
ちょっと不安

424 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 07:05:40 ]
>>417
?- con2(1,[]).

これは?

425 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:35:36 ]
>>421さん
そのままのせてみたらエラーが出たのでcon2(A,[B|R]) :- A < B.
をcon2(A,[B|_]) :- A < B.としたらソースの読み込みはできたのですが
エラーが出てしまいました

>>422さん
それをいれて実行してみたら
Permission error: cannot redefine built_in ','とでてしまいました
(A,B) :- A=[A1|_],B=[B1|_],A1 < B1.の部分はまとめると
con2(A,[B|R]) :- A < B. となるのかなぁと思ったのですがどうでしょう?

>>423さん
なんかその通りなきがしてきました・・・。

>>424さん
申し訳ないです。そこまでは書いてなかったです

426 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:40:33 ]
>>425です連レスすいません
:- [search].

initial_state(hanoi, [[1,2,3],[],[]]).
goal_state(hanoi, [[],[],[1,2,3]]).

operator(hanoi, left_to_right(Disk), [[Disk|RestA], B, C], [RestA, B, [Disk|C]]) :-
con2(Disk, C).
operator(hanoi, left_to_center(Disk), [[Disk|RestA], B, C], [RestA, [Disk|B], C]) :-
con2(Disk, B). % 移動先で制約2を満たしていることをチェック
operator(hanoi,center_to_left(Disk), [A, [Disk|RestB], C], [[Disk|A], RestB, C]) :-
con2(Disk, A).
operator(hanoi, center_to_right(Disk), [A, [Disk|RestB], C], [A, RestB, [Disk|C]]) :-
con2(Disk, C).
operator(hanoi, center_to_center(Disk), [A, B,[Disk|RestC]], [A, [Disk|B], RestC]) :-
con2(Disk, B).
operator(hanoi, center_to_left(Disk), [A, B,[Disk|RestC]], [[Disk|A], B, RestC]) :-
con2(Disk, A).

%-- 制約2
% 一番上にあるディスクよりも、小さいことを検査
/* ?- con2(2, [1,3]).
?- con2(1, [2,3]).

ここまでは作ったんです制約のところは
con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが
| ?- search(hanoi,S,G,P,A). と聞いてもnoと答えられたので詰まってしまいました・・・。

427 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 08:25:39 ]
突っ込みどころに目移りしますが、とりあえず…
>>426
> con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが

その定義では
?- con2(1, [2,3]).
としたとき、1 > [2,3] という(規格上は)意味のない目標が実行されますよね。
Yとしてリスト(のみ)が与えられることを意識していないように見えます。

そもそも「一番上にあるディスクよりも、小さいことを検査」するのに、
なぜ再帰的定義を使おうと思ったのでしょうか。

428 名前:デフォルトの名無しさん [2009/07/22(水) 10:20:15 ]
質問です
学校の宿題でナンプレ(数独)を解かないといけないんですが
この言語肌似合わなくて今だにさっぱりです
できれば答、ダメなら方向性だけでも教えてください



429 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:53:02 ]
>>428
肌に合わないなら無理してPrologで解く必要は無いよ。
自分に合った言語を使えばいいんだから。

Prologを使う事も宿題の前提の一つならあきらめなさい。
神様や天才じゃないんだからあきらめることを学ぶのも勉強。
だまには宿題ができず先生に怒られるのもいいでしょ。

それが嫌なら、まずは自分でできるところまでPrologで挑戦して、
できなかったところを具体的に自分の言葉で表現してみて。
そうすればスレの住人も返事のしようがある。

430 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:43:31 ]
prolog使うのも条件なんです
最終レポートなんで出さないのはちょっと…
c系列なら二次元配列で表して左上はじから数字を当て嵌めてダメならバックトラックで出来ると思うんですがprologでそれをどうやっていいのか見当がつきません。
ヒントだけでもお願いできませんか?

431 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:58:02 ]
あきらめなさい

432 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:01:51 ]
理解してないくせに単位だけ取ろうなんて図々しいよな。

433 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:02:16 ]
>>430
nojiriko.asia/prolog/index.html

434 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:17:12 ]
すみませんご迷惑かけました
>>433
ありがとうございます。みてみます。

435 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:22:10 ]
まあまあ、俺も学生時代そんなんだったし興味ない言語に縛られるのもやでしょ。
特にCとかになれた人ならprologちょっとつらいしね。
この辺みれば良いんじゃないかな
kaz.cyteen.nagoya-bunri.ac.jp/advprog2/prolog.html

436 名前:429 mailto:sage [2009/07/22(水) 12:57:12 ]
>>430
「Nクィーン問題」というパズルは知っているかい?
数独と同様、マス目にクイーンを「あるルールのもとで配置する」というもの。
非決定性プログラミングとか全解探索問題の定番といっていいほど有名なパズルだから、
Prologの教科書を何冊かあされば(あるいはググれば)コード付きで解説されてるはず。
まずは、このパズルの解法を完璧に習得してください。
これまでの講義をまじめに受けていれば理解できるはず。
もし理解できなかったらあきらめなさい。最終レポートにもなってあわてても遅すぎる。

次に、数独はNクイーンの応用問題だから、応用するうえでのヒントを。
まず最初の数字の配置を exist(Y,X,N) で表現する。YとXはマスの行番号と列番号、
Nは置かれている数。Wikipediaの例であれば、以下のようになる。(一部だけ)

exist(1,1,5). /*「1行目の1列目には5が置かれている」という事実 */
exist(1,2,3).
exist(1,5,7).
exist(2,1,6).
exist(2,4,1). /* 以下、省略 */

あとは、
(1) <1,1>から<9,9>までの範囲内で、上記の事前配置に含まれない(つまり空のマス目の)
 対(つい)を「生成」する述語
(2) 配置したい1から9の数を「生成」する述語
(3) 事前配置(制約)のもとで生成した空きマス(1)に生成した数(2)が配置可能であることを
 「判定」する述語 --> これが数独のルールの実装になる
を定義していく。

437 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:46:57 ]
>>426
> %-- 制約2
> % 一番上にあるディスクよりも、小さいことを検査

「一番上に今置こうとするディスクXよりも、その下にあるディスクYがすべて小さいことを検査」
と、強引に変形してみると、心なしか

> con2(X,Y) :-X > Y,con2(X,[Y|_]).と最初作ってみたのですが

これに近くなる。なんていうエスパー解釈はダメでしょうか…
(Yを半ば集合的にとらえるところがミソ。[Y|_]がどこか投げやりであることにも符合)

438 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:48:35 ]
>>427さん
再帰のプログラムばかり作っていたのでつい・・・。
initial_state(hanoi, [[1,2,3],[],[]]).
goal_state(hanoi, [[],[],[1,2,3]]).の部分の数が4,5,6・・・と増えても使えるようにしないとなーとなんとなく
考えてたので再帰的に作っていました・・・。

自分の中の考えとしてはXという値とリストの先頭にあるYを比べて
って・・・・書いてる途中で気づいたんですがX > YではなくてX < Yでした・・・。

しかしそうすると>>421さんの作ってくれたプログラムを当てはめれば動くはずなのに
エラーが出てしまうのはなぜなんでしょう?
Rが定義されていないみたいなエラーだったのでBの後ろは_として実行もしてみたんですが・・・。
理解力いまいちですいません





439 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:18:55 ]
>>438
> Rが定義されていないみたいなエラーだったのでBの後ろは_として

この行動の説明ができれば疑問はないような気が。

これはこれでいいとして、問題は「エラー」(ではなくて警告だと思いますが)なのか、
期待通り動かないことなのか、なんだかよくわかりません。

440 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:19:40 ]
一応紹介
www.sken.biz/~tsuchiya/prolog/text/sicstus.html
> 節内で他に共有されていない変数について、Prologが気をきかせて知らせてきています。
>
> 無名変数(_で始まる変数)にした方がよい場合もあるし、「変数名を書き間違えていた」という場合もあるでしょう。

ただし「(_で始まる変数)」は余計ですね

441 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:21:53 ]
いや、余計ではなくて「(または_で始まる(無名でない)変数)」と言い換えるべきなのかも

442 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 00:29:35 ]
>>440さん
[R] - singleton variables in user:con2/2
と出ているのでRは定義されてないよ〜って言ってるんだと思うんですが
どうなんでしょう?

443 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 00:46:54 ]
>>441
_X でも警告されるんじゃ婦負の? SICStus のことはよくわからんが。

444 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 05:59:29 ]
>>442
R のように節のなかで一回しか使われていない変数は虚変数といって、
実効がありません。実は変数名の付け間違いという可能性が高いため
処理系からWarningがでますが、Prologの仕様としては、エラーでは
ありませんし、Prologのプログラムの中ではそんなに珍しいものでも
ありません。全く気にすることのないものです。

445 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:07:46 ]
実効がないと書きましたが論理的に実効がないと言う意味であって、
[A|R] ではなく [_一番上の円盤|_それより下の円盤の重なり] だったら、
ドキュメントとしての実効はあります。こんなアクの強い事例は少ないで
しょうが、多少のニュアンスを残すために虚変数はよく使われます。

446 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:21:26 ]
>>443
single_var_warningsというPrologフラグの説明によれば
> variables not beginning with `_' occurring once only
というのが警告対象なので、_から始まるものは除外されているね。
確かに昔SICStusを使ったときそんなで、利用した覚えがある。

「don't care variable」という言い方があるらしい

447 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:22:54 ]
>>442
違います

448 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:54:42 ]
>>442
初心者はその警告を無視しないほうが無難だと思います。



449 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:01:39 ]
>>442
つまりまとめると、>>421を書いた人は「一度しか現れない変数は間違いの兆候とみなされる」という原則を
意図的に無視したか、単に動作確認せずに書いて自己弁護しているかw、
ということでしょう

450 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:35:56 ]
>>449
なんでそんなことが長々話題になってるのか解りません。
私の処理系ではWarningも出ないだけです。

451 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:57:19 ]
それはなおさら興味深いじゃないですかw

452 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:10:09 ]
>>448に補足すると、
「一度しか使っていないことに気づかなかった」こと自体はどうでもよく、
単に「意図せず食い違いが生じた」ことを浮き彫りにするための手段になるということです。

453 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:11:09 ]
>>451
ごめん。IF/Prolog自体はconsult時にWarningを出してました。
私のはもう一層上にインタプリタが被っているので。
というより、ご指摘どおり、今やってみただけで、処理系での動作確認などは
確かにしていません。
ただ、この話は私の書いた >>444->>445 に尽きると思いますが。

454 名前:444 445 453 mailto:sage [2009/07/23(木) 08:39:20 ]
済みません。間違ってたかな・・・
虚変数というのはトップレベルになくてはいけないという定義だったかも。
cons3(A,B,C) :- A < B. の場合の C は虚変数だが、
cons3(A,[B|C]) :- A < B. の C は虚変数ではない、かな。
トップレベルってそういう解釈でいいのだろうか。

455 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 14:58:39 ]
虚変数という言葉は初耳ですが、要するに、
名前をつけただけで呼ばれることがない変数(の実体)は、
実行中に名前を覚えておく必要がない(「環境」から除外できる)ということでしょう。

456 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:04:39 ]
いや、「名前」の問題だけではないか。
とにかく一定の処理を省略できるという特質があるということでは。

457 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:16:38 ]
anonymous variable(「無名変数」、まれに「匿名変数」)の別名として、
void variableという、「虚変数」に近い言い方があるみたいですね。

458 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:31:17 ]
>>454
なるほど、複合項の一部に持たせるときはその記憶領域が必要ですね。
某処理系のあのバグの本質はそういうことだったのか。。
勉強になりましたw



459 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:53:48 ]
p(X) :- Y = [H|T].

460 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 23:55:54 ]
>>446
ども、ありがとうです。>>445 みたいに使うのかな。

コメントでもいいような気もするけど。

461 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 09:06:42 ]
よく考えると、自分が利用したのは、
?- findall(_X,( _X = a ),L).
のように問合せの中に使って、成功時に値を見なくていい変数であることを示す、
という効果だったような…。それは別の処理系だったかな…。

462 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:42:30 ]
亀レスすいません>>438です
>>437さん
レスがかなり遅れて申し訳ないです
ちょっと違いますがそういう解釈してました

>>442で質問した[R] - singleton variables in user:con2/2
は皆さんが教えてくださったとおりwarningメッセージで実行には問題なかったです
それとnoと出ていた件についてなんですが
どうやら>>424さんが質問してきた部分が上手くいっていなかったので
noといわれていたみたいです
con2(A,[B|_]) :- A < B.
con2(A,[]).
としたら一応は解は出たのですがなんだかループしている気がします・・・。
バックトラックを何回やってもnoにならない・・・。
ハノイの塔の3つのとき方ってそんなにあるんですかね?

463 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 00:42:28 ]
>>462
> ハノイの塔の3つのとき方ってそんなにあるんですかね?
無限にあるよ


464 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 09:13:10 ]
initial_state(hanoi, [[1],[],[]]).
goal_state(hanoi, [[],[],[1]]).
で考えると、

左→右
左→中→左→右
左→中→左→中→左→右
左→中→左→中→左→中→左→右


こうなるんじゃないかな

465 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 09:18:10 ]
節の並べ方によっては
左→中→左→中→左→中→左→中→…
と止まらなくなるおそれもあったのでは

466 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:00:08 ]
>>462です
15手順目位までは特に変わりは無かったのですがその後が変わっていってました
手順は20とか23でとまっていたので手順が雪だるま式に
増えるわけではないみたいです

467 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 02:38:21 ]
手元でやってみたら1872通りと出た。

ttp://www.research.att.com/~njas/sequences/A125295
> 1, 2, 12, 1872, 6563711232, 282779810171805015122254036992,
というような数列になるらしいよ

468 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:11:17 ]
>>467さん
( ゚д゚)・・・・

みなさん長々とありがとうございました



469 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:54:24 ]
okwave.jp/qa5100395.html
> quicksort([A|B],C) :-

> MLの説明に載っていたので、まさかMLでなくPrologだと思いませんでした。
> 助かりました。

気になる…
質問者の勘違いなのか説明の間違いなのかが気になる…

470 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 01:08:15 ]
Prolog は凄いな。

複雑な式
A is B + foo(C * D) / 2
がそのままデータとして扱えるなんて。

新たな演算子を自分で作れるのも、
それを組み合わせて新しい文法が定義出来るのも
(危ういと言えば危ういけど)凄いと思った。

LISP よりも Prolog の方が DSL 作るのに向いてるかも。

471 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 01:16:21 ]
むしろProlog自体が異様に応用力の高いDSLなんじゃ、と思うことがある

472 名前:デフォルトの名無しさん [2009/08/05(水) 16:53:08 ]
SWIなら「=..」なんていう反則述語もあるし

?- findall(A,hoge(A),AList)
or
?- hoge(A),fail.

でhogeが成り立つAを全部持ってこれるバックトラックの便利さも異常
それに、計算量を無視するならとても綺麗に書ける

473 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 17:50:47 ]
>>472
=..(univ)はISO標準ですよ

474 名前:デフォルトの名無しさん [2009/08/05(水) 17:53:17 ]
>>473
マジでw
もはや一階述語じゃないISOなのかw

475 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:56:08 ]
制約(constraint)を扱える処理系ってどんなのがありますか?


476 名前:デフォルトの名無しさん [2009/08/05(水) 18:58:12 ]
>>475
SWI-prolog

477 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 21:54:25 ]
>>474
=..は一階述語ですよ

478 名前:デフォルトの名無しさん [2009/08/05(水) 22:58:18 ]
>>477
あの述語自信はそうかも知れないけれど、
あの効果を許すとそうでなくなるのではと。

述語を作れる述語でしょ。



479 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:25:25 ]
>>478
univは複合項とリストを単一化するだけで述語を作ったりはしませんよ

480 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 00:13:57 ]
>474はfindallが一階述語じゃないこともわかってない気がする

481 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:42:14 ]
「述語を作る」という言い方は、微妙にややこしい。
論理式を作るのなら、Goal = p(X,Y)、Clause = (p :- q)などでもできる。
項と論理式を表面上区別しないから。

482 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:28:41 ]
例えば
findall(A,hoge(A),AList)
を論理的に考えてみると、
Findall(Hoge,x) ≡ ∀y[Hoge(y) ≡ Member(y,x)]
みたいな二階述語になると思う。(あってる?)

(=..)/2などで述語と引数をくっつけなくても、述語の引数にあたる変数を指定しさえすれば
高階の呼出しは表現できる、という例になっているんじゃないかな。
でもまあ言いたいことはわかるというか…。

483 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:38:39 ]
> Findall(Hoge,x) ≡ ∀y[Hoge(y) ≡ Member(y,x)]

これはリストの順序とか全く無視していてかなりしょっぱかった。今は反省している。

484 名前:デフォルトの名無しさん [2009/08/06(木) 04:43:20 ]
>>480ー481
うんそうなんだけれど、特定の述語で高階化されているというのはまあ、
そう言う機能とかAPI欲しいよねってことで納得できる
中でごにょごにょしてるんだろうと。

=..が変?なのは、述語記号そのものを変数化できるということ
=..を使えば ∀X [X(Y, Z)] ってかけちゃうし

なんか言ってること微妙に間違ってる気もするがまぁいいやw

485 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:16:16 ]
よくわからんけど、
述語論理の述語変数(や述語記号、関数記号)には個々に変数の数が決まっていて、
そもそもPrologの述語名(や関数子)とは対応していないから、
findall/3のやり方の方が、見た目は違っても述語変数を再現できている面がある。

とにかく(=..)/3がなくても一階論理を超えまくっている以上、鍵のように言うのは変だよ。
高階論理風の見た目とPrologの高階性は違う、というか。

486 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:18:02 ]
(=..)/3じゃないや。。

487 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:14:05 ]
?- alive(noriP).

no

488 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:25:11 ]
そんな推測に過ぎない節を登録しないで欲しいな…



489 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:23:59 ]
え?
登録されていない事実だから、否定してるのでは?

490 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:25:26 ]
なるほど。

491 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 23:30:07 ]
?- stayAt( noriP, Place ).

492 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:31:59 ]
?-guilty(noriP).

493 名前:デフォルトの名無しさん [2009/08/10(月) 13:32:34 ]
>>486 が顔文字に見える

494 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:44:29 ]
自信なさそうに、ちょっとうつむき気味に挙手してるようにも見えるなw

495 名前:デフォルトの名無しさん [2009/08/18(火) 19:06:04 ]
プロロげ!Prologer!
ちょっとまったりし過ぎじゃないか?

496 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:39:31 ]
レスもprolonger。


497 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 10:43:28 ]
じゃあ別スレで出てきた覆面算でも
ONE + NINE + TWENTY + FIFTY = EIGHTY

498 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:49:00 ]
やってみたけど、多少枝刈りしても1分以内にはできなかった。
いや、普通の環境ならできるんだろうけどw



499 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:07:58 ]
この数日、Haskellのスレで続いている副作用談義は勉強になる。
pc12.2ch.net/test/read.cgi/tech/1231861873/

500 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 07:29:44 ]
発刊予定日さらに延期。2010/4/16。
www.amazon.co.jp/gp/product/0321417461

501 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 20:35:51 ]
prolonged...


502 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 21:55:24 ]
誰がうまいこと言えと

503 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 10:12:24 ]
Prologってコーディング標準とかないのですかね?
標準でなくてもいいのですが、よく使われている規約などあれば教えてほしいのであります。

504 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 10:30:42 ]
>>503
ICOTではあったと思うけれど、資料はないだろうな。Prologはほんの一部ですが。
その後は、各企業毎に多少は決められてるだろうけど、ほとんど「ない」と
言い切っていいレベルだと思います。

505 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:14:33 ]
>>504
そうですか…ありがとうございます。

506 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:30:04 ]
私の場合は「散文的」でありたいと思ってるから、
そういう規則は設けないですね。

507 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 16:58:46 ]
pc12.2ch.net/test/read.cgi/tech/1250204272/176
# [1]講座名:やさしいC言語
# [2]
# (1) 「ようこそC言語へ」という文字列を表示し改行するコード
# printf関数を使う。
# (2)「 ようこそC言語へ」と表示し改行してから「C言語をはじめましょう」
# と表示し改行するコード。ただしprintfは一回しか使ってはならない。

508 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:02:09 ]
>>507
% Prolog
t507(1) :- write_formatted('%t\n',[ようこそC言語へ]).

t507(2) :- write_formatted('%t\n%t\n',[ようこそC言語へ,'C言語をはじめましょう']).



509 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:05:57 ]
失礼、誤爆でした。>>507>>508は「いろいろな言語で宿題スレ」に
書き込まなくていけなかった。錯覚しました。

510 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 18:59:49 ]
ところで
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9925.txt
こういう課題をProlog流に解釈して解答をつけるとすると、
どんなことになるのかな? Cの解答例としては
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9927.txt
がある。

511 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:52:15 ]
世界の散文化はPrologでなされるのだろうか。

512 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:39:06 ]
OS X 10.5.8にもSICS Prologってインストール可能だろうか?

513 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:07:56 ]
本家サイトくらい読めよ。
www.sics.se/isl/sicstuswww/site/download4.html
www.sics.se/isl/sicstuswww/site/portability.html

514 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:28:45 ]
なんですか偉そうに。かわりに読んでください。

515 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:59:50 ]
どうしてそういう不安があるの

516 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:36:36 ]
Mac OS X は、普通の Unix 系の OS だから、他の Unix 系の OS で動くアプリケーションなら、動くよ。
動かないのは、デバイスドライバとかの特殊なソフトウェアじゃないかな。

ただ、Mac OS X 用のアプリケーションは、他の OS じゃ動かないよ。
Mac OS X の独自機能だけを使ってアプリケーションを作るのが通例だろうから。

517 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:38:28 ]
> Mac OS X は、普通の Unix 系の OS
machスレッドはpthreadとお約束が違うので
微妙に動かなくなったりするけどな


518 名前:デフォルトの名無しさん [2009/10/01(木) 20:27:12 ]
Prolog でやるエロゲー作ったら、みんな Prolog やるんじゃね?



俺は、エロゲーやらないけど



519 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:29:40 ]
>>518
lisp ベースのゲームエンジンがあって、それを使ったゲームは
そこそこ売れているんだけど、みんなlisp やんないよね


520 名前:デフォルトの名無しさん [2009/10/01(木) 20:39:50 ]
>>519
それは、エンジンが lisp なんであって、lisp でやるわけじゃないんじゃ?
目に見えないと分からないでしょ。

521 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:42:59 ]
Age of Empire の AI が Lisp ぽいという話はあったな

522 名前:デフォルトの名無しさん [2009/10/01(木) 21:27:19 ]
そういうチラ見せじゃなくて、
コマンドラインで Prolog 打ったら、
女の子が反応したり、
女の子に新しい何かを覚えさせたり
出来るのを考えてた

523 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 21:37:43 ]
俺が喜ぶポーズを取ってみろ!

と指令を出すと、登録してある嗜好データベースで演繹して
そのシチュエーションでプレーヤーが一番喜ぶポーズを取る萌えキャラ。


524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 03:51:46 ]
subservient chickenみたいなものか

525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 22:54:00 ]
? like(you, me).
no.

〜 Fin


526 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:06:43 ]
prologでSWAN SONG。
ピンポンピンポンピンポン!ってできたらいいなぁ。

527 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:16:07 ]
SWI prolog はEmacsで使うとプロンプトが出ないんですが、
対処法はありますか?


528 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:22:37 ]
Emacs22 + SWI-Prolog 5.7.15 on Linux で使ってるけどプロンプトでてるな。
環境は?昔、Windows上でつかってるときはなんか使い難かった記憶がある。
実用上問題はなかったのでそのまま使ってたけど。



529 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 02:46:19 ]
>>528
Windows上でMeadow+SWI-Prolog(Version 5.6.62)です。
実用上は問題ないのですが、どうも気持ち悪かったものですから。



530 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:59:35 ]
ファンクタに破壊的操作を加える述語ってありましたっけ?

531 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:26:46 ]
関数子(ファンクター)をいじるというと…
例えばf(a,b)、f(123)などのfを一気にffにするとか?
述語名には影響はないんだろうか。(いや、複合項のことだろうとは思うけど)

532 名前:デフォルトの名無しさん [2009/10/07(水) 05:36:52 ]
問題.
久方のなかなる川のうかひ舟いかにちぎりてやみを待つらむ 藤原定家

この短歌に現れる枕詞「久方の」は
「なかなる川」= 京の中なる川 = 桂川 の
桂から月が連想されて、その月の光に対して、
添えられていると考えられる。

この関係を示す述語「久方のについて思い巡らし」を定義せよ。

533 名前:デフォルトの名無しさん [2009/10/07(水) 07:03:07 ]
プロログって

述語(主語や目的語や補語)

って形式だよね?
なんか自然言語の語順と一致しなくて気持ち悪いんだけど
その一因は、当時の計算機の処理能力(速度とリソース)にあると思うんだ。

いまのコンピュータ性能なら、自然言語の語順で同様のことができると思うのだけど
そういう言語でプロログに近い推論を行うものってある?

534 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:58:37 ]
たぶんない。作ればあるだろうけど。

自然言語に近い語順、はいいけど、機械が扱うためにはきちんと形式化されてる
ことが必要だからね。

535 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:50:36 ]
>>534

X:>自然言語に近い語順、はいいけど、
O:>自然言語に近い語順、は「どーでも」いいけど、


536 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:15:11 ]
>>533
自然言語の語順と一致しなくて気持ちいい


537 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:51:45 ]
気持ちがよければそれでいいのかと問いたい
問い詰めたい

538 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:56:43 ]
自然言語にすり寄っても、論理学との関係がややこしくなったら本末転倒じゃないかな



539 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:15:46 ]
英語的:  主語 <述語> 目的語 :- ... .
日本語的: 主語 目的語 <述語> :- ... .

この場合は述語指定に< >を使ってしまうので大小比較の時の記号表現にちょっと困る。
日本語的: (主語,目的語)述語 :- ... . とすれば現在と差なく処理できるが、
英語的: には適用できない。

540 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:41:56 ]
relationなんで主語があるとは限らない。目的語も。

541 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:53:11 ]
格概念への割り当てが面倒になって飽きること必至

542 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:03:17 ]
>>533
計算機の処理能力というようなことではなく、考えに考え抜かれて、
現在の言語仕様が作られたように思うなぁ。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:51:10 ]
言語仕様はね。

構文は 述語(引数0, 引数1, ...) でなくたとえば (引数0, 引数1, ...)述語 も
ありだとはおもうけど、今の形になったのは計算機のリソースの問題とか
じゃなくて、数学の記法における慣習とか、そこらへんでないかと。

自然言語ライクな文法って、例えば Mind みたいな文法のことを
言いたいのかな?

544 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:35:50 ]
述語が先にくる自然言語(タガログ語とか)を使えばよろしい。


545 名前:デフォルトの名無しさん [2009/10/09(金) 12:34:55 ]
op で上手く定義すれば、ある程度は自然言語に近付けられそうな気がする。

546 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:44:04 ]
>>545
pc12.2ch.net/test/read.cgi/tech/1179157784/30
とか。

547 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:00:13 ]
>>543
フレーゲあたりじゃない?述語論理の形式が整ったのって。
数学の関数 f(x) にヒントを得たんじゃなかろうか。

548 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:06:17 ]
K-Prologについて教えてください。SWIに比べて制約があるようなのですが、
下記のコードはSyntaxErrorになります。
my-reverse([], []).
my-reverse([X | Xs], Ys) :-
my-reverse(Xs, Zs), append(Zs, [X], Ys).

SWI-Prologでは問題なく動くのですが。
K-Prologが本来の文法を維持しているのか?単なるバグなのか?
因みに下記だとK-Prologでも動きます。
my-reverse(R,L) :- my-reverse(R,L,[]).
my-reverse(R,[],R).
my-reverse(R,[A|L],LL):-
my-reverse(R,L,[A|LL]).




549 名前:548 mailto:sage [2009/10/12(月) 20:04:58 ]
すみません、わかりました。K-Prologの意味不明なエラーに
悩まされていたのですが原因は単純でした。
コードの最後の行に改行がないと正しく読み取られないようです。
お騒がせしました。

550 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 09:05:17 ]
最後に改行ないと本来はエラーなのかな?

551 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 17:36:30 ]
>>550
SWIやYAPでは問題ないのでうっかりなのでしょう。

K-Prologはシンプルでなかなかいいです。
最近、多忙によりメンテされていないようですけど。

552 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:42:25 ]
>>551
<終止符>は二文字で第一文字が"." 第二文字がasciiコード32以下の
文字ですから、K-prologの解釈が正しいと思います。


553 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:49:27 ]
asciiコード32以下、という定義はちょっと面白いな。
0x1a(^Z)でもいいわけだ。

554 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:37:18 ]
節と節の間に空白がなくて駄目だったという事態はわりとよくあると思うけど、
ファイルの終端という罠があったか。

555 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:53:06 ]
32以下ってことは空白でもOKなのかな?

556 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:00:10 ]
もちろんOKでしょ。最後に改行がなくても。

557 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:08:01 ]
Prologの述語ってどの程度まで規格化されてるのでしょう?
M.Hiroiさんの順列生成のコード、K-Prologで動かないので調べてみたら
select述語の第1、第2引数の順番が逆に定義されていました。
perm([],[]).
perm(Xs, [Z | Zs]) :- select(Xs, Z, Ys), perm(Ys, Zs).

/* M.Hiroi
perm([],[]).
perm(Xs, [Z | Zs]) :- select(Z, Xs, Ys), perm(Ys, Zs).
*/


558 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:23:11 ]
少ししらべたのでメモ。
select(X,L,<L引く[X]>)の形
・Quintus Prolog - library(lists)
・SICStus Prolog - library(lists)
・SWI-Prolog - library(lists)
・GNU Prolog
select(L,X,<L引く[X]>の形
・n-queensのプログラムにちらほら見られる(有名な本に載っている?)



559 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:32:57 ]
ちなみに、SWI-Prologの古い版(3.1.2あたり)では後者のリスト先行の形もあったみたいだけど
あまりちゃんと見てない。
www.google.com/codesearch?hl=en
lang:prolog ^select\(\[

560 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:54:53 ]
Prolg-KABA では「ふろく」のプログラムの例としてQUEEN.PLが
載っていて、この中のselect/3は後者。

561 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:56:05 ]
漏れのK-PrologからSWI-Prplog移植の経験(ほんの少し)だと、
[K] name(X, Y) が [SWI] string_to_atom(Y, X) てのがあた。

562 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:56:22 ]
Prolog-KABAねw

563 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:06:15 ]
Prologの場合、述語が双方向性を持つことが多いという特殊事情があり、
たとえば、member(A,L) はリストLにAが存在するかを問う場合この順序が
自然だが、Lから一要素づつ順に取り出す場合はPrologとして自然なのは
member(L,A) だろう。

564 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:06:29 ]
Prolog-KABAか、懐かしいね。
自分はPC98買えなかったから、会社のHI-UX Prolog(超マイナー!)を触っていた。
その後、WinなPCを買ったけど、当時は日本語がまともに扱えて
個人購入できるのはK-Prologくらいだったから、重宝していたよ。

565 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:10:09 ]
>>563
双方向性という特殊事情があるからこそ
どちらが自然であるかは一概には言えない、ってことだよね?

566 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:12:11 ]
SWIにもname/2はあるみたいだけど、整数の扱いが違うとかそういうこと?
www.swi-prolog.org/pldoc/doc_for?object=name%2f2
> (e.g. `name(N, "300"), 400 is N + 100' succeeds)

www.kprolog.com/doc/ja/builtins/meta/creation.html#name_2
> アトミック項をその表記である文字列と相互変換します。
これだと数がどうなるのかわからないけど。

567 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:18:17 ]
>>565
そうです。
もっともmember/2についていうと、append/3というスーパーセットがあり、
?- member(A,[1,2,3]). ?- foo(L),member(2,L). は

?- append(L1,[A|L2],[1,2,3]). ?- foo(L),append(L1,[2|L2],L).

と同じ意味になります。append/3くらいの地位を築いていると、
Aの位置が少々不自然でも文句を言う人はいないのかもしれない。

568 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:29:31 ]
>>566
スマン、6年以上も昔の不正確な情報だったかもしれない。
当時作った(K-Prologの)プログラムに、以下のようなコードが残っていたから。

stringToPathList1([A|X], [B|Y]) :-
  !,
  name(B, A),
/* for SWI-Prolog
  string_to_atom(A, B),
*/
  stringToPathList1(X, Y).



569 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:31:26 ]
ああ、昔のことだとわからないね

570 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 08:43:03 ]
>>567
自分の場合、双方向性の必要の無い(入出力が明確な)リスト処理については、
関数型言語風のmap_list/select_list/if_listみたいなライブラリを作っているよ。
どれも function(入力リスト, 高階述語, 出力リスト) というスタイルで統一している。

571 名前:570 mailto:sage [2009/10/14(水) 08:54:06 ]
>>570のif_listは間違いだ。reject_listに訂正。
if系は第2引数の高階述語向けとして定義していた。

あと、(appendに相当する)リストの結合処理は作っていないや。
もし作るとすれば、merge_list(入力リスト1, 入力リスト2, 述語, 出力リスト)
みたいな感じになると思う。

572 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:11:31 ]
プロログで入力、出力とな!(麿のAA略

573 名前:570 mailto:sage [2009/10/14(水) 10:25:50 ]
>>572
スマンw

ただ、並行論理型言語(KL1(GHC), Concurrent Prolog)の存在を知ってしまったから、
はたして逐次Prologにも双方向性(=非入出力)の概念が必須かどうかについて、
疑念を持ち始めていた。

もちろん、find_allといった全解探索に双方向性は必要。
でも、その後の得られた解の加工処理については、双方向性はかえって邪魔になる、
言い換えると、入出力を明確にした方がプログラムは読みやすくなると思う。

574 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:33:15 ]
双方向性を狙って書く人は少ないと思うね。
図らずも双方向性が得られたという歓びで十分だな。

575 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:42:28 ]
append/3 一つで済ませるをよしとするか、別述語とするかという話ですね。
Prologは基本的に単位節述語定義とappend/3だけで書くものだ、でいいと思うけど。

576 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:36:25 ]
>>558
>>560
どうやら
select(L,<L引く[X]>,X)の形
もあるね。
% from Sterling and Shapiro, "The Art of Prolog," page 211.
と出典のあるやつ。

577 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:52:29 ]
p右向き(X0,X) :- q(X0,X1), r(X1,X2), s(X2,X). % p右向き --> q, r, s.
p左向き(Y,Y0) :- s(Y1,Y0), r(Y2,Y1), q(Y,Y2).
あなたも順序を変えたくなーる

578 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:01:47 ]
>>575
述語定義の中は全部appendで大いに結構だけど、ここではその一層上の
話じゃないか。ライブラリに登録する時の述語頭部の仕様のことではないか。



579 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:35:14 ]
GoogleブックスでThe Art of Prolog(第2版)を見てみたら、
select/3は211ページ目ではなくもっと前の方に(要素先行の形で)載っていた。
ひょっとしたら1988年の初版とずれがあるとかいうオチかも。

580 名前:557 mailto:sage [2009/10/14(水) 21:37:52 ]
みなさん、情報ありがとうございました。


581 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:25:27 ]
pc12.2ch.net/test/read.cgi/tech/1254967587/486
の話ですが、こちらへ引っ越すことになりました。話の発端は
変数に情報をどこまで含ませられるか、コメントではだめなのか、でした。
A + B + C :- 売上入力検査(A,B,C,_診断), ... . と

_出荷日 + _商品番号 + _数量 :- 売上入力検査(_出荷日,_商品番号,_数量,_診断), ... .

の比較から、私が、
出荷日 A + 商品番号 B + 数量 C :- 売上入力検査(A,B,C,_診断), ... .

はPrologではできないので、としました。型出荷日のA、型商品番号のB、型数量のCが可能であるならば
_出荷日という蜻蛉のような表現よりは強いということです。
型について書いているのですが、私の視点は100%ソースコードの表現力に向けられていて、
コンパイラに於いて語られる諸問題とはほとんど無縁です。

582 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:31:16 ]
# 自分も「美しい言語」スレから、こちらへ引っ越してきました。

>>581
最終的に実現したい事は、Prologで(「データ型機能」を実現したい!と言うよりも、)
「名前付きフィールド機能」を実現したい!という事ではないかと推測します。
たとえばRubyのメソッド定義であれば、

 def 売上入力検査(出荷日, 商品番号, 数量) .... end

と記述する代わりに、ハッシュを使って

 def 売上入力検査(*入力データ) .... end

と記述し、そのメソッド呼び出しを以下のように記述する事が可能です。

 売上入力検査( '出荷日 => 20091016, '商品番号 => 200, '数量 => 36.4 )

これに類似した述語記述を、(更には、もし可能であれば言語レベルでの型定義/宣言/検査も)
Prologで実現したい!ということではないかと考えました。
SQL言語であれば、既にレコードとして実現されている機能ですから、
(RDBと比較して)Prologデータベースが使いづらい点だと思われます。

このような認識で合っているでしょうか?

583 名前:デフォルトの名無しさん [2009/10/16(金) 17:47:05 ]
出荷日(A) + 商品番号(B) + 数量(C) :- 売上入力診断(A, B, C, _診断結果), …

だと順番が入れ替えられないのが問題なのかな?

584 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:56:51 ]
>>583
いや、インタプリタのトップから、
?- 20091016+200+34.6.
# 売上入力検査 true 売上 assertz(売上('20091016','0200',34.6,'2009-10-16 17:55:00.000000')) 済み
yes
?- というように使いたい。そのためには 出荷日(A) ではダメです。

585 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:12:01 ]
Prologを拡張して、
{A | 出荷日(A)} + {B | 商品番号(B)} + {C | 数量(C)} :-

のような表現を可能にすれば、?- 20091016+200+34.6.
は実現します。これは1980年代に中島秀之氏によって「項記述」という名で
Prolog拡張の提案として出されたことがあります。

586 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:26:19 ]
>>582
私の意図したのはどちらかというと、>>585の型そのものですが、
この { _変数 | _型記述 } の_型記述部分にatomがくると無条件に
真となる、と定義すれば「名前付きフィールド機能」らしきものには
なります。しかし、フィールド名からどうやって呼び出すのかという
問題を解決せねばならず理論的なアプローチが必要でしょう。

587 名前:582 mailto:sage [2009/10/16(金) 18:27:58 ]
>>584
>いや、

ということは、(>>582の)名前付きフィールドは不要であると考え、次の質問に移ります。

>いや、インタプリタのトップから、

インタプリタのトップレベルにこだわる理由は何かありますか?

たとえば、実行例を以下であるとし、

 ?- read_record.
 20091016+200+34.6. # <-- キーボードから入力
 yes
 ?-

とし、述語 read_record の中で 入力値検査と assert を実行した場合、
何が問題になりますか?

588 名前:582 mailto:sage [2009/10/16(金) 18:36:21 ]
>>586
スイマセン、>>587をカキコする前にスレをリロードしてませんですた。
>>586へのレス内容は、今、考えています。



589 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:52:13 ]
>>587
インタプリタのトップからに拘るのは、私がそれの虜になったから
ですね。元々一覧表のようなものが嫌いで、巨像をなでるような
細部の積み重ねで本当らしきものを築き上げることを好みます。
沢山、柔軟に質問できるものをよしとします。少なくともその方が
敏感でいられます。

590 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 19:33:55 ]
グラフを述語で表現しようと思っています。
e(1,2). e(3,2).
のように点を数で表し、点の接続をe(X,Y)で表そうと思います。

ところで、グラフをプログラム中から変更したいのですが、
retract(e(1,X)).
とするとエラーになります。assertしたものはOKなのですが、
予めテキストに書いて読み込んだものはエラーとなります。
こういう場合、どうするのが定石なのでしょうか?

591 名前:582 mailto:sage [2009/10/16(金) 19:41:43 ]
>>586

2点、要求仕様に関する質問があります。

まず、>>585の紹介してくれた中島氏の記述方式は、フィールドを前提としています。
たとえば、「変数 A の フィールド名は '出荷日' である」と宣言してます。
それに対して、>>586のレスでは、「名前付きフィールド機能らしきものになる」と
肯定しています。

その一方で、>>584のレスにある「いや」という表現から、「名前付きフィールド機能は
不要である」という意図のようにも読み取れるます。

これら二つの事柄は、自分の中では「矛盾」しているような気がしています。
ここから推測される意図として、以下を考えてみました。

・述語定義では名前付きフィールドを使いたい。
・ただし、問い合わせでは(フィールド名を省略した)タプルを使いたい。

この解釈で合っているでしょうか?

2点目の質問です。

# ここは>>587の後半にある質問内容と同一ですから、省略します。

ご返答を願います。

592 名前:582 mailto:sage [2009/10/16(金) 19:48:31 ]
# またリロードせずにカキコやっちまったゼ....orz

>>589

要求仕様について、了解しました。

# ご返答を頂いたので、>>591にある2番目の質問は無視し、
# 先頭の質問に対するのレスだけでOKです。

593 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:25:38 ]
GHCの処理系で今も現役のものってありますか?
また、and/or並列を自動的にやってくれるものってありますか?


594 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:59:01 ]
>>591
一つ違うかなと思うのは、中島氏のものは後で確認しますが、私が考えているのは
出荷日(X) :-
integer(X),
今日(_今日文字列),
atom_to_term(_今日文字列,_今日整数),
X >= 20090101,
X =< _今日整数.
のような検査述語が定義されていて(20090932なども許す不完全なものだが)
{ A | 出荷日(A) } の出荷日(A)は単一化の付加機能として適用(call)される
ということです。ちょっとfindall/3の第二引数に似ています。
これで型出荷日(実は述語)と変数Aの関係が定義できます。
しかし、これは頭部による定義であり、副目標の引数にまったく同じ型の
変数は場合によると大量に発生しますから、それらの変数をD,E,F,G,H...と
置いていくと、その型についての情報はこの節の中にはないということに
なってしまいます。そのことから現在のPrologの枠組みでは型を取り入れ
それによってソースコードの情報価値を高めることはあまり期待できないと
いう結論になってしまいます。
名前付きフィールドも同様の理由から否定的にならざるをえません。


595 名前:594 mailto:sage [2009/10/16(金) 21:11:46 ]
そもそもPrologとは論理変数のストリームを繋ぎ合わせる錬金術のことですから、
いちいち型など考えていられるか、ということになります。単純に言うと。
これは「もっとも美しいプログラミング言語は」スレで叫ぶべきことでしょうね。

596 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:17:00 ]
>>592
と、突然正反対の結論になってしまいました。申し訳ない。
実はこの話、昔から何度も何度も持ち出してはうまく解決できず、
放棄を繰り返しているのです。

597 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:28:38 ]
>>590
IF/Prologですか?

598 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:42:14 ]
>>597
いいえ、K-PrologとSWI-Prologで試しました。




599 名前:582 mailto:sage [2009/10/16(金) 21:45:48 ]
>>594
すいませんが、ここでレスをカキコするとスレの流れが発散しそうなので、
直接のレスは控えます。

何をしたいのか、そして実現方法としての中島氏の方式に関する質問へのレスを待ちます。
もし質問の意味に不明点や疑問があれば、質問を返してください。それには対応します。

# Prologで名前付きフィールドを実現する方法はいくつかあります。
# おそらく、中島氏の方式も、その一つであるように見えます。
# ただ、今の状況では、何も話せません。

600 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:08:35 ]
>>590
>予めテキストに書いて読み込んだものはエラーとなります。

具体的には、どういう方法で読み込んだの?

>>593

GHCなんて超マイナーな言語を持ち出したってことは、
ICOTライブラリのサイトを見てるし、KL1という名前は知っているんだよね?
(まさかHaskellの処理系じゃないよね?w)

あと、後半の質問は知らない。

601 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:10:01 ]
>>598 これでどうでしょうか。
ファイルの頭で :- dynamic(_述語形式リスト). を宣言します。

:- dynamic([e/2]).

e(1,2).
e(3,2).

602 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:46:23 ]
>>601
うまくいきました。ありがとうございました。

今、ケイリーの木の公式の証明に使われているアルゴリズムを
Prologで書こうとしているところです。助かりました。

603 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:32:27 ]
>>599
要求仕様に含まれる情報をできる限り遺漏なく、どうしたらソースコードに
盛り込めるか。これが私の課題で、型の採用は一案に留まります。
コメントでよいものか、関数名、述語名、論理変数に反映するべきなのか。
論理変数に反映したとして、どんな意味があるというのか。
それから、理論だけではなく、実務的にどれだけ有効であるか。それを測定できるか?
まったくの素人がPrologを一読して理解することがあり得るか?どうすれば可能か?
以上のような視点からの書き込みだったので一旦身を引きます。

項記述については、多分初出の第二回ロジックプログラミングコンファレンス(1984)の
Proceedingが手元にあるのでもう一度考え直して、近いうちに書き込みます。

604 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 07:39:57 ]
このところの流れは単一化が邪魔してる部分の話か。
Prologの不人気の原因もそこに帰するような気もするね。



605 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:15:42 ]
>>600
ガーン、GHCというか、ホーン節にガードを付けるって考え方はマイナーなんですか?
KLICも知ってますが、現役で開発・メンテされてる処理系ってないもんでしょうか。
Prologってもはや現実的プロジェクトでは使われることはないのかな。


606 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:30:09 ]
マイナーというなら確かにマイナー。
GHCで表現しなくてはならないような課題を与えられた人はほとんどいない。
そういう意味でマイナー。美しさという点では一頭地を抜いてると思う。
Prologはプログラマも処理系も健在だから、いつでもプロジェクトを起こす
ことは可能だけど。

607 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:28:07 ]
>>605

>>570だけど、逐次Prologそのもののがマイナーであることは、
このスレの寂れ具合で分かると思う。並列論理型に至っては....。

といっても、漏れは研究職でもなく、普通の職業プログラマでしかないから、
海外/国内の学会の動向を追いかけてるわけじゃない。
専門家に聞けば、また違った見解が得られると思う。

個人的には、過去に、業務でPrologでステートマシンのシミュレータを開発していたが、
そのエンジン部分をConcurrent Prologで書き換えたことがある。
処理系としてはbit誌に掲載されていたミニインタプリタに改造を加えたもの。
それ以降、活用の機会は無い。(逐次Prologは現役で、ツールとして活用しているが....。)

ただ、パイプライン構造のようにプロセスが一方向を向くシステムに限定すれば
逐次論理型言語で記述可能だけど、一般的なネットワーク構造を持つ場合には
(ストリームプログラミングによる)並列論理型言語による記述が適している。
だから、今は、システム全体を並列型で、個々のプロセス内部のアトミックな発火を
(関数としての)逐次型で記述するという、ビジネス向けシステム仕様記述技法に
応用できないかと考えている。JSD法(ジャクソンシステム開発法)に近い発想。
処理系としては、前記のミニインタプリタを復活させる予定。

608 名前:デフォルトの名無しさん [2009/10/17(土) 17:49:20 ]
Oz言語(処理系Mozart)は、どうなんだろ。
それを中心に使ってる有名な分厚い本(ゴメン題名忘れた)で、GHCとかの並列論理型言語の概念も紹介されてて、その欠点も指摘してたんだけど、
それだったら、Ozは、その欠点を克服出来るようになってないのかな。



609 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:23:09 ]
Ozはマルチパラダイム言語であることくらいしか分かっていないけど、
問題解決の有効な一手法だと思う。その本は読んでいないけど、
おそらく並列論理型言語の問題は処理効率ではないかと想像。

ただ、論理型言語の魅力は、(処理効率を引き換えに得た)柔軟性と拡張性にあると考える。
だって、論理型言語の枠組みの中で、関係データベース、構文解析、関数、並行性、
制約解消、そしてオブジェクト指向を、次々と実現してきたんだから。
だから、プロトタイプやモデルシミュレーションといった、
処理効率の問題を無視できる用途であれば、
論理型言語(Prolog)は、まだまだ成長/発展を見込めるハズであると思う。

逆にマルチパラダイム言語は、魑魅魍魎というか混沌とした世界のように見える。
もちろんOzは触った事がないから、無知故の偏見だと思うが....。

610 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:06:00 ]
>>582
先程から売上入力検査の部分を再考していたのですが、ドキュメントとして
ここは必要という部分だけ、型(らしきもの)を添えるというのは
やはり有効かもしれませんね。

  消費税計算(商品番号 => 200,数量 => 36.4,消費税率 => 5 %,売上金額 => A,消費税 => B),
  売上金額検査(A,売上金額 => C),

というようなコードだとしても、情報量は明らかに豊かになります。
消費税計算の中で金額を計算するとしている部分は不自然ですが。

611 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:51:21 ]
>>610
Prologへの名前付きフィールド機能拡張の試みはいくつかありますが、
その一つに「レコード・プログラミング」という概念があります。
レコードとは、C言語の構造体やSQLのCERATE TABLE文のような、
<フィールド, 値>のペア(対:つい)から構成される集合を意味します。

たとえば、

 消費税計算(200, 36.4, 5, A, B)

というPrologの述語記法は、以下のようなレコード記法で書き換える事ができます。

 [関係→消費税計算, 商品番号→200, 数量→36.4, 消費税率→5, 売上金額→A, 消費税→B]

さらに、消費税計算 を型とすれば、以下のように表現できます。

 [商品番号→200, 数量→36.4, 消費税率→5, 売上金額→A, 消費税→B]:消費税計算

'消費税計算' とは、「型(らしきもの)」なんかじゃなくて、レコード・プログラミングの世界では、
まさしく「型」なんです。型の導入によって、「個別消費税計算 is_a 消費税計算」や
「総合消費税計算 is_a 消費税計算」のような型階層(継承)の導入が容易になります。
おそらくデータ型機能(型定義/型宣言/型検査)の導入も可能になるでしょう。

そして、レコード・プログラミング自体は考え方(パラダイム)ですが、もしもその考え方を
Prolog言語へ直接的に導入したとすれば、それはまさに、>>610のような記法になるのだと思います。

なお、このカキコのネタは、以下の書籍にある「レコード・プログラミング」の章です。
・続新しいプログラミング・パラダイム, 横田一正他著, 共立出版, 1990年


612 名前:デフォルトの名無しさん [2009/10/19(月) 12:36:04 ]
>>609
いや、指摘されてた問題点は、処理効率ではなくて、言語のモデルの方だった。
それに論理型の問題点じゃなくて、あくまで並列論理型の問題点だよ。
何かの問題では、モデルが悪くて上手く適用出来ないけど、
その原因は、並列論理型だと、並列性だったか、ストリームだったかが、自然に融合し過ぎていて操作対象として扱えないからという事だったようにと思う。

うっかりしてたけど、GHC〜KL1をやってた上田教授(?)が、それをさらに発展(?)させた言語 LMNtal をやってたよ。
日本語以外も検索する指定で google で検索すると、pukiwiki で構築されてて、英語だけで、分子っぽい図があるページが見つかると思うけど、そこが LMNtal の本拠地みたいだ。
携帯からなんで URL が書けなくてゴメン。


613 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:37:01 ]
>>612
>並列論理型だと、並列性だったか、ストリームだったかが、自然に融合し過ぎていて操作対象として扱えない

たしかに、GHCはストリームを明示的に記述するから、それ自身は操作対象としては扱えませんね。
ただ、それ以上は(>>608の)Oz本を入手して読まない事には何とも....。

>GHC〜KL1をやってた上田教授(?)が、それをさらに発展(?)させた言語 LMNtal をやってたよ。

LMNtalは初見でしたので、でググってみました。斜め読みですが、初対面の印象は以下の2点。

・GHCでは、プロセス間通信チャネルとして差分リストを明示的に記述する必要があったけど、
 LMNtalでは、それが隠蔽されている。

・「形式的な視覚化(visual formalizm)」が可能な計算モデルである。例題のappendは面白い。

最近は並列論理型言語の動向を追いかけていなかったのですが、研究レベルでは着実に進展している
みたいですね。並列論理型言語の誕生から未来への展望については、上田教授のサイトにあった、
以下の解説が読みやすかったです。Ozも(LMNtalとは別の方向性?で)GHCの流れをくむことが見えます。

・上田和紀,論理・制約プログラミングと並行計算.コンピュータソフトウェア,Vol.25, No.3 (2008)

614 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:07:10 ]
>>613
> たしかに、GHCはストリームを明示的に記述するから、
> それ自身は操作対象としては扱えませんね。

KL1はメタレベルアーキテクチャ持ってたよ。
OS(PIMOS)はそれで書いてた。
荘園。

615 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:08:02 ]
Prologをほめたたえているサイトとかありませんか/

616 名前:デフォルトの名無しさん [2009/10/22(木) 12:13:47 ]
そんな過去の事より、Prologの未来の話をしましょうよ/
それと、最後のスラッシュは、なに?/

617 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:29:37 ]
シフトキー入れ忘れて?が/になっちゃったんだろう

618 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:14:36 ]
>>612 >>613 >>614 >>616
AZ-Prologの新バージョンには並列処理が入ったよ。
OR並列でガンガンいけるらしい。



619 名前:デフォルトの名無しさん [2009/10/24(土) 12:25:19 ]
>>618
; のところとかで並列に試行してるってこと?
パターンマッチングのところも?

620 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:45:50 ]
>>619
今、Downloadが終わって、これからインストールだからw
数百節の頭部のUnifyを並列に処理して、早い者勝ちで、
候補節を得ることができるらしい。もちろんそういう指定を
した場合に。16コアなどになればかなりの高速化が期待できる
とのこと。

621 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:31:34 ]
それはいいですね。
ところで、GHCとかICOTがらみついでなんですが、
制約付きユニフィケーションとかなんとかあったと思いますが、
あれは全然広まってないんでしょうか?
cu-Prolog(constrained-unification)というのもあったと思うんですが。


622 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:41:30 ]
広まってたら、知ってるはずでしょw
まだ継続して研究している人はいるけれど。

623 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:31:08 ]
多文字プログラミングの罠にはまった。
「〜が90°」のように角度の「°」をそのままアトムの名前の一部として使っていたんだけど、
元にした文書の中で半濁点と混用されていて…w

624 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:52:19 ]
そんな君に
euc.jp/i18n/ucsnote.ja.html
www.ingrid.org/java/i18n/encoding/ja-conv.html

625 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 04:00:18 ]
ICOTのサイトのメンテナーってどの団体なんだろうか。
研究成果のページでところどころリンク切れあるのが非常に残念。

626 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 08:25:35 ]
団体って
ボランティアでしょ。

627 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:52:35 ]
Bruce Batchelor 著 "Intelligent Image Processing in Prolog"
1991 Springer-Verlag
に出てくる述語群を適切な日本語で置き換えたら興味の尽きないものと
なりそう。こういう労作も永劫に忘れ去られていくのだろうか。

628 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 19:59:29 ]
>>587
ひとついい忘れたというか書き落としたことですが、
データを入力する、
その直後に、あ、あれなんだったっけと質問する。
今入力したデータはもちろん、まったく関係ない例えば人名など。
それを解決して、次の入力。
このように進行するためには、別のWindowに移るだけでアウトですね。
同じWindowの次の行で質問して、また、元の仕事に戻る。

このためには、これからデータ入力するよと宣言した負節を起動する
のではだめです。常に質問するのに「最良の」環境を維持しなくては
ならない。インタプリタに拘る一番の理由は寧ろこちらの方でしょう。



629 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 20:06:54 ]
Smalltalkという言語ができてしまって、この言葉が使えないのですが、
Prologという言語はまさにSmalltalkそのものなのですよ。
ぼそぼそと質問して、了解したら、というか了解できなくても、
またぼそぼそ。小さな質問を積み上げていくことで、少しずつ、
像を築き上げていく。そういう環境です。そのための準備をする
のがPrologプログラミングです。常にぼそぼそだかポロポロだか
わかりませんが、対話してる、それに相応しい言語がPrologです。

630 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 23:53:23 ]
質問させてください

第1引数が第2引数の部分集合(リスト)であれば成功、さもなければ失敗する述語。
第1引数と第2引数はそれぞれリストで、
これらの重複部分を除いた要素すべてをリストにしたものが第3引数の値となる(和集合)

を作りたいのですがどうすればいいのでしょう・・・・。

631 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 04:07:06 ]
>>630 最初の質問への答え
AがリストLのなかに存在するかどうかは
?- append(L0,[A|L1],L).
または
?- member(A,L).
で確かめることができます。それで最初の質問は
部分集合([],L).
部分集合([A|R],L) :- member(A,L),部分集合(R,L).
つまり、要素として存在しないケースの節を定義しない! ことによって実現します。
append/3とmember/2はほとんどのProlog処理系で「組み込み述語」となっているため
ユーザが定義する必要はありませんが、
append([],X,X).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).
member(A,[A|_]).
member(A,[_|R]) :- member(A,R).
がそれぞれの定義です。

632 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 05:03:35 ]
>>630 二番目の質問はそれぞれのリストが集合を念頭に置かれたもので
あるかどうかで、述語の定義は変わってきます。それぞれが集合の場合は、
第一引数、第二引数のそれぞれに於いては重複する要素はありませんから、
>>631のappendの定義をちょっとだけ変形して
和集合([],X,X).
和集合([U|X],Y,[U|Z]) :- \+(member(U,Y)),和集合(X,Y,Z).
和集合([U|X],Y,Z) :- member(U,Y),和集合(X,Y,Z).
で実現できてしまいます。
つぎに、第一引数と第二引数自体に重複があり得る場合は、
重複を取り除く([],[]).
重複を取り除く([A|R1],[A|R2]) :- \+(member(A,R1)),重複を取り除く(R1,R2).
重複を取り除く([A|R1],R2) :- member(A,R1),重複を取り除く(R1,R).
を定義しておいて、
和集合(L1,L2,L3) :- append(L1,L2,L4),重複を取り除く(L4,L3).

633 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 07:09:52 ]
>>632 すみません、重複を取り除く/2の最後の節の最後が間違っていました。
重複を取り除く([],[]).
重複を取り除く([A|R1],[A|R2]) :- \+(member(A,R1)),重複を取り除く(R1,R2).
重複を取り除く([A|R1],R2) :- member(A,R1),重複を取り除く(R1,R2).
R2とするべきところがRになっていました。

634 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 10:18:57 ]
>>629
モノローグ?
スモールトークは“軽いおしゃべり”だからボソボソってイメージじゃないので。

635 名前:630です [2009/11/04(水) 13:16:27 ]
すいません
プログラムの実行結果書くの忘れてました


?- subset([a, b, c], [a, b, c, d, e]). ⇒ yes
?- subset([a, b, c], [d, e, f, g]). ⇒ no
?- subset([a, b, c, d], [a, b, c]). ⇒ no

?- union([a, b, c], [a, b, d, e],[a,b,c,d,e]). ⇒ yes
?- subset([a, b, c], [a,b],X). X⇒ [a,b,c]
?- subset([c, d,e], [a, b, c],X). X ⇒ [c,d,e,a,b]

となります
appendとmemberはサブで使うらしいです

636 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 02:45:40 ]
>>635
最後のsubset/3の二節はunion/3ではないかな

637 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 06:07:32 ]
>>634
なるほど。私はネクラだから。monoっていうのはひとりということなのかな。
隠れキリシタンの末裔が講でポロポロやってるのだとするとmonologueか。
インタプリタのトップっていうのは一応会話するところなのだが・・・

638 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 08:48:01 ]
>>636さん
すいません
その通りです



639 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:43:14 ]
>>637
でも、ボソボソって会話って感じじゃない様な
ポロポロは、会話にも、一人の発話の雰囲気にも、使わない感じが

640 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 13:40:00 ]
ポロポロは田中小実昌の小説で使われた表現なんだな
実は「てんにましますわれらの・・・」とか言ってたんだろうけれど。

641 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 16:21:49 ]
Prologで自然言語処理における意味解析を学んでいるものです。。

wordnetを用いてPrologでシソーラスを定義しようとしています。


しかし、いまいちwordnetをPrologで使う方法が分かりません。

どなたか詳しく説明されているサイト等ご存じないでしょうか?

642 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 03:03:25 ]
方法はわからんが、WordNetはクラス、インスタンスを混同しているとか、is-aの関係を誤解している
という批判がある(溝口理一郎 オントロジー工学)ので、Cycのほうがいいんではないだろうか。

関係ないけど同書にあるIFF(information flow framework)というのが面白そう。
上位オントロジーの言葉として圏論を使うみたいよ。個人的にいろんなものが繋がって興味深い。
IFF
www.ontologos.org/IFF/The%20IFF%20Language.html
IFFの数学面
www.ontologos.org/IFF/Overview/Mathematical%20Connections.html

643 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 03:16:18 ]
圏論の創始者の一人であるマックレーンは、『数学−その形式と機能』という本の中で、
形式主義をも包括する機能的形式主義という、オントロジーの哲学みたいなことをやっているから、
当然といえば当然なのだろうけれど、実際に見ると驚いてしまう。

644 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:37:55 ]
ただ、やっても袋小路に行き着くのが目に見えてるわ。
これもやっぱダメポ。

645 名前:デフォルトの名無しさん [2009/11/19(木) 12:18:03 ]
このスレも袋小路に入ってるね

646 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 22:17:58 ]
気に触ったのなら申し訳ない。自分には使いこなせそうに無いという意味で、
否定する意図は無い。

647 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:43:42 ]
>>625
そういえば、FTP経由で提供されていたもの(「ICOTフリーソフトウェア」など)には
すでに移転前からアクセスできなくなっていたけど、提供側も気づいてないような気がする。

648 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 07:25:17 ]
Prologプログラマに質問です。
1) あなたが小さな述語を定義するとき、リピートパターンの述語の比率はどのくらいになりますか。
ここでリピートパターンとは
r.
r :- r. の型の非決定性述語であり、代表的なものとして、append/3 や member/2 があります。
2) あなたは再帰的な述語定義をする際、追加して1)のタイプの定義を作っておきますか。

質問は以上です。




649 名前:648 mailto:sage [2009/11/29(日) 07:34:25 ]
2) は意味不明でしたね。1)は再帰的ですから。
ステッパーパターンと呼べばよかったとわかりました。

650 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:18:18 ]
2年以上前ですがこんなのあったんですね。

渕一博記念コロキウム
『論理と推論技術:四半世紀の展開』
www.ueda.info.waseda.ac.jp/fuchi-colloquium/
www.ueda.info.waseda.ac.jp/fuchi-colloquium/programme.html

651 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 08:27:15 ]
ああ、全容わかんないって言っちゃったけど、大体分かった気がする。
オントロジーやりたかっただけじゃん。

652 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:25:46 ]
>>648
典型的には、

p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q(A,_),!,r(A,B),p(B,X).
p(A,X) :- s(A,C),p(C,X).

のような定義かな。
完全にこの形式のものとなると少ないでしょう。


653 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:38:12 ]
p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q(A,B),!,p(B,X).
p(A,X) :- s(A,C),p(C,X).

という場合も多いのかな。q/2の中の副作用だけ取り除いた、
q2/2を定義して、

p(quit,_).
p(A,X) :- q(A,X).
p(A,X) :- q2(A,B),!,p(B,X).
p(A,X) :- s(A,C),p(C,X).

も考えられる。


654 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 07:05:59 ]
一般型ということになると、

p(quit,_,[]).
p(A,X,[]) :- q(A,X).
p(A,X,[A|R]) :- q(A,B),!,p(B,X,R).
p(A,X,L) :- s(A,C),p(C,X,L).

も有力。

655 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 07:25:06 ]
>>654 まちがえたのかな

p(quit,_,[]).
p(A,X,[A]) :- q(A,X).
p(A,X,[A|R]) :- q(A,B),!,p(B,X,R).
p(A,X,L) :- s(A,C),p(C,X,L).

第二節を訂正した。Xが取れた時に、収集リストのなかにAが
存在する必要がある。

656 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 13:01:05 ]
いつの間にか、WikipediaのPrologの項が大幅に追加されている。
以前私がこのスレで難解と書いたLISPの括弧と集合の部分は削除されている。
カルメラウアーとコワルスキーの部分は変化なし。

657 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 04:58:34 ]
「Trueを返す」という表現に面食らった

658 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:15:39 ]
最近作ったプログラムの実行例
| ?- t1(3,6).
-1
---3
------6
----------10
---------------15
---------------------21
-------------------------25
---------------------------27
---------------------------27
-------------------------25
---------------------21
---------------15
----------10
------6
---3
-1
yes
副作用バリバリのプログラムを移植する練習



659 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:59:42 ]
>>657

> Prologの処理系は、人間が入力した命題と一致する節があるか調べ、あった場合はその本体部に記述されている命題と一致する節があるか再帰的に調べる。

この部分違和感があるのだけれど、論理の世界ではこれていいの? 特に、
「あった場合はその本体部に記述されている命題と一致する節があるか再帰的に」
という部分だけど。


660 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 22:35:57 ]
>>659
では違和感の無いように変更おねがいします

661 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:02:00 ]
最初の「一致する」とあとの「一致する」では探索の対象が違うはずじゃないかということかな。

それよりまず、「一致する節」と言ってしまうと目標が(頭部だけでなく)節全体と単一化するみたいに聞こえるから、
せめて「適合する」とかちょっとずらすとごまかせるかもしれない、なんて思ったりして…

662 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:03:41 ]
あ、ごめんなんか勘違いした。前半ナシw

663 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 04:54:28 ]
本体部が Q1,Q2,Q3. だとすると、

(Q1,Q2,Q3) :-

なんていう定義節はない、ということだよね。だからといって、
Q1,Q2,Q3 を順に確かめることを再帰的にといっているわけでもなさそう。

664 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 05:48:33 ]
「命題」のような言い方の問題点が>>231以降に出ていた

665 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 11:58:25 ]
www.doc.ic.ac.uk/~klc/DistKR.pdf ちょっとまえに話題になったGOは
prologベースのオントロジー指向プログラミング言語だったのね。
GoogleはWebのオントロジー技術(ページランク)で発展した企業ともいえるから、
研究しているのは当然か。

666 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:00:57 ]
GoとGo!は違う

667 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:28:40 ]
>>666
申し訳ない。間違えてた。

668 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 18:36:36 ]
>>667
Francis G.MCabe の
www.amazon.co.jp/Objects-Prentice-Hall-International-Computer-Science/dp/013536079X
は良書。



669 名前:668 mailto:sage [2009/12/14(月) 18:38:43 ]
Francis G.McCabe だ。不思議な名前だね。

670 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:29:59 ]
Mcというのはゲール語で「息子」って意味。
昔アイルランド/スコットランド系の人たちには名字がなかった。
法律で名字が必要になったから、
「ローリンさんの息子のジョン」と呼ばれている人は、
John Mclauglinと名乗ることにした。
McDonaldはもちろん「ドナルドさんの息子。」

671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 04:11:21 ]
>>670
Prologとはまったく関係ないが、とても勉強になた。

672 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 00:45:22 ]
親父のファリミーネームは息子と違うの?
親子3代皆違う名字?完全にスレ値だけど、すげー気になる。

673 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:34:05 ]
キーワードは「父称」だ
ja.wikipedia.org/wiki/%e7%88%b6%e7%a7%b0

674 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 22:43:50 ]
おお、ありがとう。

675 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 08:24:07 ]
O'ってのも息子って意味らしい。
Objective CamlがOCamlってはそんな意味にも引っ掛けてあるっぽい。


676 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:49:44 ]
ち・ん・こ

677 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:26:02 ]
>>>676
その名前を書き込むなよ。
本当に来ちゃったら…

678 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 20:09:58 ]
あいつはHaskellかScalaが引きとってくれるだろう。もしくはRuby。



679 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:10:37 ]
知恵を貸してください。
今宿題で嫉妬深い恋人たちの問題をやっていて
初期状態とゴール状態をそれぞれ
initial_state(jealousy, jealousy(left,[1,2,3],[1,2,3],[ ],[ ])).
final_state(jealousy(right,[ ],[ ],[1,2,3],[1,2,3])).
と作って指し手の移動と状態変化についてはかけたのですが
状態変化したときの合法性のチェックでつまっています。
legal(jealousy(right,[[1],[1,2]], [[2,3],[3]]) ×
legal(jealousy(left,[[2,3],[2,3]], [[1],[1]])  ○
としたいのですがどうしたらいいのでしょうか?


680 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 09:54:59 ]
>>679
何が疑問なのかよくわからないのだけど、右側だけだと、

legal(jealousy(_,_,_,[],[])) :- !.
legal(jealousy(_,_,_,FL,[])) :- !.
legal(jealousy(_,_,_,[],ML)) :- !.
legal(jealousy(_,_,_,FL,ML)) :- member(A,FL),member(A,ML).

で良さそうだけど。

681 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 10:07:36 ]
まちがった。

legal(jealousy(_,_,_,[],[])) :- !.
legal(jealousy(_,_,_,FL,[])) :- !.
legal(jealousy(_,_,_,[],ML)) :- !.
legal(jealousy(_,_,_,[A|R],ML)) :-
  member(A,ML),
  legal(jealousy(_,_,_,R,ML)).


682 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 10:19:14 ]
右側は誤解を生じる表現だった。状態遷移後というべきか。
下の述語定義をして、right,leftそれぞれチェックする目標を立てればいいのではないかな。

legal(jealousy(FL1,ML1,FL2,ML2)) :-
  legal(jealousy(FL1,ML1)),
  legal(jealousy(FL2,ML2)).

legal(jealousy([],[])) :- !.
legal(jealousy(FL,[])) :- !.
legal(jealousy([],ML)) :- !.
legal(jealousy([A|R],ML)) :-
  member(A,ML),
  legal(jealousy(R,ML)).


683 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:43:58 ]
>>680-682さん
レスありがとうございます。
しかし試してみたところ何をやってもnoと出てしまうのですがどうしたらいいのでしょうか?


684 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:44:01 ]
>>683
% legal(jealousy(left,[[2,3],[2,3]], [[1],[1]])

?- legal(jealousy([2,3],[2,3],[1],[1])).
yes
?- となりませんか。それから>>682の定義は5節とも述語legal/1であり、
好ましくない定義でした。第一節とそれ以降の節とは構造が異なりますから、
事実上別の述語とも見なせますが。
英語がよくわからなかったのでw そのまま使ったのですが、述語定義の引数は
できるだけフラットなものにしたい。構造体はリストのレベルまでですね。
フレームなどは例外中の例外。


685 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 18:12:17 ]
>>684 意味不明かな。

legal(jealousy(FL1,ML1,FL2,ML2)) :- より、

legal_jealousy(FL1,ML1,FL2,ML2) :- であるべきだということです。

英語がよくわからないので、例えば legal_jealousy という表現が英米人に
とって滑稽だったり大変不自然なものであるのかどうか私にはわからないので、
それを避けて、そのままの構造を借りたの意味。

686 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 17:12:48 ]
亀レスすいません>>683です
does not exist

とでてしまいます

687 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 18:08:14 ]
>>686
字下げのための全角スペースが述語名の一部となっている?
字下げがしてありますね。2chでは2個以上の半角スペースはなぜか、一個に
まとめられてしまいます。それで、はっきりした字下げを表現するため、
半角スペースは全角のスペースに書き換えられています。もし、この状態から
copy&pasteでコードを写すと、'  leagal'(jealousy( ... というような
全角二個が前に付いた述語が定義されることになってしまいます。
これだと、副目標 leagal(jealousy([2,3],[2,3],[1],[1])) はleagal/1が
存在しないとなります。そういうことがないか確かめてください。

688 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 00:01:46 ]
>>687さん
亀レスで重ね重ねすいません
どうやら勘違いしていたみたいで無事できました。

本当にありがとうございました。



689 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 08:58:47 ]
昨秋以降 Wikipedia のPrologの項が大幅に更新されました。
ご存知ない方のために、一度ageて広報します。

690 名前:デフォルトの名無しさん [2010/01/12(火) 09:00:33 ]
昨秋以降 Wikipedia のPrologの項が大幅に更新されました。
ご存知ない方のために、一度ageて広報します。

すみません、上げ損なったので再度書き込みます。

691 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 15:45:08 ]
やっと規制解除された…以下記念に再掲
sports2.2ch.net/test/read.cgi/entrance2/1258584095/975
975 :Classical名無しさん sage :09/12/22 23:06 ID:Eyor18Do
pc12.2ch.net/test/read.cgi/tech/1235561034/601-700
Prolog猿ビア探検隊

ttp://cpansearch.perl.org/src/JJORE/AI-Prolog-0.740/examples/monkey.pl
ttp://web.archive.org/web/20060213075213/www.compapp.dcu.ie/~alex/LOGIC/monkey.html
> perform(climb,
> state(MP, BP, onfloor, H),
> state(MP, BP, onbox, H)).

猿の位置(MP)と箱の位置(BP)が違っても
猿が箱の上に登れるようになってると思うけど、変ではなかろうか

692 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:12:10 ]
>>679
jelousyという構造(複合項)の形が食い違っている上に説明がないので憶測で書きますが、
legal(jealousy(_,LMs,LFs,RMs,RFs)) :- legal_bank(LMs,LFs), legal_bank(RMs,RFs), !. % RMsはright (bank) malesの略、他も同様
legal_bank(Ms,Fs) :- \+ ( member(F,Fs), \+ member(F,Ms), member(M,Ms), M =\= F ).
こんな一行勝負もどうでしょうか。
あるいは場合分けして
legal_bank([],_). % そもそも男がいない(いても女だけ)
legal_bank(Ms,Fs) :- \+ ( member(F,Fs), \+ member(F,Ms) ). % 夫と離れた女がいない(すべての女に夫がついている)

693 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:13:43 ]
いつも間違える…
× jelousy → jealousy

694 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:45:37 ]
10年以上前にProlog協会という団体主催のPrologの講習を受講した。
その時、実践的だがすごく癖のある授業をやった人がいた。たしか会長か副会長。
pc12.2ch.net/test/read.cgi/tech/126144349/
を呆然とROMしているのだけど、Prologのコードを書いてる人、
あの人ではないかと思えてきた。

695 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 04:15:20 ]
126144349
1261443439 ←こっちと思われ
いろんな言語で宿題スレ 第三編

696 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:20:43 ]
>>695
そうでした。どこで一桁落ちたのかな。ご足労掛けました。
repeatに引数を加えていくとmemberになるという内容の授業だった。
引数の付加の仕方によって、どう性質が変わるかを副目標側のからの
視点で徹底的に考える。ただそれだけ。
このスレの>>652-655辺りも、もしかしてw

697 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:40:55 ]
それにしてもあのスレのPrologのコードは強烈ですね。私のProlog観は
完全に打ち砕かれましたw 太宰治が書いたコードのようです。饒舌で。
もうひとり数式処理向きの関数型言語で書き込んでいる方がいて
こちらのコードは極端に短いものが多くて、際立った対照を示して
いて、見てて飽きないですよ。

698 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 11:06:13 ]
>>694
そのころProlog協会の代表幹事はK-Prologの作者です。別人ですね。




699 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 10:32:01 ]
>>694
Prologには帰納推論をやる一派がいたので、
近くの研究室にも、ああいうプログラム書ける人たくさんいたよ。
意外とあちこちに潜んでいるのでは?

700 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:14:28 ]
第五世代の評価というか総括をしている文献って知りませんか?
一体第五世代計画とはなんだったのかということが非常に気になっています。

できれば、西垣通氏のルルス関連の話のように社会学関連のアプローチだと
なお嬉しいです。

701 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:29:22 ]
>>700
>>650のサイトは見た?

というか、宗教と第五世代に関連性はありません。

702 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:00:09 ]
>>701
そこのサイトはすでに見ました。
第五世代で宗教にアプローチなんてしていないので関連性があるなんて思ってないですよ。
そうじゃなくて、社会学的にどういう位置づけになっているのかどうかということです。
技術的な話は発散しているので必要なもの以外は追うつもりはないです。


703 名前:702 mailto:sage [2010/01/23(土) 01:51:12 ]
でも、実際最初は自分も西垣氏の話を読解力の無さから読み違えてたので他人のことは言えません。
ちゃんと読み解くとそんなことは言ってないのですよね。

704 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:41:03 ]
上前淳一郎が第五世代コンピュータに関するノンフィクションを書いている。
社会的背景が生き生きと描かれていて面白い。


705 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:27:13 ]
奇妙なことはあれだけのプロジェクトにも関わらず、
出版物として総括した大冊がないことです。途中までは共立出版等から
啓蒙本が多数出版されていたのですが、肝心の並列処理に入ってから
はさっぱりでしたし、終了後にまとめがあるのかと思ったら、
研究発表以外にはない。総予算の規模からいってもバランスが悪く
異様です。手を挙げる出版社がなかったからでしょうか。

706 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 08:47:54 ]
大冊を求めてるなら、知らん、としか答えられんが。

淵氏がコラム程度の分量を書いたものなら、『情報処理』で見かけた記憶はある。

707 名前:702 mailto:sage [2010/01/23(土) 12:27:02 ]
>>704
"めざすは新世代コンピュータ?「日本の夢」に挑む頭脳集団 (角川文庫)"
ですね。これはおもしろそうです。早速読んでみます。

>>705
結局何をしたかったのかよくわからないのですよね。
啓蒙書の類も推論や言語を扱うという意外は一貫性がないです。
一番おかしいと思うのが、アーキテクチャを作るという計画のハズなのに、
アーキテクチャに関する文献が見当たらないというところです。一般向けでは
ないからかもしれないですけど、それにしても見当たらなすぎるのですよね。
本当のところ淵氏としては、認知科学やりたかったんじゃないかと、
www.amazon.co.jp/dp/4140014466/

>>706
「情報処理」のコラムですね。国会図書館あたりで探してみます。

708 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:53:47 ]
個人的には、当時としてはやってみなければ成否は誰にも断言できないことだったのかもしれないとは思うが
たとえば人工知能云々には当時ですら胡散臭さやら無邪気すぎるものやらを感じたなあ。
そういう点で>>704は興味深いと思う。

結局はこういう話になってしまうのだろう
ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%94%E4%B8%96%E4%BB%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF



709 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:59:37 ]
もちろん、真面目な研究が行なわれていた(らしい)のはわかるけどねw
技術的にあんまり突っ込んだことを追う気はないようだが
共立出版の「続・新しいプログラミング・パラダイム」の「並行プログラミングとGHC」が
文献リストなども含めて何かの手がかりになるかもしれない

710 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:34:37 ]
第五世代コンピュータの並列処理
滝 和男 編
発行年月:1993年06月
発売元:共立出版

というのはあったんだけどね。
最初のころの話に出ていた、データフローマシンとか、リダクションマシンとか、いわゆるノイマン型とは根本的に
違うものがつくられることを期待していたから、実際にできたのがノイマン型を並列化したものだと知ってガッカリした。
技術的にはすごいことなんだろうけどね。

711 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:49:34 ]
www.jstage.jst.go.jp/article/jssst/25/3/3_66/_pdf/-char/ja/
淵氏としてはプロジェクトは成功なんですよね。

712 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 15:56:37 ]
”成果の具体的な内容については、報告書類が山のようにある。これは秘密では
ないので12年分を入手して検討すれば、試行錯誤を含めて全部わかるように
なっている。しかし膨大なことになるので、解読してくれるような奇特な人が
いるかどうか。”
なんとなく予感はしていたのですがJIPDECのサイトは内容についてどなたも全容を
把握していないのではないですか?

713 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:22:15 ]
>>700
> 社会学関連のアプローチ
そもそもこれが何を意味するかはともかくとしてだw

そういうものが今になっても存在しない(?)あたりが
今も昔も産官学の限界なんだよね

で、Prologスレで手に負える話ではないのでそろそろ勘弁してもらいたい

714 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 01:53:00 ]
建設的な話でもあればいいけど、怪しいですよね、おかしいですよねの列挙だったら
スレ違いかもしれないな。

実際それは挙げていったらきりがないと俺も思うがw

715 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 08:46:47 ]
誰かが立てて放置されてる第五世代スレがありそうなもんだが。
それを再利用するとか。

716 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 23:55:47 ]
東大や理科大行けば、論文やテクニカルレポートが全部残ってるはず。

>>705
バランスが悪いということだけど、
例えば国内外のどの研究プロジェクトと比べて、
「啓蒙書が少ない」ことが「異様」なのでしょうか。
むしろ、異常なくらい教科書的な書籍を産み出したプロジェクトだと思いますが。

>>707
Σ計画なんかもそうですが、お金が動かないと、
官僚&政治家はなかなか新しいプロジェクトを始めてくれません。
メーカーへ予算ばらまきが出来るようにするには、
ハードウェアも込みである必要があるのです。
これは研究プロジェクトというより、誠治の方の問題です。


717 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 00:53:46 ]
>>716
真っ先に仕訳の対象になるわ

718 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:18:45 ]
>>716
教科書的な書籍とは共立出版の「知識情報処理シリーズ」のことですか?



719 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:18:26 ]
ICOTの成果が出始めるのはこれからだよ。20年後かも。


720 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:49:52 ]
>>719
Prolog は論文を書くためだけの言語
ICOTの成果として、狙い通り、論文が大量生産された

721 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:10:47 ]
Prologを材料に論文を書くの意味ですか。
でも、あなただって携帯が故障したら、Prologのお世話に
なってるかも知れませんよ。

722 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 04:58:09 ]
GHCなんかは、並列(平行)に「仕切る」ための言語という
印象が強いのだけれど、そういう位置での制御要請は
今後多くなっていくものだろうか。

723 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 10:38:47 ]
>>722
個々の自動車の平行プログラミングは関数型で勝手にやらせるので済むかもしれないが、
俯瞰的な平行動作、たとえば自動車と通信しながら制御する信号の記述などでは
GHC的なものが最有力ではないか。


724 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 04:23:23 ]
クラウドコンピューティングが来ている以上、GHCの並列計算が見直される
チャンスも普通に多いだろ。誰も提案しないだけで。

725 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:58:18 ]
クラウドコンピューティングは並列計算じゃなくて分散技術や信頼性工学の話だからな…

726 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 18:38:27 ]
>>721
携帯じゃなくて、ADSL回線じゃなかったっけ?


727 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 18:18:33 ]
携帯の故障診断はさすがに大変じゃないかな。半端な数でないし。
ADSLでも10台以上同時に動かしてるんでしょ。それにしても、
こんな大規模な実務に使われてるのにAZ-PrologはWikipediaにも紹介
されてないね。


728 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 10:26:25 ]
正直MapReduceがどうしてこれほどもてはやされてるのか分からない。
あんなん普通にやってたことっしょ?
大規模に現実に適用したからってこと?




729 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:58:50 ]
>>727
5年以上前だと思うけれど、ソフトバンクが10人単位でPrologプログラマの
募集をした。ところが応募はなかったらしい。
ソフトバンク+Prologという組み合わせでは将来の地位が不安ということ
だったのかも知れないけど、日本の大学生も根性がないね。


730 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:20:35 ]
威勢がいいだけならチンピラ

731 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:35:15 ]
威勢ねぇw


732 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:45:12 ]
Prologで実務的なプログラムを書くことができる人は四十台後半より上。
あと10年待てば大量にリタイアが始まるから供給は充分になる。

733 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:08:41 ]
>>729
ソースは?

734 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 00:41:47 ]
>>733
私が募集しているという記事を読んだ。こちらはたしか。
誰も来なかったというのはうわさ話。

735 名前:デフォルトの名無しさん [2010/03/02(火) 21:43:53 ]
復旧おめでとう age

736 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 06:43:51 ]
お願いがあります。
「いろんな言語で宿題 第三編」pc11.2ch.net/test/read.cgi/db/1252492296/ スレが
512Kb越えで終了してしまいました。
新しい「いろんな言語で宿題 第四編」スレを作ろうとしたところ、
現在スレ立て規制中、とのこと。私は2chのユーザIDとパスワードを忘れてしまって
特権がないので、だれか立てられる人がいたら立ててください。前口上は
「前回スレは512Kbを越えたため、終了しました」だけで結構です。

737 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:56:10 ]
>>736
ためしにやってみたら、できてしまいました。
いつもお世話になっています。
J言語などでかきこみしているものです。
これからもよろしくお願いします。

738 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 15:13:44 ]
>>737
ありがとうございました。私のPrologコードは外連ですが、
あなたのプログラム群のおかげであのスレはム板の中で一番
輝いています。
"bit"は1970年代中頃から愛読していましたが、結局休刊になる
前に購読しなくなりました。配達してくれていた書店が廃業した
ので。



739 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 17:52:10 ]
>>738
新しいスレ、なんか変なことになってますが、私は1番しかかいてないですよ。

「bit」は読んでいましたけど。

740 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:17:26 ]
荒れないうちに問題をはじめましょう。

741 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:15:52 ]
辞書なんて所詮、偽装された百科辞典だ。

742 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:42:52 ]
Prologの現代的(?)な応用って何かある?
到達点がエキスパートシステムとか自然言語処理とか止まりだと先が無さそうに思うんだけど。

743 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:28:25 ]
>>742
エキスパートシステムや自然言語処理が我々のプログラミングの随所に
登場という状況を知らない。まだ、そのレベルにも達していないのでは。


744 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:32:43 ]
Prologの役割は自然言語によるプログラミングへの橋渡しをすることに
ある。まだ何も始まっていない。


745 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 15:39:38 ]
当分の間始まる見込みもない

746 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:58:06 ]
>>742
Prologの現代的な応用 : 論文を大量生産する

747 名前:初心者 [2010/07/04(日) 23:36:36 ]
prologを勉強してて、以下のページの

mayah.jp/article/2002/reversi#toc-tplace-pl
このリストがよくわからないのですが
[[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X]]
わかるかたお願いします。

自分的には、
[[X, X, X, X, X, X, X, X],
[X, X, X, X, X, X, X, X]]
の縦と横のリストだけでいいのではと思うのですが。

748 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 04:34:12 ]
>もともと大学の課題なので、データ構造等は結構適当に定められてしまっています。
らしいですよ



749 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 06:45:55 ]
>>747
部分的な局面の思考に全局面のデータを持ち回ることはないだろう、という意味ですか?


750 名前:初心者 [2010/07/05(月) 17:59:40 ]
>>749
そう思ったのですが・・・
やはり、全マスをあらわしてるのでしょうか

751 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 06:07:17 ]
>>750
私は実行時のヒープ領域やスタックの実際の使われ方、動きについては詳しくないので
他の方の説明を待つとして、

・ 全局面を表すリストのリスト(8×8)を引数で渡していくことにあまりコスト(時間とメモリ)はかからないと思う。
・ 全局面のデータを単位節と定義しておいて、それを参照して、部分リストと二本取り出し、
  それを加工してから、list_nthとappendを駆使して(実際には一つの述語にまとめるだろうが)元の全局面データである単位節をretract+assertするのは
  結構コストがかかる選択なのではないか。


752 名前:デフォルトの名無しさん [2010/07/18(日) 18:45:24 ]
学校の宿題で、ハノイの塔の問題が出たんですが・・・棒が5本のときの組み方がわかりませんorz

誰か助けて下さい!
ちなみに3本のときは、
move(N,A,B) :- display(N), display(' from '),
display(A), display(' to '),
display(B), nl.

hanoi(1,A,B,C) :- move(1,A,C).

hanoi(N,A,B,C) :- M is N-1, hanoi(M,A,C,B),
move(N,A,C),
hanoi(M,B,A,C).

こんな感じで書きました。

753 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 06:10:01 ]
手数が適当でいいなら、同じプログラムが流用できるよねw
逆に、手数を最小にせよ、のような縛りがあるなら、別にPrologに特有の宿題じゃないような気がする

754 名前:デフォルトの名無しさん [2010/07/23(金) 00:31:29 ]
>>753
先生がドSでして・・・手数を最小にするように縛りがあります;

755 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:24:48 ]
FDって使ってます?

756 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:28:59 ]
最近は使う機会がめったに無いね。
ただ、たまに緊急ブートで使うことがあるから確保はしてあるけど。

757 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:46:29 ]
まさかフロッピーディスク?wwww 今時FDドライブ付いてるPC少ないだろ
>>755はCLPのFD(Finite Domain)のことじゃねーの?あれ、釣られた?

758 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:50:22 ]
覆面算ならFDに限る








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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