Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Пролог


Автор: bUg. 18.8.2007, 03:31
вообщем в нескольких местах нашел нужную прогу, но никак не могу ее выполнить (с прологом не знаком вообще).
 подскажите как ее выполнить(или может аналог данного кода на другом языке)
вот код

Код

master mind (Code): -cleanup, guess (Code), check (Code), announce
guess(Code):-Code=[X1,X2,X3,X4],selects(Code,[1,2,3,4,5,6,7,8,9,0]). 

/* Verify the proposed guess */ 

check(Guess):-not inconsistent(Guess),ask(Guess). 

inconsistent(Guess):-query(OldGuess,Bulls,Cows), not bulls_and_cows_match(OldGuess,Guess,Bulls,Cows). 

bulls_and_cows_match(OldGuess,Guess,Bulls,Cows):-
exact_matches(OldGuess,Guess,N1),
Bulls =:= N1,
common_members(OldGuess,Guess,N2),
Cows =:= N2 - Bulls. 

exact_matches(X,Y,N):-size_of(A,same_place(A,X,Y),N). 

common_members(X,Y,N):-size_of(A,(member(A,X),member(A,Y)),N). 

same_place(X,[X|Xs],[X|Ys]).
same_place(A,[X|Xs],[Y|Ys]):-same_place(A,Xs,Ys). 

/* Asking a guess */ 

ask(Guess):-repeat,write_ln(['How many bulls and cows in ',Guess,'?']),
read((Bulls,Cows)),
sensible(Bulls,Cows), !,
assert(query(Guess,Bulls,Cows)),
Bulls=:=4. 

sensible(Bulls,Cows):-integer(Bulls),integer(Cows),Bulls+Cows=4. 

/* Bookkeeping */ 

cleanup :- abolish(query,3). 

announce :-
size_of(X,query(X,A,B),N),
write_ln(['Found the answer after ',N,' queries']). 

size_of(X,Goal,N) :-
findall(X,Goal,Instances),length(Instances,N). 

selects([X|Xs],Ys) :-
select(X,Ys,Ys1),selects(Xs,Ys1).
selects([],Ys).
select(X,[X|Xs],Xs).
select(X,[Y|Ys],[Y|Zs]) :-
select(X,Ys,Zs). 

length(Xs,N) :- length(Xs,0,N).
length([X|Xs],Acc,N) :-
Acc1 is Acc + 1,
length(Xs,Acc1,N).
length([],N,N).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)