以递归方式对列表执行多个操作

时间:2014-01-11 16:43:10

标签: forms f#

如何在列表上递归执行操作?

具体来说,在我的情况下,我有一个带有元组结构的列表如下:

// ("name", (startX, startY), (endX, endY))

let list = 
[
    ("rectangle", (10, 10), (90, 90));
    ("ellipse", (30, 50), (40, 60));
    ("ellipse", (60, 50), (70, 60))
]

我想对“矩形”项目执行一个操作,对“椭圆”项目执行另一个操作。

2 个答案:

答案 0 :(得分:2)

一种简单的惯用方法是使用标准数据收集功能和组合器,而不是具有签名string*coord*coord -> (coord -> coord -> unit)的自定义“调度程序”功能,以及一组处理器功能,每种形状一个。即对于您的列表成员,对通信延续处理器的简单调度程序可能是:

let dispatcher = function
| (shape,startC,endC) when shape="rectangle" -> dorectangle startC endC
| (shape,startC,endC) when shape="ellipse" -> doellipse startC endC
| ...........
| _ -> failwith "Unknown shape"

其中doellipse是一个知道如何绘制椭圆等的处理器

然后你用它作为

[your list] |> List.iter dispatcher

答案 1 :(得分:0)

[list] |> List.filter (fun e -> (fst e) = "rectangle") |> List.iter actionRectangle
[list] |> List.filter (fun e -> (fst e) = "ellipse") |> List.iter actionEllipse