Advertisement
Guest User

Untitled

a guest
Feb 8th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.38 KB | None | 0 0
  1. open System
  2.  
  3. type Field =
  4.     | SimpleField of SimpleField
  5.     | Type of Type
  6.  
  7. and Type =
  8.     { Name: string
  9.       Fields: Field list }
  10.  
  11. and SimpleField =
  12.     { Name: string
  13.       Type: string }
  14.  
  15. type A = {
  16.     AS: A list
  17. }
  18.    
  19. let flattern a =
  20.     let rec loop a acc =
  21.         match a with
  22.         | { Fields = [] } -> acc
  23.         | { Fields = list } ->
  24.             let types =
  25.                 list
  26.                 |> List.map(function Type x -> Some { Name = x.Name; Fields = x.Fields } | _ -> None)
  27.                 |> List.choose id
  28.            
  29.             match types with
  30.             | [] -> acc
  31.             | x::xs -> loop ({ Name = ""; Fields = xs |> List.map (Type) }) (loop x (x::acc))
  32.  
  33.     loop a [a]
  34.  
  35. let flattern2 aObj =
  36.     let rec loop aObj cont =
  37.         match aObj with
  38.         | { AS = [] } -> cont []
  39.         | { AS = x::xs } ->
  40.             loop { AS = xs } (fun acc -> loop x (fun q -> cont ([x] @ q @ acc)))
  41.  
  42.     aObj :: loop aObj id
  43.  
  44. let sum1 n =
  45.   let rec f n cont =
  46.     match n with
  47.     | 1 -> cont 1
  48.     | n -> f (n-1) (fun n1->cont(n+n1))
  49.   f n id
  50.  
  51. [<EntryPoint>]
  52. let main argv =
  53.  
  54.     let test = sum1 3
  55.  
  56.     let types =
  57.         { Name = "Root"
  58.           Fields = [
  59.             Type { Name = "PersonalData"; Fields = [
  60.                         SimpleField { Name = "email"; Type = "string" }
  61.                         Type { Name = "Address"; Fields = [
  62.                                 SimpleField { Name = "id"; Type = "string" }
  63.                              ] }
  64.                    ] }
  65.             SimpleField { Name = "name"; Type = "string" }
  66.             SimpleField { Name = "lastName"; Type = "string" }
  67.             Type { Name = "Address"; Fields = [
  68.                         SimpleField { Name = "address1"; Type = "string" }
  69.                         SimpleField { Name = "address2"; Type = "string" }
  70.                         SimpleField { Name = "zipcode"; Type = "int" }
  71.                   ] }
  72.           ] }
  73.    
  74.     let a = {
  75.             AS = [
  76.                         { AS = [
  77.                                  { AS = [] }
  78.                                 ] }
  79.                         { AS = [{ AS = [] }] }
  80.                     ]            
  81.             }
  82.  
  83.     let a2 = {
  84.          AS = [
  85.                  ]            
  86.          }
  87.  
  88.     let test1 = flattern types
  89.        
  90.  
  91.     Console.ReadKey() |> ignore
  92.     0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement