2015-05-08 3 views
1

Здравствуйте, мой вопрос о выражениях списка в F #. Я пытаюсь создать запись, которая будет храниться в списке. Я хочу, чтобы запись Point в записи Square обновилась с 1-9. Чтобы понять, что я имею в виду, когда вы пишете let example = [1 .. 1 .. 9] и получите: val example : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]. Здесь я хочу, чтобы Point в записи Square изменится с pos = {x=1; y=1} и получит все 9 квадратов с очками x=1; y=1 до x=9; y=9.F # список записей выражения

type Point = {x : int; y : int} 
type Square = {pos : Point; side : int; X : int} //A square got a position, a side length and a value 

let defaultSquare = { pos = {x=1; y=1}; side = 10; X = 0 } 

let spelplan = [{defaultSquare with pos = {x=1; y=1}} .. {defaultSquare with pos = {x=9; y=9}}] 

Я пробовал код выше, я также пробовал.

let spelplan = [{defaultSquare with pos = {x=1; y=1}} .. {defaultSquare with pos = {x=1; y=1}} .. {defaultSquare with pos = {x=9; y=9}}] 

Затем я получаю сообщение об ошибке, что он не поддерживает оператор +.

Я уже прочитал this и this

ответ

1

Причина ваш код не работает, как вы ожидаете в том, что F # не знаю, как перечислить ваши Square с - вы могли бы попробовать реализовать + и прочее но вместо этого я бы просто создать позиции (с использованием указанного list expressions), а затем отобразить их в Square list:

let fromPos size v x y = 
    { pos = {x=x; y=y} 
    ; side = size 
    ; X = v 
    } 

[for y in 1..9 do for x in 1..9 -> fromPos 10 0 x y] 

в качестве альтернативы вы можете сделать

[for y in 1..9 do for x in 1..9 -> (x,y)] 
|> List.map (fun (x,y) -> fromPos 10 0 x y) 

и конечно

Единственная интересная вещь здесь surley путь я произвожу позиции - вы можете обобщить так:

let positions width height = 
    [ for y in 1..height do for x in 1..width -> (x,y) ] 

, который будет производить список (x,y) - кортежи от (1,1) до (width,height)

+0

Большое спасибо за отличный ответ! Это было именно то, что мне было интересно, и я чувствую, что понимаю еще больше этого замечательного языка. –

Смежные вопросы