[linux-l] Re: Apropos Java-Bein-Klotz
Oliver Bandel
oliver at first.in-berlin.de
So Mai 29 17:23:29 CEST 2005
On Sun, May 29, 2005 at 02:18:45PM +0000, Rocco Rutte wrote:
> Hi,
>
> * Oliver Bandel [05-05-28 15:42:58 +0200] wrote:
>
> >Schick doch mal die Beispiel-Sourcen!
>
> [x] Done.
>
> Aber ich war etwas voreilig. Das mit der Bindung geht nicht so ohne
> weiteres, weil es für Strings ("denotation") keinen Konstruktor gibt.
Hmhh...
> Aber einen solchen Konstruktor braucht man, um ihn direkt als Argument
> einer Funktion zu benutzen. Zum Beispiel baut man einen neuen Datentyp
> 'Bit' so:
>
> DATA Bit == 0 1
>
> Diese '0' und '1' kann man dann für soetwas wie "Überladen" benutzen:
Aha, interessant. Kann man so Datentypen via Beispiele konstruieren?
Wie sieht das dann mit den Strings aus?
Muesste man alle möglichen Strings in DATA pressen?
Oder gibt es da eine "type"-Deklaration?
>
> FUN land : bit ** bit -> bool
> DEF land (0, 0) == false
> DEF land (1, 0) == false
> DEF land (0, 1) == false
> DEF land (1, 1) == true
Sieht sehr Haskell-ish aus. ;-)
>
> Allerdings ist das Problem, dass alles, was man direkt im Argument der
> Funktion schon nutzen will, auch in obiger 'DATA Bit ==' Anweisung
> stehen muss. Und bei Denotation gibt es keinen Konstruktor, der schon
> alle möglichen Strings umfasst. Deshalb musste ich in meiner Lösung erst
Das klingt allrdings wieder sehr aufwendig.
> einen eigenen Datentyp 'opts' bauen, dessen Werte ich überladen kann.
> Ich spare mir zwar dann die Bindung Key->Funktion, muss aber in conv()
> trotzdem die Bindung Switch_von_Befehlszeile->Key machen... ;-(
OK, Du sparst zwar solche "->" Bindings, aber hier machst Du ja irgend
etwas, das einem Pattern-Match in Ocaml entspricht, aber Haskell-ähnliche
Syntax nutzt.
-- handling functionality
FUN handle : denotation ** opts -> denotation
-- the handle functions
DEF handle (_, a) == "handle a"
DEF handle (_, b) == "handle b"
DEF handle (_, c) == "handle c"
DEF handle (o, BAD) == o ++ ": bad option ;-("
>
> Aber es funktioniert:
>
> $ ./tests -a -b -c -f
> handle a
> handle b
> handle c
> -f: bad option ;-(
>
> Wenn es soetwas noch nicht gibt, könnte man ja langfristig mal
> verschiedene Implementierungen einer Problemlösung sammeln und im Netz
> veröffentlichen...
Es gibt den Language Shootout von Doug Bagley:
http://shootout.alioth.debian.org/old/index.php?sort=fullcpu
Du kannst ja Deine Opal-Varianten dort einbringen! :)
Gruß,
Oliver
Mehr Informationen über die Mailingliste linux-l