REBOL没有内置的方法来执行列表推导。但是,REBOL具有强大的功能(称为parse
),可用于创建特定于域的语言(DSL)。我已经使用parse
为列表推导创建了这样一个迷你DSL。为了解释表达式,包含理解的块被传递给一个函数,由于缺少一个更好的术语,我称之为comprehend
。
示例:
comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
出于某种原因,comprehend
对我来说听起来不合适,但eval
之类的内容过于笼统。
我还没有找到任何其他语言需要关键字或函数来进行列表推导。无论它们存在,它们都是纯粹的语法糖。不幸的是我没有这个选择。那么,看到我必须有一个函数,它的优秀,简洁,合乎逻辑的名称是什么?
答案 0 :(得分:4)
select
怎么样?
select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
答案 1 :(得分:2)
因为列表推导可以被认为与map类似,所以你可能会想到称它为“listmap”。或者,因为列表推导基于集合构建器表示法,所以您可以将其称为“构建”或“构建列表”。
(免责声明:我对REBOL知之甚少,所以请原谅我这些名字已经被拿走了)
答案 2 :(得分:2)
transmogrify
答案 3 :(得分:1)
do
可能是合适的,因为列表推导只是Monad理解的一个实例,而do
是Haskell中用于加糖Monadic计算的关键字,但我怀疑它对于用户库来说太模糊了。我打电话给我的列表理解函数comp
,但这只是你已经拥有的缩写。也许yielding
?例如。 yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
。只是眯着眼睛,假装[]不在那里。