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 这样的东西太笼统了。

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

有帮助吗?

解决方案

选择怎么样?

为4x10中的b选择[(a * b)为1x100,其中(所有[奇数?奇数?b])]

其他提示

因为列表推导可以被认为类似于地图,所以您可能会考虑将其称为“listmap”。或者,因为列表推导基于集合构建器表示法,所以您可以将其称为“构建”符号。或“buildlist”。

(免责声明:我对REBOL知之甚少,所以请原谅我这些名字已经被拿走了)

transmogrify

do 可能是合适的,因为列表推导只是Monad理解的一个实例,而 do 是Haskell中用于加糖Monadic计算的关键字,但我怀疑它也是模糊的用户库。我打电话给我的列表理解函数 comp ,但这只是你已经拥有的缩写。也许让步?例如。 产生[(a * b)for 1x100 for b in 4x10 where(all [odd?a odd?b])] 。只是眯着眼睛,假装[]不在那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top