我应该将REBOL函数称为列表推导?

时间:2008-10-15 08:33:44

标签: list-comprehension naming rebol dialect

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之类的内容过于笼统。

我还没有找到任何其他语言需要关键字或函数来进行列表推导。无论它们存在,它们都是纯粹的语法糖。不幸的是我没有这个选择。那么,看到我必须有一个函数,它的优秀,简洁,合乎逻辑的名称是什么?

4 个答案:

答案 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])]。只是眯着眼睛,假装[]不在那里。