Advertisement
Guest User

Untitled

a guest
Oct 26th, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.86 KB | None | 0 0
  1. let rec eachindex (size : NTuple) =
  2.     let n = NTuple.getLength size
  3.     if n = 1 then
  4.         let x = NTuple.head size
  5.         <@@ seq { 0..%x-1 } @@>
  6.     else
  7.         let x = NTuple.head size
  8.         let xs = NTuple.tail size
  9.         let expr = eachindex xs
  10.  
  11.         let tupleType = NTuple.makeType n
  12.         let tupleTypePred = NTuple.makeType (n - 1)
  13.  
  14.         let init count initializer = callT tupleType <@@ Seq.init @@> [count; initializer]
  15.         let concatMap mapping source = callTR tupleTypePred tupleType <@@ Seq.concatMap @@> [mapping; source]
  16.        
  17.         expr |> concatMap (lambdaT tupleTypePred
  18.                     (fun smallTupleExpr ->
  19.                         let smallTuple = NTuple.fromExpr smallTupleExpr
  20.                         init x (lambda (fun i ->
  21.                             NTuple.append smallTuple i |> NTuple.toExpr) )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement