トップページ > プログラム > 2014年09月17日 > JrDwRrBo

書き込み順位&時間帯一覧

37 位/211 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000200000000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
753
【論理】Prolog【初心者】

書き込みレス一覧

【論理】Prolog【初心者】
753 :デフォルトの名無しさん[sage]:2014/09/17(水) 07:53:36.70 ID:JrDwRrBo
>>751
p :- q1,!.
p :- q2.

のカットはq1に副作用がなければ、

p :- q1.
p :- \+(q1),q2.
と書くことができる。

p(s(1,t(2)) :- !,q1.
p(s(X,t(Y)) :- q2.



p(s(1,t(2)) :- q1.
p(s(X,t(Y)) :- \+(X=1),\+(Y=2),q2.

としなくてはならない。
カットがPrologから切り捨てられない話として、否定の定義、

\+(P) :- call(P),!,fail.
\+(P).

がよくあげられる。このカットは代用が効かない。
それから組込述語findall/3の設計からくる問題なのだが、repeatを持つ
標準入力からの入力。(ここでは整数に限定しているが)

?- findall(X,(repeat,read(X),(X=end_of_file,!,fail;integer(X))),L).

この制御のためのカットも他に手がない。
【論理】Prolog【初心者】
754 :753[sage]:2014/09/17(水) 07:59:41.82 ID:JrDwRrBo
右括弧が一つ足らなかった。

p(s(1,t(2))) :- !,q1.
p(s(X,t(Y))) :- q2.



p(s(1,t(2))) :- q1.
p(s(X,t(Y))) :- \+(X=1),\+(Y=2),q2.

でした。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。