Frage

REBOL hat keine integrierte Möglichkeit Listenkomprehensionen auszuführen. Allerdings hat REBOL über eine leistungsfähige Einrichtung (bekannt als parse), die verwendet werden können, domänenspezifische Sprachen (DSLs) zu erstellen. Ich habe parse verwendet für Listenkomprehensionen einen solchen Mini-DSL zu erstellen. Um den Ausdruck zu interpretieren, wobei der Block das Verständnis enthält, wird an eine Funktion übergeben, die in Ermangelung eines besseren Begriffs ich comprehend genannt habe.

Beispiel:

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

Aus irgendeinem Grunde comprehend klingt nicht richtig zu mir, aber so etwas wie eval ist zu allgemein.

Ich habe keine andere Sprache gefunden, die ein Schlüsselwort oder eine Funktion für Listenkomprehensionen erfordert. Sie sind rein syntaktischer Zucker, wo immer sie existieren. Leider habe ich diese Option nicht. Also, da ich eine Funktion haben muss, was ein guter, prägnant, logischen Namen für das?

War es hilfreich?

Lösung

Wie wäre es select?

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

Andere Tipps

Da Listenkomprehensionen kann als analog betrachtet werden, kartieren Sie könnten denken, es ruft so etwas wie „Liste Karte“. Alternativ weil Listenkomprehensionen auf Set-Builder-Notation basieren, man könnte es etwas entlang der Linien von „build“ nennen oder „Buildlist“.

(Disclaimer: Ich weiß sehr wenig über REBOL, so verzeiht mir, wenn diese Namen bereits vergeben sind)

transmogrify

do könnte angemessen sein, als Listenkomprehensionen nur eine Instanz von Monad Comprehensions ist, und do ist das Schlüsselwort in Haskell für gezuckerte Monadic Berechnungen verwendet, aber ich vermute, es ist zu vage für eine Anwenderbibliothek. Ich rief meine Liste Verständnis Funktion comp, aber das ist nur eine Abkürzung von dem, was Sie bereits haben. Vielleicht yielding? Z.B. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Gerade Art von Schielen und so tun, als die [] ist nicht da.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top