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

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






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

前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