Advertisement
Guest User

Untitled

a guest
Feb 26th, 2013
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.79 KB | None | 0 0
  1. let rec _trace2 (sg : SectionGraph) (starting : Vertex) (section : Section)
  2.                     acc successp filterp stopp =
  3.         match section.elements
  4.                 |> List.filter (fun el -> vEq el starting |> not)
  5.                 |> List.tryFind (fun el -> successp section el) with
  6.         | Some (el) ->
  7.             [((section, Some(el)) :: acc)]
  8.         | None ->
  9.             let outs =
  10.                 match acc with
  11.                 | (s,_) :: _ -> sg.outSectionsWrs (section, s)
  12.                 | _ -> sg.outSections (section)
  13.                         |> List.filter
  14.                             (fun (s : Section) ->
  15.                                 not (s.have_element (fun a -> vEq a starting)))
  16.             outs                
  17.                 |> List.filter
  18.                     (fun (s : Section) ->
  19.                         filterp s
  20.                             && not(s.elements |> List.exists (fun e -> vEq e starting))
  21.                                 && not(acc |> List.exists (fun (ex,_) -> ex.id = s.id)))
  22.                 |> List.collect
  23.                     (fun s ->
  24.                         _trace2 sg starting s ((section, None) :: acc)  
  25.                             successp filterp stopp)
  26.  
  27. member x.trace2 id successp filterp stopp =
  28.         let start_v = x.vertices |> List.find (fun el -> el.Id.OriginalId = id)
  29.         let sections =
  30.             x.sections
  31.                 |> List.filter (fun s -> s.have_element (fun el -> vEq el start_v))
  32.                 |> List.filter
  33.                     (fun s ->
  34.                         let el = s.outermostElement start_v
  35.                         GraphExtensions.in_one_coursep start_v el)
  36.         sections
  37.             |> List.collect
  38.                 (fun s -> _trace2 x start_v s [] successp filterp stopp)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement