2

私はこのコードを研究していますが、色関数に+があり、それが何をするのかわかりません。私はこれに非常に混乱していて、それが何をするのか理解できないので、基本的にこれに固執しています。

/* prolog  tutorial 2.9 Map coloring redux */
adjacent(X,Y,Map) :-  member([X,Y],Map) ; member([Y,X],Map). 
find_regions([],R,R). 
find_regions([[X,Y]|S], R,A) :- 
 (member(X,R) ->  
  (member(Y,R) -> find_regions(S,R,A) ; find_regions(S,[Y|R],A)) ; 
    (member(Y,R) -> find_regions(S,[X|R],A) ; find_regions(S,[X,Y|R],A) ) ). 

color(Map,Colors,Coloring) :-
    find_regions(Map,[],Regions), 
    color_all(Regions,Colors,Coloring), 
    \+ conflict(Map,Coloring). 
color_all([R|Rs],Colors,[[R,C]|A]) :- 
    member(C,Colors), 
    color_all(Rs,Colors,A). 
color_all([],_,[]). 


conflict(Map,Coloring) :- 
    member([R1,C],Coloring), 
    member([R2,C],Coloring), 
    adjacent(R1,R2,Map). 

map1([[1,2],[1,3],[1,4],[1,5],[2,3],[2,4],[3,4],[4,5]] ).
4

2 に答える 2

5

これは否定です。例を含む詳細な説明については、ここを参照してください。基本的には、「not」、より正確には「notprovable」と同等であると読むことができます。

于 2012-05-23T13:22:56.857 に答える
2

「標準のPrologでは、演算子+は失敗としての否定を意味します」

ここに良いチュートリアルがあります

于 2012-05-23T13:28:22.227 に答える