Как мне вызвать функцию REBOL, которая выводит список? - PullRequest
6 голосов
/ 15 октября 2008

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 голосов
/ 02 февраля 2009

Как насчет select?

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

2 голосов
/ 02 февраля 2009

1001 * превращать *

2 голосов
/ 02 февраля 2009

Поскольку понимание списков можно рассматривать как аналог отображения, вы можете подумать о том, чтобы назвать его чем-то вроде «listmap». Кроме того, поскольку списочные выражения основаны на нотации компоновщика множеств, вы можете назвать это как-то по строкам или строкам.

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

1 голос
/ 02 февраля 2009

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

...