[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