:- op(2'1,'fy','#') .
:- op(2'1,'fy','##') .
:- op(2'1,'fy','###') .
'反向/2' 。
/* 以下是我刚刚发明的 reverse/2 的实现,它不会遇到reverse(P,[])
. */
'执行' 。
reverse(_source_,_target_) :-
reverse(_source_,_target_,_source_,_target_,[],[]) .
reverse(_source_,_target_,[],[],_target_,_source_) .
reverse(_source_,_target_,[_source_car_|_source_cdr_],[_target_car_|_target_cdr_],_source_collect_,_target_collect_) :-
reverse(_source_,_target_,_source_cdr_,_target_cdr_,[_source_car_|_source_collect_],[_target_car_|_target_collect_]) .
“测试”。
“测试:第 1 部分”。
/*
?- reverse([],Q) .
Q = []
?- reverse([a],Q) .
Q = [a]
?- reverse([a,b],Q) .
Q = [b,a]
?- reverse([a,b,c],Q) .
Q = [c,b,a]
“测试:第 2 部分”。
/*
?- reverse(P,[]) .
P = []
?- reverse(P,[a]) .
P = [a]
?- reverse(P,[a,b]) .
P = [b,a]
?- reverse(P,[a,b,c]) .
P = [c,b,a]
*/
“测试:第 3 部分”。
/*
?- reverse(P,Q) .
P = Q = [] ? ;
P = Q = [_A] ? ;
P = [_A,_B],
Q = [_B,_A] ? ;
P = [_A,_B,_C],
Q = [_C,_B,_A] ? ;
P = [_A,_B,_C,_D],
Q = [_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E],
Q = [_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F],
Q = [_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G],
Q = [_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H],
Q = [_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I],
Q = [_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J],
Q = [_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K],
Q = [_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L],
Q = [_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M],
Q = [_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N],
Q = [_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O],
Q = [_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P],
Q = [_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q],
Q = [_Q,_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q,_R],
Q = [_R,_Q,_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q,_R,_S],
Q = [_S,_R,_Q,_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q,_R,_S,_T],
Q = [_T,_S,_R,_Q,_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ? ;
P = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_P,_Q,_R,_S,_T,_U],
Q = [_U,_T,_S,_R,_Q,_P,_O,_N,_M,_L,_K,_J,_I,_H,_G,_F,_E,_D,_C,_B,_A] ?
*/