как создать seq<seq> значение

#f#

#f#

Вопрос:

Предположим, что существует a NxN board , я хочу создать a seq<seq<int*int>> , содержащий все строки на доске. Я не могу использовать изменяемую переменную. Например, вход N равен 2, на выходе будет:

 seq [seq[(0,0);(0,1)];seq[(1,0);(1,1)];seq[(0,0);
(1,0)];seq[(0,1);(1,1)];seq[(0,0);(1,1)];seq[(0,1);(1,0)]]
  

На доске есть шесть линий, включая горизонтальные, вертикальные и диагональные линии.

 let f (n:int) : seq<seq<int*int>> =    
    let seq1 = seq{ for x in 0 .. n-1 do yield 0,x}
    ...
  

Я могу создать одну строку. Я не могу объединить все строки в seq[] с помощью цикла.

 let loop = 
    for j in 0 .. n-1 do
        let seq1 (j:int) = seq{ for x in 0 .. n-1 do yield j,x}
  

У меня есть идея использовать цикл for для создания строк. Но я понятия не имею, как сохранить значение seq1 и объединить с новым значением seq1.

Комментарии:

1. Привет @samsam_rabbit. Добро пожаловать. У вас гораздо больше шансов получить ответ, если вы попытаетесь что-то внедрить и поделитесь тем, что вы пробовали и с какой проблемой столкнулись. Пожалуйста, решите эту проблему для меня, это редко хорошо воспринимается.

Ответ №1:

Существует более одного способа сделать это, но мне нравится seq конструктор:

 let positions = 
  seq {
    for x in 0..10 do
      for y in 0..10 do
        yield (x, y)
  }