Dummy OCaml-Frage

Gast #6525830
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.
Gast #6545894
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. :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren