Algumas funções de ordem superior para operar em listas ou matrizes foram adotadas ou reinventadas repetidamente. O mapa de funções , dobra [ l | r ] e filter são encontrados juntos em várias linguagens de programação, como Scheme, ML e Python, que não parecem ter um ancestral comum. Eu vou com esses três nomes para manter a pergunta focada.
Para mostrar que os nomes não são universais, aqui está uma amostra de nomes para funcionalidade equivalente em outros idiomas. O C ++ transformou em vez de mapear e remove_if em vez de filtrar (invertendo o significado do predicado). O Lisp possui o mapcar em vez do mapa , remove-se-não em vez do filtro e reduz em vez da dobra (Algumas variantes modernas do Lisp têm mapa, mas isso parece ser um formulário derivado .) O C # usa o Select em vez do filtro . Os nomes de c # vieram do SQL via LINQ map e Where em vez de e, apesar das alterações de nome, sua funcionalidade foi influenciada por Haskell, que foi influenciado por ML.
Os nomes mapear , dobrar e filtrar são comuns, mas não universais. Isso sugere que eles foram emprestados de uma fonte influente para outras línguas contemporâneas. De onde vieram esses nomes de função?
fonte
map
viria da teoria matemática dos conjuntos, que descreve transformações de conjuntos como "mapeamentos" do domínio de entrada para o intervalo de saída.mapcar
é um mapa, no carro (e não no CDR).filter
faz exatamente isso - filtra os dados. Parece bastante óbvio.Respostas:
A única palavra universal em sua lista é
map
e ela já aparece no artigo original da Lisp em 1960 (sob o pretexto demaplist
). O artigo também temsearch
(AKAfilter
, AKAremove-if-not
).Penso que a razão
map
suportou enquanto os outros têm variantes é quemap
vem de relativamente antiga, estabelecido, comum e matemática elementar enquantocatamorphism
(AKAreduce
AKAfold
& c) é um relativamente conceito avançado, a partir de uma relativamente obscura recentemente desenvolvido (mais ou menos simultaneamente com CS) de domínio , e foi introduzido (no final dos anos 80) quandoreduce
estava disponível no Lisp por mais de uma década .Outros (
filter
AKAremove-if-not
) são ainda mais ad hoc em CS / programação, então as pessoas se sentem ainda mais confortáveis escolhendo seu próprio nome para eles.fonte