Skip to content

Instantly share code, notes, and snippets.

@evanzillians
Created December 25, 2012 07:06
Show Gist options
  • Save evanzillians/4371994 to your computer and use it in GitHub Desktop.
Save evanzillians/4371994 to your computer and use it in GitHub Desktop.
Multiple return value usecase
// illustrate that user could add functionality on origin functions easily
function min_max<T>(v1: T, v2: T ): (T, T);
function min_max<T>(v1: T, v2: T, v3: T ): (T, T);
function min_max<T>(v1: T, v2: T, v3: T, v4: T): (T, T);
function min_max_add<T>(v1: T, v2: T ) { return min_max(v1, v2 ), v1 + v2 ;}
function min_max_add<T>(v1: T, v2: T, v3: T ) { return min_max(v1, v2, v3 ), v1 + v2 + v3 ;}
function min_max_add<T>(v1: T, v2: T, v3: T, v4: T) { return min_max(v1, v2, v3, v4), v1 + v2 + v3 + v4;}
function main(): int32
{
var min;
var max;
var added;
(min, max), added = min_max_add(1, 2, 3, 4);
// 'min' should be 1
// 'max' should be 4
// 'added' should be 10
return 0;
}
function min_max<T>(v1: T, v2: T)
{
if (v1 < v2)
return v1, v2;
else
return v2, v1;
}
function min_max<T>(v1: T, v2: T, v3: T)
{
var min;
var max;
min, max = min_max(v1, v2);
if (v3 < min)
return v3, max;
else if (max < v3)
return min, v3;
else
return min, max;
}
function min_max<T>(v1: T, v2: T, v3: T, v4: T)
{
var min;
var max;
min, max = min_max(v1, v2);
if (v3 < min)
return v3, max;
else if (max < v3)
return min, v3;
else
return min, max;
}
function min_max<T>(v1: T, v2: T)
{
if (v1 < v2)
return v1, v2;
else
return v2, v1;
}
function min_max<T>(v1: T, v2: T, v3: T)
{
var min;
var max;
min, max = min_max(v1, v2);
if (v3 < min)
return v3, max;
else if (max < v3)
return min, v3;
else
return min, max;
}
function min_max<T>(v1: T, v2: T, v3: T, v4: T)
{
var min_12;
var max_12;
var min_34;
var max_34;
min_12, max_12 = min_max(v1, v2);
min_34, max_34 = min_max(v3, v4);
var min;
var max;
min, max = min_12 < min_34 ? min_12 : min_34,
max_12 < max_34 ? max_34 : max_12;
return min, max;
}
function main(): int32
{
var v1 = 1;
var v2 = 2;
var v3 = 3;
var v4 = 4;
v1, v2 = v2, v1;
// v1 is 2
// v2 is 1
// v3 is 3
// v4 is 4
(v1, v2), (v3, v4) = (v4, v3), (v2, v1)
// v1 assign to v4
// v2 assign to v3
// v3 assign to v2
// v4 assign to v1
// v1 is 4
// v2 is 3
// v3 is 1
// v4 is 2
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment