Declaratieve Talen/Oplossing celautomaat: verschil tussen versies

Uit Wina Examenwiki
Naar navigatie springen Naar zoeken springen
Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
Regel 2: Regel 2:
  regelsseq(S1,Regels,S2).
  regelsseq(S1,Regels,S2).
  regels([S1,S2|Sequenties],Regels):-
  regels([S1,S2|Sequenties],Regels):-
regels([S2|Sequenties],R1),
regels([S2|Sequenties],R1),
regelsseq(S1,R2,S2),
regelsseq(S1,R2,S2),
merge(R1,R2,R3),
merge(R1,R2,R3),
remove_doubles(R3,Regels),
remove_doubles(R3,Regels),
geldig(Regels).
geldig(Regels).
 
  regelsseq(S1,Regels,S2):-
  regelsseq(S1,Regels,S2):-
regelsseq2([o,o|S1],Regels,S2).
regelsseq2([o,o|S1],Regels,S2).
  regelsseq2([o,o],[[o,o,o,V]],[V,V]).
  regelsseq2([o,o],[[o,o,o,V]],[V,V]).
  regelsseq2([o,x],[[o,x,o,V1],[x,o,o,V2]],[V1,V2]).
  regelsseq2([o,x],[[o,x,o,V1],[x,o,o,V2]],[V1,V2]).
  regelsseq2([x,o],[[x,o,o,V1],[o,o,o,V2]],[V1,V2]).
  regelsseq2([x,o],[[x,o,o,V1],[o,o,o,V2]],[V1,V2]).
  regelsseq2([x,x],[[x,x,o,V1],[x,o,o,V2]],[V1,V2]).
  regelsseq2([x,x],[[x,x,o,V1],[x,o,o,V2]],[V1,V2]).
 
  regelsseq2([S1,S2,S3|Seq],Regels,[V1|Volgende]):-
  regelsseq2([S1,S2,S3|Seq],Regels,[V1|Volgende]):-
regelsseq2([S2,S3|Seq],Regels,Volgende),
regelsseq2([S2,S3|Seq],Regels,Volgende),
member([S1,S2,S3,V1],Regels).
member([S1,S2,S3,V1],Regels).
 
  regelsseq2([S1,S2,S3|Seq],[[S1,S2,S3,V1]|Regels],[V1|Volgende]):-
  regelsseq2([S1,S2,S3|Seq],[[S1,S2,S3,V1]|Regels],[V1|Volgende]):-
regelsseq2([S2,S3|Seq],Regels,Volgende),
regelsseq2([S2,S3|Seq],Regels,Volgende),
\+member([S1,S2,S3,_],Regels).
\+member([S1,S2,S3,_],Regels).
   
   
  remove_doubles([L],[L]).
  remove_doubles([L],[L]).
  remove_doubles([L|List],L2):-
  remove_doubles([L|List],L2):-
remove_doubles(List,L2),
remove_doubles(List,L2),
member(L,L2).
member(L,L2).
  remove_doubles([L|List],[L|L2]):-
  remove_doubles([L|List],[L|L2]):-
remove_doubles(List,L2),
remove_doubles(List,L2),
\+member(L,L2).
\+member(L,L2).
 
  geldig([_]).
  geldig([_]).
  geldig([[X,Y,Z,_]|List]):-
  geldig([[X,Y,Z,_]|List]):-
geldig(List),
geldig(List),
\+member([X,Y,Z,_],List).
\+member([X,Y,Z,_],List).

Versie van 11 jun 2007 10:12

regels([S1,S2],Regels):-
	 regelsseq(S1,Regels,S2).
regels([S1,S2|Sequenties],Regels):-
	 regels([S2|Sequenties],R1),
	 regelsseq(S1,R2,S2),
	 merge(R1,R2,R3),
	 remove_doubles(R3,Regels),
	 geldig(Regels).
 
regelsseq(S1,Regels,S2):-
	 regelsseq2([o,o|S1],Regels,S2).
regelsseq2([o,o],o,o,o,V,[V,V]).
regelsseq2([o,x],[[o,x,o,V1],[x,o,o,V2]],[V1,V2]).
regelsseq2([x,o],[[x,o,o,V1],[o,o,o,V2]],[V1,V2]).
regelsseq2([x,x],[[x,x,o,V1],[x,o,o,V2]],[V1,V2]).
 	
regelsseq2([S1,S2,S3|Seq],Regels,[V1|Volgende]):-
	 regelsseq2([S2,S3|Seq],Regels,Volgende),
	 member([S1,S2,S3,V1],Regels).

regelsseq2([S1,S2,S3|Seq],[[S1,S2,S3,V1]|Regels],[V1|Volgende]):-
	 regelsseq2([S2,S3|Seq],Regels,Volgende),
	 \+member([S1,S2,S3,_],Regels).

remove_doubles([L],[L]).
remove_doubles([L|List],L2):-
	 remove_doubles(List,L2),
	 member(L,L2).
remove_doubles([L|List],[L|L2]):-
	 remove_doubles(List,L2),
	 \+member(L,L2).

geldig([_]).
geldig([[X,Y,Z,_]|List]):-
	 geldig(List),
	 \+member([X,Y,Z,_],List).