2008-10-15 3 views
6

REBOL не имеет встроенного способа выполнения списков. Однако REBOL имеет мощное средство (известное как parse), которое может использоваться для создания доменных языков (DSL). Я использовал parse для создания такого мини-DSL для понимания списков. Чтобы интерпретировать выражение, блок, содержащий понимание, передается функции, которая из-за отсутствия лучшего термина, который я назвал comprehend.Что мне следует называть функцией REBOL, которая выполняет переписку?

Пример:

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

По какой-то причине, comprehend не звучит для меня, но что-то вроде eval является слишком общим.

Я не нашел другого языка, требующего ключевого слова или функции для понимания списков. Они представляют собой чистый синтаксический сахар, где бы они ни существовали. К сожалению, у меня нет такого варианта. Итак, видя, что у меня должна быть функция, какое хорошее, лаконичное, логичное имя для нее?

+1

Вот исходный код для списка понимания: http://blog.revolucent.net/2009/04/dirt-simple-dsl-in-rebol.html – 2014-06-08 05:09:50

ответ

4

Как насчет select?

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

+2

Rebol уже имеет `select` функции, и это важно. Не это имя. – BrianH 2013-02-18 01:47:40

2

Поскольку представления списков можно рассматривать как аналогичные карте, вы можете подумать о том, чтобы называть его чем-то вроде «listmap». В качестве альтернативы, поскольку понимание списков основано на нотации set-builder, вы можете называть его чем-то вроде строк «build» или «buildlist».

(Отказ от ответственности: Я очень мало знаю о REBOL, так что простите меня, если эти имена уже приняты)

1

do может быть целесообразным, поскольку списочные только один экземпляр Monad постижений и do это ключевое слово, используемое в Haskell для засахаренных монадических вычислений, но я подозреваю, что это слишком расплывчато для библиотеки пользователя. Я назвал функцию определения списка comp, но это только аббревиатура того, что у вас уже есть. Возможно yielding? Например. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Просто вроде косоглазие и притворяться [] не существует.

+0

К сожалению, DO - это слово REBOL. – 2009-02-12 05:33:20

Смежные вопросы