- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
public static IEnumerable<Tuple<A1, A2, A3, A4>>
CrossProduct<A1, A2, A3, A4>
(IEnumerable<A1> arg1, IEnumerable<A2> arg2,
IEnumerable<A3> arg3, IEnumerable<A4> arg4)
{
foreach (var a1 in arg1)
foreach (var a2 in arg2)
foreach (var a3 in arg3)
foreach (var a4 in arg4)
yield return Make.Tuple(a1, a2, a3, a4);
}
На F# характерно обильное наличие FastFunc-ов и рефлектор обычно падает :-)
А если будет 5 -- то скопировать код ведь всегда легко!
И что такое "n ступенек"? n -- это же не число!
Я конечно завтра спрошу у Дениса Попова (он у нас в классе -- голова!), но скорее всего тут опечатка, потому что про n я не понял.
<pretrosyan>А ты, стало быть, жопа?</pretrosyan>
Юмор в том, что можно просто взять SelectMany и сделать сколько угодно раз.
соответственно
Если же тип одинаковый, и у нас есть операция t (*) x, скажем конкатенация, то можно и для любого n. Да-да.
последняя строчка выведет:
axA
axB
ayA
ayB
azA
azB
bxA
bxB
byA
byB
bzA
bzB
Естественно, количество элементов в xxx может быть любым ;-)