[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?

Roland Giersig rgiersig at cpan.org
Tue May 6 09:44:12 PDT 2008


Zum Thema rechts-nach-links für grep/map:

autobox (http://search.cpan.org/~chocolate/autobox-2.23/autobox.pod) 
erlaubt es, das andersrum zu schreiben, also

@cleverlies = @students->
               grep(sub {$_->{marks} > 85})->
               map(sub {$_->{matrikelnr}});

Vielleicht hilft dir das... :-)

LG, Roland

Robert Barta wrote:
> On Mon, May 05, 2008 at 04:41:46PM +0200, Roland Giersig wrote:
>> Mein Beileid, wenn das dein Job ist, für .NET eine Umsetzung zu finden...
> 
> Was sagt das ueber mich, wenn ich das freiwillig tu! :-)
> 
> Nein, es geht darum Teile der LINQ Funktionalitaet, d.h. selber access
> Mechanismus fuer in-memory collections, DBI backends, XML backends und
> Topic Maps backends zu implementieren.
> 
> Und dafuer moechte ich auch ...
> 
>> Das größte Problem scheint zu sein, dass die Listen-Operatoren in Perl 
>> rechts-nach-links funktionieren und .NET OO-mäßig links-nach-rechts, 
>> also verkettete Methodenaufrufe.
> 
> ... die Syntax erweiteren. Ich verwende map/grep exzessiv, aber das
> verkehrt von hinten nach vorn lesen/schreiben ueberless ich lieber den
> Chinesen.
> 
>> Aber das kann man nachbilden:
>>
>> @cleverlies = from(@ListOfObjects)
>>               ->where({$_->score() > 85})
>>               ->select({$_->matrikelnr()});
>>
>> from() baut ein Objekt aus den Argumenten und die Methoden führen dann 
>> die Operationen durch, wobei sie Code-Refs als Parameter nehmen. Damit 
>> lässt sich alles nachbilden, da .NET eine normale OO-Syntax hat. Leider 
>> gibts noch kein Object::DotNet::Query auf CPAN...
> 
> Tja. Nicht alles, was M$ da erfunden hat, ist Klumpert. Aber das
> meiste....
> 
> \rho
> 
>> Robert Barta wrote:
>>> On Wed, Apr 30, 2008 at 05:21:33PM +0200, Robert Barta wrote:
>>>> On Wed, Apr 30, 2008 at 04:26:19PM +0200, Roland Giersig wrote:
>>>>> und wie schaut das aus?
>>>>>
>>>>> @cleverlies = select {$_->{matrikelnr}} where {$_->{marks} > 85} from 
>>>>> @students;
>>>>>
>>>>> extra bonuspunkte für diejenigen, die jetzt lachend am boden liegen, 
>>>>> weil sie die implementation von select, where und from schon vor augen 
>>>>> haben... ;o)
>>>> Ja. Lustig. ;-/
>>> Fuer alle, die lustig aus der Huefte schiessen: Es geht um diese
>>> Liste von Operatoren:
>>>
>>>  http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/standard_query_operators.doc
>>>
>>> \rho
>>>
>>>>> Robert Barta wrote:
>>>>>> On Wed, Apr 30, 2008 at 12:02:52PM +0200, Roland Giersig wrote:
>>>>>>> Oder das alles nur per SQL abhandeln, mit DBI und einer in-memory 
>>>>>>> SQLite DB im Hintergrund.
>>>>>> Um SQL geht's eigentlich nicht...
>>>>>>
>>>>>>> Der Punkt ist: für wen sind diese Syntax-Überlegungen? Für einen 
>>>>>>> Maintainer, der mehr SQL als Perl versteht?
>>>>>> ... sondern um einen Weg (persistente) Collections ueber _ein und
>>>>>> denselben_ Mechanismus anzusprechen. D.h. bei
>>>>>>
>>>>>>  @collection = from $s in @students .....
>>>>>>
>>>>>> ist es fuer den Programmierer egal, ob die Studis aus einer SQL
>>>>>> Datenkrank, aus dem memory oder einem XML Dokument, oder einem RDF
>>>>>> Graphen geholt werden.
>>>>>>
>>>>>>> Dem tust du keinen Gefallen, 
>>>>>>> wenn du ihm SQL-ishe Perl-Syntax bietest, die dann doch nicht genau 
>>>>>>> SQL ist. Da bist du besser dran, wenn du ihm einen 
>>>>>>> Vereinfachungs-Wrapper um DBI schreibst, sodass die Operationen echtes 
>>>>>>> SQL sind.
>>>>>> Right. Aber fuer das gibt's ja schon nen Haufen.
>>>>>>
>>>>>> \rho
>>>>>>
>>>>>>> Robert Barta wrote:
>>>>>>>> On Wed, Apr 30, 2008 at 08:20:23AM +0200, Thomas Klausner wrote:
>>>>>>>>>> auf in-memory Objekte, relational DBs, XML structures, und - das
>>>>>>>>>> interessiert mich hier hauptsaechlich - auf Topic Map und RDF KBs
>>>>>>>>>> zugreifen kann. LINQ ist nun Teil von C# (das langsam Perl6 immer
>>>>>>>>>> aehnlicher wird, naja langsam).
>>>>>>>>> Naja, in Perl ist dieser Zugriffsmechanismus halt map, grep, each, 
>>>>>>>>> etc, mit dem man auf in-memory Objekte, DBs, XML, ... zugreift.
>>>>>>>> D.h., ich koennte das 1) einmal sehr Perl-ish angehen und etwas an
>>>>>>>>
>>>>>>>>   Tie::Array
>>>>>>>>
>>>>>>>> binden. Oder ...
>>>>>>>>
>>>>>>>>> In deinem konkreten Fall:
>>>>>>>>>
>>>>>>>>>>  my @students = ....;
>>>>>>>>>>  my @cleverlies = from $s in @students
>>>>>>>>>>                   where $s->{marks} > 85
>>>>>>>>>>                   select $s->{matrikelnr};
>>>>>>>>> koenntest du schon eine sub from { } machen, die die Parameterliste 
>>>>>>>>> durchgeht, andere "keywords" wie 'where' und 'select' identifziert, 
>>>>>>>> .... 2) 'from' in the namespace laden, oder ....
>>>>>>>>
>>>>>>>>> From: Stefan Weiss <spaceman at foo.at>
>>>>>>>>> Um deinen Sourcecode so umzuschreiben, dass nachher Perl rauskommt,
>>>>>>>>> schau dir mal die Source Filter in "perldoc perlfilter" an, oder das
>>>>>>>>> Modul Filter::Simple.
>>>>>>>> .... 3) ein Praeprozessor einschieben.
>>>>>>>>
>>>>>>>> Klingt alles gangbar. Ich haette auch nicht notfalls vor
>>>>>>>>
>>>>>>>>  @collection = new LINQ::TM ('from ...');
>>>>>>>>
>>>>>>>> zurueckgeschreckt.
>>>>>>>>
>>>>>>>> <loud-thinking>
>>>>>>>> 3) Bei preprocessors habe ich immer das Problem, dass sie nicht
>>>>>>>>   leicht immer miteinander kombinierbar sind.
>>>>>>>>
>>>>>>>> 2) mit dem 'from' als Routine muss man analysieren, ob die 
>>>>>>>> Parameterliste
>>>>>>>>   mit der Syntax, die ich erreichen will, halbwegs kompatibel ist. 
>>>>>>>>   Bei
>>>>>>>>
>>>>>>>>     $s->{marks} > 85
>>>>>>>>
>>>>>>>>   hab ich schon das Problem, dass Perl das fuer mich auswerten will, 
>>>>>>>>   bevor
>>>>>>>>   'from' zum Zug kommt.
>>>>>>>>
>>>>>>>> 1) Tie::Array ist halt SEHR perl-ish. Not bad per se, aber nicht Sinn 
>>>>>>>> der
>>>>>>>>   Uebung hier.
>>>>>>>>
>>>>>>>> </loud-thinking>
>>>>>>>>
>>>>>>>> \rho
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Vienna-pm mailing list
>>>>>>>> Vienna-pm at pm.org
>>>>>>>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Vienna-pm mailing list
>>>>>>> Vienna-pm at pm.org
>>>>>>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>>>>>>
>>>>> _______________________________________________
>>>>> Vienna-pm mailing list
>>>>> Vienna-pm at pm.org
>>>>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>>>>
>>>> _______________________________________________
>>>> Vienna-pm mailing list
>>>> Vienna-pm at pm.org
>>>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>>>
> 


More information about the Vienna-pm mailing list