Hope es un pequeño lenguaje de programación funcional desarrollado en la década de 1970 en la Universidad de Edimburgo . [1] [2] Es anterior a Miranda y Haskell y es contemporáneo de ML , también desarrollado en la Universidad. Hope se derivó de NPL , [3] un lenguaje funcional simple desarrollado por Rod Burstall y John Darlington en su trabajo sobre transformación de programas. [4] NPL y Hope son notables por ser los primeros lenguajes con evaluación de llamada por patrón y tipos de datos algebraicos . [5]
Hope debe su nombre a Sir Thomas Hope (c. 1681-1771), un reformador agrícola escocés, en cuyo honor también se bautizó Hope Park Square en Edimburgo, la ubicación del Departamento de Inteligencia Artificial en el momento del desarrollo de Hope.
Un programa factorial en Hope es:
dec hecho: num -> num;--- hecho 0 <= 1;--- hecho n <= n*hecho(n-1);
Cambiar el orden de las cláusulas no cambia el significado del programa, porque la comparación de patrones de Hope siempre favorece los patrones más específicos en lugar de los menos específicos. En Hope, se requieren declaraciones de tipos explícitas; no existe la opción de usar un algoritmo de inferencia de tipos en Hope.
Hope proporciona dos estructuras de datos integradas: tuplas y listas. [6]
La primera implementación de Hope fue strict , pero desde entonces ha habido versiones lazy y versiones strict con constructores lazy. British Telecom se embarcó en un proyecto con Imperial College para implementar una versión strict. La primera versión fue codificada por Thanos Vassilakis en 1986. Las versiones posteriores fueron codificadas por Mark Tasng de British Telecom. Un lenguaje sucesor, Hope+ (desarrollado conjuntamente entre Imperial College e International Computers Limited (ICL), agregó anotaciones para dictar la evaluación strict o lazy. [7]
El tutorial Hope de Roger Bailey en la edición de agosto de 1985 de BYTE hace referencia a un intérprete para IBM PC DOS 2.0. [6]