Adicionado
Acabei de encontrar duas perguntas relacionadas
/programming//a/2582804/156458
Em linguagens de programação, da Programming Language Pragmatics de Michael Scott
Em geral, é dito que um valor em uma linguagem de programação tem status de primeira classe se puder ser passado como parâmetro, retornado de uma sub-rotina ou atribuído a uma variável. Tipos simples, como números inteiros e caracteres, são valores de primeira classe na maioria das linguagens de programação. Por outro lado, um valor de "segunda classe" pode ser passado como parâmetro, mas não retornado de uma sub-rotina ou atribuído a uma variável, e um valor de "terceira classe" nem mesmo pode ser passado como parâmetro.
Os rótulos são valores de terceira classe na maioria das linguagens de programação, mas valores de segunda classe em Algol. As sub-rotinas exibem a maior variação. Eles são valores de primeira classe em todas as linguagens de programação funcionais e na maioria das linguagens de script. Eles também são valores de primeira classe em C # e, com algumas restrições, em várias outras linguagens imperativas, incluindo Fortran, Modula-2 e -3, Ada 95, C e C ++. 11 São valores de segunda classe na maioria das outras línguas imperativas e valores de terceira classe em Ada 83.
Qual é a base matemática para os valores de primeira / segunda / terceira classe em linguagens de programação?
A terminologia me lembra a lógica de primeira / segunda ordem, mas elas estão relacionadas?
Parece-me que a diferença entre eles é que caso específico um valor pode ser usado
- passado como parâmetro,
- retornado de uma sub-rotina, ou
- atribuído a uma variável.
Por que os casos específicos são importantes, enquanto outros não são mencionados?
Obrigado.