我有几点要转换为线。例如[{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=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)
所以我的问题是,有没有一种单行的或惯用的方式来实现同一件事?
答案 0 :(得分:2)
您可以这样写,以获得更惯用的F#:
let rec pointsToLines points =
let rec loop lines points =
match points with
| x::y::rest -> loop ((x,y)::lines) rest
| _ -> lines
loop [] points
但是,这已经是您怀疑的内置功能之一:
List.pairwise
两者都会给您相同的结果。