La programación a nivel de valor se refiere a uno de los dos paradigmas de programación opuestos identificados por John Backus en su trabajo sobre programas como objetos matemáticos, siendo el otro la programación a nivel de función . Backus utilizó originalmente el término programación a nivel de objeto , pero ese término ahora tiende a confundirse con la programación orientada a objetos .
Los programas a nivel de valor son aquellos que describen cómo combinar varios valores (es decir, números, símbolos, cadenas, etc.) para formar otros valores hasta obtener los valores finales . Los nuevos valores se construyen a partir de los existentes mediante la aplicación de varias funciones de valor a valor, como la suma, la concatenación, la inversión de matrices, etc.
Los programas convencionales de von Neumann se basan en el nivel de valores: las expresiones en el lado derecho de las instrucciones de asignación se ocupan exclusivamente de construir un valor que luego se almacenará.
El enfoque de programación a nivel de valores invita al estudio del espacio de valores bajo las operaciones de formación de valores y de las propiedades algebraicas de esas operaciones. Esto es lo que se denomina el estudio de los tipos de datos , y ha avanzado desde centrarse en los valores mismos y su estructura, hasta un interés principal por las operaciones de formación de valores y su estructura, tal como se da en ciertos axiomas y leyes algebraicas, es decir, al estudio algebraico de los tipos de datos .
Los lenguajes basados en cálculo lambda (como Lisp , ISWIM y Scheme ) son en la práctica lenguajes de nivel de valor, aunque no están restringidos por diseño.
Para ver por qué los programas típicos de estilo lambda son principalmente de nivel de valor, considere la definición habitual de una función de valor a valor, digamos
f = λ x . E
Aquí, x debe ser una variable de valor (ya que el argumento de f es un valor por definición) y E también debe denotar un valor (ya que el resultado de f es un valor por definición). Normalmente, E es una expresión que implica la aplicación de funciones formadoras de valor a variables y constantes de valor; sin embargo, existen algunas funciones formadoras de valor que tienen argumentos de función y de valor y se utilizan para fines limitados [ cita requerida ] .
Si el término valores se define para incluir las variables de valor en sí mismas, entonces la visión de la programación a nivel de valores es la de construir valores mediante la aplicación de programas existentes (operaciones/funciones de formación de valores) a otros valores. La programación de estilo Lambda construye un nuevo programa a partir del valor del resultado mediante la abstracción lambda de las variables de valor.