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.

Exemplo:

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?

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top