Predicates
	interac(llist_integer,real,char,char,char)
	trans(integer,real,real)
Clauses
	trans(Angn,Anrc,Anrs):-Anr=Angn*3.141592/180,
		Anrc=cos(Anr),
		Anrs=sin(Anr),!.
		
	interac(_,_,'\27',_,_).
	interac(Coor,Ang,'+',Vista,M):-Ang<90,Angn=Ang+1,
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,'-',Vista,M):-Ang>0,Angn=Ang-1,
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,'*',Vista,M):-Ang<=80,Angn=Ang+10,
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,'/',Vista,M):-Ang>=10,Angn=Ang-10,
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'1',_,M):-Vista='1',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'2',_,M):-Vista='2',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'3',_,M):-Vista='3',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'7',_,M):-Vista='7',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'8',_,M):-Vista='8',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,'9',_,M):-Vista='9',
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,'x',_,M):-Vista='x',
				clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
				!,interac(Coor,Ang,X,Vista,M).
	interac(Coor,Ang,'y',_,M):-Vista='y',
				clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
				!,interac(Coor,Ang,X,Vista,M).
	interac(Coor,Ang,'z',_,M):-Vista='z',
				clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
				!,interac(Coor,Ang,X,Vista,M).
	interac(Coor,Ang,'.',Vista,M):-Angn=Ang,Anr=Angn*3.141592/180,
				Anrc=cos(Anr),
				Anrs=sin(Anr),
				dibujap(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Angn,',',Vista,M):-
				trans(Angn,Anrc,Anrs),
				dibujas(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,'5',Vista,'5'):-!,interac(Coor,Ang,'4',Vista,'0').
	interac(Coor,Ang,'5',Vista,'0'):-!,interac(Coor,Ang,'4',Vista,'5').
	interac(Coor,Ang,';',Vista,M):-
				moveto(0,0),OutText("Visualizador Tridimensional"),
				moveto(0,30),OutText("Funciones:"),
				moveto(0,50),OutText("1        Vista XYZ"),
				moveto(0,60),OutText("2        Vista XZY"),
				moveto(0,70),OutText("3        Vista YXZ"),
				moveto(0,80),OutText("7        Vista YZX"),
				moveto(0,90),OutText("8        Vista ZXY"),
				moveto(0,100),OutText("9        Vista ZYX"),
				moveto(0,110),OutText("x        Vista YZ"),
				moveto(0,120),OutText("y        Vista XZ"),
				moveto(0,130),OutText("z        Vista XY"),
				moveto(0,150),OutText("+        Incrementa un Grado el  ngulo de vista"),
				moveto(0,160),OutText("-        Decrementa un Grado el  ngulo de vista"),
				moveto(0,170),OutText("*        Incrementa 10 Grados el  ngulo de vista"),
				moveto(0,180),OutText("/        Decrementa 10 Grados el  ngulo de vista"),
				moveto(0,200),OutText("5        Prende y Apaga el Marco"),
				moveto(0,220),OutText(".        Une los puntos con l¡neas (£til para \"genera()\")."),
				moveto(0,240),OutText(",        Une los puntos con tri ngulos (£til para \"generar()\")."),
				moveto(0,270),OutText("ESC      Sale al Men£"),
				readchar(_),
				!,interac(Coor,Ang,'4',Vista,M).
	interac(Coor,Angn,'4',Vista,M):-
				trans(Angn,Anrc,Anrs),
				clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
				!,interac(Coor,Angn,X,Vista,M).
	interac(Coor,Ang,_,Vista,M):-readchar(X),!,
				interac(Coor,Ang,X,Vista,M).

    Source: geocities.com/v.iniestra/apuntes/pro_log

               ( geocities.com/v.iniestra/apuntes)                   ( geocities.com/v.iniestra)