Как я должен вызвать функцию REBOL, которая выполняет перечисление значений?

StackOverflow https://stackoverflow.com/questions/204040

Вопрос

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 это слишком обобщенно.

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

Это было полезно?

Решение

Как насчет select?

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

Другие советы

Поскольку понимание списков можно рассматривать как аналог map , вы могли бы подумать о том, чтобы назвать это чем-то вроде "listmap".С другой стороны, поскольку понимание списков основано на нотации set-builder, вы могли бы назвать это чем-то вроде "build" или "buildlist".

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

трансмогрифицировать

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top