[linux-l] Re: Apropos Java-Bein-Klotz

Oliver Bandel oliver at first.in-berlin.de
So Mai 29 18:43:00 CEST 2005


On Sun, May 29, 2005 at 03:55:12PM +0000, Rocco Rutte wrote:
> Hi,
> 
> * Oliver Bandel [05-05-29 17:23:29 +0200] wrote:
> >On Sun, May 29, 2005 at 02:18:45PM +0000, Rocco Rutte wrote:
> >>* Oliver Bandel [05-05-28 15:42:58 +0200] wrote:
> 
> >>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?
> 
> Ich verstehe die Fragen nicht.

Ginge ein

DATA Triple 0 1 2

?

Ist das so was wie enum in C?


Was passiert, wenn ich 0 1 2 und ggf. weitere Int's
in Verbindung mit Bit einsetze?
Meckert schon der Compiler? Oder wird das anders gehandhabt (exception?)?


Was macht man, wenn man komplexe Datentypen schaffen will?

Zum Beipiel ein pair mit int und string oder int und int
oder int und float?

Beipiel:

==================================================
first:~ oliver$ ocaml
        Objective Caml version 3.08.0

# type ii_p = int * int;;
type ii_p = int * int
# type is_p = int * string;;
type is_p = int * string
# type if_p = int *float;;
type if_p = int * float
# let a1 = (7,8.09);;
val a1 : int * float = (7, 8.09)
# let x = (7, "Hallo");;
val x : int * string = (7, "Hallo")
# let blah = (99,66);;
val blah : int * int = (99, 66)
# 
==================================================



> 
> Und Strings, in Opal "denotation", sind fest eingebaut.

Dann habe ich das Problem von dem Du mit den Strings gesprochen hast,
wohl noch nicht verstanden?!

> Ein großer Teil 
> der Standard-Datentypen ist zwar selbst in Opal geschrieben/kann man 
> selbst in Opal schreiben, aber es hat eben seine Grenzen. Die Menge 
> aller möglichen Strings ist ja recht, äh, groß.

Also doch wieder selber definieren von Strings?
Obwohl es sie (namentlich als "denotatioN" gibt?

Ich raff es nicht, was Du mir sagen willst.



> 
> >>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.
> 
> Jein, es ist nicht immer so. Wenn man es direkt im Argument bei der 
> Funktionsdefinition nutzen will, dann braucht man es, sonst nicht. Ich 
> kann auch folgendes machen:
> 
> DEF land (x1, x2) ==
>  IF 1? (x1) and 1? (x2) THEN true
>  ELSE false FI
> 
> ('1?(x) s.u.)

Was macht der Code?
Was bedeutet das Fragezeichen?


 
[...]
> Die Sache mit den Konstruktoren ist so: wenn man
> 
> DATA opts == a b c BAD
> 
> schreibt, dann wird automatisch eine ganze Menge Zeugs implizit vom 
> Compiler implementiert:
> 
> FUN a : opts
> FUN b : opts
> FUN c : opts
> FUN BAD : opts

Das heisst, es werden a,b,c,BAD alle als Funktionen
des Type opts deklariert?


> 
> Es ist ja eine funktionale Sprache und deshalb ist die Option 'a' kein 
> Character, String oder was auch immer sondern eine Funktion mit dem 
> Namen 'a', deren Ergebnis vom Typ 'opts' ist.

Ach so. Also so, wie ich es im letzten Absatz fragte?

Aber das mag bei OPAL so gemacht werden, aber es gibt ja recht
verschiedene FPLs.

In OCaml kann man Typen mit "type" bauen.



> Und gerade weil der 
> Compiler sowas implizit nur für die angegebenen 'Wörter' in der DATA 
> Anweisung macht, müsste bei Strings alle möglichen Werte stehen, was 
> nicht geht.

Ich dachte Strungs sind doch vorhanden, bloß heissen sie denotation?!

Bin nun also verwirrt.

> Genauso bei Zahlen: alle natürlichen Zahlen sind Funktionen, 
> die den gleichen Typ 'nat' zurückliefern. Es ist nicht möglich/sinnvoll, 
> alle natürlichen Zahlen jetzt mit 'DATA nat == 0 1 2 3 ...' zu 
> definieren, etc.

Gibt es keinen Typ int/integer oder sowas in Opal?

Muß man das irgendwie indirekt definieren (z.B. über
eine Funktion, die den nachfolger einer Funkion durch Addition
von 1 erzeugt), oder wie soll ich das verstehen?


Gruß, 
   Oliver



Mehr Informationen über die Mailingliste linux-l