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

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 ответа

Решение

Как насчет select?

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

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

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

Превращать

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

Другие вопросы по тегам