F# 记录列表表达式
F# record list expressions
您好,我的问题是关于 F# 中的列表表达式。我尝试创建一个将存储在列表中的记录。我希望 Square
记录中的 Point
记录从 1-9 更新。
弄清楚我的意思,就像你写 let example = [1 .. 1 .. 9]
并得到:val example : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]
一样。在这里,我希望 Square
记录中的 Point
从 pos = {x=1; y=1}
更改,并得到点数为 x=1; y=1
的所有 9 个正方形 x=9; y=9
。
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}}]
然后我收到一条错误消息,提示它不支持 +
运算符。
您的代码无法按预期工作的原因是,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)
当然还有
这里唯一有趣的是我产生位置的方式 - 你可以这样概括它:
let positions width height =
[ for y in 1..height do for x in 1..width -> (x,y) ]
这将生成从 (1,1)
到 (width,height)
的 (x,y)
元组列表
您好,我的问题是关于 F# 中的列表表达式。我尝试创建一个将存储在列表中的记录。我希望 Square
记录中的 Point
记录从 1-9 更新。
弄清楚我的意思,就像你写 let example = [1 .. 1 .. 9]
并得到:val example : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]
一样。在这里,我希望 Square
记录中的 Point
从 pos = {x=1; y=1}
更改,并得到点数为 x=1; y=1
的所有 9 个正方形 x=9; y=9
。
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}}]
然后我收到一条错误消息,提示它不支持 +
运算符。
您的代码无法按预期工作的原因是,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)
当然还有
这里唯一有趣的是我产生位置的方式 - 你可以这样概括它:
let positions width height =
[ for y in 1..height do for x in 1..width -> (x,y) ]
这将生成从 (1,1)
到 (width,height)
(x,y)
元组列表