- 【論理】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. でした。
|
|