# HG changeset patch # User William Morgan # Date 1376039697 25200 # Node ID 8e1d9b0aca1f14b0ebdc70510f2131d766f1e53b # Parent 79c1db5e7ebdc1ea7844e8ffc0a3df65838b5e67# Parent 0ccebdbc3e804517f622d2f9c8202094c614bab9 merge diff -r 79c1db5e7ebd -r 8e1d9b0aca1f src/bv.tp --- a/src/bv.tp Fri Aug 09 01:44:16 2013 -0700 +++ b/src/bv.tp Fri Aug 09 02:14:57 2013 -0700 @@ -116,7 +116,7 @@ fold:with:startingAt <- :toFold :fun :startAcc { #{ string <- { - "(fold " . (string: toFold) . " " . (string: startAcc) . "(lambda (val acc) " . (string: fun) . "))" + "(fold " . (string: toFold) . " " . (string: startAcc) . " (lambda (val acc) " . (string: fun) . "))" } eval <- { _acc <- (eval: startAcc) @@ -162,7 +162,7 @@ allOfSize:inFold? <- :n :infold? { if: n = 1 { res <- #[one zero input] - if: infold? { + if: infold? = 2 { res append: acc res append: val } @@ -192,13 +192,57 @@ } numLeft <- numLeft + 1 } + if: n > 3 { + numLeft <- 1 + limitLeft <- n - 2 + while: { numLeft < limitLeft } do: { + numMid <- 1 + limitMid <- n - (1 + numLeft) + while: { numMid < limitMid } do: { + numRight <- n - (1 + numLeft + numMid) + choicesRight <- (allOfSize: numRight inFold?: infold?) + choicesMid <- (allOfSize: numMid inFold?: infold?) + foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { + foreach: choicesMid :idx midExp { + foreach: choicesRight :idx rightExp { + res append: (if0: leftExp then: midExp else: rightExp) + } + } + } + numMid <- numMid + 1 + } + numLeft <- numLeft + 1 + } + if: n > 4 && infold? = 0 { + numSeq <- 1 + limitSeq <- n - 3 + while: { numSeq < limitSeq } do: { + numFun <- 1 + limitFun <- n - (2 + numSeq) + while: { numFun < limitFun } do: { + numStart <- n - (2 + numSeq + numFun) + choicesStart <- (allOfSize: numStart inFold?: 1) + choicesFun <- (allOfSize: numFun inFold?: 2) + foreach: (allOfSize: numSeq inFold?: 1) :idx seqExp { + foreach: choicesFun :idx funExp { + foreach: choicesStart :idx startExp { + res append: (fold: seqExp with: funExp startingAt: startExp) + } + } + } + numFun <- numFun + 1 + } + numSeq <- numSeq + 1 + } + } + } } res } } allOfSize <- :n { - allOfSize: n inFold?: false + allOfSize: (n - 1) inFold?: 0 } } } @@ -213,13 +257,20 @@ } } - main <- { + main <- :args { test: (program gentestprog) test: (program exampleprog) - prog <- program - foreach: (prog allOfSize: 3) :idx tree { - prog root! tree - test: prog + size <- 3 + if: (args length) > 1 { + size <- int32: (args get: 1) } + if: size >= 2 { + prog <- program + foreach: (prog allOfSize: size) :idx tree { + prog root! tree + test: prog + } + } + 0 } }