「制約論理プログラミングその3」の編集履歴(バックアップ)一覧に戻る
test:- freeze(A,member(X,['喜','怒','哀','楽'])), freeze(A,member(X,['怒','哀','楽'])), freeze(A,member(X,['哀','楽'])), freeze(A,member(X,['楽'])), A = true, write(X). ||?-test. 楽 yes LOOP = 18
test:- freeze(A,member(X,['楽'])), freeze(A,member(X,['哀','楽'])), freeze(A,member(X,['怒','哀','楽'])), freeze(A,member(X,['喜','怒','哀','楽'])), A = true, write(X). ||?-test. 楽 yes LOOP = 12
constraint('期待','ワクワク'). constraint('苛立ち','イライラ'). constraint('驚き','ドキリ'). test:- S='ドキドキ', frees([(X,'期待'),(Y,'苛立ち'),(Z,'驚き')],T), func('期待',S,X), func('苛立ち',S,Y), func('驚き',S,Z), write(T). frees([],[]). frees([(A,N)|L],[B|S]):-freeze(A,constraint(N,B)),!,frees(L,S). func('期待' ,S,true):-member(S,['ワクワク','ドキドキ']). func('苛立ち',S,Y):-member(S,['イライラ','ムカムカ']). func('驚き' ,S,true):-member(S,['ドキドキ','ドキリ','ギクリ']). func(_,_,_). ||?-test. [ワクワク,B_49,ドキリ] yes LOOP = 22
以下を追加したい場合、 func('泣',S,true):-member(S,['シクシク','ウルウル']). X =..[':-',func('泣',S,true),member(S,['シクシク','ウルウル'])],assert(X).
降水確率(70). weather --> a,b,c,d. a --> ['今日']. b --> ['の天気は']. d --> ['です']. test:- abolish(c,2), freeze(A,assert(c(['晴れ'|_0],_0))), %_だけだとc(['晴れ'|_0],_1 となるので注意。 freeze(B,assert(c(['雨'|_0],_0))), freeze(C,assert(c(['曇'|_0],_0))), 'How''s weather'(A,B,C), weather(X,[]), atom_appends(X,Y),write(Y),nl,fail. test:-!. 'How''s weather'(A,B,C):-'How''s weather2'(A,B,C),fail. 'How''s weather'(A,B,C):-!. 'How''s weather2'(A,_,_):-降水確率(X),X=<20,!,A=true. 'How''s weather2'(_,B,_):-降水確率(X),X>=60,!,B=true. 'How''s weather2'(_,_,C):-降水確率(X),X=<30,X>=50,!,C=true.
||?-test. 今日の天気は雨です yes LOOP = 27