2010-09-17 16 views
2

J'ai un programme qui retourne int * intNouveau à ML: Comment stocker des valeurs de retour de type a * a * a *

(exemple à des fins d'illustration): programme amusant (a, b) = (1,2)

Je veux faire quelque chose le long des lignes:

programme amusant (a, b)
si a = 0 alors (1,2)
autre
val x, y = programme (a-1, b)
retour (x-1, y)

Fondamentalement, je veux manipuler le tuple qui est retourné, puis revenir une modification de celui-ci.

Merci

Répondre

1

Cela fonctionne presque exactement comme vous l'avez écrit, sauf que votre syntaxe est un peu hors:

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

Plus précisément:

  1. Les fonctions sont définies par fun f args = body - vous avez quitté sur le =. Les variables sont liées à let val foo = bar in baz end.
  2. Il n'y a pas de mot-clé de retour dans sml.
0

Je voudrais aussi suggérer que si vous besoin de retourner un type t : int * int, vous pouvez atleastcurry les entrées à votre fonction de: int * int = int -> int. Si vous avez besoin de revenir en arrière, vous pouvez toujours uncurry. Je vous suggère d'écrire la fonction:

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

Le type de cette fonction est: int -> int -> (int * int)