2009年7月9日木曜日

【LPN】10 Cuts and Negation [落葉拾い]

いずれも寝た後なら簡単だった。疲れたときにも頑張ることは、意味がないのかなぁ。

- Exercise 10.4.

うーん。むずかしい。cutは宣言的かつ手続き的なの
で、慣れれば強力かもしれないが、慣れないと中途
半端で考えにくい。特にunificationがどう効いてく
るかが問題になると、自分で束縛管理した方が楽じゃ
んと思えてしまう。

ここは後日、再チャレンジ。

一晩寝たら5分でできた。。。

directTrain(saarbruecken,dudweiler).
directTrain(dudweiler,saarbruecken).
directTrain(forbach,saarbruecken).
directTrain(saarbruecken,forbach).
directTrain(freyming,forbach).
directTrain(forbach,freyming).
directTrain(stAvold,freyming).
directTrain(freyming,stAvold).
directTrain(fahlquemont,stAvold).
directTrain(stAvold,fahlquemont).
directTrain(metz,fahlquemont).
directTrain(fahlquemont,metz).
directTrain(nancy,metz).
directTrain(metz,nancy).


route(From,To,Route) :- rt(From,To,[To],Route).
rt(From,From,A,A) :- !.
rt(From,To,A,Route) :-
directTrain(From,To),
rt(From,From,[From|A],Route).
rt(From,To,A,Route) :-
directTrain(ViaSt,To),
rt(From,ViaSt,[ViaSt|A],Route).


** 5 Practical Session
- 1.

\+ version.

nu(A,B) :- \+ A = B.

\+ cut-free version

nu(A,B) :-
A = B, fail;
A \= B.

cut-fail combination version

nu(A,B) :- A = B, !, fail.
nu(_,_).

- 2.

頭がまわらないので、これも後日。

これも一晩寝たら30分くらいでできた。

unifiableUni(Term1,Term2) :-
atomic(Term1),atomic(Term2),
Term1 = Term2.
unifiableUni(Term1,Term2) :-
var(Term1);
var(Term2).
unifiableUni(Term1,Term2) :-
complexterm(Term1),
complexterm(Term2),
Term1 =.. [F1|Args1],
Term2 =.. [F2|Args2],
F1 = F2,
unifiableLists(Args1,Args2).
unifiableLists([],[]).
unifiableLists([H1|T1],[H2|T2]) :-
unifiableUni(H1,H2),
unifiableLists(T1,T2).

unifiableAcc([],Term,A,A).
unifiableAcc([H|T],Term,A,R) :-
unifiableUni(H,Term),
unifiableAcc(T,Term,[H|A],R),!;
unifiableAcc(T,Term,A,R).

unifiable(List1,Term,List2) :-
unifiableAcc(List1,Term,[],List2).


こつこつ。

0 件のコメント: