F# 在fsharp中将点转换为线
我有几个点要转换成直线。例如,F# 在fsharp中将点转换为线,f#,F#,我有几个点要转换成直线。例如,[{x=0;y=0};{x=1;y=1};{x=2;y=2};{x=3;y3}]应该转换为[({x=0;y=0},{x=1;y=1};({x=1;y=1},{x=2;y=2}),{x=3;y=3}) 我目前的做法是: type Point = { x: int; y: int } type Line = Point * Point let rec pointsToLines lines points = if (List.length points) &
[{x=0;y=0};{x=1;y=1};{x=2;y=2};{x=3;y3}]
应该转换为[({x=0;y=0},{x=1;y=1};({x=1;y=1},{x=2;y=2}),{x=3;y=3})
我目前的做法是:
type Point = { x: int; y: int }
type Line = Point * Point
let rec pointsToLines lines points =
if (List.length points) < 2 then
lines
else
let line = points.[1], points.[0]
let lines = line :: lines
pointsToLines lines (List.tail points)
type Point={x:int;y:int}
类型线=点*点
让rec points为点划线=
如果(列出长度点)<2,则
线
其他的
设直线=点[1],点[0]
让线=线::线
点线条(List.tail points)
所以我的问题是,有没有一条直线或一种惯用的方法来实现同样的目标?你可以这样写,以获得更惯用的F#: 但是,这已经是您怀疑的内置功能之一:
List.pairwise
这两种方法都会得到相同的结果。你可以这样写,以获得更为惯用的F: 但是,这已经是您怀疑的内置功能之一:
List.pairwise
这两种方法都会得到相同的结果。为了获得与列表相同的效果,我将第4行更改为
|x::y::rest->loop((x,y)::lines)(y::rest)
并将第6行更改为List.rev(loop[]points)
为了达到与List.pairwise相同的效果,我将第4行更改为|x::y::rest->loop((x,y)::lines)(y::rest)
并将第6行更改为List.rev(loop[]points)
为什么会有随机的否决票?我的问题以一种清晰的方式陈述,并显示了我试图解决的问题。如果你认为有什么不对劲,请在评论部分说明。为什么随机投反对票?我的问题以一种清晰的方式陈述,并显示了我试图解决的问题。如果您认为有问题,请在评论部分说明。