[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