/**************************************************************** Inteligencia Artificial ====================== Torres de Hanoi this hanoi is slowed down Llama al predicado hanoi con el n£mero de discos, t£ puedes Ejemplo: Hanoi(6). Gonzalo Villarreal Farah Para Turbo Prolog 2.0 de la Borland ***************************************************************/ DOMAINS TIEMPO, FILA, COLUMNA, NUMERO = INTEGER PREDICATES hanoi( NUMERO ) mueve( NUMERO, NUMERO, FILA, FILA, FILA, COLUMNA, COLUMNA, COLUMNA ) info( NUMERO, NUMERO, FILA, FILA, COLUMNA, COLUMNA ) marca( NUMERO, NUMERO, COLUMNA) delay() dd(TIEMPO) mueve_vert(COLUMNA,NUMERO,FILA,FILA) mueve_horizon(FILA,NUMERO,COLUMNA,COLUMNA) CLAUSES delay :- dd(100). dd(0):-!. dd(N):-N1=N-1,dd(N1). hanoi(N) :- N<=13,!, VB=2+6*N,VH=3+N,CV=N, CM=3*N, CH=5*N, STCOLUMNA=(79-6*N)/2, STFILA=(25-VH)/2, makewindow(1,7,7,"Hanoi",STFILA,STCOLUMNA,VH,VB), marca(N,N,CV), mueve(N,N,0,0,0,CV,CM,CH), cursor(0,0), write("Presione cualquier tecla"),readchar(_). hanoi(_):- write("maximo 13 discos's\n"). mueve(H,1,HA,_,HC,CA,_,CH):-!,info(H,1,HA,HC,CA,CH). mueve(H,N,HA,HB,HC,CA,CB,CC):- N1=N-1, HA1=HA+1, mueve(H,N1,HA1,HC,HB,CA,CC,CB), info(H,N,HA,HC,CA,CC), HC1=HC+1, mueve(H,N1,HB,HA,HC1,CB,CA,CC). info( H, N, H1, H2, C1, C2 ) :- C11=C1-N, C22=C2-N, NN=2*N, H11=H-H1, H22=H-H2, mueve_vert(C11,NN,H11,1), mueve_horizon(1,NN,C11,C22), mueve_vert(C22,NN,1,H22). marca(_,0,_):-!. marca(H,N,C):-HH=H-N,info(H,N,HH,HH,C,C), N1=N-1, marca(H,N1,C). mueve_vert(_,_,H,H):-!. mueve_vert(COLUMNA,SIZE,H1,H2):-H1