[linux-l] Re: C++ - <vector> ...

Rocco Rutte pdmef at cs.tu-berlin.de
Mi Jun 1 15:29:16 CEST 2005


Hi,

* Oliver Bandel [05-06-01 13:29:24 +0200] wrote:
>On Wed, Jun 01, 2005 at 11:06:51AM +0000, Rocco Rutte wrote:
>> * Oliver Bandel [05-06-01 00:14:40 +0200] wrote:

> >>Programmieren kann auch einfach sein und Spaß machen. :)

>> Weil ich mir die von dir erwähnte Language-Shootout-Seite mal angeguckt 
>> habe und es gerade passt: man soll Code in $sprache schreiben, der 
>> Zeilen von stdin liest und rückwärts auf stdout ausgibt.

>> Wenn man mal von main() und den Opal-Include-Äquivalenten absieht, ist 
>> der vollständige Code der:

> || FUN reversefile : com[void]
> || DEF reversefile ==
> ||     readLines (stdIn) & (\\lines.writeLines (stdOut, revert (lines)))

>sieht ja schnuckelig aus.

>Ist "lines" automatisch definiert? Oder wo kommt das her?
>lines ist eine list of Inputlines?

Als erstes: '\\' steht für Lambda im funktionalen Sinne, d.h. alles 
hinter '&' ist ein Lambda Term.

Der Rückgabewert von readLines() ist com[seq[string]], wobei 'com' eine 
Art Wrapper ist, der einem angibt, ob eine Funktion funktioniert hat 
oder nicht und warum nicht plus Daten. '&' holt aus com[irgendwas] genau 
das 'irgendwas' raus, damit man es per Lambda-Ausdruck verwerten kann. 
Das heisst, 'lines' ist das eigentliche Ergebnis von readLines().

Wenn man zum Beispiel Argumente von der Kommandozeile bearbeiten will, 
gibt es eine Funktion 'args', die com[seq[denotation]] liefert, d.h. man 
muss es mit '&' und einem Lambda-Ausdruck verwerten ala

| DEF main == args & (\\argumente.writeLines (stdOut, argumente)

oder

| FUN foo : seq[denotation] : com[void]
| DEF foo (s) == writeLines (stdOut, s)
| DEF main == args & foo

...wobei man sich hier Lambda sparen kann, weil man ja Curry machen 
kann.

Und 'seq[foo]' ist _die_ rekursive Listenstuktur, wobei 'foo' den 
Datentyp angeht, d.h. Opal kann selbstverständlich 'Generics' oder wie 
auch immer man das nennen mag.

>So habe ich die Aufgabe jedenfalls verstanden: Reihenfolge der Zeilen
>ändern.

Das macht der Code ja auch. Abgesehen davon, dass die Opal-Syntax evtl. 
neu ist: manchmal wird man ja schon stutzig, weil der Code einfach _zu_ 
kurz ist. *g*

  bye, Rocco
-- 
:wq!



Mehr Informationen über die Mailingliste linux-l