Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 在fsharp中将点转换为线_F# - Fatal编程技术网

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)
为什么会有随机的否决票?我的问题以一种清晰的方式陈述,并显示了我试图解决的问题。如果你认为有什么不对劲,请在评论部分说明。为什么随机投反对票?我的问题以一种清晰的方式陈述,并显示了我试图解决的问题。如果您认为有问题,请在评论部分说明。