دوستان دو تا برنامه پرولوگ هست می تونید توضیح بدید که خط به خط چیکار میکنه ؟
( پروژه هوش مصنوعی دانشگاه هست . برای داداشم ! تا یکی دو روز دیگه میخوادش ! )
برنامه هشت وزیر با prolog
روش اول فرض می کنه که وزیر ها به صورت random رو صفحه قرار دارن و اونا رو مرتب می کنه
کدش اینه:
1_/* queens(N,Queens) :-
2_ Queens is a placement that solves the N queens problem,
3_ Represented as a permutation of the list of numbers [1,2,…,N]. */
4_queens(N,Qs) :- range(1,N,Ns), permutation(Ns,Qs), safe(Qs).
5_/* safe(Qs) :- the placement Qs is safe. */
6_safe([Q|Qs]) :- safe(Qs), not attack(Q,Qs).
7_safe([]).
8_attack(X,Xs) :- attack (X,1,Xs).
9_attack(X,N,[Y|Ys]) :- X is Y+N ; X is Y-N.
10_attack (X<N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys).
11_permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs).
12_permutation([],[]).
13_select(X,[X|Xs],Xs).
14_select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs).
15_range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns).
16_range(N,N,[N]).
17_
روش دوم هر مرحله یک وزیر به صفحه اضافه می کنه
کدش اینه:
1_queens(N,Qs) :- range(1,N,Ns), queens(Ns,[],Qs).
2_quees(UnplacedQs,SafeQs,Qs) :- select(Q,UnplacedQs,UnplacedQs1), not attack(Q,SafeQs),
3_queens(UnplacedQs1,[Q|SafeQs],Qs.
4_queens([],Qs,Qs).
5_range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns).
6_range(N,N,[N]).
7_select(X,[X|Xs],Xs).
8_select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs).
9_attack(X,Xs) :- attack (X,1,Xs).
10_attack(X,N,[Y|Ys]) :- X is Y+N ; X is Y-N.
11_attack (X<N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys).
12_