Forum: PC-Programmierung Dummy OCaml-Frage


von Nick M. (Gast)


Lesenswert?

Kann hier jemand OCaml?
Ich nämlich nicht! 8-/

Seit einem Tag versuch ich hier einen Fehler zu finden:
1
type enumLoopStates = LoopKeep | LoopBreak | LoopReturn | LoopError
2
3
let tNP inStr =
4
  let myTag = treeTagGet inStr
5
  and myTagType = treeTagTypeGet inStr
6
  and myStr = ref treeTagConsume inStr
7
  and loopState = ref LoopKeep in (
8
    if myTagType = TagTypeShort then begin
9
      ""
10
    end
11
    else begin
12
      while !loopState = LoopKeep do
13
        loopState := LoopBreak;
14
        if treeTagTypeGet !myStr = TagTypeNone then begin
15
          ""
16
        end
17
        else begin
18
          let nextTagType = treeTagTypeGet !myStr
19
          and nextTag = treeTagGet !myStr in ( (* ***2*** *)
20
            if nextTagType = TagTypeClose && nextTag = myTag then begin
21
              ""
22
            end
23
            if nextTagType = TagTypeNone then begin (* ***1*** *)
24
              ""
25
            end
26
            else begin
27
              ""
28
            end
29
          )
30
        end
31
      done
32
    end
33
  )

Die Funktionen treeTagConsume, treeTagGet liefern einen String.
treeTagTypeGet liefert einen:
type enumTagTypes = TagTypeNone | TagTypeShort | TagTypeOpen | 
TagTypeClose

Ich hab möglichst viel rausgeworfen, daher ist das Ergebnis auch immer 
nur ein "".
Der Compiler meckert an ***1***
1
             if nextTagType = TagTypeNone then begin
2
             ^^
3
Error: Syntax error: ')' expected
Und an ***2***
1
           and nextTag = treeTagGet !myStr in (
2
                                              ^
3
  This '(' might be unmatched


Ich schnall es echt nicht, was ich da falsch geklammert habe.
Die Einrückung mag für OCaml unüblich sein.
Vorsichtshalber hab ich überall begin / end verwendet.

Beitrag #6525868 wurde von einem Moderator gelöscht.
von Nick M. (Gast)


Lesenswert?

Schubs, ich hab es immer noch nicht gefunden.
Die Einrückung spiegelt die Struktur wieder die ich eigentlich haben 
will.

von Nick M. (Gast)


Lesenswert?

Ich habs rausgefunden.
Von paar missplatzierten ';' abgesehen ist danach immer die 
Fehlermeldung etwa "This is not a function" für einen inneren Block 
gekommen. Ist aber auch gelöst.

Die Syntax von OCaml ist schon etwas **räusper** gewühnungsbedürftig und 
die Fehlermeldungen bringen mich kaum weiter. Die sollen wohl eher zum 
Nachdenken anregen statt auf einen Fehler hinzuweisen. :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.