6

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

4 回答 4

4

怎么样select

select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

于 2009-02-01T21:44:15.470 回答
2

因为可以将列表推导式视为类似于 map,所以您可能会考虑将其称为“listmap”之类的东西。或者,因为列表推导基于集合构建器表示法,您可以将其称为“构建”或“构建列表”。

(免责声明:我对 REBOL 知之甚少,如果这些名字已经被占用,请见谅)

于 2009-02-01T21:25:30.313 回答
2

变形

于 2009-02-02T01:29:30.913 回答
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])]。只是眯着眼睛假装 [ ] 不存在。

于 2009-02-01T21:51:03.367 回答