Origem dos nomes de funções comuns de processamento de lista


11

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?


10
mapviria 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.
Aidan Cully

2
Lisp mapcaré um mapa, no carro (e não no CDR).

fold tem esse nome porque na teoria dos conjuntos é chamado catamorfismo, mas isso é absolutamente ridículo. Também foldl é Agregado no LINQ, novamente da terminologia SQL.
Jimmy Hoffa

2
Observe também que, embora esses idiomas não possuam ancestrais comuns oficialmente, houve muita influência. Guido van Rossum havia feito sua lição de casa quando começou a projetar Python, e Scheme, Common Lisp, Perl e (IIRC) Haskell e ML já estavam por aí na época.
Tdammers

1
filterfaz exatamente isso - filtra os dados. Parece bastante óbvio.
Dukeling

Respostas:


3

A única palavra universal em sua lista é mape ela já aparece no artigo original da Lisp em 1960 (sob o pretexto de maplist). O artigo também tem search(AKA filter, AKAremove-if-not ).

Penso que a razão mapsuportou enquanto os outros têm variantes é que mapvem de relativamente antiga, estabelecido, comum e matemática elementar enquanto catamorphism(AKA reduceAKA fold& 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) quando reduceestava disponível no Lisp por mais de uma década .

Outros ( filterAKA remove-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.


1
Não se refira vagamente à teoria das categorias como "um domínio obscuro recentemente desenvolvido"; também é tão "desenvolvido recentemente" quanto o cálculo Lambda .
Dan D.

@DanD .: a palavra chave é relativamente
SDS

Mesmo assim, todos eles sofreram bugs no .NET para serem semelhantes ao SQL. (map -> Select; filter -> Where; fold -> Aggregate) #
18555 Steven Evers
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.