Вы получаете эту ошибку, потому что вы забыли передать x
в качестве аргумента Seq.toList
в лямбда-функции, переданной Seq.map
. Следующее работает отлично:
CoordinateLines 3 |> Seq.map (fun x ->Seq.toList x) |> Seq.toList
Кроме того, вы также можете использовать Seq.toList
непосредственно в качестве аргумента Seq.map
:
CoordinateLines 3 |> Seq.map Seq.toList |> Seq.toList
Тем не менее, я не вижу причин для преобразования списков в seq<'a>
- тип списка уже реализует интерфейс seq<'a>
, поэтому все, что вы хотите сделать с последовательностями, будет также работать со списками. А так как вы уже генерируете полностью оцененные списки, на самом деле может оказаться, что вы можете написать некоторую последующую логику более красиво, используя списки.
Если бы я делал это, я бы просто написал функцию, которая возвращает список списков. Вы также можете использовать
[ for <var> in <range> -> <expr> ]
нотация (которая позволяет вам опустить некоторые yield
ключевые слова), и вы можете избежать использования @
, поместив весь код, который генерирует вложенный список, в один большой [ .. ]
блок с несколькими вложенными for
s и yield
s. Это делает ваш код немного короче:
let CoordinateLines size =
[ for a in 0..(size-1) ->
[ for b in 0..(size-1) -> (a,b) ]
for a in 0..(size-1) ->
[ for b in 0..(size-1) -> (b,a) ]
yield [ for a in 0..(size-1) -> (a,(size-1)-a) ]
yield [ for a in 0..(size-1) -> (a,a) ] ]