Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type Name = string;;
- type Sex = | M // male
- | F // female
- type YearOfBirth = int;;
- type FamilyTree = P of Name * Sex * YearOfBirth * Children
- and Children = FamilyTree list
- let fred = P("Fred",M,1970,[])
- let joan = P("Joan",F,1975,[])
- let may = P("May",F,1945,[fred;joan])
- let stanley = P("Stanley",M,1975,[])
- let peter = P("Peter",M,2005,[])
- let bob = P("Bob",M,2008,[])
- let eve = P("Eve",F,2010,[])
- let mary = P("Mary",F,1980,[peter;bob;eve])
- let jane = P("Jane",F,1985,[])
- let joe = P("Joe",M,1950,[stanley;mary;jane])
- let paul = P("Paul",M,1955,[])
- let larry = P("Larry",M,1920,[may;joe;paul])
- let findN p tree =
- let rec findInner t =
- match t with
- | P(n,_,_,_) when p(n) -> Some(t)
- | P(_,_,_,children) -> children |> List.choose (findInner)
- |> List.tryFind(fun _ -> true)
- | P(_,_,_,[]) -> None
- findInner tree
- let test34 = findN (fun n -> n = "May") larry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement