2 Stimmen

Neu bei ML: Wie man Rückgabewerte vom Typ a* a* a* speichert

Ich habe ein Programm, das int*int zurückgibt

(Beispiel zur Veranschaulichung): fun Programm(a,b) = (1,2)

Ich möchte etwas in dieser Art tun:

fun Programm(a,b)
if a = 0 then (1,2)
else
val x,y = Programm(a-1,b)
return (x-1, y)

Im Grunde möchte ich das zurückgegebene Tuple manipulieren und dann eine Modifizierung davon zurückgeben.

Danke

1voto

sepp2k Punkte 352762

Dies funktioniert fast genau so, wie du es geschrieben hast, nur dass deine Syntax ein bisschen falsch ist:

fun program(a,b) =
  if a = 0 then (1,2)
  else
    let val (x,y) = program(a-1,b) in
      (x-1, y)
    end

Insbesondere:

  1. Funktionen werden definiert durch fun f args = body - du hast das = weggelassen.
  2. Variablen werden mit let val foo = bar in baz end gebunden.
  3. Es gibt kein return Keyword in SML.

0voto

Juspreet Sandhu Punkte 31

Ich würde auch vorschlagen, dass, während Sie einen Typ t : int * int zurückgeben müssen, Sie zumindest die Eingaben Ihrer Funktion curryieren können von: int * int = int -> int. Wenn Sie dies rückgängig machen müssen, können Sie immer uncurry. Ich würde vorschlagen, die Funktion wie folgt zu schreiben:

fun programm a b =
   if a = 0 
   then (1,2)
   else
       let
           val (x,y) = programm (a - 1) b
       in
           (x - 1, y)
       end

Der Typ dieser Funktion ist: int -> int -> (int * int)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X