2008-10-15 22 views
6

REBOL hat keine eingebaute Möglichkeit, Listenkompressen durchzuführen. REBOL verfügt jedoch über eine leistungsfähige Einrichtung (parse), mit der domänenspezifische Sprachen (DSLs) erstellt werden können. Ich habe parse verwendet, um ein solches Mini-DSL für List Comprehensions zu erstellen. Um den Ausdruck zu interpretieren, wird der Block, der das Verständnis enthält, an eine Funktion übergeben, die ich mangels eines besseren Ausdrucks comprehend genannt habe.Was soll ich eine REBOL-Funktion nennen, die Aufzählungen auflistet?

Beispiel:

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

Aus irgendeinem Grund 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 Listenergänzungen benötigt. Sie sind reiner syntaktischer Zucker, wo immer sie existieren. Leider habe ich diese Option nicht. Also, da ich eine Funktion haben muss, was ist ein guter, prägnanter, logischer Name dafür?

+1

Hier ist der Quellcode für die Liste Verständnis: http://blog.revolucent.net/2009/04/dirt-simple-dsl-in-rebol.html –

Antwort

4

Wie wäre es select?

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

+2

Rebol hat bereits eine 'select' Funktion, und es ist wichtig. Nicht dieser Name. – BrianH

2

Da Listen-Comprehensions als analog zur Map betrachtet werden können, sollten Sie darüber nachdenken, es als "listmap" zu bezeichnen. Da List Comprehensions auf der Set-Builder-Notation basieren, könnten Sie es alternativ auch als "Build" oder "Buildlist" bezeichnen.

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

1

do könnte angemessen sein, als Listenkomprehensionen nur eine Instanz von Monad Comprehensions sind, und do ist das Schlüsselwort in Haskell für gezuckerte Monadic Berechnungen verwendet, aber ich vermute, dass es für eine Anwenderbibliothek zu vage ist. Ich habe meine Listenverstehensfunktion comp aufgerufen, 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])]. Nur ein bisschen schielen und so tun, als wären die [] nicht da.

+0

Leider ist DO schon ein REBOL-Wort. –