Resumen La evaluación parcial dirigida por narrowing (NPE) [Vid96, AFV98, AV02] es una técnica para la especialización de programas funcionales y lógico funcionales. La técnica original es de tipo online, es decir, realiza la propagación de valores estáticos y los controles de terminación durante el propio proceso de especialización. Los esquemas offline, por el contrario, tienen dos fases bien diferenciadas: el análisis de tiempo de enlace, en el que se propagan los parámetros estáticos y se determina la estrategia de control mediante anotaciones, y la fase de especialización propiamente dicha (la cual sólo debe seguir las anotaciones de la primera fase). En general, se dice que la evaluación parcial offline es más eficiente---pero menos precisa---que la evaluación parcial online. El objetivo principal de esta tesis es mejorar la aproximación offline a la evaluación parcial dirigida por narrowing de [RSV05a]. En particular, se mejora el procedimiento de anotación y se implementa un evaluador parcial más efectivo con el fin de obtener programas mejor especializados y más rápidos. Como aplicaciones, empleamos el evaluador parcial para llevar a cabo la especialización de un intérprete, lo que de acuerdo a la primera proyección de Futamura [Fut71] se considera como un tipo de compilación. Esta aplicación representa la primera aproximación a la compilación por evaluación parcial de programas lógico funcionales. Además, consideramos también la especialización de un lenguaje de dominio específico que tiene como propósito generar programas para máquinas de control numérico computarizado (CNC). Desde un punto de vista más teórico, se extiende la técnica offline básica para programas funcionales de orden superior mediante la aproximación conocida como desfuncionalización. Además, se aplica una transformación polivariante que permite mejorar la precisión del proceso de especialización sin necesidad de implementar un esquema polivariante real. El esquema resultante tiene un buen equilibrio entre eficiencia y precisión, mejorando así las propuestas anteriores y constituyendo un buen punto de partida para el desarrollo de herramientas de especialización de programas lógico funcionales eficaces.