2017-02-28 4 views
0

ich an einer Aufgabe bin zu arbeiten und wurde die folgende Funktion gegeben:Extrahieren von Werten aus einer Funktion über passende

fun label (lb,ub) = 
let val s = callcc (fn k =>let fun branch c = if (c < ub) 
               then (pushCP (k,branch,c+1);c) 
               else ub 
          in (pushCP(k,branch,lb+1);lb) 
          end) 
in {value=s,dom=(lb,ub)} 
end; 

Wenn Sie setzen eine untere und obere Schranke von je 1, sagen wir und 3into dieser Funktion wäre es drucken

val it = {dom=(1,3), value=1} 

Ich versuche herauszufinden, ob es überhaupt möglich ist, den Wert zu erhalten. In meinen Notizen heißt es, dass zwei mögliche Wege, dies zu tun, durch #value (x) oder durch Ausführen von val {value = a, ...} = x geschehen würden, aber ich bekomme Fehler in beide Richtungen. Irgendwelche Ahnung, was ich falsch mache?

Antwort

2

Es ist nicht klar, was Sie falsch machen, da Sie nicht reproduziert haben, was Sie tatsächlich versucht, aber Ihre Notizen sind korrekt:

- val x = {dom=(1,3), value=1}; 
val x = {dom=(1,3),value=1} : {dom:int * int, value:int} 

Die erste Methode #value zu extrahieren das value Feld zu verwenden ist und #dom zu extrahieren, das dom Feld:

- #value x; 
val it = 1 : int 
- #dom x; 
val it = (1,3) : int * int 

Das zweite Verfahren ist Musteranpassung zu verwenden. Sie können einzelne Felder extrahieren:

- val {value = a,...} = x; 
val a = 1 : int 

Oder Sie beide Felder auf einmal extrahieren:

- val {dom = a, value = b} = x; 
val a = (1,3) : int * int 
val b = 1 : int 

Damit die oben zu arbeiten, x muss auf den Wert gebunden sein. Vielleicht versuchen Sie, dies mit einer x zu verwenden, die keine val Bindung erhalten hat. Sie müssten etwas wie dieses haben:

val x = label(1,3) 

Ich habe nicht den ganzen relevanten Code, also kann ich nicht prüfen. Wenn das obige nicht ausreicht, um Ihre Frage zu beantworten, müssen Sie weitere Details angeben.

Verwandte Themen