changeset 8:3f0172ceab81

Add support for generating programs with if0, thus allowing us to generate all programs up to size 5.
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Aug 2013 00:47:29 -0700
parents 301f16245955
children 0ccebdbc3e80
files src/bv.tp
diffstat 1 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/bv.tp	Fri Aug 09 00:01:05 2013 -0700
+++ b/src/bv.tp	Fri Aug 09 00:47:29 2013 -0700
@@ -192,13 +192,35 @@
 							}
 							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
+							}
+						}
 					}
 					res
 				}
 			}
 
 			allOfSize <- :n {
-				allOfSize: n inFold?: false
+				allOfSize: (n - 1) inFold?: false
 			}
 		}
 	}
@@ -217,7 +239,7 @@
 		test: (program gentestprog)
 		test: (program exampleprog)
 		prog <- program
-		foreach: (prog allOfSize: 3) :idx tree {
+		foreach: (prog allOfSize: 5) :idx tree {
 			prog root! tree
 			test: prog
 		}