O que devo chamar uma função REBOL que faz compreensões lista?
-
03-07-2019 - |
Pergunta
REBOL não tem built-in maneira de realizar compreensões lista. No entanto, REBOL tem uma facilidade poderosa (conhecido como parse
) que pode ser usado para criar linguagens específicas de domínio (DSLs). Eu usei parse
para criar tal um mini-DSL para compreensões lista. Para interpretar a expressão, o bloco contendo a compreensão é passado para uma função, que por falta de um termo melhor eu chamei comprehend
.
comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
Por alguma razão, comprehend
não soa bem para mim, mas algo como eval
é demasiado geral.
Eu não encontrei qualquer outra língua que requer uma palavra-chave ou função para compreensões lista. Eles são açúcar sintático pura onde quer que existam. Infelizmente eu não tenho essa opção. Então, vendo que eu deve ter uma função, que é uma boa, sucinto nome, lógico para ele?
Solução
Como cerca select
?
select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
Outras dicas
Porque compreensões lista pode ser pensada como análoga para mapear, você pode pensar em chamá-lo algo como "ListaMapa". Como alternativa, porque compreensões lista são baseados em notação set-construtor, você poderia chamá-lo de algo ao longo das linhas de "construir" ou "BuildList".
(Disclaimer: Eu sei muito pouco sobre REBOL, então me perdoe se esses nomes já estão tomadas)
Transmogrify
do
poderia ser apropriado, como compreensões lista são apenas um exemplo de compreensões Mônada, e do
é a palavra-chave usada em Haskell para computações monádicas açucaradas, mas eu suspeito que é demasiado vago para uma biblioteca do usuário. Liguei para minha função compreensão da lista comp
, mas isso é apenas uma abreviação do que você já tem. Talvez yielding
? Por exemplo. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
. Apenas uma espécie de estrabismo e fingir que o [] não estão lá.