From a56343f58cb88deee99893b771ab3289ce798bda Mon Sep 17 00:00:00 2001 From: linux Date: Sat, 20 Jul 2013 22:40:19 +0100 Subject: [PATCH 01/57] Adding fix for case where function is self recursive and uses let keyword --- src/shen/Shen.java | 13 +++++++-- test/shen/SmokeTest.java | 60 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/shen/Shen.java b/src/shen/Shen.java index 9bed24d..72cbcf3 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -828,7 +828,9 @@ public static Object link(MutableCallSite site, String name, Object... args) thr site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); } Object result = match.invokeWithArguments(args); - maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + try{ + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + }catch(Exception e){ } return result; } @@ -920,6 +922,9 @@ static MethodHandle guard(MethodType type, List candidates) { MethodHandle target = candidates.get(i - 1); Class differentType = find(target.type().parameterList(), fallback.type().parameterList(), (x, y) -> !x.equals(y)); int firstDifferent = target.type().parameterList().indexOf(differentType); + if(firstDifferent == -1){ + firstDifferent = 0; + } debug("switching on %d argument type %s", firstDifferent, differentType); debug("target: %s ; fallback: %s", target, fallback); MethodHandle test = checkClass.bindTo(differentType); @@ -938,7 +943,11 @@ static List bestMatchingMethods(MethodType type, List xClass, Object x) { - return canCastStrict(x.getClass(), xClass); + if(xClass != null){ + return canCastStrict(x.getClass(), xClass); + }else{ + return false; + } } static MethodHandle relinkOn(Class exception, MethodHandle fn, MethodHandle fallback) { diff --git a/test/shen/SmokeTest.java b/test/shen/SmokeTest.java index 6f15271..c4c9df8 100644 --- a/test/shen/SmokeTest.java +++ b/test/shen/SmokeTest.java @@ -3,9 +3,15 @@ import org.junit.Test; import java.util.LinkedList; +import java.util.List; import static java.lang.System.out; import static java.util.Arrays.asList; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; +import static shen.Shen.Numbers.asNumber; +import static shen.Shen.Numbers.isInteger; import static shen.Shen.Primitives.*; import static shen.Shen.eval; @@ -108,4 +114,58 @@ public void compiler() throws Throwable { out.println(eval("(if (<= 3 3) x y)")); out.println(eval("(eval-kl (cons + (cons 1 (cons 2 ()))))")); } + + /* + This tests a function which is recursive and which uses the let keyword. e.g. + + (define funcLetAndRecurse + X -> (let Z (- X 1) + (if (= Z 1) (* 3 X) (funcLetAndRecurse Z)) + ) + ) + + This function returns 6 + + In the function below we use the Klambda code which is : + + (defun funcLetAndRecurse (V503) (let Z (- V503 1) (if (= Z 1) (* 3 V503) (funcLetAndRecurse Z)))) + */ + @Test + public void other() throws Throwable { + String funcDef1 = "(defun funcLetAndRecurse (V503) (let Z (- V503 1) (if (= Z 1) (* 3 V503) (funcLetAndRecurse Z))))"; + String funcCall = "(funcLetAndRecurse 10)"; + + //tests that let and recurse works fine when combined together + eval(funcDef1); + is(6L, funcCall); + + //tests that second call gives same answer as first + is(6L, funcCall); + + //this tests that redefinition works + String funcDef2 = " (defun funcLetAndRecurse (V503) (let Z (- V503 1) (if (= Z 1) (* 2 V503) (funcLetAndRecurse Z))))"; + eval(funcDef2); + is(4L, funcCall); + } + + void is(Object expected, String actual) { + Object 神 = 神(actual); + if (expected instanceof Class) + if (expected == Double.class) assertThat(isInteger((Long) 神), equalTo(false)); + else assertThat(神, instanceOf((Class) expected)); + else if (神 instanceof Long) + assertThat(asNumber((Long) 神), equalTo(expected)); + else if (神 instanceof Shen.Cons && expected instanceof List) + assertThat(((Shen.Cons) 神).toList(), equalTo(expected)); + else + assertThat(神, equalTo(expected)); + } + + Object 神(String shen) { + try { + return eval(shen); + } catch (Throwable t) { + throw new RuntimeException(t); + } + } } From 512f5723eebb58759e14f73e299150cea4b81f7d Mon Sep 17 00:00:00 2001 From: linux Date: Sat, 20 Jul 2013 22:52:14 +0100 Subject: [PATCH 02/57] adding build script for windows --- buildAndRunWindows.bat | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 buildAndRunWindows.bat diff --git a/buildAndRunWindows.bat b/buildAndRunWindows.bat new file mode 100755 index 0000000..9ec6247 --- /dev/null +++ b/buildAndRunWindows.bat @@ -0,0 +1,23 @@ +@echo off + +set "JAVA_HOME=C:\Program Files\lambda-8-b99-windows-i586-14_jul_2013\jdk1.8.0" +set "MAVEN_HOME=C:\Program Files\maven\apache-maven-2.2.1" + +IF NOT EXIST "%JAVA_HOME%" ( + echo "%JAVA_HOME% does not exist" + EXIT /B +) + +IF NOT EXIST "%MAVEN_HOME%" ( + echo "%MAVEN_HOME% does not exist" + EXIT /B +) + +IF EXIST "./target/shen.java-0.1.0-SNAPSHOT.jar" ( + echo "Project has been already been build. See ./target directory" +) ELSE ( + echo "Building project" + "%MAVEN_HOME%\bin\mvn.bat" package +) + +"%JAVA_HOME%\bin\java" -Xss1000K -jar target/shen.java-0.1.0-SNAPSHOT.jar From 3aad872425275c7afacefbc52279c91d55781654 Mon Sep 17 00:00:00 2001 From: linux Date: Mon, 12 Aug 2013 12:11:30 +0100 Subject: [PATCH 03/57] jdk1.8.0-b102 : updating to Shen 13.1 --- shen/klambda/declarations.kl | 2 +- shen/klambda/load.kl | 2 +- shen/klambda/t-star.kl | 100 ++++++++++++++++++----------------- shen/klambda/toplevel.kl | 2 +- shen/src/declarations.shen | 2 +- shen/src/load.shen | 2 +- shen/src/t-star.shen | 10 ++-- shen/src/toplevel.shen | 2 +- 8 files changed, 64 insertions(+), 58 deletions(-) diff --git a/shen/klambda/declarations.kl b/shen/klambda/declarations.kl index 22daf57..eb8fc98 100644 --- a/shen/klambda/declarations.kl +++ b/shen/klambda/declarations.kl @@ -113,7 +113,7 @@ (defun arity (V821) (trap-error (get V821 arity (value *property-vector*)) (lambda E -1))) -(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons intersection (cons 2 (cons kill (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons package (cons 3 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons shen.sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 1 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 1 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons intersection (cons 2 (cons kill (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons package (cons 3 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons shen.sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 1 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (defun systemf (V822) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V822 External) (value *property-vector*))))) diff --git a/shen/klambda/load.kl b/shen/klambda/load.kl index d526d93..28f3718 100644 --- a/shen/klambda/load.kl +++ b/shen/klambda/load.kl @@ -74,7 +74,7 @@ typechecked in " (shen.app (inferences) " inferences (defun shen. (V864) (let Result (let Parse_shen. (shen. V864) (if (not (= (fail) Parse_shen.)) (let Parse_ ( Parse_shen.) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun write-to-file (V865 V866) (let Stream (open file V865 out) (let String (if (string? V866) (shen.app V866 " +(defun write-to-file (V865 V866) (let Stream (open V865 out) (let String (if (string? V866) (shen.app V866 " " shen.a) (shen.app V866 " diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index 3c36736..d38fe4a 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,115 +47,117 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2829 V2830) (let Curry (shen.curry V2829) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2830)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2822 V2823) (let Curry (shen.curry V2822) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2823)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2831) (cond ((and (cons? V2831) (shen.special? (hd V2831))) (cons (hd V2831) (map shen.curry (tl V2831)))) ((and (cons? V2831) (and (cons? (tl V2831)) (shen.extraspecial? (hd V2831)))) V2831) ((and (cons? V2831) (and (cons? (tl V2831)) (cons? (tl (tl V2831))))) (shen.curry (cons (cons (hd V2831) (cons (hd (tl V2831)) ())) (tl (tl V2831))))) ((and (cons? V2831) (and (cons? (tl V2831)) (= () (tl (tl V2831))))) (cons (shen.curry (hd V2831)) (cons (shen.curry (hd (tl V2831))) ()))) (true V2831))) +(defun shen.curry (V2824) (cond ((and (cons? V2824) (shen.special? (hd V2824))) (cons (hd V2824) (map shen.curry (tl V2824)))) ((and (cons? V2824) (and (cons? (tl V2824)) (shen.extraspecial? (hd V2824)))) V2824) ((and (cons? V2824) (and (cons? (tl V2824)) (cons? (tl (tl V2824))))) (shen.curry (cons (cons (hd V2824) (cons (hd (tl V2824)) ())) (tl (tl V2824))))) ((and (cons? V2824) (and (cons? (tl V2824)) (= () (tl (tl V2824))))) (cons (shen.curry (hd V2824)) (cons (shen.curry (hd (tl V2824))) ()))) (true V2824))) -(defun shen.special? (V2832) (element? V2832 (value shen.*special*))) +(defun shen.special? (V2825) (element? V2825 (value shen.*special*))) -(defun shen.extraspecial? (V2833) (element? V2833 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2826) (element? V2826 (value shen.*extraspecial*))) -(defun shen.t* (V2834 V2835 V2836 V2837) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2836) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2836 (freeze (bind Error (shen.errormaxinfs) V2836 V2837))))) (if (= Case false) (let Case (let V2823 (shen.lazyderef V2834 V2836) (if (= fail V2823) (do (shen.incinfs) (cut Throwcontrol V2836 (freeze (shen.prolog-failure V2836 V2837)))) false)) (if (= Case false) (let Case (let V2824 (shen.lazyderef V2834 V2836) (if (cons? V2824) (let X (hd V2824) (let V2825 (shen.lazyderef (tl V2824) V2836) (if (cons? V2825) (let V2826 (shen.lazyderef (hd V2825) V2836) (if (= : V2826) (let V2827 (shen.lazyderef (tl V2825) V2836) (if (cons? V2827) (let A (hd V2827) (let V2828 (shen.lazyderef (tl V2827) V2836) (if (= () V2828) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2836 (freeze (cut Throwcontrol V2836 (freeze (shen.th* X A V2835 V2836 V2837)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2836) (do (shen.incinfs) (shen.show V2834 V2835 V2836 (freeze (bind Datatypes (value shen.*datatypes*) V2836 (freeze (shen.udefs* V2834 V2835 Datatypes V2836 V2837))))))) Case)) Case)) Case))))) +(defun shen.t* (V2827 V2828 V2829 V2830) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2829) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2829 (freeze (bind Error (shen.errormaxinfs) V2829 V2830))))) (if (= Case false) (let Case (let V2816 (shen.lazyderef V2827 V2829) (if (= fail V2816) (do (shen.incinfs) (cut Throwcontrol V2829 (freeze (shen.prolog-failure V2829 V2830)))) false)) (if (= Case false) (let Case (let V2817 (shen.lazyderef V2827 V2829) (if (cons? V2817) (let X (hd V2817) (let V2818 (shen.lazyderef (tl V2817) V2829) (if (cons? V2818) (let V2819 (shen.lazyderef (hd V2818) V2829) (if (= : V2819) (let V2820 (shen.lazyderef (tl V2818) V2829) (if (cons? V2820) (let A (hd V2820) (let V2821 (shen.lazyderef (tl V2820) V2829) (if (= () V2821) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2829 (freeze (cut Throwcontrol V2829 (freeze (shen.th* X A V2828 V2829 V2830)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2829) (do (shen.incinfs) (shen.show V2827 V2828 V2829 (freeze (bind Datatypes (value shen.*datatypes*) V2829 (freeze (shen.udefs* V2827 V2828 Datatypes V2829 V2830))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2842) (cond ((= + V2842) (set shen.*shen-type-theory-enabled?* true)) ((= - V2842) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2835) (cond ((= + V2835) (set shen.*shen-type-theory-enabled?* true)) ((= - V2835) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2851 V2852) false) +(defun shen.prolog-failure (V2844 V2845) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2853 V2854 V2855 V2856 V2857) (let Case (let V2819 (shen.lazyderef V2855 V2856) (if (cons? V2819) (let D (hd V2819) (do (shen.incinfs) (call (cons D (cons V2853 (cons V2854 ()))) V2856 V2857))) false)) (if (= Case false) (let V2820 (shen.lazyderef V2855 V2856) (if (cons? V2820) (let Ds (tl V2820) (do (shen.incinfs) (shen.udefs* V2853 V2854 Ds V2856 V2857))) false)) Case))) +(defun shen.udefs* (V2846 V2847 V2848 V2849 V2850) (let Case (let V2812 (shen.lazyderef V2848 V2849) (if (cons? V2812) (let D (hd V2812) (do (shen.incinfs) (call (cons D (cons V2846 (cons V2847 ()))) V2849 V2850))) false)) (if (= Case false) (let V2813 (shen.lazyderef V2848 V2849) (if (cons? V2813) (let Ds (tl V2813) (do (shen.incinfs) (shen.udefs* V2846 V2847 Ds V2849 V2850))) false)) Case))) -(defun shen.th* (V2858 V2859 V2860 V2861 V2862) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2858 (cons : (cons V2859 ()))) V2860 V2861 (freeze (fwhen false V2861 V2862)))) (if (= Case false) (let Case (let F (shen.newpv V2861) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2858 V2861)) V2861 (freeze (bind F (shen.sigf (shen.lazyderef V2858 V2861)) V2861 (freeze (call (cons F (cons V2859 ())) V2861 V2862))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2858 V2859 V2861 V2862)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2858 V2859 V2860 V2861 V2862)) (if (= Case false) (let Case (let V2697 (shen.lazyderef V2858 V2861) (if (cons? V2697) (let F (hd V2697) (let V2698 (shen.lazyderef (tl V2697) V2861) (if (= () V2698) (do (shen.incinfs) (shen.th* F (cons --> (cons V2859 ())) V2860 V2861 V2862)) false))) false)) (if (= Case false) (let Case (let V2699 (shen.lazyderef V2858 V2861) (if (cons? V2699) (let F (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2861) (if (cons? V2700) (let X (hd V2700) (let V2701 (shen.lazyderef (tl V2700) V2861) (if (= () V2701) (let B (shen.newpv V2861) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2859 ()))) V2860 V2861 (freeze (shen.th* X B V2860 V2861 V2862))))) false))) false))) false)) (if (= Case false) (let Case (let V2702 (shen.lazyderef V2858 V2861) (if (cons? V2702) (let V2703 (shen.lazyderef (hd V2702) V2861) (if (= cons V2703) (let V2704 (shen.lazyderef (tl V2702) V2861) (if (cons? V2704) (let X (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2861) (if (cons? V2705) (let Y (hd V2705) (let V2706 (shen.lazyderef (tl V2705) V2861) (if (= () V2706) (let V2707 (shen.lazyderef V2859 V2861) (if (cons? V2707) (let V2708 (shen.lazyderef (hd V2707) V2861) (if (= list V2708) (let V2709 (shen.lazyderef (tl V2707) V2861) (if (cons? V2709) (let A (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2861) (if (= () V2710) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (if (shen.pvar? V2710) (do (shen.bindv V2710 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2710 V2861) Result))) false)))) (if (shen.pvar? V2709) (let A (shen.newpv V2861) (do (shen.bindv V2709 (cons A ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2709 V2861) Result)))) false))) (if (shen.pvar? V2708) (do (shen.bindv V2708 list V2861) (let Result (let V2711 (shen.lazyderef (tl V2707) V2861) (if (cons? V2711) (let A (hd V2711) (let V2712 (shen.lazyderef (tl V2711) V2861) (if (= () V2712) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (if (shen.pvar? V2712) (do (shen.bindv V2712 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2712 V2861) Result))) false)))) (if (shen.pvar? V2711) (let A (shen.newpv V2861) (do (shen.bindv V2711 (cons A ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2711 V2861) Result)))) false))) (do (shen.unbindv V2708 V2861) Result))) false))) (if (shen.pvar? V2707) (let A (shen.newpv V2861) (do (shen.bindv V2707 (cons list (cons A ())) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons list (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2707 V2861) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2713 (shen.lazyderef V2858 V2861) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2861) (if (= @p V2714) (let V2715 (shen.lazyderef (tl V2713) V2861) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2861) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2861) (if (= () V2717) (let V2718 (shen.lazyderef V2859 V2861) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2861) (if (cons? V2719) (let V2720 (shen.lazyderef (hd V2719) V2861) (if (= * V2720) (let V2721 (shen.lazyderef (tl V2719) V2861) (if (cons? V2721) (let B (hd V2721) (let V2722 (shen.lazyderef (tl V2721) V2861) (if (= () V2722) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (if (shen.pvar? V2722) (do (shen.bindv V2722 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2722 V2861) Result))) false)))) (if (shen.pvar? V2721) (let B (shen.newpv V2861) (do (shen.bindv V2721 (cons B ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2721 V2861) Result)))) false))) (if (shen.pvar? V2720) (do (shen.bindv V2720 * V2861) (let Result (let V2723 (shen.lazyderef (tl V2719) V2861) (if (cons? V2723) (let B (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2861) (if (= () V2724) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2724 V2861) Result))) false)))) (if (shen.pvar? V2723) (let B (shen.newpv V2861) (do (shen.bindv V2723 (cons B ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2723 V2861) Result)))) false))) (do (shen.unbindv V2720 V2861) Result))) false))) (if (shen.pvar? V2719) (let B (shen.newpv V2861) (do (shen.bindv V2719 (cons * (cons B ())) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2719 V2861) Result)))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2861) (let B (shen.newpv V2861) (do (shen.bindv V2718 (cons A (cons * (cons B ()))) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y B V2860 V2861 V2862)))) (do (shen.unbindv V2718 V2861) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2725 (shen.lazyderef V2858 V2861) (if (cons? V2725) (let V2726 (shen.lazyderef (hd V2725) V2861) (if (= @v V2726) (let V2727 (shen.lazyderef (tl V2725) V2861) (if (cons? V2727) (let X (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2861) (if (cons? V2728) (let Y (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2861) (if (= () V2729) (let V2730 (shen.lazyderef V2859 V2861) (if (cons? V2730) (let V2731 (shen.lazyderef (hd V2730) V2861) (if (= vector V2731) (let V2732 (shen.lazyderef (tl V2730) V2861) (if (cons? V2732) (let A (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2861) (if (= () V2733) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2733 V2861) Result))) false)))) (if (shen.pvar? V2732) (let A (shen.newpv V2861) (do (shen.bindv V2732 (cons A ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2732 V2861) Result)))) false))) (if (shen.pvar? V2731) (do (shen.bindv V2731 vector V2861) (let Result (let V2734 (shen.lazyderef (tl V2730) V2861) (if (cons? V2734) (let A (hd V2734) (let V2735 (shen.lazyderef (tl V2734) V2861) (if (= () V2735) (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (if (shen.pvar? V2735) (do (shen.bindv V2735 () V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2735 V2861) Result))) false)))) (if (shen.pvar? V2734) (let A (shen.newpv V2861) (do (shen.bindv V2734 (cons A ()) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2734 V2861) Result)))) false))) (do (shen.unbindv V2731 V2861) Result))) false))) (if (shen.pvar? V2730) (let A (shen.newpv V2861) (do (shen.bindv V2730 (cons vector (cons A ())) V2861) (let Result (do (shen.incinfs) (shen.th* X A V2860 V2861 (freeze (shen.th* Y (cons vector (cons A ())) V2860 V2861 V2862)))) (do (shen.unbindv V2730 V2861) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2736 (shen.lazyderef V2858 V2861) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2861) (if (= @s V2737) (let V2738 (shen.lazyderef (tl V2736) V2861) (if (cons? V2738) (let X (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2861) (if (cons? V2739) (let Y (hd V2739) (let V2740 (shen.lazyderef (tl V2739) V2861) (if (= () V2740) (let V2741 (shen.lazyderef V2859 V2861) (if (= string V2741) (do (shen.incinfs) (shen.th* X string V2860 V2861 (freeze (shen.th* Y string V2860 V2861 V2862)))) (if (shen.pvar? V2741) (do (shen.bindv V2741 string V2861) (let Result (do (shen.incinfs) (shen.th* X string V2860 V2861 (freeze (shen.th* Y string V2860 V2861 V2862)))) (do (shen.unbindv V2741 V2861) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2742 (shen.lazyderef V2858 V2861) (if (cons? V2742) (let V2743 (shen.lazyderef (hd V2742) V2861) (if (= lambda V2743) (let V2744 (shen.lazyderef (tl V2742) V2861) (if (cons? V2744) (let X (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2861) (if (cons? V2745) (let Y (hd V2745) (let V2746 (shen.lazyderef (tl V2745) V2861) (if (= () V2746) (let V2747 (shen.lazyderef V2859 V2861) (if (cons? V2747) (let A (hd V2747) (let V2748 (shen.lazyderef (tl V2747) V2861) (if (cons? V2748) (let V2749 (shen.lazyderef (hd V2748) V2861) (if (= --> V2749) (let V2750 (shen.lazyderef (tl V2748) V2861) (if (cons? V2750) (let B (hd V2750) (let V2751 (shen.lazyderef (tl V2750) V2861) (if (= () V2751) (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (if (shen.pvar? V2751) (do (shen.bindv V2751 () V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2751 V2861) Result))) false)))) (if (shen.pvar? V2750) (let B (shen.newpv V2861) (do (shen.bindv V2750 (cons B ()) V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2750 V2861) Result)))) false))) (if (shen.pvar? V2749) (do (shen.bindv V2749 --> V2861) (let Result (let V2752 (shen.lazyderef (tl V2748) V2861) (if (cons? V2752) (let B (hd V2752) (let V2753 (shen.lazyderef (tl V2752) V2861) (if (= () V2753) (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (if (shen.pvar? V2753) (do (shen.bindv V2753 () V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2753 V2861) Result))) false)))) (if (shen.pvar? V2752) (let B (shen.newpv V2861) (do (shen.bindv V2752 (cons B ()) V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2752 V2861) Result)))) false))) (do (shen.unbindv V2749 V2861) Result))) false))) (if (shen.pvar? V2748) (let B (shen.newpv V2861) (do (shen.bindv V2748 (cons --> (cons B ())) V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2748 V2861) Result)))) false)))) (if (shen.pvar? V2747) (let A (shen.newpv V2861) (let B (shen.newpv V2861) (do (shen.bindv V2747 (cons A (cons --> (cons B ()))) V2861) (let Result (let Z (shen.newpv V2861) (let X&& (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Y V2861)) V2861 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2860) V2861 V2862)))))))))) (do (shen.unbindv V2747 V2861) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2754 (shen.lazyderef V2858 V2861) (if (cons? V2754) (let V2755 (shen.lazyderef (hd V2754) V2861) (if (= let V2755) (let V2756 (shen.lazyderef (tl V2754) V2861) (if (cons? V2756) (let X (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2861) (if (cons? V2757) (let Y (hd V2757) (let V2758 (shen.lazyderef (tl V2757) V2861) (if (cons? V2758) (let Z (hd V2758) (let V2759 (shen.lazyderef (tl V2758) V2861) (if (= () V2759) (let W (shen.newpv V2861) (let X&& (shen.newpv V2861) (let B (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (shen.th* Y B V2860 V2861 (freeze (bind X&& (shen.placeholder) V2861 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2861) (shen.lazyderef X V2861) (shen.lazyderef Z V2861)) V2861 (freeze (shen.th* W V2859 (cons (cons X&& (cons : (cons B ()))) V2860) V2861 V2862))))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2760 (shen.lazyderef V2858 V2861) (if (cons? V2760) (let V2761 (shen.lazyderef (hd V2760) V2861) (if (= open V2761) (let V2762 (shen.lazyderef (tl V2760) V2861) (if (cons? V2762) (let FileName (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2861) (if (cons? V2763) (let Direction2693 (hd V2763) (let V2764 (shen.lazyderef (tl V2763) V2861) (if (= () V2764) (let V2765 (shen.lazyderef V2859 V2861) (if (cons? V2765) (let V2766 (shen.lazyderef (hd V2765) V2861) (if (= stream V2766) (let V2767 (shen.lazyderef (tl V2765) V2861) (if (cons? V2767) (let Direction (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2861) (if (= () V2768) (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (if (shen.pvar? V2768) (do (shen.bindv V2768 () V2861) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (do (shen.unbindv V2768 V2861) Result))) false)))) (if (shen.pvar? V2767) (let Direction (shen.newpv V2861) (do (shen.bindv V2767 (cons Direction ()) V2861) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (do (shen.unbindv V2767 V2861) Result)))) false))) (if (shen.pvar? V2766) (do (shen.bindv V2766 stream V2861) (let Result (let V2769 (shen.lazyderef (tl V2765) V2861) (if (cons? V2769) (let Direction (hd V2769) (let V2770 (shen.lazyderef (tl V2769) V2861) (if (= () V2770) (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (if (shen.pvar? V2770) (do (shen.bindv V2770 () V2861) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (do (shen.unbindv V2770 V2861) Result))) false)))) (if (shen.pvar? V2769) (let Direction (shen.newpv V2861) (do (shen.bindv V2769 (cons Direction ()) V2861) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (do (shen.unbindv V2769 V2861) Result)))) false))) (do (shen.unbindv V2766 V2861) Result))) false))) (if (shen.pvar? V2765) (let Direction (shen.newpv V2861) (do (shen.bindv V2765 (cons stream (cons Direction ())) V2861) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* FileName string V2860 V2861 V2862)))))) (do (shen.unbindv V2765 V2861) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2771 (shen.lazyderef V2858 V2861) (if (cons? V2771) (let V2772 (shen.lazyderef (hd V2771) V2861) (if (= type V2772) (let V2773 (shen.lazyderef (tl V2771) V2861) (if (cons? V2773) (let X (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2861) (if (cons? V2774) (let A (hd V2774) (let V2775 (shen.lazyderef (tl V2774) V2861) (if (= () V2775) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (unify A V2859 V2861 (freeze (shen.th* X A V2860 V2861 V2862)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2776 (shen.lazyderef V2858 V2861) (if (cons? V2776) (let V2777 (shen.lazyderef (hd V2776) V2861) (if (= input+ V2777) (let V2778 (shen.lazyderef (tl V2776) V2861) (if (cons? V2778) (let A (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2861) (if (cons? V2779) (let Stream (hd V2779) (let V2780 (shen.lazyderef (tl V2779) V2861) (if (= () V2780) (let C (shen.newpv V2861) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2861)) V2861 (freeze (unify V2859 C V2861 (freeze (shen.th* Stream (cons stream (cons in ())) V2860 V2861 V2862))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2781 (shen.lazyderef V2858 V2861) (if (cons? V2781) (let V2782 (shen.lazyderef (hd V2781) V2861) (if (= read+ V2782) (let V2783 (shen.lazyderef (tl V2781) V2861) (if (cons? V2783) (let V2784 (shen.lazyderef (hd V2783) V2861) (if (= : V2784) (let V2785 (shen.lazyderef (tl V2783) V2861) (if (cons? V2785) (let A (hd V2785) (let V2786 (shen.lazyderef (tl V2785) V2861) (if (cons? V2786) (let Stream (hd V2786) (let V2787 (shen.lazyderef (tl V2786) V2861) (if (= () V2787) (let C (shen.newpv V2861) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2861)) V2861 (freeze (unify V2859 C V2861 (freeze (shen.th* Stream (cons stream (cons in ())) V2860 V2861 V2862))))))) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2788 (shen.lazyderef V2858 V2861) (if (cons? V2788) (let V2789 (shen.lazyderef (hd V2788) V2861) (if (= set V2789) (let V2790 (shen.lazyderef (tl V2788) V2861) (if (cons? V2790) (let Var (hd V2790) (let V2791 (shen.lazyderef (tl V2790) V2861) (if (cons? V2791) (let Val (hd V2791) (let V2792 (shen.lazyderef (tl V2791) V2861) (if (= () V2792) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (shen.th* Var symbol V2860 V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* (cons value (cons Var ())) V2859 V2860 V2861 (freeze (shen.th* Val V2859 V2860 V2861 V2862)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2793 (shen.lazyderef V2858 V2861) (if (cons? V2793) (let V2794 (shen.lazyderef (hd V2793) V2861) (if (= shen.<-sem V2794) (let V2795 (shen.lazyderef (tl V2793) V2861) (if (cons? V2795) (let F (hd V2795) (let V2796 (shen.lazyderef (tl V2795) V2861) (if (= () V2796) (let A (shen.newpv V2861) (let F&& (shen.newpv V2861) (let B (shen.newpv V2861) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2860 V2861 (freeze (cut Throwcontrol V2861 (freeze (bind F&& (concat && (shen.lazyderef F V2861)) V2861 (freeze (cut Throwcontrol V2861 (freeze (shen.th* F&& V2859 (cons (cons F&& (cons : (cons B ()))) V2860) V2861 V2862))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2797 (shen.lazyderef V2858 V2861) (if (cons? V2797) (let V2798 (shen.lazyderef (hd V2797) V2861) (if (= fail V2798) (let V2799 (shen.lazyderef (tl V2797) V2861) (if (= () V2799) (let V2800 (shen.lazyderef V2859 V2861) (if (= symbol V2800) (do (shen.incinfs) (thaw V2862)) (if (shen.pvar? V2800) (do (shen.bindv V2800 symbol V2861) (let Result (do (shen.incinfs) (thaw V2862)) (do (shen.unbindv V2800 V2861) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2861) (do (shen.incinfs) (shen.t*-hyps V2860 NewHyp V2861 (freeze (shen.th* V2858 V2859 NewHyp V2861 V2862))))) (if (= Case false) (let Case (let V2801 (shen.lazyderef V2858 V2861) (if (cons? V2801) (let V2802 (shen.lazyderef (hd V2801) V2861) (if (= define V2802) (let V2803 (shen.lazyderef (tl V2801) V2861) (if (cons? V2803) (let F (hd V2803) (let X (tl V2803) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (shen.t*-def (cons define (cons F X)) V2859 V2860 V2861 V2862)))))) false)) false)) false)) (if (= Case false) (let Case (let V2804 (shen.lazyderef V2858 V2861) (if (cons? V2804) (let V2805 (shen.lazyderef (hd V2804) V2861) (if (= defcc V2805) (let V2806 (shen.lazyderef (tl V2804) V2861) (if (cons? V2806) (let F (hd V2806) (let X (tl V2806) (do (shen.incinfs) (cut Throwcontrol V2861 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2859 V2860 V2861 V2862)))))) false)) false)) false)) (if (= Case false) (let Case (let V2807 (shen.lazyderef V2858 V2861) (if (cons? V2807) (let V2808 (shen.lazyderef (hd V2807) V2861) (if (= defmacro V2808) (let V2809 (shen.lazyderef V2859 V2861) (if (= unit V2809) (do (shen.incinfs) (cut Throwcontrol V2861 V2862)) (if (shen.pvar? V2809) (do (shen.bindv V2809 unit V2861) (let Result (do (shen.incinfs) (cut Throwcontrol V2861 V2862)) (do (shen.unbindv V2809 V2861) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2810 (shen.lazyderef V2858 V2861) (if (cons? V2810) (let V2811 (shen.lazyderef (hd V2810) V2861) (if (= shen.process-datatype V2811) (let V2812 (shen.lazyderef V2859 V2861) (if (= symbol V2812) (do (shen.incinfs) (thaw V2862)) (if (shen.pvar? V2812) (do (shen.bindv V2812 symbol V2861) (let Result (do (shen.incinfs) (thaw V2862)) (do (shen.unbindv V2812 V2861) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2813 (shen.lazyderef V2858 V2861) (if (cons? V2813) (let V2814 (shen.lazyderef (hd V2813) V2861) (if (= shen.synonyms-help V2814) (let V2815 (shen.lazyderef V2859 V2861) (if (= symbol V2815) (do (shen.incinfs) (thaw V2862)) (if (shen.pvar? V2815) (do (shen.bindv V2815 symbol V2861) (let Result (do (shen.incinfs) (thaw V2862)) (do (shen.unbindv V2815 V2861) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2861) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2861 (freeze (shen.udefs* (cons V2858 (cons : (cons V2859 ()))) V2860 Datatypes V2861 V2862))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2851 V2852 V2853 V2854 V2855) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2851 (cons : (cons V2852 ()))) V2853 V2854 (freeze (fwhen false V2854 V2855)))) (if (= Case false) (let Case (let F (shen.newpv V2854) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2851 V2854)) V2854 (freeze (bind F (shen.sigf (shen.lazyderef V2851 V2854)) V2854 (freeze (call (cons F (cons V2852 ())) V2854 V2855))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2851 V2852 V2854 V2855)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2851 V2852 V2853 V2854 V2855)) (if (= Case false) (let Case (let V2697 (shen.lazyderef V2851 V2854) (if (cons? V2697) (let F (hd V2697) (let V2698 (shen.lazyderef (tl V2697) V2854) (if (= () V2698) (do (shen.incinfs) (shen.th* F (cons --> (cons V2852 ())) V2853 V2854 V2855)) false))) false)) (if (= Case false) (let Case (let V2699 (shen.lazyderef V2851 V2854) (if (cons? V2699) (let F (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2854) (if (cons? V2700) (let X (hd V2700) (let V2701 (shen.lazyderef (tl V2700) V2854) (if (= () V2701) (let B (shen.newpv V2854) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2852 ()))) V2853 V2854 (freeze (shen.th* X B V2853 V2854 V2855))))) false))) false))) false)) (if (= Case false) (let Case (let V2702 (shen.lazyderef V2851 V2854) (if (cons? V2702) (let V2703 (shen.lazyderef (hd V2702) V2854) (if (= cons V2703) (let V2704 (shen.lazyderef (tl V2702) V2854) (if (cons? V2704) (let X (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2854) (if (cons? V2705) (let Y (hd V2705) (let V2706 (shen.lazyderef (tl V2705) V2854) (if (= () V2706) (let V2707 (shen.lazyderef V2852 V2854) (if (cons? V2707) (let V2708 (shen.lazyderef (hd V2707) V2854) (if (= list V2708) (let V2709 (shen.lazyderef (tl V2707) V2854) (if (cons? V2709) (let A (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2854) (if (= () V2710) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2710) (do (shen.bindv V2710 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2710 V2854) Result))) false)))) (if (shen.pvar? V2709) (let A (shen.newpv V2854) (do (shen.bindv V2709 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2709 V2854) Result)))) false))) (if (shen.pvar? V2708) (do (shen.bindv V2708 list V2854) (let Result (let V2711 (shen.lazyderef (tl V2707) V2854) (if (cons? V2711) (let A (hd V2711) (let V2712 (shen.lazyderef (tl V2711) V2854) (if (= () V2712) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2712) (do (shen.bindv V2712 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2712 V2854) Result))) false)))) (if (shen.pvar? V2711) (let A (shen.newpv V2854) (do (shen.bindv V2711 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2711 V2854) Result)))) false))) (do (shen.unbindv V2708 V2854) Result))) false))) (if (shen.pvar? V2707) (let A (shen.newpv V2854) (do (shen.bindv V2707 (cons list (cons A ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2707 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2713 (shen.lazyderef V2851 V2854) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2854) (if (= @p V2714) (let V2715 (shen.lazyderef (tl V2713) V2854) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2854) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2854) (if (= () V2717) (let V2718 (shen.lazyderef V2852 V2854) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2854) (if (cons? V2719) (let V2720 (shen.lazyderef (hd V2719) V2854) (if (= * V2720) (let V2721 (shen.lazyderef (tl V2719) V2854) (if (cons? V2721) (let B (hd V2721) (let V2722 (shen.lazyderef (tl V2721) V2854) (if (= () V2722) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (if (shen.pvar? V2722) (do (shen.bindv V2722 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2722 V2854) Result))) false)))) (if (shen.pvar? V2721) (let B (shen.newpv V2854) (do (shen.bindv V2721 (cons B ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2721 V2854) Result)))) false))) (if (shen.pvar? V2720) (do (shen.bindv V2720 * V2854) (let Result (let V2723 (shen.lazyderef (tl V2719) V2854) (if (cons? V2723) (let B (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2854) (if (= () V2724) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2724 V2854) Result))) false)))) (if (shen.pvar? V2723) (let B (shen.newpv V2854) (do (shen.bindv V2723 (cons B ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2723 V2854) Result)))) false))) (do (shen.unbindv V2720 V2854) Result))) false))) (if (shen.pvar? V2719) (let B (shen.newpv V2854) (do (shen.bindv V2719 (cons * (cons B ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2719 V2854) Result)))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.bindv V2718 (cons A (cons * (cons B ()))) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2718 V2854) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2725 (shen.lazyderef V2851 V2854) (if (cons? V2725) (let V2726 (shen.lazyderef (hd V2725) V2854) (if (= @v V2726) (let V2727 (shen.lazyderef (tl V2725) V2854) (if (cons? V2727) (let X (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2854) (if (cons? V2728) (let Y (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2854) (if (= () V2729) (let V2730 (shen.lazyderef V2852 V2854) (if (cons? V2730) (let V2731 (shen.lazyderef (hd V2730) V2854) (if (= vector V2731) (let V2732 (shen.lazyderef (tl V2730) V2854) (if (cons? V2732) (let A (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2854) (if (= () V2733) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2733 V2854) Result))) false)))) (if (shen.pvar? V2732) (let A (shen.newpv V2854) (do (shen.bindv V2732 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2732 V2854) Result)))) false))) (if (shen.pvar? V2731) (do (shen.bindv V2731 vector V2854) (let Result (let V2734 (shen.lazyderef (tl V2730) V2854) (if (cons? V2734) (let A (hd V2734) (let V2735 (shen.lazyderef (tl V2734) V2854) (if (= () V2735) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2735) (do (shen.bindv V2735 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2735 V2854) Result))) false)))) (if (shen.pvar? V2734) (let A (shen.newpv V2854) (do (shen.bindv V2734 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2734 V2854) Result)))) false))) (do (shen.unbindv V2731 V2854) Result))) false))) (if (shen.pvar? V2730) (let A (shen.newpv V2854) (do (shen.bindv V2730 (cons vector (cons A ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2730 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2736 (shen.lazyderef V2851 V2854) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2854) (if (= @s V2737) (let V2738 (shen.lazyderef (tl V2736) V2854) (if (cons? V2738) (let X (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2854) (if (cons? V2739) (let Y (hd V2739) (let V2740 (shen.lazyderef (tl V2739) V2854) (if (= () V2740) (let V2741 (shen.lazyderef V2852 V2854) (if (= string V2741) (do (shen.incinfs) (shen.th* X string V2853 V2854 (freeze (shen.th* Y string V2853 V2854 V2855)))) (if (shen.pvar? V2741) (do (shen.bindv V2741 string V2854) (let Result (do (shen.incinfs) (shen.th* X string V2853 V2854 (freeze (shen.th* Y string V2853 V2854 V2855)))) (do (shen.unbindv V2741 V2854) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2742 (shen.lazyderef V2851 V2854) (if (cons? V2742) (let V2743 (shen.lazyderef (hd V2742) V2854) (if (= lambda V2743) (let V2744 (shen.lazyderef (tl V2742) V2854) (if (cons? V2744) (let X (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2854) (if (cons? V2745) (let Y (hd V2745) (let V2746 (shen.lazyderef (tl V2745) V2854) (if (= () V2746) (let V2747 (shen.lazyderef V2852 V2854) (if (cons? V2747) (let A (hd V2747) (let V2748 (shen.lazyderef (tl V2747) V2854) (if (cons? V2748) (let V2749 (shen.lazyderef (hd V2748) V2854) (if (= --> V2749) (let V2750 (shen.lazyderef (tl V2748) V2854) (if (cons? V2750) (let B (hd V2750) (let V2751 (shen.lazyderef (tl V2750) V2854) (if (= () V2751) (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (if (shen.pvar? V2751) (do (shen.bindv V2751 () V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2751 V2854) Result))) false)))) (if (shen.pvar? V2750) (let B (shen.newpv V2854) (do (shen.bindv V2750 (cons B ()) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2750 V2854) Result)))) false))) (if (shen.pvar? V2749) (do (shen.bindv V2749 --> V2854) (let Result (let V2752 (shen.lazyderef (tl V2748) V2854) (if (cons? V2752) (let B (hd V2752) (let V2753 (shen.lazyderef (tl V2752) V2854) (if (= () V2753) (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (if (shen.pvar? V2753) (do (shen.bindv V2753 () V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2753 V2854) Result))) false)))) (if (shen.pvar? V2752) (let B (shen.newpv V2854) (do (shen.bindv V2752 (cons B ()) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2752 V2854) Result)))) false))) (do (shen.unbindv V2749 V2854) Result))) false))) (if (shen.pvar? V2748) (let B (shen.newpv V2854) (do (shen.bindv V2748 (cons --> (cons B ())) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2748 V2854) Result)))) false)))) (if (shen.pvar? V2747) (let A (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.bindv V2747 (cons A (cons --> (cons B ()))) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2747 V2854) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2754 (shen.lazyderef V2851 V2854) (if (cons? V2754) (let V2755 (shen.lazyderef (hd V2754) V2854) (if (= let V2755) (let V2756 (shen.lazyderef (tl V2754) V2854) (if (cons? V2756) (let X (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2854) (if (cons? V2757) (let Y (hd V2757) (let V2758 (shen.lazyderef (tl V2757) V2854) (if (cons? V2758) (let Z (hd V2758) (let V2759 (shen.lazyderef (tl V2758) V2854) (if (= () V2759) (let W (shen.newpv V2854) (let X&& (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* Y B V2853 V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Z V2854)) V2854 (freeze (shen.th* W V2852 (cons (cons X&& (cons : (cons B ()))) V2853) V2854 V2855))))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2760 (shen.lazyderef V2851 V2854) (if (cons? V2760) (let V2761 (shen.lazyderef (hd V2760) V2854) (if (= open V2761) (let V2762 (shen.lazyderef (tl V2760) V2854) (if (cons? V2762) (let FileName (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2854) (if (cons? V2763) (let Direction2693 (hd V2763) (let V2764 (shen.lazyderef (tl V2763) V2854) (if (= () V2764) (let V2765 (shen.lazyderef V2852 V2854) (if (cons? V2765) (let V2766 (shen.lazyderef (hd V2765) V2854) (if (= stream V2766) (let V2767 (shen.lazyderef (tl V2765) V2854) (if (cons? V2767) (let Direction (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2854) (if (= () V2768) (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (if (shen.pvar? V2768) (do (shen.bindv V2768 () V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2768 V2854) Result))) false)))) (if (shen.pvar? V2767) (let Direction (shen.newpv V2854) (do (shen.bindv V2767 (cons Direction ()) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2767 V2854) Result)))) false))) (if (shen.pvar? V2766) (do (shen.bindv V2766 stream V2854) (let Result (let V2769 (shen.lazyderef (tl V2765) V2854) (if (cons? V2769) (let Direction (hd V2769) (let V2770 (shen.lazyderef (tl V2769) V2854) (if (= () V2770) (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (if (shen.pvar? V2770) (do (shen.bindv V2770 () V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2770 V2854) Result))) false)))) (if (shen.pvar? V2769) (let Direction (shen.newpv V2854) (do (shen.bindv V2769 (cons Direction ()) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2769 V2854) Result)))) false))) (do (shen.unbindv V2766 V2854) Result))) false))) (if (shen.pvar? V2765) (let Direction (shen.newpv V2854) (do (shen.bindv V2765 (cons stream (cons Direction ())) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2765 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2771 (shen.lazyderef V2851 V2854) (if (cons? V2771) (let V2772 (shen.lazyderef (hd V2771) V2854) (if (= type V2772) (let V2773 (shen.lazyderef (tl V2771) V2854) (if (cons? V2773) (let X (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2854) (if (cons? V2774) (let A (hd V2774) (let V2775 (shen.lazyderef (tl V2774) V2854) (if (= () V2775) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (unify A V2852 V2854 (freeze (shen.th* X A V2853 V2854 V2855)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2776 (shen.lazyderef V2851 V2854) (if (cons? V2776) (let V2777 (shen.lazyderef (hd V2776) V2854) (if (= input+ V2777) (let V2778 (shen.lazyderef (tl V2776) V2854) (if (cons? V2778) (let A (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2854) (if (cons? V2779) (let Stream (hd V2779) (let V2780 (shen.lazyderef (tl V2779) V2854) (if (= () V2780) (let C (shen.newpv V2854) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2854)) V2854 (freeze (unify V2852 C V2854 (freeze (shen.th* Stream (cons stream (cons in ())) V2853 V2854 V2855))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2781 (shen.lazyderef V2851 V2854) (if (cons? V2781) (let V2782 (shen.lazyderef (hd V2781) V2854) (if (= set V2782) (let V2783 (shen.lazyderef (tl V2781) V2854) (if (cons? V2783) (let Var (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2854) (if (cons? V2784) (let Val (hd V2784) (let V2785 (shen.lazyderef (tl V2784) V2854) (if (= () V2785) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* Var symbol V2853 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* (cons value (cons Var ())) V2852 V2853 V2854 (freeze (shen.th* Val V2852 V2853 V2854 V2855)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2786 (shen.lazyderef V2851 V2854) (if (cons? V2786) (let V2787 (shen.lazyderef (hd V2786) V2854) (if (= shen.<-sem V2787) (let V2788 (shen.lazyderef (tl V2786) V2854) (if (cons? V2788) (let F (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2854) (if (= () V2789) (let A (shen.newpv V2854) (let F&& (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2853 V2854 (freeze (cut Throwcontrol V2854 (freeze (bind F&& (concat && (shen.lazyderef F V2854)) V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* F&& V2852 (cons (cons F&& (cons : (cons B ()))) V2853) V2854 V2855))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2851 V2854) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2854) (if (= fail V2791) (let V2792 (shen.lazyderef (tl V2790) V2854) (if (= () V2792) (let V2793 (shen.lazyderef V2852 V2854) (if (= symbol V2793) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2793) (do (shen.bindv V2793 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2793 V2854) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2854) (do (shen.incinfs) (shen.t*-hyps V2853 NewHyp V2854 (freeze (shen.th* V2851 V2852 NewHyp V2854 V2855))))) (if (= Case false) (let Case (let V2794 (shen.lazyderef V2851 V2854) (if (cons? V2794) (let V2795 (shen.lazyderef (hd V2794) V2854) (if (= define V2795) (let V2796 (shen.lazyderef (tl V2794) V2854) (if (cons? V2796) (let F (hd V2796) (let X (tl V2796) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.t*-def (cons define (cons F X)) V2852 V2853 V2854 V2855)))))) false)) false)) false)) (if (= Case false) (let Case (let V2797 (shen.lazyderef V2851 V2854) (if (cons? V2797) (let V2798 (shen.lazyderef (hd V2797) V2854) (if (= defcc V2798) (let V2799 (shen.lazyderef (tl V2797) V2854) (if (cons? V2799) (let F (hd V2799) (let X (tl V2799) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2852 V2853 V2854 V2855)))))) false)) false)) false)) (if (= Case false) (let Case (let V2800 (shen.lazyderef V2851 V2854) (if (cons? V2800) (let V2801 (shen.lazyderef (hd V2800) V2854) (if (= defmacro V2801) (let V2802 (shen.lazyderef V2852 V2854) (if (= unit V2802) (do (shen.incinfs) (cut Throwcontrol V2854 V2855)) (if (shen.pvar? V2802) (do (shen.bindv V2802 unit V2854) (let Result (do (shen.incinfs) (cut Throwcontrol V2854 V2855)) (do (shen.unbindv V2802 V2854) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2803 (shen.lazyderef V2851 V2854) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2854) (if (= shen.process-datatype V2804) (let V2805 (shen.lazyderef V2852 V2854) (if (= symbol V2805) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2805) (do (shen.bindv V2805 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2805 V2854) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2806 (shen.lazyderef V2851 V2854) (if (cons? V2806) (let V2807 (shen.lazyderef (hd V2806) V2854) (if (= shen.synonyms-help V2807) (let V2808 (shen.lazyderef V2852 V2854) (if (= symbol V2808) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2808) (do (shen.bindv V2808 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2808 V2854) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2854) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2854 (freeze (shen.udefs* (cons V2851 (cons : (cons V2852 ()))) V2853 Datatypes V2854 V2855))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2863 V2864 V2865 V2866) (let Case (let V2608 (shen.lazyderef V2863 V2865) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V2865) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2865) (if (cons? V2610) (let V2611 (shen.lazyderef (hd V2610) V2865) (if (= cons V2611) (let V2612 (shen.lazyderef (tl V2610) V2865) (if (cons? V2612) (let X (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2865) (if (cons? V2613) (let Y (hd V2613) (let V2614 (shen.lazyderef (tl V2613) V2865) (if (= () V2614) (let V2615 (shen.lazyderef (tl V2609) V2865) (if (cons? V2615) (let V2616 (shen.lazyderef (hd V2615) V2865) (if (= : V2616) (let V2617 (shen.lazyderef (tl V2615) V2865) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2865) (if (cons? V2618) (let V2619 (shen.lazyderef (hd V2618) V2865) (if (= list V2619) (let V2620 (shen.lazyderef (tl V2618) V2865) (if (cons? V2620) (let A (hd V2620) (let V2621 (shen.lazyderef (tl V2620) V2865) (if (= () V2621) (let V2622 (shen.lazyderef (tl V2617) V2865) (if (= () V2622) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2622 V2865) Result))) false))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2865) (let Result (let V2623 (shen.lazyderef (tl V2617) V2865) (if (= () V2623) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2623 V2865) Result))) false))) (do (shen.unbindv V2621 V2865) Result))) false)))) (if (shen.pvar? V2620) (let A (shen.newpv V2865) (do (shen.bindv V2620 (cons A ()) V2865) (let Result (let V2624 (shen.lazyderef (tl V2617) V2865) (if (= () V2624) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2624) (do (shen.bindv V2624 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2624 V2865) Result))) false))) (do (shen.unbindv V2620 V2865) Result)))) false))) (if (shen.pvar? V2619) (do (shen.bindv V2619 list V2865) (let Result (let V2625 (shen.lazyderef (tl V2618) V2865) (if (cons? V2625) (let A (hd V2625) (let V2626 (shen.lazyderef (tl V2625) V2865) (if (= () V2626) (let V2627 (shen.lazyderef (tl V2617) V2865) (if (= () V2627) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2627 V2865) Result))) false))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2865) (let Result (let V2628 (shen.lazyderef (tl V2617) V2865) (if (= () V2628) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2628 V2865) Result))) false))) (do (shen.unbindv V2626 V2865) Result))) false)))) (if (shen.pvar? V2625) (let A (shen.newpv V2865) (do (shen.bindv V2625 (cons A ()) V2865) (let Result (let V2629 (shen.lazyderef (tl V2617) V2865) (if (= () V2629) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2629) (do (shen.bindv V2629 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2629 V2865) Result))) false))) (do (shen.unbindv V2625 V2865) Result)))) false))) (do (shen.unbindv V2619 V2865) Result))) false))) (if (shen.pvar? V2618) (let A (shen.newpv V2865) (do (shen.bindv V2618 (cons list (cons A ())) V2865) (let Result (let V2630 (shen.lazyderef (tl V2617) V2865) (if (= () V2630) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2865) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons list (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2630 V2865) Result))) false))) (do (shen.unbindv V2618 V2865) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2631 (shen.lazyderef V2863 V2865) (if (cons? V2631) (let V2632 (shen.lazyderef (hd V2631) V2865) (if (cons? V2632) (let V2633 (shen.lazyderef (hd V2632) V2865) (if (cons? V2633) (let V2634 (shen.lazyderef (hd V2633) V2865) (if (= @p V2634) (let V2635 (shen.lazyderef (tl V2633) V2865) (if (cons? V2635) (let X (hd V2635) (let V2636 (shen.lazyderef (tl V2635) V2865) (if (cons? V2636) (let Y (hd V2636) (let V2637 (shen.lazyderef (tl V2636) V2865) (if (= () V2637) (let V2638 (shen.lazyderef (tl V2632) V2865) (if (cons? V2638) (let V2639 (shen.lazyderef (hd V2638) V2865) (if (= : V2639) (let V2640 (shen.lazyderef (tl V2638) V2865) (if (cons? V2640) (let V2641 (shen.lazyderef (hd V2640) V2865) (if (cons? V2641) (let A (hd V2641) (let V2642 (shen.lazyderef (tl V2641) V2865) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2865) (if (= * V2643) (let V2644 (shen.lazyderef (tl V2642) V2865) (if (cons? V2644) (let B (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2865) (if (= () V2645) (let V2646 (shen.lazyderef (tl V2640) V2865) (if (= () V2646) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2646 V2865) Result))) false))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2865) (let Result (let V2647 (shen.lazyderef (tl V2640) V2865) (if (= () V2647) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2647 V2865) Result))) false))) (do (shen.unbindv V2645 V2865) Result))) false)))) (if (shen.pvar? V2644) (let B (shen.newpv V2865) (do (shen.bindv V2644 (cons B ()) V2865) (let Result (let V2648 (shen.lazyderef (tl V2640) V2865) (if (= () V2648) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2648) (do (shen.bindv V2648 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2648 V2865) Result))) false))) (do (shen.unbindv V2644 V2865) Result)))) false))) (if (shen.pvar? V2643) (do (shen.bindv V2643 * V2865) (let Result (let V2649 (shen.lazyderef (tl V2642) V2865) (if (cons? V2649) (let B (hd V2649) (let V2650 (shen.lazyderef (tl V2649) V2865) (if (= () V2650) (let V2651 (shen.lazyderef (tl V2640) V2865) (if (= () V2651) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2651 V2865) Result))) false))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2865) (let Result (let V2652 (shen.lazyderef (tl V2640) V2865) (if (= () V2652) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2652 V2865) Result))) false))) (do (shen.unbindv V2650 V2865) Result))) false)))) (if (shen.pvar? V2649) (let B (shen.newpv V2865) (do (shen.bindv V2649 (cons B ()) V2865) (let Result (let V2653 (shen.lazyderef (tl V2640) V2865) (if (= () V2653) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2653) (do (shen.bindv V2653 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2653 V2865) Result))) false))) (do (shen.unbindv V2649 V2865) Result)))) false))) (do (shen.unbindv V2643 V2865) Result))) false))) (if (shen.pvar? V2642) (let B (shen.newpv V2865) (do (shen.bindv V2642 (cons * (cons B ())) V2865) (let Result (let V2654 (shen.lazyderef (tl V2640) V2865) (if (= () V2654) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2654 V2865) Result))) false))) (do (shen.unbindv V2642 V2865) Result)))) false)))) (if (shen.pvar? V2641) (let A (shen.newpv V2865) (let B (shen.newpv V2865) (do (shen.bindv V2641 (cons A (cons * (cons B ()))) V2865) (let Result (let V2655 (shen.lazyderef (tl V2640) V2865) (if (= () V2655) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2865) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (shen.lazyderef B V2865) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2655 V2865) Result))) false))) (do (shen.unbindv V2641 V2865) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2656 (shen.lazyderef V2863 V2865) (if (cons? V2656) (let V2657 (shen.lazyderef (hd V2656) V2865) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2865) (if (cons? V2658) (let V2659 (shen.lazyderef (hd V2658) V2865) (if (= @v V2659) (let V2660 (shen.lazyderef (tl V2658) V2865) (if (cons? V2660) (let X (hd V2660) (let V2661 (shen.lazyderef (tl V2660) V2865) (if (cons? V2661) (let Y (hd V2661) (let V2662 (shen.lazyderef (tl V2661) V2865) (if (= () V2662) (let V2663 (shen.lazyderef (tl V2657) V2865) (if (cons? V2663) (let V2664 (shen.lazyderef (hd V2663) V2865) (if (= : V2664) (let V2665 (shen.lazyderef (tl V2663) V2865) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2865) (if (cons? V2666) (let V2667 (shen.lazyderef (hd V2666) V2865) (if (= vector V2667) (let V2668 (shen.lazyderef (tl V2666) V2865) (if (cons? V2668) (let A (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2865) (if (= () V2669) (let V2670 (shen.lazyderef (tl V2665) V2865) (if (= () V2670) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2670) (do (shen.bindv V2670 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2670 V2865) Result))) false))) (if (shen.pvar? V2669) (do (shen.bindv V2669 () V2865) (let Result (let V2671 (shen.lazyderef (tl V2665) V2865) (if (= () V2671) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2671) (do (shen.bindv V2671 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2671 V2865) Result))) false))) (do (shen.unbindv V2669 V2865) Result))) false)))) (if (shen.pvar? V2668) (let A (shen.newpv V2865) (do (shen.bindv V2668 (cons A ()) V2865) (let Result (let V2672 (shen.lazyderef (tl V2665) V2865) (if (= () V2672) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2672) (do (shen.bindv V2672 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2672 V2865) Result))) false))) (do (shen.unbindv V2668 V2865) Result)))) false))) (if (shen.pvar? V2667) (do (shen.bindv V2667 vector V2865) (let Result (let V2673 (shen.lazyderef (tl V2666) V2865) (if (cons? V2673) (let A (hd V2673) (let V2674 (shen.lazyderef (tl V2673) V2865) (if (= () V2674) (let V2675 (shen.lazyderef (tl V2665) V2865) (if (= () V2675) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2675 V2865) Result))) false))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2865) (let Result (let V2676 (shen.lazyderef (tl V2665) V2865) (if (= () V2676) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2676 V2865) Result))) false))) (do (shen.unbindv V2674 V2865) Result))) false)))) (if (shen.pvar? V2673) (let A (shen.newpv V2865) (do (shen.bindv V2673 (cons A ()) V2865) (let Result (let V2677 (shen.lazyderef (tl V2665) V2865) (if (= () V2677) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2677 V2865) Result))) false))) (do (shen.unbindv V2673 V2865) Result)))) false))) (do (shen.unbindv V2667 V2865) Result))) false))) (if (shen.pvar? V2666) (let A (shen.newpv V2865) (do (shen.bindv V2666 (cons vector (cons A ())) V2865) (let Result (let V2678 (shen.lazyderef (tl V2665) V2865) (if (= () V2678) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2865) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons (shen.lazyderef A V2865) ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons (cons vector (cons (shen.lazyderef A V2865) ())) ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2678 V2865) Result))) false))) (do (shen.unbindv V2666 V2865) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2679 (shen.lazyderef V2863 V2865) (if (cons? V2679) (let V2680 (shen.lazyderef (hd V2679) V2865) (if (cons? V2680) (let V2681 (shen.lazyderef (hd V2680) V2865) (if (cons? V2681) (let V2682 (shen.lazyderef (hd V2681) V2865) (if (= @s V2682) (let V2683 (shen.lazyderef (tl V2681) V2865) (if (cons? V2683) (let X (hd V2683) (let V2684 (shen.lazyderef (tl V2683) V2865) (if (cons? V2684) (let Y (hd V2684) (let V2685 (shen.lazyderef (tl V2684) V2865) (if (= () V2685) (let V2686 (shen.lazyderef (tl V2680) V2865) (if (cons? V2686) (let V2687 (shen.lazyderef (hd V2686) V2865) (if (= : V2687) (let V2688 (shen.lazyderef (tl V2686) V2865) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2865) (if (= string V2689) (let V2690 (shen.lazyderef (tl V2688) V2865) (if (= () V2690) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons string ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2690) (do (shen.bindv V2690 () V2865) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons string ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2690 V2865) Result))) false))) (if (shen.pvar? V2689) (do (shen.bindv V2689 string V2865) (let Result (let V2691 (shen.lazyderef (tl V2688) V2865) (if (= () V2691) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons string ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (if (shen.pvar? V2691) (do (shen.bindv V2691 () V2865) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2864 (cons (cons (shen.lazyderef X V2865) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2865) (cons : (cons string ()))) (shen.lazyderef Hyp V2865))) V2865 V2866))) (do (shen.unbindv V2691 V2865) Result))) false))) (do (shen.unbindv V2689 V2865) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2692 (shen.lazyderef V2863 V2865) (if (cons? V2692) (let X (hd V2692) (let Hyp (tl V2692) (let NewHyps (shen.newpv V2865) (do (shen.incinfs) (bind V2864 (cons (shen.lazyderef X V2865) (shen.lazyderef NewHyps V2865)) V2865 (freeze (shen.t*-hyps Hyp NewHyps V2865 V2866))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2856 V2857 V2858 V2859) (let Case (let V2608 (shen.lazyderef V2856 V2858) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V2858) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2858) (if (cons? V2610) (let V2611 (shen.lazyderef (hd V2610) V2858) (if (= cons V2611) (let V2612 (shen.lazyderef (tl V2610) V2858) (if (cons? V2612) (let X (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2858) (if (cons? V2613) (let Y (hd V2613) (let V2614 (shen.lazyderef (tl V2613) V2858) (if (= () V2614) (let V2615 (shen.lazyderef (tl V2609) V2858) (if (cons? V2615) (let V2616 (shen.lazyderef (hd V2615) V2858) (if (= : V2616) (let V2617 (shen.lazyderef (tl V2615) V2858) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2858) (if (cons? V2618) (let V2619 (shen.lazyderef (hd V2618) V2858) (if (= list V2619) (let V2620 (shen.lazyderef (tl V2618) V2858) (if (cons? V2620) (let A (hd V2620) (let V2621 (shen.lazyderef (tl V2620) V2858) (if (= () V2621) (let V2622 (shen.lazyderef (tl V2617) V2858) (if (= () V2622) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2622 V2858) Result))) false))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2858) (let Result (let V2623 (shen.lazyderef (tl V2617) V2858) (if (= () V2623) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2623 V2858) Result))) false))) (do (shen.unbindv V2621 V2858) Result))) false)))) (if (shen.pvar? V2620) (let A (shen.newpv V2858) (do (shen.bindv V2620 (cons A ()) V2858) (let Result (let V2624 (shen.lazyderef (tl V2617) V2858) (if (= () V2624) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2624) (do (shen.bindv V2624 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2624 V2858) Result))) false))) (do (shen.unbindv V2620 V2858) Result)))) false))) (if (shen.pvar? V2619) (do (shen.bindv V2619 list V2858) (let Result (let V2625 (shen.lazyderef (tl V2618) V2858) (if (cons? V2625) (let A (hd V2625) (let V2626 (shen.lazyderef (tl V2625) V2858) (if (= () V2626) (let V2627 (shen.lazyderef (tl V2617) V2858) (if (= () V2627) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2627 V2858) Result))) false))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2858) (let Result (let V2628 (shen.lazyderef (tl V2617) V2858) (if (= () V2628) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2628 V2858) Result))) false))) (do (shen.unbindv V2626 V2858) Result))) false)))) (if (shen.pvar? V2625) (let A (shen.newpv V2858) (do (shen.bindv V2625 (cons A ()) V2858) (let Result (let V2629 (shen.lazyderef (tl V2617) V2858) (if (= () V2629) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2629) (do (shen.bindv V2629 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2629 V2858) Result))) false))) (do (shen.unbindv V2625 V2858) Result)))) false))) (do (shen.unbindv V2619 V2858) Result))) false))) (if (shen.pvar? V2618) (let A (shen.newpv V2858) (do (shen.bindv V2618 (cons list (cons A ())) V2858) (let Result (let V2630 (shen.lazyderef (tl V2617) V2858) (if (= () V2630) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2630 V2858) Result))) false))) (do (shen.unbindv V2618 V2858) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2631 (shen.lazyderef V2856 V2858) (if (cons? V2631) (let V2632 (shen.lazyderef (hd V2631) V2858) (if (cons? V2632) (let V2633 (shen.lazyderef (hd V2632) V2858) (if (cons? V2633) (let V2634 (shen.lazyderef (hd V2633) V2858) (if (= @p V2634) (let V2635 (shen.lazyderef (tl V2633) V2858) (if (cons? V2635) (let X (hd V2635) (let V2636 (shen.lazyderef (tl V2635) V2858) (if (cons? V2636) (let Y (hd V2636) (let V2637 (shen.lazyderef (tl V2636) V2858) (if (= () V2637) (let V2638 (shen.lazyderef (tl V2632) V2858) (if (cons? V2638) (let V2639 (shen.lazyderef (hd V2638) V2858) (if (= : V2639) (let V2640 (shen.lazyderef (tl V2638) V2858) (if (cons? V2640) (let V2641 (shen.lazyderef (hd V2640) V2858) (if (cons? V2641) (let A (hd V2641) (let V2642 (shen.lazyderef (tl V2641) V2858) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2858) (if (= * V2643) (let V2644 (shen.lazyderef (tl V2642) V2858) (if (cons? V2644) (let B (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2858) (if (= () V2645) (let V2646 (shen.lazyderef (tl V2640) V2858) (if (= () V2646) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2646 V2858) Result))) false))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2858) (let Result (let V2647 (shen.lazyderef (tl V2640) V2858) (if (= () V2647) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2647 V2858) Result))) false))) (do (shen.unbindv V2645 V2858) Result))) false)))) (if (shen.pvar? V2644) (let B (shen.newpv V2858) (do (shen.bindv V2644 (cons B ()) V2858) (let Result (let V2648 (shen.lazyderef (tl V2640) V2858) (if (= () V2648) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2648) (do (shen.bindv V2648 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2648 V2858) Result))) false))) (do (shen.unbindv V2644 V2858) Result)))) false))) (if (shen.pvar? V2643) (do (shen.bindv V2643 * V2858) (let Result (let V2649 (shen.lazyderef (tl V2642) V2858) (if (cons? V2649) (let B (hd V2649) (let V2650 (shen.lazyderef (tl V2649) V2858) (if (= () V2650) (let V2651 (shen.lazyderef (tl V2640) V2858) (if (= () V2651) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2651 V2858) Result))) false))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2858) (let Result (let V2652 (shen.lazyderef (tl V2640) V2858) (if (= () V2652) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2652 V2858) Result))) false))) (do (shen.unbindv V2650 V2858) Result))) false)))) (if (shen.pvar? V2649) (let B (shen.newpv V2858) (do (shen.bindv V2649 (cons B ()) V2858) (let Result (let V2653 (shen.lazyderef (tl V2640) V2858) (if (= () V2653) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2653) (do (shen.bindv V2653 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2653 V2858) Result))) false))) (do (shen.unbindv V2649 V2858) Result)))) false))) (do (shen.unbindv V2643 V2858) Result))) false))) (if (shen.pvar? V2642) (let B (shen.newpv V2858) (do (shen.bindv V2642 (cons * (cons B ())) V2858) (let Result (let V2654 (shen.lazyderef (tl V2640) V2858) (if (= () V2654) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2654 V2858) Result))) false))) (do (shen.unbindv V2642 V2858) Result)))) false)))) (if (shen.pvar? V2641) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2641 (cons A (cons * (cons B ()))) V2858) (let Result (let V2655 (shen.lazyderef (tl V2640) V2858) (if (= () V2655) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2655 V2858) Result))) false))) (do (shen.unbindv V2641 V2858) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2656 (shen.lazyderef V2856 V2858) (if (cons? V2656) (let V2657 (shen.lazyderef (hd V2656) V2858) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2858) (if (cons? V2658) (let V2659 (shen.lazyderef (hd V2658) V2858) (if (= @v V2659) (let V2660 (shen.lazyderef (tl V2658) V2858) (if (cons? V2660) (let X (hd V2660) (let V2661 (shen.lazyderef (tl V2660) V2858) (if (cons? V2661) (let Y (hd V2661) (let V2662 (shen.lazyderef (tl V2661) V2858) (if (= () V2662) (let V2663 (shen.lazyderef (tl V2657) V2858) (if (cons? V2663) (let V2664 (shen.lazyderef (hd V2663) V2858) (if (= : V2664) (let V2665 (shen.lazyderef (tl V2663) V2858) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2858) (if (cons? V2666) (let V2667 (shen.lazyderef (hd V2666) V2858) (if (= vector V2667) (let V2668 (shen.lazyderef (tl V2666) V2858) (if (cons? V2668) (let A (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2858) (if (= () V2669) (let V2670 (shen.lazyderef (tl V2665) V2858) (if (= () V2670) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2670) (do (shen.bindv V2670 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2670 V2858) Result))) false))) (if (shen.pvar? V2669) (do (shen.bindv V2669 () V2858) (let Result (let V2671 (shen.lazyderef (tl V2665) V2858) (if (= () V2671) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2671) (do (shen.bindv V2671 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2671 V2858) Result))) false))) (do (shen.unbindv V2669 V2858) Result))) false)))) (if (shen.pvar? V2668) (let A (shen.newpv V2858) (do (shen.bindv V2668 (cons A ()) V2858) (let Result (let V2672 (shen.lazyderef (tl V2665) V2858) (if (= () V2672) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2672) (do (shen.bindv V2672 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2672 V2858) Result))) false))) (do (shen.unbindv V2668 V2858) Result)))) false))) (if (shen.pvar? V2667) (do (shen.bindv V2667 vector V2858) (let Result (let V2673 (shen.lazyderef (tl V2666) V2858) (if (cons? V2673) (let A (hd V2673) (let V2674 (shen.lazyderef (tl V2673) V2858) (if (= () V2674) (let V2675 (shen.lazyderef (tl V2665) V2858) (if (= () V2675) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2675 V2858) Result))) false))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2858) (let Result (let V2676 (shen.lazyderef (tl V2665) V2858) (if (= () V2676) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2676 V2858) Result))) false))) (do (shen.unbindv V2674 V2858) Result))) false)))) (if (shen.pvar? V2673) (let A (shen.newpv V2858) (do (shen.bindv V2673 (cons A ()) V2858) (let Result (let V2677 (shen.lazyderef (tl V2665) V2858) (if (= () V2677) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2677 V2858) Result))) false))) (do (shen.unbindv V2673 V2858) Result)))) false))) (do (shen.unbindv V2667 V2858) Result))) false))) (if (shen.pvar? V2666) (let A (shen.newpv V2858) (do (shen.bindv V2666 (cons vector (cons A ())) V2858) (let Result (let V2678 (shen.lazyderef (tl V2665) V2858) (if (= () V2678) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2678 V2858) Result))) false))) (do (shen.unbindv V2666 V2858) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2679 (shen.lazyderef V2856 V2858) (if (cons? V2679) (let V2680 (shen.lazyderef (hd V2679) V2858) (if (cons? V2680) (let V2681 (shen.lazyderef (hd V2680) V2858) (if (cons? V2681) (let V2682 (shen.lazyderef (hd V2681) V2858) (if (= @s V2682) (let V2683 (shen.lazyderef (tl V2681) V2858) (if (cons? V2683) (let X (hd V2683) (let V2684 (shen.lazyderef (tl V2683) V2858) (if (cons? V2684) (let Y (hd V2684) (let V2685 (shen.lazyderef (tl V2684) V2858) (if (= () V2685) (let V2686 (shen.lazyderef (tl V2680) V2858) (if (cons? V2686) (let V2687 (shen.lazyderef (hd V2686) V2858) (if (= : V2687) (let V2688 (shen.lazyderef (tl V2686) V2858) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2858) (if (= string V2689) (let V2690 (shen.lazyderef (tl V2688) V2858) (if (= () V2690) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2690) (do (shen.bindv V2690 () V2858) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2690 V2858) Result))) false))) (if (shen.pvar? V2689) (do (shen.bindv V2689 string V2858) (let Result (let V2691 (shen.lazyderef (tl V2688) V2858) (if (= () V2691) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2691) (do (shen.bindv V2691 () V2858) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2691 V2858) Result))) false))) (do (shen.unbindv V2689 V2858) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2692 (shen.lazyderef V2856 V2858) (if (cons? V2692) (let X (hd V2692) (let Hyp (tl V2692) (let NewHyps (shen.newpv V2858) (do (shen.incinfs) (bind V2857 (cons (shen.lazyderef X V2858) (shen.lazyderef NewHyps V2858)) V2858 (freeze (shen.t*-hyps Hyp NewHyps V2858 V2859))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2879 V2880 V2881 V2882) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2879 V2881)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2880 V2881) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2882))))))))) (true (thaw V2882)))) +(defun shen.show (V2872 V2873 V2874 V2875) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2872 V2874)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2873 V2874) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2875))))))))) (true (thaw V2875)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2883) (cond ((and (cons? V2883) (and (cons? (tl V2883)) (and (= : (hd (tl V2883))) (and (cons? (tl (tl V2883))) (= () (tl (tl (tl V2883)))))))) (shen.prhush (shen.app (hd V2883) (cn " : " (shen.app (hd (tl (tl V2883))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2883 "" shen.r) (stoutput))))) +(defun shen.show-p (V2876) (cond ((and (cons? V2876) (and (cons? (tl V2876)) (and (= : (hd (tl V2876))) (and (cons? (tl (tl V2876))) (= () (tl (tl (tl V2876)))))))) (shen.prhush (shen.app (hd V2876) (cn " : " (shen.app (hd (tl (tl V2876))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2876 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2886 V2887) (cond ((= () V2886) shen.skip) ((cons? V2886) (do (shen.prhush (shen.app V2887 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2886)) (do (nl 1) (shen.show-assumptions (tl V2886) (+ V2887 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2879 V2880) (cond ((= () V2879) shen.skip) ((cons? V2879) (do (shen.prhush (shen.app V2880 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2879)) (do (nl 1) (shen.show-assumptions (tl V2879) (+ V2880 1)))))) (true (shen.sys-error shen.show-assumptions)))) -(defun shen.pause-for-user () (let Byte (read-byte (stinput)) (if (= Byte 94) (simple-error "input aborted +(defun shen.pause-for-user () (let Byte (do (read-byte (stinput)) (read-byte (stinput))) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2888) (cons? (assoc V2888 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2881) (cons? (assoc V2881 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2889) (concat shen.type-signature-of- V2889)) +(defun shen.sigf (V2882) (concat shen.type-signature-of- V2882)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2890 V2891 V2892 V2893) (let Case (let V2595 (shen.lazyderef V2891 V2892) (if (= number V2595) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2890 V2892)) V2892 V2893)) (if (shen.pvar? V2595) (do (shen.bindv V2595 number V2892) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2890 V2892)) V2892 V2893)) (do (shen.unbindv V2595 V2892) Result))) false))) (if (= Case false) (let Case (let V2596 (shen.lazyderef V2891 V2892) (if (= boolean V2596) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2890 V2892)) V2892 V2893)) (if (shen.pvar? V2596) (do (shen.bindv V2596 boolean V2892) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2890 V2892)) V2892 V2893)) (do (shen.unbindv V2596 V2892) Result))) false))) (if (= Case false) (let Case (let V2597 (shen.lazyderef V2891 V2892) (if (= string V2597) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2890 V2892)) V2892 V2893)) (if (shen.pvar? V2597) (do (shen.bindv V2597 string V2892) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2890 V2892)) V2892 V2893)) (do (shen.unbindv V2597 V2892) Result))) false))) (if (= Case false) (let Case (let V2598 (shen.lazyderef V2891 V2892) (if (= symbol V2598) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2890 V2892)) V2892 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2890 V2892))) V2892 V2893)))) (if (shen.pvar? V2598) (do (shen.bindv V2598 symbol V2892) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2890 V2892)) V2892 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2890 V2892))) V2892 V2893)))) (do (shen.unbindv V2598 V2892) Result))) false))) (if (= Case false) (let V2599 (shen.lazyderef V2890 V2892) (if (= () V2599) (let V2600 (shen.lazyderef V2891 V2892) (if (cons? V2600) (let V2601 (shen.lazyderef (hd V2600) V2892) (if (= list V2601) (let V2602 (shen.lazyderef (tl V2600) V2892) (if (cons? V2602) (let A (hd V2602) (let V2603 (shen.lazyderef (tl V2602) V2892) (if (= () V2603) (do (shen.incinfs) (thaw V2893)) (if (shen.pvar? V2603) (do (shen.bindv V2603 () V2892) (let Result (do (shen.incinfs) (thaw V2893)) (do (shen.unbindv V2603 V2892) Result))) false)))) (if (shen.pvar? V2602) (let A (shen.newpv V2892) (do (shen.bindv V2602 (cons A ()) V2892) (let Result (do (shen.incinfs) (thaw V2893)) (do (shen.unbindv V2602 V2892) Result)))) false))) (if (shen.pvar? V2601) (do (shen.bindv V2601 list V2892) (let Result (let V2604 (shen.lazyderef (tl V2600) V2892) (if (cons? V2604) (let A (hd V2604) (let V2605 (shen.lazyderef (tl V2604) V2892) (if (= () V2605) (do (shen.incinfs) (thaw V2893)) (if (shen.pvar? V2605) (do (shen.bindv V2605 () V2892) (let Result (do (shen.incinfs) (thaw V2893)) (do (shen.unbindv V2605 V2892) Result))) false)))) (if (shen.pvar? V2604) (let A (shen.newpv V2892) (do (shen.bindv V2604 (cons A ()) V2892) (let Result (do (shen.incinfs) (thaw V2893)) (do (shen.unbindv V2604 V2892) Result)))) false))) (do (shen.unbindv V2601 V2892) Result))) false))) (if (shen.pvar? V2600) (let A (shen.newpv V2892) (do (shen.bindv V2600 (cons list (cons A ())) V2892) (let Result (do (shen.incinfs) (thaw V2893)) (do (shen.unbindv V2600 V2892) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2883 V2884 V2885 V2886) (let Case (let V2595 (shen.lazyderef V2884 V2885) (if (= number V2595) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2595) (do (shen.bindv V2595 number V2885) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2595 V2885) Result))) false))) (if (= Case false) (let Case (let V2596 (shen.lazyderef V2884 V2885) (if (= boolean V2596) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2596) (do (shen.bindv V2596 boolean V2885) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2596 V2885) Result))) false))) (if (= Case false) (let Case (let V2597 (shen.lazyderef V2884 V2885) (if (= string V2597) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2597) (do (shen.bindv V2597 string V2885) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2597 V2885) Result))) false))) (if (= Case false) (let Case (let V2598 (shen.lazyderef V2884 V2885) (if (= symbol V2598) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2883 V2885)) V2885 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2883 V2885))) V2885 V2886)))) (if (shen.pvar? V2598) (do (shen.bindv V2598 symbol V2885) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2883 V2885)) V2885 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2883 V2885))) V2885 V2886)))) (do (shen.unbindv V2598 V2885) Result))) false))) (if (= Case false) (let V2599 (shen.lazyderef V2883 V2885) (if (= () V2599) (let V2600 (shen.lazyderef V2884 V2885) (if (cons? V2600) (let V2601 (shen.lazyderef (hd V2600) V2885) (if (= list V2601) (let V2602 (shen.lazyderef (tl V2600) V2885) (if (cons? V2602) (let A (hd V2602) (let V2603 (shen.lazyderef (tl V2602) V2885) (if (= () V2603) (do (shen.incinfs) (thaw V2886)) (if (shen.pvar? V2603) (do (shen.bindv V2603 () V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2603 V2885) Result))) false)))) (if (shen.pvar? V2602) (let A (shen.newpv V2885) (do (shen.bindv V2602 (cons A ()) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2602 V2885) Result)))) false))) (if (shen.pvar? V2601) (do (shen.bindv V2601 list V2885) (let Result (let V2604 (shen.lazyderef (tl V2600) V2885) (if (cons? V2604) (let A (hd V2604) (let V2605 (shen.lazyderef (tl V2604) V2885) (if (= () V2605) (do (shen.incinfs) (thaw V2886)) (if (shen.pvar? V2605) (do (shen.bindv V2605 () V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2605 V2885) Result))) false)))) (if (shen.pvar? V2604) (let A (shen.newpv V2885) (do (shen.bindv V2604 (cons A ()) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2604 V2885) Result)))) false))) (do (shen.unbindv V2601 V2885) Result))) false))) (if (shen.pvar? V2600) (let A (shen.newpv V2885) (do (shen.bindv V2600 (cons list (cons A ())) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2600 V2885) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2894 V2895 V2896 V2897 V2898) (let Case (let V2586 (shen.lazyderef V2896 V2897) (if (cons? V2586) (let V2587 (shen.lazyderef (hd V2586) V2897) (if (cons? V2587) (let Y (hd V2587) (let V2588 (shen.lazyderef (tl V2587) V2897) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V2897) (if (= : V2589) (let V2590 (shen.lazyderef (tl V2588) V2897) (if (cons? V2590) (let B (hd V2590) (let V2591 (shen.lazyderef (tl V2590) V2897) (if (= () V2591) (do (shen.incinfs) (identical V2894 Y V2897 (freeze (unify! V2895 B V2897 V2898)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2592 (shen.lazyderef V2896 V2897) (if (cons? V2592) (let Hyp (tl V2592) (do (shen.incinfs) (shen.by_hypothesis V2894 V2895 Hyp V2897 V2898))) false)) Case))) +(defun shen.by_hypothesis (V2887 V2888 V2889 V2890 V2891) (let Case (let V2586 (shen.lazyderef V2889 V2890) (if (cons? V2586) (let V2587 (shen.lazyderef (hd V2586) V2890) (if (cons? V2587) (let Y (hd V2587) (let V2588 (shen.lazyderef (tl V2587) V2890) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V2890) (if (= : V2589) (let V2590 (shen.lazyderef (tl V2588) V2890) (if (cons? V2590) (let B (hd V2590) (let V2591 (shen.lazyderef (tl V2590) V2890) (if (= () V2591) (do (shen.incinfs) (identical V2887 Y V2890 (freeze (unify! V2888 B V2890 V2891)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2592 (shen.lazyderef V2889 V2890) (if (cons? V2592) (let Hyp (tl V2592) (do (shen.incinfs) (shen.by_hypothesis V2887 V2888 Hyp V2890 V2891))) false)) Case))) -(defun shen.t*-def (V2899 V2900 V2901 V2902 V2903) (let V2580 (shen.lazyderef V2899 V2902) (if (cons? V2580) (let V2581 (shen.lazyderef (hd V2580) V2902) (if (= define V2581) (let V2582 (shen.lazyderef (tl V2580) V2902) (if (cons? V2582) (let F (hd V2582) (let X (tl V2582) (let E (shen.newpv V2902) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2892 V2893 V2894 V2895 V2896) (let V2580 (shen.lazyderef V2892 V2895) (if (cons? V2580) (let V2581 (shen.lazyderef (hd V2580) V2895) (if (= define V2581) (let V2582 (shen.lazyderef (tl V2580) V2895) (if (cons? V2582) (let F (hd V2582) (let X (tl V2582) (let E (shen.newpv V2895) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2900 V2901 V2902 V2903))))) false)) false)) false))) +")))) F V2893 V2894 V2895 V2896))))) false)) false)) false))) -(defun shen.t*-defh (V2904 V2905 V2906 V2907 V2908 V2909) (let V2576 (shen.lazyderef V2904 V2908) (if (cons? V2576) (let Sig (hd V2576) (let Rules (tl V2576) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue Sig) V2905 V2906 V2907 Rules V2908 V2909)))) false))) +(defun shen.t*-defh (V2897 V2898 V2899 V2900 V2901 V2902) (let V2576 (shen.lazyderef V2897 V2901) (if (cons? V2576) (let Sig (hd V2576) (let Rules (tl V2576) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2898 V2899 V2900 Rules V2901 V2902)))) false))) -(defun shen.t*-defhh (V2910 V2911 V2912 V2913 V2914 V2915 V2916 V2917) (do (shen.incinfs) (shen.t*-rules V2915 V2911 1 V2912 (cons (cons V2912 (cons : (cons V2911 ()))) V2914) V2916 (freeze (shen.memo V2912 V2910 V2913 V2916 V2917))))) +(defun shen.t*-defhh (V2903 V2904 V2905 V2906 V2907 V2908 V2909 V2910) (do (shen.incinfs) (shen.t*-rules V2908 V2904 1 V2905 (cons (cons V2905 (cons : (cons V2904 ()))) V2907) V2909 (freeze (shen.memo V2905 V2903 V2906 V2909 V2910))))) -(defun shen.memo (V2918 V2919 V2920 V2921 V2922) (let Jnk (shen.newpv V2921) (do (shen.incinfs) (unify! V2920 V2919 V2921 (freeze (bind Jnk (declare (shen.lazyderef V2918 V2921) (shen.lazyderef V2920 V2921)) V2921 V2922)))))) +(defun shen.memo (V2911 V2912 V2913 V2914 V2915) (let Jnk (shen.newpv V2914) (do (shen.incinfs) (unify! V2913 V2912 V2914 (freeze (bind Jnk (declare (shen.lazyderef V2911 V2914) (shen.lazyderef V2913 V2914)) V2914 V2915)))))) -(defun shen. (V2927) (let Result (let Parse_shen. (shen. V2927) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2920) (let Result (let Parse_shen. (shen. V2920) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2928) (cond ((and (cons? V2928) (and (cons? (tl V2928)) (and (= () (tl (tl V2928))) (= (hd V2928) protect)))) V2928) ((cons? V2928) (map shen.ue V2928)) ((variable? V2928) (concat && V2928)) (true V2928))) +(defun shen.ue (V2921) (cond ((and (cons? V2921) (and (cons? (tl V2921)) (and (= () (tl (tl V2921))) (= (hd V2921) protect)))) V2921) ((cons? V2921) (map shen.ue V2921)) ((variable? V2921) (concat && V2921)) (true V2921))) -(defun shen.ues (V2933) (cond ((shen.ue? V2933) (cons V2933 ())) ((cons? V2933) (union (shen.ues (hd V2933)) (shen.ues (tl V2933)))) (true ()))) +(defun shen.ue-sig (V2922) (cond ((cons? V2922) (map shen.ue-sig V2922)) ((variable? V2922) (concat shen.&&& V2922)) (true V2922))) -(defun shen.ue? (V2934) (and (symbol? V2934) (shen.ue-h? (str V2934)))) +(defun shen.ues (V2927) (cond ((shen.ue? V2927) (cons V2927 ())) ((cons? V2927) (union (shen.ues (hd V2927)) (shen.ues (tl V2927)))) (true ()))) -(defun shen.ue-h? (V2941) (cond ((and (shen.+string? V2941) (and (= "&" (pos V2941 0)) (and (shen.+string? (tlstr V2941)) (= "&" (pos (tlstr V2941) 0))))) true) (true false))) +(defun shen.ue? (V2928) (and (symbol? V2928) (shen.ue-h? (str V2928)))) -(defun shen.t*-rules (V2942 V2943 V2944 V2945 V2946 V2947 V2948) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2551 (shen.lazyderef V2942 V2947) (if (= () V2551) (do (shen.incinfs) (thaw V2948)) false)) (if (= Case false) (let Case (let V2552 (shen.lazyderef V2942 V2947) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V2947) (if (cons? V2553) (let V2554 (shen.lazyderef (hd V2553) V2947) (if (= () V2554) (let V2555 (shen.lazyderef (tl V2553) V2947) (if (cons? V2555) (let Action (hd V2555) (let V2556 (shen.lazyderef (tl V2555) V2947) (if (= () V2556) (let Rules (tl V2552) (let V2557 (shen.lazyderef V2943 V2947) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2947) (if (= --> V2558) (let V2559 (shen.lazyderef (tl V2557) V2947) (if (cons? V2559) (let A (hd V2559) (let V2560 (shen.lazyderef (tl V2559) V2947) (if (= () V2560) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2946 V2947 (freeze (cut Throwcontrol V2947 (freeze (shen.t*-rules Rules A (+ V2944 1) V2945 V2946 V2947 V2948)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2561 (shen.lazyderef V2942 V2947) (if (cons? V2561) (let Rule (hd V2561) (let Rules (tl V2561) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2943 V2946 V2947 (freeze (cut Throwcontrol V2947 (freeze (shen.t*-rules Rules V2943 (+ V2944 1) V2945 V2946 V2947 V2948)))))))) false)) (if (= Case false) (let Err (shen.newpv V2947) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2944 V2947) (cn " of " (shen.app (shen.lazyderef V2945 V2947) "" shen.a)) shen.a))) V2947 V2948))) Case)) Case)) Case))))) +(defun shen.ue-h? (V2935) (cond ((and (shen.+string? V2935) (and (= "&" (pos V2935 0)) (and (shen.+string? (tlstr V2935)) (= "&" (pos (tlstr V2935) 0))))) true) (true false))) -(defun shen.t*-rule (V2949 V2950 V2951 V2952 V2953) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2533 (shen.lazyderef V2949 V2952) (if (cons? V2533) (let V2534 (shen.lazyderef (hd V2533) V2952) (if (= () V2534) (let V2535 (shen.lazyderef (tl V2533) V2952) (if (cons? V2535) (let Action (hd V2535) (let V2536 (shen.lazyderef (tl V2535) V2952) (if (= () V2536) (do (shen.incinfs) (cut Throwcontrol V2952 (freeze (shen.t*-action (shen.curry Action) V2950 V2951 V2952 V2953)))) false))) false)) false)) false)) (if (= Case false) (let V2537 (shen.lazyderef V2949 V2952) (if (cons? V2537) (let V2538 (shen.lazyderef (hd V2537) V2952) (if (cons? V2538) (let Pattern (hd V2538) (let Patterns (tl V2538) (let V2539 (shen.lazyderef (tl V2537) V2952) (if (cons? V2539) (let Action (hd V2539) (let V2540 (shen.lazyderef (tl V2539) V2952) (if (= () V2540) (let V2541 (shen.lazyderef V2950 V2952) (if (cons? V2541) (let A (hd V2541) (let V2542 (shen.lazyderef (tl V2541) V2952) (if (cons? V2542) (let V2543 (shen.lazyderef (hd V2542) V2952) (if (= --> V2543) (let V2544 (shen.lazyderef (tl V2542) V2952) (if (cons? V2544) (let B (hd V2544) (let V2545 (shen.lazyderef (tl V2544) V2952) (if (= () V2545) (do (shen.incinfs) (shen.t*-pattern Pattern A V2952 (freeze (cut Throwcontrol V2952 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2951) V2952 V2953)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rules (V2936 V2937 V2938 V2939 V2940 V2941 V2942) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2551 (shen.lazyderef V2936 V2941) (if (= () V2551) (do (shen.incinfs) (thaw V2942)) false)) (if (= Case false) (let Case (let V2552 (shen.lazyderef V2936 V2941) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V2941) (if (cons? V2553) (let V2554 (shen.lazyderef (hd V2553) V2941) (if (= () V2554) (let V2555 (shen.lazyderef (tl V2553) V2941) (if (cons? V2555) (let Action (hd V2555) (let V2556 (shen.lazyderef (tl V2555) V2941) (if (= () V2556) (let Rules (tl V2552) (let V2557 (shen.lazyderef V2937 V2941) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2941) (if (= --> V2558) (let V2559 (shen.lazyderef (tl V2557) V2941) (if (cons? V2559) (let A (hd V2559) (let V2560 (shen.lazyderef (tl V2559) V2941) (if (= () V2560) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2940 V2941 (freeze (cut Throwcontrol V2941 (freeze (shen.t*-rules Rules A (+ V2938 1) V2939 V2940 V2941 V2942)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2561 (shen.lazyderef V2936 V2941) (if (cons? V2561) (let Rule (hd V2561) (let Rules (tl V2561) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2937 V2940 V2941 (freeze (cut Throwcontrol V2941 (freeze (shen.t*-rules Rules V2937 (+ V2938 1) V2939 V2940 V2941 V2942)))))))) false)) (if (= Case false) (let Err (shen.newpv V2941) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2938 V2941) (cn " of " (shen.app (shen.lazyderef V2939 V2941) "" shen.a)) shen.a))) V2941 V2942))) Case)) Case)) Case))))) -(defun shen.t*-action (V2954 V2955 V2956 V2957 V2958) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2510 (shen.lazyderef V2954 V2957) (if (cons? V2510) (let V2511 (shen.lazyderef (hd V2510) V2957) (if (= where V2511) (let V2512 (shen.lazyderef (tl V2510) V2957) (if (cons? V2512) (let P (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2957) (if (cons? V2513) (let Action (hd V2513) (let V2514 (shen.lazyderef (tl V2513) V2957) (if (= () V2514) (do (shen.incinfs) (cut Throwcontrol V2957 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2956 V2957 (freeze (cut Throwcontrol V2957 (freeze (shen.t*-action Action V2955 (cons (cons P (cons : (cons verified ()))) V2956) V2957 V2958)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2515 (shen.lazyderef V2954 V2957) (if (cons? V2515) (let V2516 (shen.lazyderef (hd V2515) V2957) (if (= shen.choicepoint! V2516) (let V2517 (shen.lazyderef (tl V2515) V2957) (if (cons? V2517) (let V2518 (shen.lazyderef (hd V2517) V2957) (if (cons? V2518) (let V2519 (shen.lazyderef (hd V2518) V2957) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2957) (if (= fail-if V2520) (let V2521 (shen.lazyderef (tl V2519) V2957) (if (cons? V2521) (let F (hd V2521) (let V2522 (shen.lazyderef (tl V2521) V2957) (if (= () V2522) (let V2523 (shen.lazyderef (tl V2518) V2957) (if (cons? V2523) (let Action (hd V2523) (let V2524 (shen.lazyderef (tl V2523) V2957) (if (= () V2524) (let V2525 (shen.lazyderef (tl V2517) V2957) (if (= () V2525) (do (shen.incinfs) (cut Throwcontrol V2957 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2955 V2956 V2957 V2958)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2526 (shen.lazyderef V2954 V2957) (if (cons? V2526) (let V2527 (shen.lazyderef (hd V2526) V2957) (if (= shen.choicepoint! V2527) (let V2528 (shen.lazyderef (tl V2526) V2957) (if (cons? V2528) (let Action (hd V2528) (let V2529 (shen.lazyderef (tl V2528) V2957) (if (= () V2529) (do (shen.incinfs) (cut Throwcontrol V2957 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2955 V2956 V2957 V2958)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2954 (cons : (cons V2955 ()))) V2956 V2957 V2958)) Case)) Case)) Case))))) +(defun shen.t*-rule (V2943 V2944 V2945 V2946 V2947) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2533 (shen.lazyderef V2943 V2946) (if (cons? V2533) (let V2534 (shen.lazyderef (hd V2533) V2946) (if (= () V2534) (let V2535 (shen.lazyderef (tl V2533) V2946) (if (cons? V2535) (let Action (hd V2535) (let V2536 (shen.lazyderef (tl V2535) V2946) (if (= () V2536) (do (shen.incinfs) (cut Throwcontrol V2946 (freeze (shen.t*-action (shen.curry Action) V2944 V2945 V2946 V2947)))) false))) false)) false)) false)) (if (= Case false) (let V2537 (shen.lazyderef V2943 V2946) (if (cons? V2537) (let V2538 (shen.lazyderef (hd V2537) V2946) (if (cons? V2538) (let Pattern (hd V2538) (let Patterns (tl V2538) (let V2539 (shen.lazyderef (tl V2537) V2946) (if (cons? V2539) (let Action (hd V2539) (let V2540 (shen.lazyderef (tl V2539) V2946) (if (= () V2540) (let V2541 (shen.lazyderef V2944 V2946) (if (cons? V2541) (let A (hd V2541) (let V2542 (shen.lazyderef (tl V2541) V2946) (if (cons? V2542) (let V2543 (shen.lazyderef (hd V2542) V2946) (if (= --> V2543) (let V2544 (shen.lazyderef (tl V2542) V2946) (if (cons? V2544) (let B (hd V2544) (let V2545 (shen.lazyderef (tl V2544) V2946) (if (= () V2545) (do (shen.incinfs) (shen.t*-pattern Pattern A V2946 (freeze (cut Throwcontrol V2946 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2945) V2946 V2947)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-pattern (V2959 V2960 V2961 V2962) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2961) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2959) Hyp V2961 (freeze (cut Throwcontrol V2961 (freeze (shen.t* (cons V2959 (cons : (cons V2960 ()))) Hyp V2961 V2962)))))))))) +(defun shen.t*-action (V2948 V2949 V2950 V2951 V2952) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2510 (shen.lazyderef V2948 V2951) (if (cons? V2510) (let V2511 (shen.lazyderef (hd V2510) V2951) (if (= where V2511) (let V2512 (shen.lazyderef (tl V2510) V2951) (if (cons? V2512) (let P (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2951) (if (cons? V2513) (let Action (hd V2513) (let V2514 (shen.lazyderef (tl V2513) V2951) (if (= () V2514) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2950 V2951 (freeze (cut Throwcontrol V2951 (freeze (shen.t*-action Action V2949 (cons (cons P (cons : (cons verified ()))) V2950) V2951 V2952)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2515 (shen.lazyderef V2948 V2951) (if (cons? V2515) (let V2516 (shen.lazyderef (hd V2515) V2951) (if (= shen.choicepoint! V2516) (let V2517 (shen.lazyderef (tl V2515) V2951) (if (cons? V2517) (let V2518 (shen.lazyderef (hd V2517) V2951) (if (cons? V2518) (let V2519 (shen.lazyderef (hd V2518) V2951) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2951) (if (= fail-if V2520) (let V2521 (shen.lazyderef (tl V2519) V2951) (if (cons? V2521) (let F (hd V2521) (let V2522 (shen.lazyderef (tl V2521) V2951) (if (= () V2522) (let V2523 (shen.lazyderef (tl V2518) V2951) (if (cons? V2523) (let Action (hd V2523) (let V2524 (shen.lazyderef (tl V2523) V2951) (if (= () V2524) (let V2525 (shen.lazyderef (tl V2517) V2951) (if (= () V2525) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2949 V2950 V2951 V2952)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2526 (shen.lazyderef V2948 V2951) (if (cons? V2526) (let V2527 (shen.lazyderef (hd V2526) V2951) (if (= shen.choicepoint! V2527) (let V2528 (shen.lazyderef (tl V2526) V2951) (if (cons? V2528) (let Action (hd V2528) (let V2529 (shen.lazyderef (tl V2528) V2951) (if (= () V2529) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2949 V2950 V2951 V2952)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2948 (cons : (cons V2949 ()))) V2950 V2951 V2952)) Case)) Case)) Case))))) -(defun shen.tms->hyp (V2963 V2964 V2965 V2966) (let Case (let V2494 (shen.lazyderef V2963 V2965) (if (= () V2494) (let V2495 (shen.lazyderef V2964 V2965) (if (= () V2495) (do (shen.incinfs) (thaw V2966)) (if (shen.pvar? V2495) (do (shen.bindv V2495 () V2965) (let Result (do (shen.incinfs) (thaw V2966)) (do (shen.unbindv V2495 V2965) Result))) false))) false)) (if (= Case false) (let V2496 (shen.lazyderef V2963 V2965) (if (cons? V2496) (let Tm2491 (hd V2496) (let Tms (tl V2496) (let V2497 (shen.lazyderef V2964 V2965) (if (cons? V2497) (let V2498 (shen.lazyderef (hd V2497) V2965) (if (cons? V2498) (let Tm (hd V2498) (let V2499 (shen.lazyderef (tl V2498) V2965) (if (cons? V2499) (let V2500 (shen.lazyderef (hd V2499) V2965) (if (= : V2500) (let V2501 (shen.lazyderef (tl V2499) V2965) (if (cons? V2501) (let A (hd V2501) (let V2502 (shen.lazyderef (tl V2501) V2965) (if (= () V2502) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (if (shen.pvar? V2502) (do (shen.bindv V2502 () V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2502 V2965) Result))) false)))) (if (shen.pvar? V2501) (let A (shen.newpv V2965) (do (shen.bindv V2501 (cons A ()) V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2501 V2965) Result)))) false))) (if (shen.pvar? V2500) (do (shen.bindv V2500 : V2965) (let Result (let V2503 (shen.lazyderef (tl V2499) V2965) (if (cons? V2503) (let A (hd V2503) (let V2504 (shen.lazyderef (tl V2503) V2965) (if (= () V2504) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (if (shen.pvar? V2504) (do (shen.bindv V2504 () V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2504 V2965) Result))) false)))) (if (shen.pvar? V2503) (let A (shen.newpv V2965) (do (shen.bindv V2503 (cons A ()) V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2503 V2965) Result)))) false))) (do (shen.unbindv V2500 V2965) Result))) false))) (if (shen.pvar? V2499) (let A (shen.newpv V2965) (do (shen.bindv V2499 (cons : (cons A ())) V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2499 V2965) Result)))) false)))) (if (shen.pvar? V2498) (let Tm (shen.newpv V2965) (let A (shen.newpv V2965) (do (shen.bindv V2498 (cons Tm (cons : (cons A ()))) V2965) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966))))) (do (shen.unbindv V2498 V2965) Result))))) false))) (if (shen.pvar? V2497) (let Tm (shen.newpv V2965) (let A (shen.newpv V2965) (let Hyp (shen.newpv V2965) (do (shen.bindv V2497 (cons (cons Tm (cons : (cons A ()))) Hyp) V2965) (let Result (do (shen.incinfs) (unify! Tm Tm2491 V2965 (freeze (shen.tms->hyp Tms Hyp V2965 V2966)))) (do (shen.unbindv V2497 V2965) Result)))))) false))))) false)) Case))) +(defun shen.t*-pattern (V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2955) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2953) Hyp V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t* (cons V2953 (cons : (cons V2954 ()))) Hyp V2955 V2956)))))))))) -(defun findall (V2967 V2968 V2969 V2970 V2971) (let B (shen.newpv V2970) (let A (shen.newpv V2970) (do (shen.incinfs) (bind A (gensym shen.a) V2970 (freeze (bind B (set (shen.lazyderef A V2970) ()) V2970 (freeze (shen.findallhelp V2967 V2968 V2969 A V2970 V2971))))))))) +(defun shen.tms->hyp (V2957 V2958 V2959 V2960) (let Case (let V2494 (shen.lazyderef V2957 V2959) (if (= () V2494) (let V2495 (shen.lazyderef V2958 V2959) (if (= () V2495) (do (shen.incinfs) (thaw V2960)) (if (shen.pvar? V2495) (do (shen.bindv V2495 () V2959) (let Result (do (shen.incinfs) (thaw V2960)) (do (shen.unbindv V2495 V2959) Result))) false))) false)) (if (= Case false) (let V2496 (shen.lazyderef V2957 V2959) (if (cons? V2496) (let Tm2491 (hd V2496) (let Tms (tl V2496) (let V2497 (shen.lazyderef V2958 V2959) (if (cons? V2497) (let V2498 (shen.lazyderef (hd V2497) V2959) (if (cons? V2498) (let Tm (hd V2498) (let V2499 (shen.lazyderef (tl V2498) V2959) (if (cons? V2499) (let V2500 (shen.lazyderef (hd V2499) V2959) (if (= : V2500) (let V2501 (shen.lazyderef (tl V2499) V2959) (if (cons? V2501) (let A (hd V2501) (let V2502 (shen.lazyderef (tl V2501) V2959) (if (= () V2502) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (if (shen.pvar? V2502) (do (shen.bindv V2502 () V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2502 V2959) Result))) false)))) (if (shen.pvar? V2501) (let A (shen.newpv V2959) (do (shen.bindv V2501 (cons A ()) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2501 V2959) Result)))) false))) (if (shen.pvar? V2500) (do (shen.bindv V2500 : V2959) (let Result (let V2503 (shen.lazyderef (tl V2499) V2959) (if (cons? V2503) (let A (hd V2503) (let V2504 (shen.lazyderef (tl V2503) V2959) (if (= () V2504) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (if (shen.pvar? V2504) (do (shen.bindv V2504 () V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2504 V2959) Result))) false)))) (if (shen.pvar? V2503) (let A (shen.newpv V2959) (do (shen.bindv V2503 (cons A ()) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2503 V2959) Result)))) false))) (do (shen.unbindv V2500 V2959) Result))) false))) (if (shen.pvar? V2499) (let A (shen.newpv V2959) (do (shen.bindv V2499 (cons : (cons A ())) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2499 V2959) Result)))) false)))) (if (shen.pvar? V2498) (let Tm (shen.newpv V2959) (let A (shen.newpv V2959) (do (shen.bindv V2498 (cons Tm (cons : (cons A ()))) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2498 V2959) Result))))) false))) (if (shen.pvar? V2497) (let Tm (shen.newpv V2959) (let A (shen.newpv V2959) (let Hyp (shen.newpv V2959) (do (shen.bindv V2497 (cons (cons Tm (cons : (cons A ()))) Hyp) V2959) (let Result (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960)))) (do (shen.unbindv V2497 V2959) Result)))))) false))))) false)) Case))) -(defun shen.findallhelp (V2972 V2973 V2974 V2975 V2976 V2977) (let Case (do (shen.incinfs) (call V2973 V2976 (freeze (shen.remember V2975 V2972 V2976 (freeze (fwhen false V2976 V2977)))))) (if (= Case false) (do (shen.incinfs) (bind V2974 (value (shen.lazyderef V2975 V2976)) V2976 V2977)) Case))) +(defun findall (V2961 V2962 V2963 V2964 V2965) (let B (shen.newpv V2964) (let A (shen.newpv V2964) (do (shen.incinfs) (bind A (gensym shen.a) V2964 (freeze (bind B (set (shen.lazyderef A V2964) ()) V2964 (freeze (shen.findallhelp V2961 V2962 V2963 A V2964 V2965))))))))) -(defun shen.remember (V2978 V2979 V2980 V2981) (let B (shen.newpv V2980) (do (shen.incinfs) (bind B (set (shen.deref V2978 V2980) (cons (shen.deref V2979 V2980) (value (shen.deref V2978 V2980)))) V2980 V2981)))) +(defun shen.findallhelp (V2966 V2967 V2968 V2969 V2970 V2971) (let Case (do (shen.incinfs) (call V2967 V2970 (freeze (shen.remember V2969 V2966 V2970 (freeze (fwhen false V2970 V2971)))))) (if (= Case false) (do (shen.incinfs) (bind V2968 (value (shen.lazyderef V2969 V2970)) V2970 V2971)) Case))) -(defun shen.t*-defcc (V2982 V2983 V2984 V2985 V2986) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2467 (shen.lazyderef V2982 V2985) (if (cons? V2467) (let V2468 (shen.lazyderef (hd V2467) V2985) (if (= defcc V2468) (let V2469 (shen.lazyderef (tl V2467) V2985) (if (cons? V2469) (let F (hd V2469) (let V2470 (shen.lazyderef (tl V2469) V2985) (if (cons? V2470) (let V2471 (shen.lazyderef (hd V2470) V2985) (if (= { V2471) (let V2472 (shen.lazyderef (tl V2470) V2985) (if (cons? V2472) (let V2473 (shen.lazyderef (hd V2472) V2985) (if (cons? V2473) (let V2474 (shen.lazyderef (hd V2473) V2985) (if (= list V2474) (let V2475 (shen.lazyderef (tl V2473) V2985) (if (cons? V2475) (let A (hd V2475) (let V2476 (shen.lazyderef (tl V2475) V2985) (if (= () V2476) (let V2477 (shen.lazyderef (tl V2472) V2985) (if (cons? V2477) (let V2478 (shen.lazyderef (hd V2477) V2985) (if (= ==> V2478) (let V2479 (shen.lazyderef (tl V2477) V2985) (if (cons? V2479) (let B (hd V2479) (let V2480 (shen.lazyderef (tl V2479) V2985) (if (cons? V2480) (let V2481 (shen.lazyderef (hd V2480) V2985) (if (= } V2481) (let Rest (tl V2480) (let Rest& (shen.newpv V2985) (let Rest&& (shen.newpv V2985) (let Rules (shen.newpv V2985) (let ListA&& (shen.newpv V2985) (let B&& (shen.newpv V2985) (let Sig (shen.newpv V2985) (let Declare (shen.newpv V2985) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2985) ())) (cons ==> (cons (shen.lazyderef B V2985) ())))) V2985 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2985)) V2985 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2985)))) V2985 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2985)) V2985 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2985)) V2985 (freeze (shen.get-rules Rules Rest&& V2985 (freeze (cut Throwcontrol V2985 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2984) 1 V2985 (freeze (unify V2983 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2985 (freeze (bind Declare (declare (shen.lazyderef F V2985) (cons (cons list (cons (shen.lazyderef A V2985) ())) (cons ==> (cons (shen.lazyderef B V2985) ())))) V2985 V2986)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) +(defun shen.remember (V2972 V2973 V2974 V2975) (let B (shen.newpv V2974) (do (shen.incinfs) (bind B (set (shen.deref V2972 V2974) (cons (shen.deref V2973 V2974) (value (shen.deref V2972 V2974)))) V2974 V2975)))) -(defun shen.plug-wildcards (V2987) (cond ((cons? V2987) (map shen.plug-wildcards V2987)) ((= V2987 _) (gensym (intern "X"))) (true V2987))) +(defun shen.t*-defcc (V2976 V2977 V2978 V2979 V2980) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2467 (shen.lazyderef V2976 V2979) (if (cons? V2467) (let V2468 (shen.lazyderef (hd V2467) V2979) (if (= defcc V2468) (let V2469 (shen.lazyderef (tl V2467) V2979) (if (cons? V2469) (let F (hd V2469) (let V2470 (shen.lazyderef (tl V2469) V2979) (if (cons? V2470) (let V2471 (shen.lazyderef (hd V2470) V2979) (if (= { V2471) (let V2472 (shen.lazyderef (tl V2470) V2979) (if (cons? V2472) (let V2473 (shen.lazyderef (hd V2472) V2979) (if (cons? V2473) (let V2474 (shen.lazyderef (hd V2473) V2979) (if (= list V2474) (let V2475 (shen.lazyderef (tl V2473) V2979) (if (cons? V2475) (let A (hd V2475) (let V2476 (shen.lazyderef (tl V2475) V2979) (if (= () V2476) (let V2477 (shen.lazyderef (tl V2472) V2979) (if (cons? V2477) (let V2478 (shen.lazyderef (hd V2477) V2979) (if (= ==> V2478) (let V2479 (shen.lazyderef (tl V2477) V2979) (if (cons? V2479) (let B (hd V2479) (let V2480 (shen.lazyderef (tl V2479) V2979) (if (cons? V2480) (let V2481 (shen.lazyderef (hd V2480) V2979) (if (= } V2481) (let Rest (tl V2480) (let Rest& (shen.newpv V2979) (let Rest&& (shen.newpv V2979) (let Rules (shen.newpv V2979) (let ListA&& (shen.newpv V2979) (let B&& (shen.newpv V2979) (let Sig (shen.newpv V2979) (let Declare (shen.newpv V2979) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2979) ())) (cons ==> (cons (shen.lazyderef B V2979) ())))) V2979 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2979)) V2979 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2979)))) V2979 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2979)) V2979 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2979)) V2979 (freeze (shen.get-rules Rules Rest&& V2979 (freeze (cut Throwcontrol V2979 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2978) 1 V2979 (freeze (unify V2977 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2979 (freeze (bind Declare (declare (shen.lazyderef F V2979) (cons (cons list (cons (shen.lazyderef A V2979) ())) (cons ==> (cons (shen.lazyderef B V2979) ())))) V2979 V2980)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) -(defun shen.get-rules (V2988 V2989 V2990 V2991) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2460 (shen.lazyderef V2988 V2990) (if (= () V2460) (let V2461 (shen.lazyderef V2989 V2990) (if (= () V2461) (do (shen.incinfs) (cut Throwcontrol V2990 V2991)) false)) (if (shen.pvar? V2460) (do (shen.bindv V2460 () V2990) (let Result (let V2462 (shen.lazyderef V2989 V2990) (if (= () V2462) (do (shen.incinfs) (cut Throwcontrol V2990 V2991)) false)) (do (shen.unbindv V2460 V2990) Result))) false))) (if (= Case false) (let V2463 (shen.lazyderef V2988 V2990) (if (cons? V2463) (let Rule (hd V2463) (let Rules (tl V2463) (let Other (shen.newpv V2990) (do (shen.incinfs) (shen.first-rule V2989 Rule Other V2990 (freeze (cut Throwcontrol V2990 (freeze (shen.get-rules Rules Other V2990 V2991))))))))) (if (shen.pvar? V2463) (let Rule (shen.newpv V2990) (let Rules (shen.newpv V2990) (do (shen.bindv V2463 (cons Rule Rules) V2990) (let Result (let Other (shen.newpv V2990) (do (shen.incinfs) (shen.first-rule V2989 Rule Other V2990 (freeze (cut Throwcontrol V2990 (freeze (shen.get-rules Rules Other V2990 V2991))))))) (do (shen.unbindv V2463 V2990) Result))))) false))) Case))))) +(defun shen.plug-wildcards (V2981) (cond ((cons? V2981) (map shen.plug-wildcards V2981)) ((= V2981 _) (gensym (intern "X"))) (true V2981))) -(defun shen.first-rule (V2992 V2993 V2994 V2995 V2996) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2453 (shen.lazyderef V2992 V2995) (if (cons? V2453) (let V2454 (shen.lazyderef (hd V2453) V2995) (if (= ; V2454) (let Other2448 (tl V2453) (let V2455 (shen.lazyderef V2993 V2995) (if (= () V2455) (do (shen.incinfs) (unify! V2994 Other2448 V2995 (freeze (cut Throwcontrol V2995 V2996)))) (if (shen.pvar? V2455) (do (shen.bindv V2455 () V2995) (let Result (do (shen.incinfs) (unify! V2994 Other2448 V2995 (freeze (cut Throwcontrol V2995 V2996)))) (do (shen.unbindv V2455 V2995) Result))) false)))) false)) false)) (if (= Case false) (let V2456 (shen.lazyderef V2992 V2995) (if (cons? V2456) (let X2449 (hd V2456) (let Rest (tl V2456) (let V2457 (shen.lazyderef V2993 V2995) (if (cons? V2457) (let X (hd V2457) (let Rule (tl V2457) (do (shen.incinfs) (unify! X X2449 V2995 (freeze (shen.first-rule Rest Rule V2994 V2995 V2996)))))) (if (shen.pvar? V2457) (let X (shen.newpv V2995) (let Rule (shen.newpv V2995) (do (shen.bindv V2457 (cons X Rule) V2995) (let Result (do (shen.incinfs) (unify! X X2449 V2995 (freeze (shen.first-rule Rest Rule V2994 V2995 V2996)))) (do (shen.unbindv V2457 V2995) Result))))) false))))) false)) Case))))) +(defun shen.get-rules (V2982 V2983 V2984 V2985) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2460 (shen.lazyderef V2982 V2984) (if (= () V2460) (let V2461 (shen.lazyderef V2983 V2984) (if (= () V2461) (do (shen.incinfs) (cut Throwcontrol V2984 V2985)) false)) (if (shen.pvar? V2460) (do (shen.bindv V2460 () V2984) (let Result (let V2462 (shen.lazyderef V2983 V2984) (if (= () V2462) (do (shen.incinfs) (cut Throwcontrol V2984 V2985)) false)) (do (shen.unbindv V2460 V2984) Result))) false))) (if (= Case false) (let V2463 (shen.lazyderef V2982 V2984) (if (cons? V2463) (let Rule (hd V2463) (let Rules (tl V2463) (let Other (shen.newpv V2984) (do (shen.incinfs) (shen.first-rule V2983 Rule Other V2984 (freeze (cut Throwcontrol V2984 (freeze (shen.get-rules Rules Other V2984 V2985))))))))) (if (shen.pvar? V2463) (let Rule (shen.newpv V2984) (let Rules (shen.newpv V2984) (do (shen.bindv V2463 (cons Rule Rules) V2984) (let Result (let Other (shen.newpv V2984) (do (shen.incinfs) (shen.first-rule V2983 Rule Other V2984 (freeze (cut Throwcontrol V2984 (freeze (shen.get-rules Rules Other V2984 V2985))))))) (do (shen.unbindv V2463 V2984) Result))))) false))) Case))))) -(defun shen.tc-rules (V2997 V2998 V2999 V3000 V3001 V3002 V3003 V3004) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2442 (shen.lazyderef V2998 V3003) (if (= () V2442) (do (shen.incinfs) (thaw V3004)) false)) (if (= Case false) (let V2443 (shen.lazyderef V2998 V3003) (if (cons? V2443) (let Rule (hd V2443) (let Rules (tl V2443) (let V2444 (shen.lazyderef V2999 V3003) (if (cons? V2444) (let V2445 (shen.lazyderef (hd V2444) V3003) (if (= list V2445) (let V2446 (shen.lazyderef (tl V2444) V3003) (if (cons? V2446) (let A (hd V2446) (let V2447 (shen.lazyderef (tl V2446) V3003) (if (= () V2447) (let M (shen.newpv V3003) (do (shen.incinfs) (shen.tc-rule V2997 Rule A V3000 V3001 V3002 V3003 (freeze (bind M (+ (shen.deref V3002 V3003) 1) V3003 (freeze (cut Throwcontrol V3003 (freeze (shen.tc-rules V2997 Rules (cons list (cons A ())) V3000 V3001 M V3003 V3004))))))))) false))) false)) false)) false)))) false)) Case))))) +(defun shen.first-rule (V2986 V2987 V2988 V2989 V2990) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2453 (shen.lazyderef V2986 V2989) (if (cons? V2453) (let V2454 (shen.lazyderef (hd V2453) V2989) (if (= ; V2454) (let Other2448 (tl V2453) (let V2455 (shen.lazyderef V2987 V2989) (if (= () V2455) (do (shen.incinfs) (unify! V2988 Other2448 V2989 (freeze (cut Throwcontrol V2989 V2990)))) (if (shen.pvar? V2455) (do (shen.bindv V2455 () V2989) (let Result (do (shen.incinfs) (unify! V2988 Other2448 V2989 (freeze (cut Throwcontrol V2989 V2990)))) (do (shen.unbindv V2455 V2989) Result))) false)))) false)) false)) (if (= Case false) (let V2456 (shen.lazyderef V2986 V2989) (if (cons? V2456) (let X2449 (hd V2456) (let Rest (tl V2456) (let V2457 (shen.lazyderef V2987 V2989) (if (cons? V2457) (let X (hd V2457) (let Rule (tl V2457) (do (shen.incinfs) (unify! X X2449 V2989 (freeze (shen.first-rule Rest Rule V2988 V2989 V2990)))))) (if (shen.pvar? V2457) (let X (shen.newpv V2989) (let Rule (shen.newpv V2989) (do (shen.bindv V2457 (cons X Rule) V2989) (let Result (do (shen.incinfs) (unify! X X2449 V2989 (freeze (shen.first-rule Rest Rule V2988 V2989 V2990)))) (do (shen.unbindv V2457 V2989) Result))))) false))))) false)) Case))))) -(defun shen.tc-rule (V3005 V3006 V3007 V3008 V3009 V3010 V3011 V3012) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3006 V3007 V3008 V3009 V3011 V3012)) (if (= Case false) (let Err (shen.newpv V3011) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3010 V3011) (cn " of " (shen.app (shen.lazyderef V3005 V3011) "" shen.a)) shen.a))) V3011 V3012))) Case))) +(defun shen.tc-rules (V2991 V2992 V2993 V2994 V2995 V2996 V2997 V2998) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2442 (shen.lazyderef V2992 V2997) (if (= () V2442) (do (shen.incinfs) (thaw V2998)) false)) (if (= Case false) (let V2443 (shen.lazyderef V2992 V2997) (if (cons? V2443) (let Rule (hd V2443) (let Rules (tl V2443) (let V2444 (shen.lazyderef V2993 V2997) (if (cons? V2444) (let V2445 (shen.lazyderef (hd V2444) V2997) (if (= list V2445) (let V2446 (shen.lazyderef (tl V2444) V2997) (if (cons? V2446) (let A (hd V2446) (let V2447 (shen.lazyderef (tl V2446) V2997) (if (= () V2447) (let M (shen.newpv V2997) (do (shen.incinfs) (shen.tc-rule V2991 Rule A V2994 V2995 V2996 V2997 (freeze (bind M (+ (shen.deref V2996 V2997) 1) V2997 (freeze (cut Throwcontrol V2997 (freeze (shen.tc-rules V2991 Rules (cons list (cons A ())) V2994 V2995 M V2997 V2998))))))))) false))) false)) false)) false)))) false)) Case))))) -(defun shen.check-defcc-rule (V3013 V3014 V3015 V3016 V3017 V3018) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3017) (let Semantics (shen.newpv V3017) (let SynHyps (shen.newpv V3017) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3013 V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Syntax V3016 SynHyps V3014 V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-check Syntax V3014 SynHyps V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.semantics-check Semantics V3015 SynHyps V3017 V3018)))))))))))))))))))) +(defun shen.tc-rule (V2999 V3000 V3001 V3002 V3003 V3004 V3005 V3006) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3000 V3001 V3002 V3003 V3005 V3006)) (if (= Case false) (let Err (shen.newpv V3005) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3004 V3005) (cn " of " (shen.app (shen.lazyderef V2999 V3005) "" shen.a)) shen.a))) V3005 V3006))) Case))) -(defun shen.syntax-hyps (V3019 V3020 V3021 V3022 V3023 V3024) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2415 (shen.lazyderef V3019 V3023) (if (= () V2415) (do (shen.incinfs) (unify! V3021 V3020 V3023 V3024)) false)) (if (= Case false) (let Case (let V2416 (shen.lazyderef V3019 V3023) (if (cons? V2416) (let X2409 (hd V2416) (let Y (tl V2416) (let V2417 (shen.lazyderef V3021 V3023) (if (cons? V2417) (let V2418 (shen.lazyderef (hd V2417) V3023) (if (cons? V2418) (let X (hd V2418) (let V2419 (shen.lazyderef (tl V2418) V3023) (if (cons? V2419) (let V2420 (shen.lazyderef (hd V2419) V3023) (if (= : V2420) (let V2421 (shen.lazyderef (tl V2419) V3023) (if (cons? V2421) (let A2410 (hd V2421) (let V2422 (shen.lazyderef (tl V2421) V3023) (if (= () V2422) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (if (shen.pvar? V2422) (do (shen.bindv V2422 () V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2422 V3023) Result))) false)))) (if (shen.pvar? V2421) (let A2410 (shen.newpv V3023) (do (shen.bindv V2421 (cons A2410 ()) V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2421 V3023) Result)))) false))) (if (shen.pvar? V2420) (do (shen.bindv V2420 : V3023) (let Result (let V2423 (shen.lazyderef (tl V2419) V3023) (if (cons? V2423) (let A2410 (hd V2423) (let V2424 (shen.lazyderef (tl V2423) V3023) (if (= () V2424) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (if (shen.pvar? V2424) (do (shen.bindv V2424 () V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2424 V3023) Result))) false)))) (if (shen.pvar? V2423) (let A2410 (shen.newpv V3023) (do (shen.bindv V2423 (cons A2410 ()) V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2423 V3023) Result)))) false))) (do (shen.unbindv V2420 V3023) Result))) false))) (if (shen.pvar? V2419) (let A2410 (shen.newpv V3023) (do (shen.bindv V2419 (cons : (cons A2410 ())) V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2419 V3023) Result)))) false)))) (if (shen.pvar? V2418) (let X (shen.newpv V3023) (let A2410 (shen.newpv V3023) (do (shen.bindv V2418 (cons X (cons : (cons A2410 ()))) V3023) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024))))))))))) (do (shen.unbindv V2418 V3023) Result))))) false))) (if (shen.pvar? V2417) (let X (shen.newpv V3023) (let A2410 (shen.newpv V3023) (let SynHyps (shen.newpv V3023) (do (shen.bindv V2417 (cons (cons X (cons : (cons A2410 ()))) SynHyps) V3023) (let Result (do (shen.incinfs) (unify! V3022 A2410 V3023 (freeze (unify! X X2409 V3023 (freeze (fwhen (shen.ue? (shen.deref X V3023)) V3023 (freeze (cut Throwcontrol V3023 (freeze (shen.syntax-hyps Y V3020 SynHyps V3022 V3023 V3024)))))))))) (do (shen.unbindv V2417 V3023) Result)))))) false))))) false)) (if (= Case false) (let V2425 (shen.lazyderef V3019 V3023) (if (cons? V2425) (let Y (tl V2425) (do (shen.incinfs) (shen.syntax-hyps Y V3020 V3021 V3022 V3023 V3024))) false)) Case)) Case))))) +(defun shen.check-defcc-rule (V3007 V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3011) (let Semantics (shen.newpv V3011) (let SynHyps (shen.newpv V3011) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3007 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-hyps Syntax V3010 SynHyps V3008 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-check Syntax V3008 SynHyps V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.semantics-check Semantics V3009 SynHyps V3011 V3012)))))))))))))))))))) -(defun shen.get-syntax+semantics (V3025 V3026 V3027 V3028 V3029) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2381 (shen.lazyderef V3025 V3028) (if (= () V2381) (let V2382 (shen.lazyderef V3027 V3028) (if (cons? V2382) (let V2383 (shen.lazyderef (hd V2382) V3028) (if (= := V2383) (let V2384 (shen.lazyderef (tl V2382) V3028) (if (cons? V2384) (let Semantics (hd V2384) (let V2385 (shen.lazyderef (tl V2384) V3028) (if (= () V2385) (do (shen.incinfs) (cut Throwcontrol V3028 (freeze (bind V3026 (shen.lazyderef Semantics V3028) V3028 V3029)))) false))) false)) false)) false)) (if (shen.pvar? V2381) (do (shen.bindv V2381 () V3028) (let Result (let V2386 (shen.lazyderef V3027 V3028) (if (cons? V2386) (let V2387 (shen.lazyderef (hd V2386) V3028) (if (= := V2387) (let V2388 (shen.lazyderef (tl V2386) V3028) (if (cons? V2388) (let Semantics (hd V2388) (let V2389 (shen.lazyderef (tl V2388) V3028) (if (= () V2389) (do (shen.incinfs) (cut Throwcontrol V3028 (freeze (bind V3026 (shen.lazyderef Semantics V3028) V3028 V3029)))) false))) false)) false)) false)) (do (shen.unbindv V2381 V3028) Result))) false))) (if (= Case false) (let Case (let V2390 (shen.lazyderef V3025 V3028) (if (= () V2390) (let V2391 (shen.lazyderef V3027 V3028) (if (cons? V2391) (let V2392 (shen.lazyderef (hd V2391) V3028) (if (= := V2392) (let V2393 (shen.lazyderef (tl V2391) V3028) (if (cons? V2393) (let Semantics (hd V2393) (let V2394 (shen.lazyderef (tl V2393) V3028) (if (cons? V2394) (let V2395 (shen.lazyderef (hd V2394) V3028) (if (= where V2395) (let V2396 (shen.lazyderef (tl V2394) V3028) (if (cons? V2396) (let G (hd V2396) (let V2397 (shen.lazyderef (tl V2396) V3028) (if (= () V2397) (do (shen.incinfs) (cut Throwcontrol V3028 (freeze (bind V3026 (cons where (cons (shen.lazyderef G V3028) (cons (shen.lazyderef Semantics V3028) ()))) V3028 V3029)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2390) (do (shen.bindv V2390 () V3028) (let Result (let V2398 (shen.lazyderef V3027 V3028) (if (cons? V2398) (let V2399 (shen.lazyderef (hd V2398) V3028) (if (= := V2399) (let V2400 (shen.lazyderef (tl V2398) V3028) (if (cons? V2400) (let Semantics (hd V2400) (let V2401 (shen.lazyderef (tl V2400) V3028) (if (cons? V2401) (let V2402 (shen.lazyderef (hd V2401) V3028) (if (= where V2402) (let V2403 (shen.lazyderef (tl V2401) V3028) (if (cons? V2403) (let G (hd V2403) (let V2404 (shen.lazyderef (tl V2403) V3028) (if (= () V2404) (do (shen.incinfs) (cut Throwcontrol V3028 (freeze (bind V3026 (cons where (cons (shen.lazyderef G V3028) (cons (shen.lazyderef Semantics V3028) ()))) V3028 V3029)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2390 V3028) Result))) false))) (if (= Case false) (let V2405 (shen.lazyderef V3025 V3028) (if (cons? V2405) (let X2377 (hd V2405) (let Syntax (tl V2405) (let V2406 (shen.lazyderef V3027 V3028) (if (cons? V2406) (let X (hd V2406) (let Rule (tl V2406) (do (shen.incinfs) (unify! X X2377 V3028 (freeze (shen.get-syntax+semantics Syntax V3026 Rule V3028 V3029)))))) false)))) (if (shen.pvar? V2405) (let X2377 (shen.newpv V3028) (let Syntax (shen.newpv V3028) (do (shen.bindv V2405 (cons X2377 Syntax) V3028) (let Result (let V2407 (shen.lazyderef V3027 V3028) (if (cons? V2407) (let X (hd V2407) (let Rule (tl V2407) (do (shen.incinfs) (unify! X X2377 V3028 (freeze (shen.get-syntax+semantics Syntax V3026 Rule V3028 V3029)))))) false)) (do (shen.unbindv V2405 V3028) Result))))) false))) Case)) Case))))) +(defun shen.syntax-hyps (V3013 V3014 V3015 V3016 V3017 V3018) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2415 (shen.lazyderef V3013 V3017) (if (= () V2415) (do (shen.incinfs) (unify! V3015 V3014 V3017 V3018)) false)) (if (= Case false) (let Case (let V2416 (shen.lazyderef V3013 V3017) (if (cons? V2416) (let X2409 (hd V2416) (let Y (tl V2416) (let V2417 (shen.lazyderef V3015 V3017) (if (cons? V2417) (let V2418 (shen.lazyderef (hd V2417) V3017) (if (cons? V2418) (let X (hd V2418) (let V2419 (shen.lazyderef (tl V2418) V3017) (if (cons? V2419) (let V2420 (shen.lazyderef (hd V2419) V3017) (if (= : V2420) (let V2421 (shen.lazyderef (tl V2419) V3017) (if (cons? V2421) (let A2410 (hd V2421) (let V2422 (shen.lazyderef (tl V2421) V3017) (if (= () V2422) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2422) (do (shen.bindv V2422 () V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2422 V3017) Result))) false)))) (if (shen.pvar? V2421) (let A2410 (shen.newpv V3017) (do (shen.bindv V2421 (cons A2410 ()) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2421 V3017) Result)))) false))) (if (shen.pvar? V2420) (do (shen.bindv V2420 : V3017) (let Result (let V2423 (shen.lazyderef (tl V2419) V3017) (if (cons? V2423) (let A2410 (hd V2423) (let V2424 (shen.lazyderef (tl V2423) V3017) (if (= () V2424) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2424) (do (shen.bindv V2424 () V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2424 V3017) Result))) false)))) (if (shen.pvar? V2423) (let A2410 (shen.newpv V3017) (do (shen.bindv V2423 (cons A2410 ()) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2423 V3017) Result)))) false))) (do (shen.unbindv V2420 V3017) Result))) false))) (if (shen.pvar? V2419) (let A2410 (shen.newpv V3017) (do (shen.bindv V2419 (cons : (cons A2410 ())) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2419 V3017) Result)))) false)))) (if (shen.pvar? V2418) (let X (shen.newpv V3017) (let A2410 (shen.newpv V3017) (do (shen.bindv V2418 (cons X (cons : (cons A2410 ()))) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2418 V3017) Result))))) false))) (if (shen.pvar? V2417) (let X (shen.newpv V3017) (let A2410 (shen.newpv V3017) (let SynHyps (shen.newpv V3017) (do (shen.bindv V2417 (cons (cons X (cons : (cons A2410 ()))) SynHyps) V3017) (let Result (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018)))))))))) (do (shen.unbindv V2417 V3017) Result)))))) false))))) false)) (if (= Case false) (let V2425 (shen.lazyderef V3013 V3017) (if (cons? V2425) (let Y (tl V2425) (do (shen.incinfs) (shen.syntax-hyps Y V3014 V3015 V3016 V3017 V3018))) false)) Case)) Case))))) -(defun shen.syntax-check (V3030 V3031 V3032 V3033 V3034) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2374 (shen.lazyderef V3030 V3033) (if (= () V2374) (do (shen.incinfs) (thaw V3034)) false)) (if (= Case false) (let Case (let V2375 (shen.lazyderef V3030 V3033) (if (cons? V2375) (let X (hd V2375) (let Syntax (tl V2375) (let C (shen.newpv V3033) (let X&& (shen.newpv V3033) (let B (shen.newpv V3033) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3033)) V3033 (freeze (cut Throwcontrol V3033 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3032 V3033 (freeze (cut Throwcontrol V3033 (freeze (bind X&& (concat && (shen.lazyderef X V3033)) V3033 (freeze (cut Throwcontrol V3033 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3031 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3032) V3033 (freeze (cut Throwcontrol V3033 (freeze (shen.syntax-check Syntax V3031 V3032 V3033 V3034))))))))))))))))))))))) false)) (if (= Case false) (let V2376 (shen.lazyderef V3030 V3033) (if (cons? V2376) (let X (hd V2376) (let Syntax (tl V2376) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3031 ()))) V3032 V3033 (freeze (cut Throwcontrol V3033 (freeze (shen.syntax-check Syntax V3031 V3032 V3033 V3034)))))))) false)) Case)) Case))))) +(defun shen.get-syntax+semantics (V3019 V3020 V3021 V3022 V3023) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2381 (shen.lazyderef V3019 V3022) (if (= () V2381) (let V2382 (shen.lazyderef V3021 V3022) (if (cons? V2382) (let V2383 (shen.lazyderef (hd V2382) V3022) (if (= := V2383) (let V2384 (shen.lazyderef (tl V2382) V3022) (if (cons? V2384) (let Semantics (hd V2384) (let V2385 (shen.lazyderef (tl V2384) V3022) (if (= () V2385) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (shen.lazyderef Semantics V3022) V3022 V3023)))) false))) false)) false)) false)) (if (shen.pvar? V2381) (do (shen.bindv V2381 () V3022) (let Result (let V2386 (shen.lazyderef V3021 V3022) (if (cons? V2386) (let V2387 (shen.lazyderef (hd V2386) V3022) (if (= := V2387) (let V2388 (shen.lazyderef (tl V2386) V3022) (if (cons? V2388) (let Semantics (hd V2388) (let V2389 (shen.lazyderef (tl V2388) V3022) (if (= () V2389) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (shen.lazyderef Semantics V3022) V3022 V3023)))) false))) false)) false)) false)) (do (shen.unbindv V2381 V3022) Result))) false))) (if (= Case false) (let Case (let V2390 (shen.lazyderef V3019 V3022) (if (= () V2390) (let V2391 (shen.lazyderef V3021 V3022) (if (cons? V2391) (let V2392 (shen.lazyderef (hd V2391) V3022) (if (= := V2392) (let V2393 (shen.lazyderef (tl V2391) V3022) (if (cons? V2393) (let Semantics (hd V2393) (let V2394 (shen.lazyderef (tl V2393) V3022) (if (cons? V2394) (let V2395 (shen.lazyderef (hd V2394) V3022) (if (= where V2395) (let V2396 (shen.lazyderef (tl V2394) V3022) (if (cons? V2396) (let G (hd V2396) (let V2397 (shen.lazyderef (tl V2396) V3022) (if (= () V2397) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (cons where (cons (shen.lazyderef G V3022) (cons (shen.lazyderef Semantics V3022) ()))) V3022 V3023)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2390) (do (shen.bindv V2390 () V3022) (let Result (let V2398 (shen.lazyderef V3021 V3022) (if (cons? V2398) (let V2399 (shen.lazyderef (hd V2398) V3022) (if (= := V2399) (let V2400 (shen.lazyderef (tl V2398) V3022) (if (cons? V2400) (let Semantics (hd V2400) (let V2401 (shen.lazyderef (tl V2400) V3022) (if (cons? V2401) (let V2402 (shen.lazyderef (hd V2401) V3022) (if (= where V2402) (let V2403 (shen.lazyderef (tl V2401) V3022) (if (cons? V2403) (let G (hd V2403) (let V2404 (shen.lazyderef (tl V2403) V3022) (if (= () V2404) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (cons where (cons (shen.lazyderef G V3022) (cons (shen.lazyderef Semantics V3022) ()))) V3022 V3023)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2390 V3022) Result))) false))) (if (= Case false) (let V2405 (shen.lazyderef V3019 V3022) (if (cons? V2405) (let X2377 (hd V2405) (let Syntax (tl V2405) (let V2406 (shen.lazyderef V3021 V3022) (if (cons? V2406) (let X (hd V2406) (let Rule (tl V2406) (do (shen.incinfs) (unify! X X2377 V3022 (freeze (shen.get-syntax+semantics Syntax V3020 Rule V3022 V3023)))))) false)))) (if (shen.pvar? V2405) (let X2377 (shen.newpv V3022) (let Syntax (shen.newpv V3022) (do (shen.bindv V2405 (cons X2377 Syntax) V3022) (let Result (let V2407 (shen.lazyderef V3021 V3022) (if (cons? V2407) (let X (hd V2407) (let Rule (tl V2407) (do (shen.incinfs) (unify! X X2377 V3022 (freeze (shen.get-syntax+semantics Syntax V3020 Rule V3022 V3023)))))) false)) (do (shen.unbindv V2405 V3022) Result))))) false))) Case)) Case))))) -(defun shen.semantics-check (V3035 V3036 V3037 V3038 V3039) (let Semantics* (shen.newpv V3038) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3035 V3038))) V3038 (freeze (shen.t* (cons Semantics* (cons : (cons V3036 ()))) V3037 V3038 V3039)))))) +(defun shen.syntax-check (V3024 V3025 V3026 V3027 V3028) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2374 (shen.lazyderef V3024 V3027) (if (= () V2374) (do (shen.incinfs) (thaw V3028)) false)) (if (= Case false) (let Case (let V2375 (shen.lazyderef V3024 V3027) (if (cons? V2375) (let X (hd V2375) (let Syntax (tl V2375) (let C (shen.newpv V3027) (let X&& (shen.newpv V3027) (let B (shen.newpv V3027) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3027)) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3026 V3027 (freeze (cut Throwcontrol V3027 (freeze (bind X&& (concat && (shen.lazyderef X V3027)) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3025 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3026) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.syntax-check Syntax V3025 V3026 V3027 V3028))))))))))))))))))))))) false)) (if (= Case false) (let V2376 (shen.lazyderef V3024 V3027) (if (cons? V2376) (let X (hd V2376) (let Syntax (tl V2376) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3025 ()))) V3026 V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.syntax-check Syntax V3025 V3026 V3027 V3028)))))))) false)) Case)) Case))))) -(defun shen.rename-semantics (V3040) (cond ((cons? V3040) (cons (shen.rename-semantics (hd V3040)) (shen.rename-semantics (tl V3040)))) ((shen.grammar_symbol? V3040) (cons shen.<-sem (cons V3040 ()))) (true V3040))) +(defun shen.semantics-check (V3029 V3030 V3031 V3032 V3033) (let Semantics* (shen.newpv V3032) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3029 V3032))) V3032 (freeze (shen.t* (cons Semantics* (cons : (cons V3030 ()))) V3031 V3032 V3033)))))) + +(defun shen.rename-semantics (V3034) (cond ((cons? V3034) (cons (shen.rename-semantics (hd V3034)) (shen.rename-semantics (tl V3034)))) ((shen.grammar_symbol? V3034) (cons shen.<-sem (cons V3034 ()))) (true V3034))) diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index 5a154fb..ecb9d91 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -53,7 +53,7 @@ (defun version (V2288) (set *version* V2288)) -(version "version 13") +(version "version 13.1") (defun shen.credits () (do (shen.prhush " Shen 2010, copyright (C) 2010 Mark Tarver diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index 5121dc8..419e53f 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -105,7 +105,7 @@ preclude 1 preclude-all-but 1 protect 1 address-> 3 put 4 reassemble 2 read-file-as-string 1 read-file 1 read 1 read-byte 1 read-from-string 1 remove 2 reverse 1 set 2 simple-error 1 snd 1 specialise 1 spy 1 step 1 stinput 0 stoutput 0 string->n 1 string->symbol 1 string? 1 strong-warning 1 subst 3 sum 1 - symbol? 1 tail 1 tl 1 tc 1 tc? 1 thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 1 return 3 + symbol? 1 tail 1 tl 1 tc 1 tc? 0 thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 1 return 3 undefmacro 1 unprofile 1 unify 4 unify! 4 union 2 untrack 1 unspecialise 1 undefmacro 1 vector 1 vector-> 3 value 1 variable? 1 version 1 warn 1 write-byte 2 write-to-file 2 y-or-n? 1 + 2 * 2 / 2 - 2 == 2 1 @p 2 @v 2 @s 2 preclude 1 include 1 preclude-all-but 1 include-all-but 1 where 2]) diff --git a/shen/src/load.shen b/shen/src/load.shen index f748d39..cb561e4 100644 --- a/shen/src/load.shen +++ b/shen/src/load.shen @@ -105,7 +105,7 @@ := ;) (define write-to-file - File Text -> (let Stream (open file File out) + File Text -> (let Stream (open File out) String (if (string? Text) (make-string "~A~%~%" Text) (make-string "~S~%~%" Text)) diff --git a/shen/src/t-star.shen b/shen/src/t-star.shen index ab4fc24..7b0add4 100644 --- a/shen/src/t-star.shen +++ b/shen/src/t-star.shen @@ -123,7 +123,6 @@ (mode [open FileName Direction] -) [stream Direction] Hyp <-- ! (th* FileName string Hyp); (mode [type X A] -) B Hyp <-- ! (unify A B) (th* X A Hyp); (mode [input+ A Stream] -) B Hyp <-- (bind C (demodulate A)) (unify B C) (th* Stream [stream in] Hyp); - (mode [read+ : A Stream] -) B Hyp <-- (bind C (demodulate A)) (unify B C) (th* Stream [stream in] Hyp); (mode [set Var Val] -) A Hyp <-- ! (th* Var symbol Hyp) ! (th* [value Var] A Hyp) (th* Val A Hyp); (mode [<-sem F] -) C Hyp <-- ! (th* F [A ==> B] Hyp) @@ -180,7 +179,7 @@ \* Pauses for user *\ (define pause-for-user - -> (let Byte (read-byte (stinput)) + -> (let Byte (do (read-byte (stinput)) (read-byte (stinput))) (if (= Byte 94) (error "input aborted~%") (nl)))) @@ -212,7 +211,7 @@ (mode [define F | X] -) A Hyp <-- (t*-defh (compile (function ) X) F A Hyp);) (defprolog t*-defh - (mode [Sig | Rules] -) F A Hyp <-- (t*-defhh Sig (ue Sig) F A Hyp Rules);) + (mode [Sig | Rules] -) F A Hyp <-- (t*-defhh Sig (ue-sig Sig) F A Hyp Rules);) (defprolog t*-defhh Sig Sig&& F A Hyp Rules <-- (t*-rules Rules Sig&& 1 F [[F : Sig&&] | Hyp]) @@ -230,6 +229,11 @@ X -> (concat && X) where (variable? X) X -> X) +(define ue-sig + [X | Y] -> (map (function ue-sig) [X | Y]) + X -> (concat &&& X) where (variable? X) + X -> X) + (define ues X -> [X] where (ue? X) [X | Y] -> (union (ues X) (ues Y)) diff --git a/shen/src/toplevel.shen b/shen/src/toplevel.shen index 540eb81..2a6e685 100644 --- a/shen/src/toplevel.shen +++ b/shen/src/toplevel.shen @@ -66,7 +66,7 @@ (define version S -> (set *version* S)) -(version "version 13") +(version "version 13.1") (define credits -> (do (output "~%Shen 2010, copyright (C) 2010 Mark Tarver~%") From 9589d59f2cae3eed9d8ef757cf3b9aba68ba172c Mon Sep 17 00:00:00 2001 From: linux Date: Sun, 1 Sep 2013 17:01:47 +0100 Subject: [PATCH 04/57] b105 : b102 built fine with 500k stackspace. However b105 is failing with 500k stackspace, but builds fine with 1000k --- shen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shen.java b/shen.java index 2d9ce40..3439a16 100755 --- a/shen.java +++ b/shen.java @@ -5,4 +5,4 @@ shen="find . -name shen.java-*.jar" test -z `$shen` && mvn package -$java -Xss500k -jar `$shen` +$java -Xss1000k -jar `$shen` From 6241bde9533072a2789ab6c276dbb92afbc0009e Mon Sep 17 00:00:00 2001 From: linux Date: Wed, 4 Sep 2013 07:43:50 +0100 Subject: [PATCH 05/57] b105 : updating with Shen 13.2.1 --- shen/Test Programs/strings.shen | 3 +- shen/klambda/declarations.kl | 59 ++------------------ shen/klambda/sys.kl | 14 +++++ shen/klambda/t-star.kl | 98 ++++++++++++++++----------------- shen/klambda/toplevel.kl | 46 +++++++--------- shen/klambda/types.kl | 14 ++++- shen/src/declarations.shen | 40 ++++++++------ shen/src/sys.shen | 18 ++++++ shen/src/t-star.shen | 3 +- shen/src/toplevel.shen | 5 -- shen/src/types.shen | 10 +++- 11 files changed, 154 insertions(+), 156 deletions(-) diff --git a/shen/Test Programs/strings.shen b/shen/Test Programs/strings.shen index ed60d96..539942b 100644 --- a/shen/Test Programs/strings.shen +++ b/shen/Test Programs/strings.shen @@ -10,8 +10,7 @@ Rep "" Ss -> (@s Rep Ss) Rep (@s S Ss) (@s S Ss') -> (subst-string' Rep Ss Ss') _ _ _ -> "failed!") - - + (define rwilli {string --> string} "" -> "" diff --git a/shen/klambda/declarations.kl b/shen/klambda/declarations.kl index eb8fc98..b267155 100644 --- a/shen/klambda/declarations.kl +++ b/shen/klambda/declarations.kl @@ -1,53 +1,4 @@ -"********************************************************************************** -* The License * -* * -* The user is free to produce commercial applications with the software, to * -* distribute these applications in source or binary form, and to charge monies * -* for them as he sees fit and in concordance with the laws of the land subject * -* to the following license. * -* * -* 1. The license applies to all the software and all derived software and * -* must appear on such. * -* * -* 2. It is illegal to distribute the software without this license attached * -* to it and use of the software implies agreement with the license as such. * -* It is illegal for anyone who is not the copyright holder to tamper with * -* or change the license. * -* * -* 3. Neither the names of Lambda Associates or the copyright holder may be used * -* to endorse or promote products built using the software without specific * -* prior written permission from the copyright holder. * -* * -* 4. That possession of this license does not confer on the copyright holder * -* any special contractual obligation towards the user. That in no event * -* shall the copyright holder be liable for any direct, indirect, incidental, * -* special, exemplary or consequential damages (including but not limited * -* to procurement of substitute goods or services, loss of use, data, * -* interruption), however caused and on any theory of liability, whether in * -* contract, strict liability or tort (including negligence) arising in any * -* way out of the use of the software, even if advised of the possibility of * -* such damage. * -* * -* 5. It is permitted for the user to change the software, for the purpose of * -* improving performance, correcting an error, or porting to a new platform, * -* and distribute the derived version of Shen provided the resulting program * -* conforms in all respects to the Shen standard and is issued under that * -* title. The user must make it clear with his distribution that he/she is * -* the author of the changes and what these changes are and why. * -* * -* 6. Derived versions of this software in whatever form are subject to the same * -* restrictions. In particular it is not permitted to make derived copies of * -* this software which do not conform to the Shen standard or appear under a * -* different title. * -* * -* It is permitted to distribute versions of Shen which incorporate libraries, * -* graphics or other facilities which are not part of the Shen standard. * -* * -* For an explication of this license see www.shenlanguage.org/license.htm which * -* explains this license in full. * -* * -***************************************************************************************** -"(set shen.*installing-kl* false) +"*********************************************************************************** The License ** ** The user is free to produce commercial applications with the software, to ** distribute these applications in source or binary form, and to charge monies ** for them as he sees fit and in concordance with the laws of the land subject ** to the following license. ** * * 1. The license applies to all the software and all derived software and ** must appear on such. ** ** 2. It is illegal to distribute the software without this license attached ** to it and use of the software implies agreement with the license as such. ** It is illegal for anyone who is not the copyright holder to tamper with ** or change the license. ** ** 3. Neither the names of Lambda Associates or the copyright holder may be used ** to endorse or promote products built using the software without specific ** prior written permission from the copyright holder. ** ** 4. That possession of this license does not confer on the copyright holder ** any special contractual obligation towards the user. That in no event * * shall the copyright holder be liable for any direct, indirect, incidental, * * special, exemplary or consequential damages (including but not limited ** to procurement of substitute goods or services, loss of use, data, * * interruption), however caused and on any theory of liability, whether in * * contract, strict liability or tort (including negligence) arising in any ** way out of the use of the software, even if advised of the possibility of ** such damage. * * ** 5. It is permitted for the user to change the software, for the purpose of ** improving performance, correcting an error, or porting to a new platform, ** and distribute the derived version of Shen provided the resulting program ** conforms in all respects to the Shen standard and is issued under that * * title. The user must make it clear with his distribution that he/she is ** the author of the changes and what these changes are and why. ** ** 6. Derived versions of this software in whatever form are subject to the same ** restrictions. In particular it is not permitted to make derived copies of ** this software which do not conform to the Shen standard or appear under a ** different title. ** ** It is permitted to distribute versions of Shen which incorporate libraries, ** graphics or other facilities which are not part of the Shen standard. ** ** For an explication of this license see www.shenlanguage.org/license.htm which ** explains this license in full. ** ******************************************************************************************"(set shen.*installing-kl* false) (set shen.*history* ()) @@ -73,7 +24,7 @@ (set shen.*alphabet* (cons A (cons B (cons C (cons D (cons E (cons F (cons G (cons H (cons I (cons J (cons K (cons L (cons M (cons N (cons O (cons P (cons Q (cons R (cons S (cons T (cons U (cons V (cons W (cons X (cons Y (cons Z ()))))))))))))))))))))))))))) -(set shen.*special* (cons @p (cons @s (cons @v (cons cons (cons lambda (cons let (cons type (cons where (cons set (cons open ()))))))))))) +(set shen.*special* (cons @p (cons @s (cons @v (cons cons (cons lambda (cons let (cons where (cons set (cons open ())))))))))) (set shen.*extraspecial* (cons define (cons shen.process-datatype (cons input+ (cons defcc (cons read+ (cons defmacro ()))))))) @@ -109,17 +60,19 @@ (set shen.*optimise* false) +(set *version* "13.2.1") + (defun shen.initialise_arity_table (V820) (cond ((= () V820) ()) ((and (cons? V820) (cons? (tl V820))) (let DecArity (put (hd V820) arity (hd (tl V820)) (value *property-vector*)) (shen.initialise_arity_table (tl (tl V820))))) (true (shen.sys-error shen.initialise_arity_table)))) (defun arity (V821) (trap-error (get V821 arity (value *property-vector*)) (lambda E -1))) -(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons intersection (cons 2 (cons kill (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons package (cons 3 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons shen.sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 1 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons shen.sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (defun systemf (V822) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V822 External) (value *property-vector*))))) (defun adjoin (V823 V824) (if (element? V823 V824) V824 (cons V823 V824))) -(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons package (cons output (cons out (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) +(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) (defun specialise (V825) (do (set shen.*special* (cons V825 (value shen.*special*))) V825)) diff --git a/shen/klambda/sys.kl b/shen/klambda/sys.kl index 6803e1f..7171f6c 100644 --- a/shen/klambda/sys.kl +++ b/shen/klambda/sys.kl @@ -253,5 +253,19 @@ (defun shen.optimise (V2061) (cond ((= + V2061) (set shen.*optimise* true)) ((= - V2061) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. ")))) +(defun os () (value *os*)) + +(defun language () (value *language*)) + +(defun version () (value *version*)) + +(defun port () (value *port*)) + +(defun porters () (value *porters*)) + +(defun implementation () (value *implementation*)) + +(defun release () (value *release*)) + diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index d38fe4a..cc1090b 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,117 +47,117 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2822 V2823) (let Curry (shen.curry V2822) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2823)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2821 V2822) (let Curry (shen.curry V2821) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2822)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2824) (cond ((and (cons? V2824) (shen.special? (hd V2824))) (cons (hd V2824) (map shen.curry (tl V2824)))) ((and (cons? V2824) (and (cons? (tl V2824)) (shen.extraspecial? (hd V2824)))) V2824) ((and (cons? V2824) (and (cons? (tl V2824)) (cons? (tl (tl V2824))))) (shen.curry (cons (cons (hd V2824) (cons (hd (tl V2824)) ())) (tl (tl V2824))))) ((and (cons? V2824) (and (cons? (tl V2824)) (= () (tl (tl V2824))))) (cons (shen.curry (hd V2824)) (cons (shen.curry (hd (tl V2824))) ()))) (true V2824))) +(defun shen.curry (V2823) (cond ((and (cons? V2823) (shen.special? (hd V2823))) (cons (hd V2823) (map shen.curry (tl V2823)))) ((and (cons? V2823) (and (cons? (tl V2823)) (shen.extraspecial? (hd V2823)))) V2823) ((and (cons? V2823) (and (= type (hd V2823)) (and (cons? (tl V2823)) (and (cons? (tl (tl V2823))) (= () (tl (tl (tl V2823)))))))) (cons type (cons (shen.curry (hd (tl V2823))) (tl (tl V2823))))) ((and (cons? V2823) (and (cons? (tl V2823)) (cons? (tl (tl V2823))))) (shen.curry (cons (cons (hd V2823) (cons (hd (tl V2823)) ())) (tl (tl V2823))))) ((and (cons? V2823) (and (cons? (tl V2823)) (= () (tl (tl V2823))))) (cons (shen.curry (hd V2823)) (cons (shen.curry (hd (tl V2823))) ()))) (true V2823))) -(defun shen.special? (V2825) (element? V2825 (value shen.*special*))) +(defun shen.special? (V2824) (element? V2824 (value shen.*special*))) -(defun shen.extraspecial? (V2826) (element? V2826 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2825) (element? V2825 (value shen.*extraspecial*))) -(defun shen.t* (V2827 V2828 V2829 V2830) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2829) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2829 (freeze (bind Error (shen.errormaxinfs) V2829 V2830))))) (if (= Case false) (let Case (let V2816 (shen.lazyderef V2827 V2829) (if (= fail V2816) (do (shen.incinfs) (cut Throwcontrol V2829 (freeze (shen.prolog-failure V2829 V2830)))) false)) (if (= Case false) (let Case (let V2817 (shen.lazyderef V2827 V2829) (if (cons? V2817) (let X (hd V2817) (let V2818 (shen.lazyderef (tl V2817) V2829) (if (cons? V2818) (let V2819 (shen.lazyderef (hd V2818) V2829) (if (= : V2819) (let V2820 (shen.lazyderef (tl V2818) V2829) (if (cons? V2820) (let A (hd V2820) (let V2821 (shen.lazyderef (tl V2820) V2829) (if (= () V2821) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2829 (freeze (cut Throwcontrol V2829 (freeze (shen.th* X A V2828 V2829 V2830)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2829) (do (shen.incinfs) (shen.show V2827 V2828 V2829 (freeze (bind Datatypes (value shen.*datatypes*) V2829 (freeze (shen.udefs* V2827 V2828 Datatypes V2829 V2830))))))) Case)) Case)) Case))))) +(defun shen.t* (V2826 V2827 V2828 V2829) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2828) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2828 (freeze (bind Error (shen.errormaxinfs) V2828 V2829))))) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2826 V2828) (if (= fail V2815) (do (shen.incinfs) (cut Throwcontrol V2828 (freeze (shen.prolog-failure V2828 V2829)))) false)) (if (= Case false) (let Case (let V2816 (shen.lazyderef V2826 V2828) (if (cons? V2816) (let X (hd V2816) (let V2817 (shen.lazyderef (tl V2816) V2828) (if (cons? V2817) (let V2818 (shen.lazyderef (hd V2817) V2828) (if (= : V2818) (let V2819 (shen.lazyderef (tl V2817) V2828) (if (cons? V2819) (let A (hd V2819) (let V2820 (shen.lazyderef (tl V2819) V2828) (if (= () V2820) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2828 (freeze (cut Throwcontrol V2828 (freeze (shen.th* X A V2827 V2828 V2829)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2828) (do (shen.incinfs) (shen.show V2826 V2827 V2828 (freeze (bind Datatypes (value shen.*datatypes*) V2828 (freeze (shen.udefs* V2826 V2827 Datatypes V2828 V2829))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2835) (cond ((= + V2835) (set shen.*shen-type-theory-enabled?* true)) ((= - V2835) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2834) (cond ((= + V2834) (set shen.*shen-type-theory-enabled?* true)) ((= - V2834) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2844 V2845) false) +(defun shen.prolog-failure (V2843 V2844) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2846 V2847 V2848 V2849 V2850) (let Case (let V2812 (shen.lazyderef V2848 V2849) (if (cons? V2812) (let D (hd V2812) (do (shen.incinfs) (call (cons D (cons V2846 (cons V2847 ()))) V2849 V2850))) false)) (if (= Case false) (let V2813 (shen.lazyderef V2848 V2849) (if (cons? V2813) (let Ds (tl V2813) (do (shen.incinfs) (shen.udefs* V2846 V2847 Ds V2849 V2850))) false)) Case))) +(defun shen.udefs* (V2845 V2846 V2847 V2848 V2849) (let Case (let V2811 (shen.lazyderef V2847 V2848) (if (cons? V2811) (let D (hd V2811) (do (shen.incinfs) (call (cons D (cons V2845 (cons V2846 ()))) V2848 V2849))) false)) (if (= Case false) (let V2812 (shen.lazyderef V2847 V2848) (if (cons? V2812) (let Ds (tl V2812) (do (shen.incinfs) (shen.udefs* V2845 V2846 Ds V2848 V2849))) false)) Case))) -(defun shen.th* (V2851 V2852 V2853 V2854 V2855) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2851 (cons : (cons V2852 ()))) V2853 V2854 (freeze (fwhen false V2854 V2855)))) (if (= Case false) (let Case (let F (shen.newpv V2854) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2851 V2854)) V2854 (freeze (bind F (shen.sigf (shen.lazyderef V2851 V2854)) V2854 (freeze (call (cons F (cons V2852 ())) V2854 V2855))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2851 V2852 V2854 V2855)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2851 V2852 V2853 V2854 V2855)) (if (= Case false) (let Case (let V2697 (shen.lazyderef V2851 V2854) (if (cons? V2697) (let F (hd V2697) (let V2698 (shen.lazyderef (tl V2697) V2854) (if (= () V2698) (do (shen.incinfs) (shen.th* F (cons --> (cons V2852 ())) V2853 V2854 V2855)) false))) false)) (if (= Case false) (let Case (let V2699 (shen.lazyderef V2851 V2854) (if (cons? V2699) (let F (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2854) (if (cons? V2700) (let X (hd V2700) (let V2701 (shen.lazyderef (tl V2700) V2854) (if (= () V2701) (let B (shen.newpv V2854) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2852 ()))) V2853 V2854 (freeze (shen.th* X B V2853 V2854 V2855))))) false))) false))) false)) (if (= Case false) (let Case (let V2702 (shen.lazyderef V2851 V2854) (if (cons? V2702) (let V2703 (shen.lazyderef (hd V2702) V2854) (if (= cons V2703) (let V2704 (shen.lazyderef (tl V2702) V2854) (if (cons? V2704) (let X (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2854) (if (cons? V2705) (let Y (hd V2705) (let V2706 (shen.lazyderef (tl V2705) V2854) (if (= () V2706) (let V2707 (shen.lazyderef V2852 V2854) (if (cons? V2707) (let V2708 (shen.lazyderef (hd V2707) V2854) (if (= list V2708) (let V2709 (shen.lazyderef (tl V2707) V2854) (if (cons? V2709) (let A (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2854) (if (= () V2710) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2710) (do (shen.bindv V2710 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2710 V2854) Result))) false)))) (if (shen.pvar? V2709) (let A (shen.newpv V2854) (do (shen.bindv V2709 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2709 V2854) Result)))) false))) (if (shen.pvar? V2708) (do (shen.bindv V2708 list V2854) (let Result (let V2711 (shen.lazyderef (tl V2707) V2854) (if (cons? V2711) (let A (hd V2711) (let V2712 (shen.lazyderef (tl V2711) V2854) (if (= () V2712) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2712) (do (shen.bindv V2712 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2712 V2854) Result))) false)))) (if (shen.pvar? V2711) (let A (shen.newpv V2854) (do (shen.bindv V2711 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2711 V2854) Result)))) false))) (do (shen.unbindv V2708 V2854) Result))) false))) (if (shen.pvar? V2707) (let A (shen.newpv V2854) (do (shen.bindv V2707 (cons list (cons A ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons list (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2707 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2713 (shen.lazyderef V2851 V2854) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2854) (if (= @p V2714) (let V2715 (shen.lazyderef (tl V2713) V2854) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2854) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2854) (if (= () V2717) (let V2718 (shen.lazyderef V2852 V2854) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2854) (if (cons? V2719) (let V2720 (shen.lazyderef (hd V2719) V2854) (if (= * V2720) (let V2721 (shen.lazyderef (tl V2719) V2854) (if (cons? V2721) (let B (hd V2721) (let V2722 (shen.lazyderef (tl V2721) V2854) (if (= () V2722) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (if (shen.pvar? V2722) (do (shen.bindv V2722 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2722 V2854) Result))) false)))) (if (shen.pvar? V2721) (let B (shen.newpv V2854) (do (shen.bindv V2721 (cons B ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2721 V2854) Result)))) false))) (if (shen.pvar? V2720) (do (shen.bindv V2720 * V2854) (let Result (let V2723 (shen.lazyderef (tl V2719) V2854) (if (cons? V2723) (let B (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2854) (if (= () V2724) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2724 V2854) Result))) false)))) (if (shen.pvar? V2723) (let B (shen.newpv V2854) (do (shen.bindv V2723 (cons B ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2723 V2854) Result)))) false))) (do (shen.unbindv V2720 V2854) Result))) false))) (if (shen.pvar? V2719) (let B (shen.newpv V2854) (do (shen.bindv V2719 (cons * (cons B ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2719 V2854) Result)))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.bindv V2718 (cons A (cons * (cons B ()))) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y B V2853 V2854 V2855)))) (do (shen.unbindv V2718 V2854) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2725 (shen.lazyderef V2851 V2854) (if (cons? V2725) (let V2726 (shen.lazyderef (hd V2725) V2854) (if (= @v V2726) (let V2727 (shen.lazyderef (tl V2725) V2854) (if (cons? V2727) (let X (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2854) (if (cons? V2728) (let Y (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2854) (if (= () V2729) (let V2730 (shen.lazyderef V2852 V2854) (if (cons? V2730) (let V2731 (shen.lazyderef (hd V2730) V2854) (if (= vector V2731) (let V2732 (shen.lazyderef (tl V2730) V2854) (if (cons? V2732) (let A (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2854) (if (= () V2733) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2733 V2854) Result))) false)))) (if (shen.pvar? V2732) (let A (shen.newpv V2854) (do (shen.bindv V2732 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2732 V2854) Result)))) false))) (if (shen.pvar? V2731) (do (shen.bindv V2731 vector V2854) (let Result (let V2734 (shen.lazyderef (tl V2730) V2854) (if (cons? V2734) (let A (hd V2734) (let V2735 (shen.lazyderef (tl V2734) V2854) (if (= () V2735) (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (if (shen.pvar? V2735) (do (shen.bindv V2735 () V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2735 V2854) Result))) false)))) (if (shen.pvar? V2734) (let A (shen.newpv V2854) (do (shen.bindv V2734 (cons A ()) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2734 V2854) Result)))) false))) (do (shen.unbindv V2731 V2854) Result))) false))) (if (shen.pvar? V2730) (let A (shen.newpv V2854) (do (shen.bindv V2730 (cons vector (cons A ())) V2854) (let Result (do (shen.incinfs) (shen.th* X A V2853 V2854 (freeze (shen.th* Y (cons vector (cons A ())) V2853 V2854 V2855)))) (do (shen.unbindv V2730 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2736 (shen.lazyderef V2851 V2854) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2854) (if (= @s V2737) (let V2738 (shen.lazyderef (tl V2736) V2854) (if (cons? V2738) (let X (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2854) (if (cons? V2739) (let Y (hd V2739) (let V2740 (shen.lazyderef (tl V2739) V2854) (if (= () V2740) (let V2741 (shen.lazyderef V2852 V2854) (if (= string V2741) (do (shen.incinfs) (shen.th* X string V2853 V2854 (freeze (shen.th* Y string V2853 V2854 V2855)))) (if (shen.pvar? V2741) (do (shen.bindv V2741 string V2854) (let Result (do (shen.incinfs) (shen.th* X string V2853 V2854 (freeze (shen.th* Y string V2853 V2854 V2855)))) (do (shen.unbindv V2741 V2854) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2742 (shen.lazyderef V2851 V2854) (if (cons? V2742) (let V2743 (shen.lazyderef (hd V2742) V2854) (if (= lambda V2743) (let V2744 (shen.lazyderef (tl V2742) V2854) (if (cons? V2744) (let X (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2854) (if (cons? V2745) (let Y (hd V2745) (let V2746 (shen.lazyderef (tl V2745) V2854) (if (= () V2746) (let V2747 (shen.lazyderef V2852 V2854) (if (cons? V2747) (let A (hd V2747) (let V2748 (shen.lazyderef (tl V2747) V2854) (if (cons? V2748) (let V2749 (shen.lazyderef (hd V2748) V2854) (if (= --> V2749) (let V2750 (shen.lazyderef (tl V2748) V2854) (if (cons? V2750) (let B (hd V2750) (let V2751 (shen.lazyderef (tl V2750) V2854) (if (= () V2751) (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (if (shen.pvar? V2751) (do (shen.bindv V2751 () V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2751 V2854) Result))) false)))) (if (shen.pvar? V2750) (let B (shen.newpv V2854) (do (shen.bindv V2750 (cons B ()) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2750 V2854) Result)))) false))) (if (shen.pvar? V2749) (do (shen.bindv V2749 --> V2854) (let Result (let V2752 (shen.lazyderef (tl V2748) V2854) (if (cons? V2752) (let B (hd V2752) (let V2753 (shen.lazyderef (tl V2752) V2854) (if (= () V2753) (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (if (shen.pvar? V2753) (do (shen.bindv V2753 () V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2753 V2854) Result))) false)))) (if (shen.pvar? V2752) (let B (shen.newpv V2854) (do (shen.bindv V2752 (cons B ()) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2752 V2854) Result)))) false))) (do (shen.unbindv V2749 V2854) Result))) false))) (if (shen.pvar? V2748) (let B (shen.newpv V2854) (do (shen.bindv V2748 (cons --> (cons B ())) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2748 V2854) Result)))) false)))) (if (shen.pvar? V2747) (let A (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.bindv V2747 (cons A (cons --> (cons B ()))) V2854) (let Result (let Z (shen.newpv V2854) (let X&& (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Y V2854)) V2854 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2853) V2854 V2855)))))))))) (do (shen.unbindv V2747 V2854) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2754 (shen.lazyderef V2851 V2854) (if (cons? V2754) (let V2755 (shen.lazyderef (hd V2754) V2854) (if (= let V2755) (let V2756 (shen.lazyderef (tl V2754) V2854) (if (cons? V2756) (let X (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2854) (if (cons? V2757) (let Y (hd V2757) (let V2758 (shen.lazyderef (tl V2757) V2854) (if (cons? V2758) (let Z (hd V2758) (let V2759 (shen.lazyderef (tl V2758) V2854) (if (= () V2759) (let W (shen.newpv V2854) (let X&& (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* Y B V2853 V2854 (freeze (bind X&& (shen.placeholder) V2854 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2854) (shen.lazyderef X V2854) (shen.lazyderef Z V2854)) V2854 (freeze (shen.th* W V2852 (cons (cons X&& (cons : (cons B ()))) V2853) V2854 V2855))))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2760 (shen.lazyderef V2851 V2854) (if (cons? V2760) (let V2761 (shen.lazyderef (hd V2760) V2854) (if (= open V2761) (let V2762 (shen.lazyderef (tl V2760) V2854) (if (cons? V2762) (let FileName (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2854) (if (cons? V2763) (let Direction2693 (hd V2763) (let V2764 (shen.lazyderef (tl V2763) V2854) (if (= () V2764) (let V2765 (shen.lazyderef V2852 V2854) (if (cons? V2765) (let V2766 (shen.lazyderef (hd V2765) V2854) (if (= stream V2766) (let V2767 (shen.lazyderef (tl V2765) V2854) (if (cons? V2767) (let Direction (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2854) (if (= () V2768) (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (if (shen.pvar? V2768) (do (shen.bindv V2768 () V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2768 V2854) Result))) false)))) (if (shen.pvar? V2767) (let Direction (shen.newpv V2854) (do (shen.bindv V2767 (cons Direction ()) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2767 V2854) Result)))) false))) (if (shen.pvar? V2766) (do (shen.bindv V2766 stream V2854) (let Result (let V2769 (shen.lazyderef (tl V2765) V2854) (if (cons? V2769) (let Direction (hd V2769) (let V2770 (shen.lazyderef (tl V2769) V2854) (if (= () V2770) (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (if (shen.pvar? V2770) (do (shen.bindv V2770 () V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2770 V2854) Result))) false)))) (if (shen.pvar? V2769) (let Direction (shen.newpv V2854) (do (shen.bindv V2769 (cons Direction ()) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2769 V2854) Result)))) false))) (do (shen.unbindv V2766 V2854) Result))) false))) (if (shen.pvar? V2765) (let Direction (shen.newpv V2854) (do (shen.bindv V2765 (cons stream (cons Direction ())) V2854) (let Result (do (shen.incinfs) (unify! Direction Direction2693 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* FileName string V2853 V2854 V2855)))))) (do (shen.unbindv V2765 V2854) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2771 (shen.lazyderef V2851 V2854) (if (cons? V2771) (let V2772 (shen.lazyderef (hd V2771) V2854) (if (= type V2772) (let V2773 (shen.lazyderef (tl V2771) V2854) (if (cons? V2773) (let X (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2854) (if (cons? V2774) (let A (hd V2774) (let V2775 (shen.lazyderef (tl V2774) V2854) (if (= () V2775) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (unify A V2852 V2854 (freeze (shen.th* X A V2853 V2854 V2855)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2776 (shen.lazyderef V2851 V2854) (if (cons? V2776) (let V2777 (shen.lazyderef (hd V2776) V2854) (if (= input+ V2777) (let V2778 (shen.lazyderef (tl V2776) V2854) (if (cons? V2778) (let A (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2854) (if (cons? V2779) (let Stream (hd V2779) (let V2780 (shen.lazyderef (tl V2779) V2854) (if (= () V2780) (let C (shen.newpv V2854) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2854)) V2854 (freeze (unify V2852 C V2854 (freeze (shen.th* Stream (cons stream (cons in ())) V2853 V2854 V2855))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2781 (shen.lazyderef V2851 V2854) (if (cons? V2781) (let V2782 (shen.lazyderef (hd V2781) V2854) (if (= set V2782) (let V2783 (shen.lazyderef (tl V2781) V2854) (if (cons? V2783) (let Var (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2854) (if (cons? V2784) (let Val (hd V2784) (let V2785 (shen.lazyderef (tl V2784) V2854) (if (= () V2785) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* Var symbol V2853 V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* (cons value (cons Var ())) V2852 V2853 V2854 (freeze (shen.th* Val V2852 V2853 V2854 V2855)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2786 (shen.lazyderef V2851 V2854) (if (cons? V2786) (let V2787 (shen.lazyderef (hd V2786) V2854) (if (= shen.<-sem V2787) (let V2788 (shen.lazyderef (tl V2786) V2854) (if (cons? V2788) (let F (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2854) (if (= () V2789) (let A (shen.newpv V2854) (let F&& (shen.newpv V2854) (let B (shen.newpv V2854) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2853 V2854 (freeze (cut Throwcontrol V2854 (freeze (bind F&& (concat && (shen.lazyderef F V2854)) V2854 (freeze (cut Throwcontrol V2854 (freeze (shen.th* F&& V2852 (cons (cons F&& (cons : (cons B ()))) V2853) V2854 V2855))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2851 V2854) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2854) (if (= fail V2791) (let V2792 (shen.lazyderef (tl V2790) V2854) (if (= () V2792) (let V2793 (shen.lazyderef V2852 V2854) (if (= symbol V2793) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2793) (do (shen.bindv V2793 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2793 V2854) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2854) (do (shen.incinfs) (shen.t*-hyps V2853 NewHyp V2854 (freeze (shen.th* V2851 V2852 NewHyp V2854 V2855))))) (if (= Case false) (let Case (let V2794 (shen.lazyderef V2851 V2854) (if (cons? V2794) (let V2795 (shen.lazyderef (hd V2794) V2854) (if (= define V2795) (let V2796 (shen.lazyderef (tl V2794) V2854) (if (cons? V2796) (let F (hd V2796) (let X (tl V2796) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.t*-def (cons define (cons F X)) V2852 V2853 V2854 V2855)))))) false)) false)) false)) (if (= Case false) (let Case (let V2797 (shen.lazyderef V2851 V2854) (if (cons? V2797) (let V2798 (shen.lazyderef (hd V2797) V2854) (if (= defcc V2798) (let V2799 (shen.lazyderef (tl V2797) V2854) (if (cons? V2799) (let F (hd V2799) (let X (tl V2799) (do (shen.incinfs) (cut Throwcontrol V2854 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2852 V2853 V2854 V2855)))))) false)) false)) false)) (if (= Case false) (let Case (let V2800 (shen.lazyderef V2851 V2854) (if (cons? V2800) (let V2801 (shen.lazyderef (hd V2800) V2854) (if (= defmacro V2801) (let V2802 (shen.lazyderef V2852 V2854) (if (= unit V2802) (do (shen.incinfs) (cut Throwcontrol V2854 V2855)) (if (shen.pvar? V2802) (do (shen.bindv V2802 unit V2854) (let Result (do (shen.incinfs) (cut Throwcontrol V2854 V2855)) (do (shen.unbindv V2802 V2854) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2803 (shen.lazyderef V2851 V2854) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2854) (if (= shen.process-datatype V2804) (let V2805 (shen.lazyderef V2852 V2854) (if (= symbol V2805) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2805) (do (shen.bindv V2805 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2805 V2854) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2806 (shen.lazyderef V2851 V2854) (if (cons? V2806) (let V2807 (shen.lazyderef (hd V2806) V2854) (if (= shen.synonyms-help V2807) (let V2808 (shen.lazyderef V2852 V2854) (if (= symbol V2808) (do (shen.incinfs) (thaw V2855)) (if (shen.pvar? V2808) (do (shen.bindv V2808 symbol V2854) (let Result (do (shen.incinfs) (thaw V2855)) (do (shen.unbindv V2808 V2854) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2854) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2854 (freeze (shen.udefs* (cons V2851 (cons : (cons V2852 ()))) V2853 Datatypes V2854 V2855))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2850 V2851 V2852 V2853 V2854) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2850 (cons : (cons V2851 ()))) V2852 V2853 (freeze (fwhen false V2853 V2854)))) (if (= Case false) (let Case (let F (shen.newpv V2853) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2850 V2853)) V2853 (freeze (bind F (shen.sigf (shen.lazyderef V2850 V2853)) V2853 (freeze (call (cons F (cons V2851 ())) V2853 V2854))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2850 V2851 V2853 V2854)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2850 V2851 V2852 V2853 V2854)) (if (= Case false) (let Case (let V2696 (shen.lazyderef V2850 V2853) (if (cons? V2696) (let F (hd V2696) (let V2697 (shen.lazyderef (tl V2696) V2853) (if (= () V2697) (do (shen.incinfs) (shen.th* F (cons --> (cons V2851 ())) V2852 V2853 V2854)) false))) false)) (if (= Case false) (let Case (let V2698 (shen.lazyderef V2850 V2853) (if (cons? V2698) (let F (hd V2698) (let V2699 (shen.lazyderef (tl V2698) V2853) (if (cons? V2699) (let X (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2853) (if (= () V2700) (let B (shen.newpv V2853) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2851 ()))) V2852 V2853 (freeze (shen.th* X B V2852 V2853 V2854))))) false))) false))) false)) (if (= Case false) (let Case (let V2701 (shen.lazyderef V2850 V2853) (if (cons? V2701) (let V2702 (shen.lazyderef (hd V2701) V2853) (if (= cons V2702) (let V2703 (shen.lazyderef (tl V2701) V2853) (if (cons? V2703) (let X (hd V2703) (let V2704 (shen.lazyderef (tl V2703) V2853) (if (cons? V2704) (let Y (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2853) (if (= () V2705) (let V2706 (shen.lazyderef V2851 V2853) (if (cons? V2706) (let V2707 (shen.lazyderef (hd V2706) V2853) (if (= list V2707) (let V2708 (shen.lazyderef (tl V2706) V2853) (if (cons? V2708) (let A (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2853) (if (= () V2709) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2709) (do (shen.bindv V2709 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2709 V2853) Result))) false)))) (if (shen.pvar? V2708) (let A (shen.newpv V2853) (do (shen.bindv V2708 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2708 V2853) Result)))) false))) (if (shen.pvar? V2707) (do (shen.bindv V2707 list V2853) (let Result (let V2710 (shen.lazyderef (tl V2706) V2853) (if (cons? V2710) (let A (hd V2710) (let V2711 (shen.lazyderef (tl V2710) V2853) (if (= () V2711) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2711) (do (shen.bindv V2711 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2711 V2853) Result))) false)))) (if (shen.pvar? V2710) (let A (shen.newpv V2853) (do (shen.bindv V2710 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2710 V2853) Result)))) false))) (do (shen.unbindv V2707 V2853) Result))) false))) (if (shen.pvar? V2706) (let A (shen.newpv V2853) (do (shen.bindv V2706 (cons list (cons A ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2706 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2712 (shen.lazyderef V2850 V2853) (if (cons? V2712) (let V2713 (shen.lazyderef (hd V2712) V2853) (if (= @p V2713) (let V2714 (shen.lazyderef (tl V2712) V2853) (if (cons? V2714) (let X (hd V2714) (let V2715 (shen.lazyderef (tl V2714) V2853) (if (cons? V2715) (let Y (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2853) (if (= () V2716) (let V2717 (shen.lazyderef V2851 V2853) (if (cons? V2717) (let A (hd V2717) (let V2718 (shen.lazyderef (tl V2717) V2853) (if (cons? V2718) (let V2719 (shen.lazyderef (hd V2718) V2853) (if (= * V2719) (let V2720 (shen.lazyderef (tl V2718) V2853) (if (cons? V2720) (let B (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2853) (if (= () V2721) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (if (shen.pvar? V2721) (do (shen.bindv V2721 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2721 V2853) Result))) false)))) (if (shen.pvar? V2720) (let B (shen.newpv V2853) (do (shen.bindv V2720 (cons B ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2720 V2853) Result)))) false))) (if (shen.pvar? V2719) (do (shen.bindv V2719 * V2853) (let Result (let V2722 (shen.lazyderef (tl V2718) V2853) (if (cons? V2722) (let B (hd V2722) (let V2723 (shen.lazyderef (tl V2722) V2853) (if (= () V2723) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (if (shen.pvar? V2723) (do (shen.bindv V2723 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2723 V2853) Result))) false)))) (if (shen.pvar? V2722) (let B (shen.newpv V2853) (do (shen.bindv V2722 (cons B ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2722 V2853) Result)))) false))) (do (shen.unbindv V2719 V2853) Result))) false))) (if (shen.pvar? V2718) (let B (shen.newpv V2853) (do (shen.bindv V2718 (cons * (cons B ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2718 V2853) Result)))) false)))) (if (shen.pvar? V2717) (let A (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.bindv V2717 (cons A (cons * (cons B ()))) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2717 V2853) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2724 (shen.lazyderef V2850 V2853) (if (cons? V2724) (let V2725 (shen.lazyderef (hd V2724) V2853) (if (= @v V2725) (let V2726 (shen.lazyderef (tl V2724) V2853) (if (cons? V2726) (let X (hd V2726) (let V2727 (shen.lazyderef (tl V2726) V2853) (if (cons? V2727) (let Y (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2853) (if (= () V2728) (let V2729 (shen.lazyderef V2851 V2853) (if (cons? V2729) (let V2730 (shen.lazyderef (hd V2729) V2853) (if (= vector V2730) (let V2731 (shen.lazyderef (tl V2729) V2853) (if (cons? V2731) (let A (hd V2731) (let V2732 (shen.lazyderef (tl V2731) V2853) (if (= () V2732) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2732) (do (shen.bindv V2732 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2732 V2853) Result))) false)))) (if (shen.pvar? V2731) (let A (shen.newpv V2853) (do (shen.bindv V2731 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2731 V2853) Result)))) false))) (if (shen.pvar? V2730) (do (shen.bindv V2730 vector V2853) (let Result (let V2733 (shen.lazyderef (tl V2729) V2853) (if (cons? V2733) (let A (hd V2733) (let V2734 (shen.lazyderef (tl V2733) V2853) (if (= () V2734) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2734) (do (shen.bindv V2734 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2734 V2853) Result))) false)))) (if (shen.pvar? V2733) (let A (shen.newpv V2853) (do (shen.bindv V2733 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2733 V2853) Result)))) false))) (do (shen.unbindv V2730 V2853) Result))) false))) (if (shen.pvar? V2729) (let A (shen.newpv V2853) (do (shen.bindv V2729 (cons vector (cons A ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2729 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2735 (shen.lazyderef V2850 V2853) (if (cons? V2735) (let V2736 (shen.lazyderef (hd V2735) V2853) (if (= @s V2736) (let V2737 (shen.lazyderef (tl V2735) V2853) (if (cons? V2737) (let X (hd V2737) (let V2738 (shen.lazyderef (tl V2737) V2853) (if (cons? V2738) (let Y (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2853) (if (= () V2739) (let V2740 (shen.lazyderef V2851 V2853) (if (= string V2740) (do (shen.incinfs) (shen.th* X string V2852 V2853 (freeze (shen.th* Y string V2852 V2853 V2854)))) (if (shen.pvar? V2740) (do (shen.bindv V2740 string V2853) (let Result (do (shen.incinfs) (shen.th* X string V2852 V2853 (freeze (shen.th* Y string V2852 V2853 V2854)))) (do (shen.unbindv V2740 V2853) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2741 (shen.lazyderef V2850 V2853) (if (cons? V2741) (let V2742 (shen.lazyderef (hd V2741) V2853) (if (= lambda V2742) (let V2743 (shen.lazyderef (tl V2741) V2853) (if (cons? V2743) (let X (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2853) (if (cons? V2744) (let Y (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2853) (if (= () V2745) (let V2746 (shen.lazyderef V2851 V2853) (if (cons? V2746) (let A (hd V2746) (let V2747 (shen.lazyderef (tl V2746) V2853) (if (cons? V2747) (let V2748 (shen.lazyderef (hd V2747) V2853) (if (= --> V2748) (let V2749 (shen.lazyderef (tl V2747) V2853) (if (cons? V2749) (let B (hd V2749) (let V2750 (shen.lazyderef (tl V2749) V2853) (if (= () V2750) (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (if (shen.pvar? V2750) (do (shen.bindv V2750 () V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2750 V2853) Result))) false)))) (if (shen.pvar? V2749) (let B (shen.newpv V2853) (do (shen.bindv V2749 (cons B ()) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2749 V2853) Result)))) false))) (if (shen.pvar? V2748) (do (shen.bindv V2748 --> V2853) (let Result (let V2751 (shen.lazyderef (tl V2747) V2853) (if (cons? V2751) (let B (hd V2751) (let V2752 (shen.lazyderef (tl V2751) V2853) (if (= () V2752) (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (if (shen.pvar? V2752) (do (shen.bindv V2752 () V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2752 V2853) Result))) false)))) (if (shen.pvar? V2751) (let B (shen.newpv V2853) (do (shen.bindv V2751 (cons B ()) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2751 V2853) Result)))) false))) (do (shen.unbindv V2748 V2853) Result))) false))) (if (shen.pvar? V2747) (let B (shen.newpv V2853) (do (shen.bindv V2747 (cons --> (cons B ())) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2747 V2853) Result)))) false)))) (if (shen.pvar? V2746) (let A (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.bindv V2746 (cons A (cons --> (cons B ()))) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2746 V2853) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2753 (shen.lazyderef V2850 V2853) (if (cons? V2753) (let V2754 (shen.lazyderef (hd V2753) V2853) (if (= let V2754) (let V2755 (shen.lazyderef (tl V2753) V2853) (if (cons? V2755) (let X (hd V2755) (let V2756 (shen.lazyderef (tl V2755) V2853) (if (cons? V2756) (let Y (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2853) (if (cons? V2757) (let Z (hd V2757) (let V2758 (shen.lazyderef (tl V2757) V2853) (if (= () V2758) (let W (shen.newpv V2853) (let X&& (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.incinfs) (shen.th* Y B V2852 V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Z V2853)) V2853 (freeze (shen.th* W V2851 (cons (cons X&& (cons : (cons B ()))) V2852) V2853 V2854))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2759 (shen.lazyderef V2850 V2853) (if (cons? V2759) (let V2760 (shen.lazyderef (hd V2759) V2853) (if (= open V2760) (let V2761 (shen.lazyderef (tl V2759) V2853) (if (cons? V2761) (let FileName (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2853) (if (cons? V2762) (let Direction2692 (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2853) (if (= () V2763) (let V2764 (shen.lazyderef V2851 V2853) (if (cons? V2764) (let V2765 (shen.lazyderef (hd V2764) V2853) (if (= stream V2765) (let V2766 (shen.lazyderef (tl V2764) V2853) (if (cons? V2766) (let Direction (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2853) (if (= () V2767) (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (if (shen.pvar? V2767) (do (shen.bindv V2767 () V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2767 V2853) Result))) false)))) (if (shen.pvar? V2766) (let Direction (shen.newpv V2853) (do (shen.bindv V2766 (cons Direction ()) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2766 V2853) Result)))) false))) (if (shen.pvar? V2765) (do (shen.bindv V2765 stream V2853) (let Result (let V2768 (shen.lazyderef (tl V2764) V2853) (if (cons? V2768) (let Direction (hd V2768) (let V2769 (shen.lazyderef (tl V2768) V2853) (if (= () V2769) (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (if (shen.pvar? V2769) (do (shen.bindv V2769 () V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2769 V2853) Result))) false)))) (if (shen.pvar? V2768) (let Direction (shen.newpv V2853) (do (shen.bindv V2768 (cons Direction ()) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2768 V2853) Result)))) false))) (do (shen.unbindv V2765 V2853) Result))) false))) (if (shen.pvar? V2764) (let Direction (shen.newpv V2853) (do (shen.bindv V2764 (cons stream (cons Direction ())) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2764 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2770 (shen.lazyderef V2850 V2853) (if (cons? V2770) (let V2771 (shen.lazyderef (hd V2770) V2853) (if (= type V2771) (let V2772 (shen.lazyderef (tl V2770) V2853) (if (cons? V2772) (let X (hd V2772) (let V2773 (shen.lazyderef (tl V2772) V2853) (if (cons? V2773) (let A (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2853) (if (= () V2774) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (unify A V2851 V2853 (freeze (shen.th* X A V2852 V2853 V2854)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2775 (shen.lazyderef V2850 V2853) (if (cons? V2775) (let V2776 (shen.lazyderef (hd V2775) V2853) (if (= input+ V2776) (let V2777 (shen.lazyderef (tl V2775) V2853) (if (cons? V2777) (let A (hd V2777) (let V2778 (shen.lazyderef (tl V2777) V2853) (if (cons? V2778) (let Stream (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2853) (if (= () V2779) (let C (shen.newpv V2853) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2853)) V2853 (freeze (unify V2851 C V2853 (freeze (shen.th* Stream (cons stream (cons in ())) V2852 V2853 V2854))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2850 V2853) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2853) (if (= set V2781) (let V2782 (shen.lazyderef (tl V2780) V2853) (if (cons? V2782) (let Var (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2853) (if (cons? V2783) (let Val (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2853) (if (= () V2784) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.th* Var symbol V2852 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* (cons value (cons Var ())) V2851 V2852 V2853 (freeze (shen.th* Val V2851 V2852 V2853 V2854)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2850 V2853) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2853) (if (= shen.<-sem V2786) (let V2787 (shen.lazyderef (tl V2785) V2853) (if (cons? V2787) (let F (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2853) (if (= () V2788) (let A (shen.newpv V2853) (let F&& (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2852 V2853 (freeze (cut Throwcontrol V2853 (freeze (bind F&& (concat && (shen.lazyderef F V2853)) V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* F&& V2851 (cons (cons F&& (cons : (cons B ()))) V2852) V2853 V2854))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2789 (shen.lazyderef V2850 V2853) (if (cons? V2789) (let V2790 (shen.lazyderef (hd V2789) V2853) (if (= fail V2790) (let V2791 (shen.lazyderef (tl V2789) V2853) (if (= () V2791) (let V2792 (shen.lazyderef V2851 V2853) (if (= symbol V2792) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2792) (do (shen.bindv V2792 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2792 V2853) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2853) (do (shen.incinfs) (shen.t*-hyps V2852 NewHyp V2853 (freeze (shen.th* V2850 V2851 NewHyp V2853 V2854))))) (if (= Case false) (let Case (let V2793 (shen.lazyderef V2850 V2853) (if (cons? V2793) (let V2794 (shen.lazyderef (hd V2793) V2853) (if (= define V2794) (let V2795 (shen.lazyderef (tl V2793) V2853) (if (cons? V2795) (let F (hd V2795) (let X (tl V2795) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.t*-def (cons define (cons F X)) V2851 V2852 V2853 V2854)))))) false)) false)) false)) (if (= Case false) (let Case (let V2796 (shen.lazyderef V2850 V2853) (if (cons? V2796) (let V2797 (shen.lazyderef (hd V2796) V2853) (if (= defcc V2797) (let V2798 (shen.lazyderef (tl V2796) V2853) (if (cons? V2798) (let F (hd V2798) (let X (tl V2798) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2851 V2852 V2853 V2854)))))) false)) false)) false)) (if (= Case false) (let Case (let V2799 (shen.lazyderef V2850 V2853) (if (cons? V2799) (let V2800 (shen.lazyderef (hd V2799) V2853) (if (= defmacro V2800) (let V2801 (shen.lazyderef V2851 V2853) (if (= unit V2801) (do (shen.incinfs) (cut Throwcontrol V2853 V2854)) (if (shen.pvar? V2801) (do (shen.bindv V2801 unit V2853) (let Result (do (shen.incinfs) (cut Throwcontrol V2853 V2854)) (do (shen.unbindv V2801 V2853) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2802 (shen.lazyderef V2850 V2853) (if (cons? V2802) (let V2803 (shen.lazyderef (hd V2802) V2853) (if (= shen.process-datatype V2803) (let V2804 (shen.lazyderef V2851 V2853) (if (= symbol V2804) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2804) (do (shen.bindv V2804 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2804 V2853) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2805 (shen.lazyderef V2850 V2853) (if (cons? V2805) (let V2806 (shen.lazyderef (hd V2805) V2853) (if (= shen.synonyms-help V2806) (let V2807 (shen.lazyderef V2851 V2853) (if (= symbol V2807) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2807) (do (shen.bindv V2807 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2807 V2853) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2853) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2853 (freeze (shen.udefs* (cons V2850 (cons : (cons V2851 ()))) V2852 Datatypes V2853 V2854))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2856 V2857 V2858 V2859) (let Case (let V2608 (shen.lazyderef V2856 V2858) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V2858) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2858) (if (cons? V2610) (let V2611 (shen.lazyderef (hd V2610) V2858) (if (= cons V2611) (let V2612 (shen.lazyderef (tl V2610) V2858) (if (cons? V2612) (let X (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2858) (if (cons? V2613) (let Y (hd V2613) (let V2614 (shen.lazyderef (tl V2613) V2858) (if (= () V2614) (let V2615 (shen.lazyderef (tl V2609) V2858) (if (cons? V2615) (let V2616 (shen.lazyderef (hd V2615) V2858) (if (= : V2616) (let V2617 (shen.lazyderef (tl V2615) V2858) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2858) (if (cons? V2618) (let V2619 (shen.lazyderef (hd V2618) V2858) (if (= list V2619) (let V2620 (shen.lazyderef (tl V2618) V2858) (if (cons? V2620) (let A (hd V2620) (let V2621 (shen.lazyderef (tl V2620) V2858) (if (= () V2621) (let V2622 (shen.lazyderef (tl V2617) V2858) (if (= () V2622) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2622 V2858) Result))) false))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2858) (let Result (let V2623 (shen.lazyderef (tl V2617) V2858) (if (= () V2623) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2623 V2858) Result))) false))) (do (shen.unbindv V2621 V2858) Result))) false)))) (if (shen.pvar? V2620) (let A (shen.newpv V2858) (do (shen.bindv V2620 (cons A ()) V2858) (let Result (let V2624 (shen.lazyderef (tl V2617) V2858) (if (= () V2624) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2624) (do (shen.bindv V2624 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2624 V2858) Result))) false))) (do (shen.unbindv V2620 V2858) Result)))) false))) (if (shen.pvar? V2619) (do (shen.bindv V2619 list V2858) (let Result (let V2625 (shen.lazyderef (tl V2618) V2858) (if (cons? V2625) (let A (hd V2625) (let V2626 (shen.lazyderef (tl V2625) V2858) (if (= () V2626) (let V2627 (shen.lazyderef (tl V2617) V2858) (if (= () V2627) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2627 V2858) Result))) false))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2858) (let Result (let V2628 (shen.lazyderef (tl V2617) V2858) (if (= () V2628) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2628 V2858) Result))) false))) (do (shen.unbindv V2626 V2858) Result))) false)))) (if (shen.pvar? V2625) (let A (shen.newpv V2858) (do (shen.bindv V2625 (cons A ()) V2858) (let Result (let V2629 (shen.lazyderef (tl V2617) V2858) (if (= () V2629) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2629) (do (shen.bindv V2629 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2629 V2858) Result))) false))) (do (shen.unbindv V2625 V2858) Result)))) false))) (do (shen.unbindv V2619 V2858) Result))) false))) (if (shen.pvar? V2618) (let A (shen.newpv V2858) (do (shen.bindv V2618 (cons list (cons A ())) V2858) (let Result (let V2630 (shen.lazyderef (tl V2617) V2858) (if (= () V2630) (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2858) (let Result (let Hyp (tl V2608) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons list (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2630 V2858) Result))) false))) (do (shen.unbindv V2618 V2858) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2631 (shen.lazyderef V2856 V2858) (if (cons? V2631) (let V2632 (shen.lazyderef (hd V2631) V2858) (if (cons? V2632) (let V2633 (shen.lazyderef (hd V2632) V2858) (if (cons? V2633) (let V2634 (shen.lazyderef (hd V2633) V2858) (if (= @p V2634) (let V2635 (shen.lazyderef (tl V2633) V2858) (if (cons? V2635) (let X (hd V2635) (let V2636 (shen.lazyderef (tl V2635) V2858) (if (cons? V2636) (let Y (hd V2636) (let V2637 (shen.lazyderef (tl V2636) V2858) (if (= () V2637) (let V2638 (shen.lazyderef (tl V2632) V2858) (if (cons? V2638) (let V2639 (shen.lazyderef (hd V2638) V2858) (if (= : V2639) (let V2640 (shen.lazyderef (tl V2638) V2858) (if (cons? V2640) (let V2641 (shen.lazyderef (hd V2640) V2858) (if (cons? V2641) (let A (hd V2641) (let V2642 (shen.lazyderef (tl V2641) V2858) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2858) (if (= * V2643) (let V2644 (shen.lazyderef (tl V2642) V2858) (if (cons? V2644) (let B (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2858) (if (= () V2645) (let V2646 (shen.lazyderef (tl V2640) V2858) (if (= () V2646) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2646 V2858) Result))) false))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2858) (let Result (let V2647 (shen.lazyderef (tl V2640) V2858) (if (= () V2647) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2647 V2858) Result))) false))) (do (shen.unbindv V2645 V2858) Result))) false)))) (if (shen.pvar? V2644) (let B (shen.newpv V2858) (do (shen.bindv V2644 (cons B ()) V2858) (let Result (let V2648 (shen.lazyderef (tl V2640) V2858) (if (= () V2648) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2648) (do (shen.bindv V2648 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2648 V2858) Result))) false))) (do (shen.unbindv V2644 V2858) Result)))) false))) (if (shen.pvar? V2643) (do (shen.bindv V2643 * V2858) (let Result (let V2649 (shen.lazyderef (tl V2642) V2858) (if (cons? V2649) (let B (hd V2649) (let V2650 (shen.lazyderef (tl V2649) V2858) (if (= () V2650) (let V2651 (shen.lazyderef (tl V2640) V2858) (if (= () V2651) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2651 V2858) Result))) false))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2858) (let Result (let V2652 (shen.lazyderef (tl V2640) V2858) (if (= () V2652) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2652 V2858) Result))) false))) (do (shen.unbindv V2650 V2858) Result))) false)))) (if (shen.pvar? V2649) (let B (shen.newpv V2858) (do (shen.bindv V2649 (cons B ()) V2858) (let Result (let V2653 (shen.lazyderef (tl V2640) V2858) (if (= () V2653) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2653) (do (shen.bindv V2653 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2653 V2858) Result))) false))) (do (shen.unbindv V2649 V2858) Result)))) false))) (do (shen.unbindv V2643 V2858) Result))) false))) (if (shen.pvar? V2642) (let B (shen.newpv V2858) (do (shen.bindv V2642 (cons * (cons B ())) V2858) (let Result (let V2654 (shen.lazyderef (tl V2640) V2858) (if (= () V2654) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2654 V2858) Result))) false))) (do (shen.unbindv V2642 V2858) Result)))) false)))) (if (shen.pvar? V2641) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2641 (cons A (cons * (cons B ()))) V2858) (let Result (let V2655 (shen.lazyderef (tl V2640) V2858) (if (= () V2655) (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2858) (let Result (let Hyp (tl V2631) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (shen.lazyderef B V2858) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2655 V2858) Result))) false))) (do (shen.unbindv V2641 V2858) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2656 (shen.lazyderef V2856 V2858) (if (cons? V2656) (let V2657 (shen.lazyderef (hd V2656) V2858) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2858) (if (cons? V2658) (let V2659 (shen.lazyderef (hd V2658) V2858) (if (= @v V2659) (let V2660 (shen.lazyderef (tl V2658) V2858) (if (cons? V2660) (let X (hd V2660) (let V2661 (shen.lazyderef (tl V2660) V2858) (if (cons? V2661) (let Y (hd V2661) (let V2662 (shen.lazyderef (tl V2661) V2858) (if (= () V2662) (let V2663 (shen.lazyderef (tl V2657) V2858) (if (cons? V2663) (let V2664 (shen.lazyderef (hd V2663) V2858) (if (= : V2664) (let V2665 (shen.lazyderef (tl V2663) V2858) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2858) (if (cons? V2666) (let V2667 (shen.lazyderef (hd V2666) V2858) (if (= vector V2667) (let V2668 (shen.lazyderef (tl V2666) V2858) (if (cons? V2668) (let A (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2858) (if (= () V2669) (let V2670 (shen.lazyderef (tl V2665) V2858) (if (= () V2670) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2670) (do (shen.bindv V2670 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2670 V2858) Result))) false))) (if (shen.pvar? V2669) (do (shen.bindv V2669 () V2858) (let Result (let V2671 (shen.lazyderef (tl V2665) V2858) (if (= () V2671) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2671) (do (shen.bindv V2671 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2671 V2858) Result))) false))) (do (shen.unbindv V2669 V2858) Result))) false)))) (if (shen.pvar? V2668) (let A (shen.newpv V2858) (do (shen.bindv V2668 (cons A ()) V2858) (let Result (let V2672 (shen.lazyderef (tl V2665) V2858) (if (= () V2672) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2672) (do (shen.bindv V2672 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2672 V2858) Result))) false))) (do (shen.unbindv V2668 V2858) Result)))) false))) (if (shen.pvar? V2667) (do (shen.bindv V2667 vector V2858) (let Result (let V2673 (shen.lazyderef (tl V2666) V2858) (if (cons? V2673) (let A (hd V2673) (let V2674 (shen.lazyderef (tl V2673) V2858) (if (= () V2674) (let V2675 (shen.lazyderef (tl V2665) V2858) (if (= () V2675) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2675 V2858) Result))) false))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2858) (let Result (let V2676 (shen.lazyderef (tl V2665) V2858) (if (= () V2676) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2676 V2858) Result))) false))) (do (shen.unbindv V2674 V2858) Result))) false)))) (if (shen.pvar? V2673) (let A (shen.newpv V2858) (do (shen.bindv V2673 (cons A ()) V2858) (let Result (let V2677 (shen.lazyderef (tl V2665) V2858) (if (= () V2677) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2677 V2858) Result))) false))) (do (shen.unbindv V2673 V2858) Result)))) false))) (do (shen.unbindv V2667 V2858) Result))) false))) (if (shen.pvar? V2666) (let A (shen.newpv V2858) (do (shen.bindv V2666 (cons vector (cons A ())) V2858) (let Result (let V2678 (shen.lazyderef (tl V2665) V2858) (if (= () V2678) (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2858) (let Result (let Hyp (tl V2656) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons (shen.lazyderef A V2858) ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons (cons vector (cons (shen.lazyderef A V2858) ())) ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2678 V2858) Result))) false))) (do (shen.unbindv V2666 V2858) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2679 (shen.lazyderef V2856 V2858) (if (cons? V2679) (let V2680 (shen.lazyderef (hd V2679) V2858) (if (cons? V2680) (let V2681 (shen.lazyderef (hd V2680) V2858) (if (cons? V2681) (let V2682 (shen.lazyderef (hd V2681) V2858) (if (= @s V2682) (let V2683 (shen.lazyderef (tl V2681) V2858) (if (cons? V2683) (let X (hd V2683) (let V2684 (shen.lazyderef (tl V2683) V2858) (if (cons? V2684) (let Y (hd V2684) (let V2685 (shen.lazyderef (tl V2684) V2858) (if (= () V2685) (let V2686 (shen.lazyderef (tl V2680) V2858) (if (cons? V2686) (let V2687 (shen.lazyderef (hd V2686) V2858) (if (= : V2687) (let V2688 (shen.lazyderef (tl V2686) V2858) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2858) (if (= string V2689) (let V2690 (shen.lazyderef (tl V2688) V2858) (if (= () V2690) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2690) (do (shen.bindv V2690 () V2858) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2690 V2858) Result))) false))) (if (shen.pvar? V2689) (do (shen.bindv V2689 string V2858) (let Result (let V2691 (shen.lazyderef (tl V2688) V2858) (if (= () V2691) (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (if (shen.pvar? V2691) (do (shen.bindv V2691 () V2858) (let Result (let Hyp (tl V2679) (do (shen.incinfs) (bind V2857 (cons (cons (shen.lazyderef X V2858) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2858) (cons : (cons string ()))) (shen.lazyderef Hyp V2858))) V2858 V2859))) (do (shen.unbindv V2691 V2858) Result))) false))) (do (shen.unbindv V2689 V2858) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2692 (shen.lazyderef V2856 V2858) (if (cons? V2692) (let X (hd V2692) (let Hyp (tl V2692) (let NewHyps (shen.newpv V2858) (do (shen.incinfs) (bind V2857 (cons (shen.lazyderef X V2858) (shen.lazyderef NewHyps V2858)) V2858 (freeze (shen.t*-hyps Hyp NewHyps V2858 V2859))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2855 V2856 V2857 V2858) (let Case (let V2607 (shen.lazyderef V2855 V2857) (if (cons? V2607) (let V2608 (shen.lazyderef (hd V2607) V2857) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V2857) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2857) (if (= cons V2610) (let V2611 (shen.lazyderef (tl V2609) V2857) (if (cons? V2611) (let X (hd V2611) (let V2612 (shen.lazyderef (tl V2611) V2857) (if (cons? V2612) (let Y (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2857) (if (= () V2613) (let V2614 (shen.lazyderef (tl V2608) V2857) (if (cons? V2614) (let V2615 (shen.lazyderef (hd V2614) V2857) (if (= : V2615) (let V2616 (shen.lazyderef (tl V2614) V2857) (if (cons? V2616) (let V2617 (shen.lazyderef (hd V2616) V2857) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2857) (if (= list V2618) (let V2619 (shen.lazyderef (tl V2617) V2857) (if (cons? V2619) (let A (hd V2619) (let V2620 (shen.lazyderef (tl V2619) V2857) (if (= () V2620) (let V2621 (shen.lazyderef (tl V2616) V2857) (if (= () V2621) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2621 V2857) Result))) false))) (if (shen.pvar? V2620) (do (shen.bindv V2620 () V2857) (let Result (let V2622 (shen.lazyderef (tl V2616) V2857) (if (= () V2622) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2622 V2857) Result))) false))) (do (shen.unbindv V2620 V2857) Result))) false)))) (if (shen.pvar? V2619) (let A (shen.newpv V2857) (do (shen.bindv V2619 (cons A ()) V2857) (let Result (let V2623 (shen.lazyderef (tl V2616) V2857) (if (= () V2623) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2623 V2857) Result))) false))) (do (shen.unbindv V2619 V2857) Result)))) false))) (if (shen.pvar? V2618) (do (shen.bindv V2618 list V2857) (let Result (let V2624 (shen.lazyderef (tl V2617) V2857) (if (cons? V2624) (let A (hd V2624) (let V2625 (shen.lazyderef (tl V2624) V2857) (if (= () V2625) (let V2626 (shen.lazyderef (tl V2616) V2857) (if (= () V2626) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2626 V2857) Result))) false))) (if (shen.pvar? V2625) (do (shen.bindv V2625 () V2857) (let Result (let V2627 (shen.lazyderef (tl V2616) V2857) (if (= () V2627) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2627 V2857) Result))) false))) (do (shen.unbindv V2625 V2857) Result))) false)))) (if (shen.pvar? V2624) (let A (shen.newpv V2857) (do (shen.bindv V2624 (cons A ()) V2857) (let Result (let V2628 (shen.lazyderef (tl V2616) V2857) (if (= () V2628) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2628 V2857) Result))) false))) (do (shen.unbindv V2624 V2857) Result)))) false))) (do (shen.unbindv V2618 V2857) Result))) false))) (if (shen.pvar? V2617) (let A (shen.newpv V2857) (do (shen.bindv V2617 (cons list (cons A ())) V2857) (let Result (let V2629 (shen.lazyderef (tl V2616) V2857) (if (= () V2629) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2629) (do (shen.bindv V2629 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2629 V2857) Result))) false))) (do (shen.unbindv V2617 V2857) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2630 (shen.lazyderef V2855 V2857) (if (cons? V2630) (let V2631 (shen.lazyderef (hd V2630) V2857) (if (cons? V2631) (let V2632 (shen.lazyderef (hd V2631) V2857) (if (cons? V2632) (let V2633 (shen.lazyderef (hd V2632) V2857) (if (= @p V2633) (let V2634 (shen.lazyderef (tl V2632) V2857) (if (cons? V2634) (let X (hd V2634) (let V2635 (shen.lazyderef (tl V2634) V2857) (if (cons? V2635) (let Y (hd V2635) (let V2636 (shen.lazyderef (tl V2635) V2857) (if (= () V2636) (let V2637 (shen.lazyderef (tl V2631) V2857) (if (cons? V2637) (let V2638 (shen.lazyderef (hd V2637) V2857) (if (= : V2638) (let V2639 (shen.lazyderef (tl V2637) V2857) (if (cons? V2639) (let V2640 (shen.lazyderef (hd V2639) V2857) (if (cons? V2640) (let A (hd V2640) (let V2641 (shen.lazyderef (tl V2640) V2857) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2857) (if (= * V2642) (let V2643 (shen.lazyderef (tl V2641) V2857) (if (cons? V2643) (let B (hd V2643) (let V2644 (shen.lazyderef (tl V2643) V2857) (if (= () V2644) (let V2645 (shen.lazyderef (tl V2639) V2857) (if (= () V2645) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2645 V2857) Result))) false))) (if (shen.pvar? V2644) (do (shen.bindv V2644 () V2857) (let Result (let V2646 (shen.lazyderef (tl V2639) V2857) (if (= () V2646) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2646 V2857) Result))) false))) (do (shen.unbindv V2644 V2857) Result))) false)))) (if (shen.pvar? V2643) (let B (shen.newpv V2857) (do (shen.bindv V2643 (cons B ()) V2857) (let Result (let V2647 (shen.lazyderef (tl V2639) V2857) (if (= () V2647) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2647 V2857) Result))) false))) (do (shen.unbindv V2643 V2857) Result)))) false))) (if (shen.pvar? V2642) (do (shen.bindv V2642 * V2857) (let Result (let V2648 (shen.lazyderef (tl V2641) V2857) (if (cons? V2648) (let B (hd V2648) (let V2649 (shen.lazyderef (tl V2648) V2857) (if (= () V2649) (let V2650 (shen.lazyderef (tl V2639) V2857) (if (= () V2650) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2650 V2857) Result))) false))) (if (shen.pvar? V2649) (do (shen.bindv V2649 () V2857) (let Result (let V2651 (shen.lazyderef (tl V2639) V2857) (if (= () V2651) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2651 V2857) Result))) false))) (do (shen.unbindv V2649 V2857) Result))) false)))) (if (shen.pvar? V2648) (let B (shen.newpv V2857) (do (shen.bindv V2648 (cons B ()) V2857) (let Result (let V2652 (shen.lazyderef (tl V2639) V2857) (if (= () V2652) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2652 V2857) Result))) false))) (do (shen.unbindv V2648 V2857) Result)))) false))) (do (shen.unbindv V2642 V2857) Result))) false))) (if (shen.pvar? V2641) (let B (shen.newpv V2857) (do (shen.bindv V2641 (cons * (cons B ())) V2857) (let Result (let V2653 (shen.lazyderef (tl V2639) V2857) (if (= () V2653) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2653) (do (shen.bindv V2653 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2653 V2857) Result))) false))) (do (shen.unbindv V2641 V2857) Result)))) false)))) (if (shen.pvar? V2640) (let A (shen.newpv V2857) (let B (shen.newpv V2857) (do (shen.bindv V2640 (cons A (cons * (cons B ()))) V2857) (let Result (let V2654 (shen.lazyderef (tl V2639) V2857) (if (= () V2654) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2654 V2857) Result))) false))) (do (shen.unbindv V2640 V2857) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2655 (shen.lazyderef V2855 V2857) (if (cons? V2655) (let V2656 (shen.lazyderef (hd V2655) V2857) (if (cons? V2656) (let V2657 (shen.lazyderef (hd V2656) V2857) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2857) (if (= @v V2658) (let V2659 (shen.lazyderef (tl V2657) V2857) (if (cons? V2659) (let X (hd V2659) (let V2660 (shen.lazyderef (tl V2659) V2857) (if (cons? V2660) (let Y (hd V2660) (let V2661 (shen.lazyderef (tl V2660) V2857) (if (= () V2661) (let V2662 (shen.lazyderef (tl V2656) V2857) (if (cons? V2662) (let V2663 (shen.lazyderef (hd V2662) V2857) (if (= : V2663) (let V2664 (shen.lazyderef (tl V2662) V2857) (if (cons? V2664) (let V2665 (shen.lazyderef (hd V2664) V2857) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2857) (if (= vector V2666) (let V2667 (shen.lazyderef (tl V2665) V2857) (if (cons? V2667) (let A (hd V2667) (let V2668 (shen.lazyderef (tl V2667) V2857) (if (= () V2668) (let V2669 (shen.lazyderef (tl V2664) V2857) (if (= () V2669) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2669) (do (shen.bindv V2669 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2669 V2857) Result))) false))) (if (shen.pvar? V2668) (do (shen.bindv V2668 () V2857) (let Result (let V2670 (shen.lazyderef (tl V2664) V2857) (if (= () V2670) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2670) (do (shen.bindv V2670 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2670 V2857) Result))) false))) (do (shen.unbindv V2668 V2857) Result))) false)))) (if (shen.pvar? V2667) (let A (shen.newpv V2857) (do (shen.bindv V2667 (cons A ()) V2857) (let Result (let V2671 (shen.lazyderef (tl V2664) V2857) (if (= () V2671) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2671) (do (shen.bindv V2671 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2671 V2857) Result))) false))) (do (shen.unbindv V2667 V2857) Result)))) false))) (if (shen.pvar? V2666) (do (shen.bindv V2666 vector V2857) (let Result (let V2672 (shen.lazyderef (tl V2665) V2857) (if (cons? V2672) (let A (hd V2672) (let V2673 (shen.lazyderef (tl V2672) V2857) (if (= () V2673) (let V2674 (shen.lazyderef (tl V2664) V2857) (if (= () V2674) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2674 V2857) Result))) false))) (if (shen.pvar? V2673) (do (shen.bindv V2673 () V2857) (let Result (let V2675 (shen.lazyderef (tl V2664) V2857) (if (= () V2675) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2675 V2857) Result))) false))) (do (shen.unbindv V2673 V2857) Result))) false)))) (if (shen.pvar? V2672) (let A (shen.newpv V2857) (do (shen.bindv V2672 (cons A ()) V2857) (let Result (let V2676 (shen.lazyderef (tl V2664) V2857) (if (= () V2676) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2676 V2857) Result))) false))) (do (shen.unbindv V2672 V2857) Result)))) false))) (do (shen.unbindv V2666 V2857) Result))) false))) (if (shen.pvar? V2665) (let A (shen.newpv V2857) (do (shen.bindv V2665 (cons vector (cons A ())) V2857) (let Result (let V2677 (shen.lazyderef (tl V2664) V2857) (if (= () V2677) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2677 V2857) Result))) false))) (do (shen.unbindv V2665 V2857) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2678 (shen.lazyderef V2855 V2857) (if (cons? V2678) (let V2679 (shen.lazyderef (hd V2678) V2857) (if (cons? V2679) (let V2680 (shen.lazyderef (hd V2679) V2857) (if (cons? V2680) (let V2681 (shen.lazyderef (hd V2680) V2857) (if (= @s V2681) (let V2682 (shen.lazyderef (tl V2680) V2857) (if (cons? V2682) (let X (hd V2682) (let V2683 (shen.lazyderef (tl V2682) V2857) (if (cons? V2683) (let Y (hd V2683) (let V2684 (shen.lazyderef (tl V2683) V2857) (if (= () V2684) (let V2685 (shen.lazyderef (tl V2679) V2857) (if (cons? V2685) (let V2686 (shen.lazyderef (hd V2685) V2857) (if (= : V2686) (let V2687 (shen.lazyderef (tl V2685) V2857) (if (cons? V2687) (let V2688 (shen.lazyderef (hd V2687) V2857) (if (= string V2688) (let V2689 (shen.lazyderef (tl V2687) V2857) (if (= () V2689) (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2689) (do (shen.bindv V2689 () V2857) (let Result (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2689 V2857) Result))) false))) (if (shen.pvar? V2688) (do (shen.bindv V2688 string V2857) (let Result (let V2690 (shen.lazyderef (tl V2687) V2857) (if (= () V2690) (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2690) (do (shen.bindv V2690 () V2857) (let Result (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2690 V2857) Result))) false))) (do (shen.unbindv V2688 V2857) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2691 (shen.lazyderef V2855 V2857) (if (cons? V2691) (let X (hd V2691) (let Hyp (tl V2691) (let NewHyps (shen.newpv V2857) (do (shen.incinfs) (bind V2856 (cons (shen.lazyderef X V2857) (shen.lazyderef NewHyps V2857)) V2857 (freeze (shen.t*-hyps Hyp NewHyps V2857 V2858))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2872 V2873 V2874 V2875) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2872 V2874)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2873 V2874) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2875))))))))) (true (thaw V2875)))) +(defun shen.show (V2871 V2872 V2873 V2874) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2871 V2873)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2872 V2873) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2874))))))))) (true (thaw V2874)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2876) (cond ((and (cons? V2876) (and (cons? (tl V2876)) (and (= : (hd (tl V2876))) (and (cons? (tl (tl V2876))) (= () (tl (tl (tl V2876)))))))) (shen.prhush (shen.app (hd V2876) (cn " : " (shen.app (hd (tl (tl V2876))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2876 "" shen.r) (stoutput))))) +(defun shen.show-p (V2875) (cond ((and (cons? V2875) (and (cons? (tl V2875)) (and (= : (hd (tl V2875))) (and (cons? (tl (tl V2875))) (= () (tl (tl (tl V2875)))))))) (shen.prhush (shen.app (hd V2875) (cn " : " (shen.app (hd (tl (tl V2875))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2875 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2879 V2880) (cond ((= () V2879) shen.skip) ((cons? V2879) (do (shen.prhush (shen.app V2880 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2879)) (do (nl 1) (shen.show-assumptions (tl V2879) (+ V2880 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2878 V2879) (cond ((= () V2878) shen.skip) ((cons? V2878) (do (shen.prhush (shen.app V2879 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2878)) (do (nl 1) (shen.show-assumptions (tl V2878) (+ V2879 1)))))) (true (shen.sys-error shen.show-assumptions)))) (defun shen.pause-for-user () (let Byte (do (read-byte (stinput)) (read-byte (stinput))) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2881) (cons? (assoc V2881 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2880) (cons? (assoc V2880 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2882) (concat shen.type-signature-of- V2882)) +(defun shen.sigf (V2881) (concat shen.type-signature-of- V2881)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2883 V2884 V2885 V2886) (let Case (let V2595 (shen.lazyderef V2884 V2885) (if (= number V2595) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2595) (do (shen.bindv V2595 number V2885) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2595 V2885) Result))) false))) (if (= Case false) (let Case (let V2596 (shen.lazyderef V2884 V2885) (if (= boolean V2596) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2596) (do (shen.bindv V2596 boolean V2885) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2596 V2885) Result))) false))) (if (= Case false) (let Case (let V2597 (shen.lazyderef V2884 V2885) (if (= string V2597) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2883 V2885)) V2885 V2886)) (if (shen.pvar? V2597) (do (shen.bindv V2597 string V2885) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2883 V2885)) V2885 V2886)) (do (shen.unbindv V2597 V2885) Result))) false))) (if (= Case false) (let Case (let V2598 (shen.lazyderef V2884 V2885) (if (= symbol V2598) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2883 V2885)) V2885 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2883 V2885))) V2885 V2886)))) (if (shen.pvar? V2598) (do (shen.bindv V2598 symbol V2885) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2883 V2885)) V2885 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2883 V2885))) V2885 V2886)))) (do (shen.unbindv V2598 V2885) Result))) false))) (if (= Case false) (let V2599 (shen.lazyderef V2883 V2885) (if (= () V2599) (let V2600 (shen.lazyderef V2884 V2885) (if (cons? V2600) (let V2601 (shen.lazyderef (hd V2600) V2885) (if (= list V2601) (let V2602 (shen.lazyderef (tl V2600) V2885) (if (cons? V2602) (let A (hd V2602) (let V2603 (shen.lazyderef (tl V2602) V2885) (if (= () V2603) (do (shen.incinfs) (thaw V2886)) (if (shen.pvar? V2603) (do (shen.bindv V2603 () V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2603 V2885) Result))) false)))) (if (shen.pvar? V2602) (let A (shen.newpv V2885) (do (shen.bindv V2602 (cons A ()) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2602 V2885) Result)))) false))) (if (shen.pvar? V2601) (do (shen.bindv V2601 list V2885) (let Result (let V2604 (shen.lazyderef (tl V2600) V2885) (if (cons? V2604) (let A (hd V2604) (let V2605 (shen.lazyderef (tl V2604) V2885) (if (= () V2605) (do (shen.incinfs) (thaw V2886)) (if (shen.pvar? V2605) (do (shen.bindv V2605 () V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2605 V2885) Result))) false)))) (if (shen.pvar? V2604) (let A (shen.newpv V2885) (do (shen.bindv V2604 (cons A ()) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2604 V2885) Result)))) false))) (do (shen.unbindv V2601 V2885) Result))) false))) (if (shen.pvar? V2600) (let A (shen.newpv V2885) (do (shen.bindv V2600 (cons list (cons A ())) V2885) (let Result (do (shen.incinfs) (thaw V2886)) (do (shen.unbindv V2600 V2885) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2882 V2883 V2884 V2885) (let Case (let V2594 (shen.lazyderef V2883 V2884) (if (= number V2594) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2594) (do (shen.bindv V2594 number V2884) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2594 V2884) Result))) false))) (if (= Case false) (let Case (let V2595 (shen.lazyderef V2883 V2884) (if (= boolean V2595) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2595) (do (shen.bindv V2595 boolean V2884) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2595 V2884) Result))) false))) (if (= Case false) (let Case (let V2596 (shen.lazyderef V2883 V2884) (if (= string V2596) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2596) (do (shen.bindv V2596 string V2884) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2596 V2884) Result))) false))) (if (= Case false) (let Case (let V2597 (shen.lazyderef V2883 V2884) (if (= symbol V2597) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2882 V2884)) V2884 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2882 V2884))) V2884 V2885)))) (if (shen.pvar? V2597) (do (shen.bindv V2597 symbol V2884) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2882 V2884)) V2884 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2882 V2884))) V2884 V2885)))) (do (shen.unbindv V2597 V2884) Result))) false))) (if (= Case false) (let V2598 (shen.lazyderef V2882 V2884) (if (= () V2598) (let V2599 (shen.lazyderef V2883 V2884) (if (cons? V2599) (let V2600 (shen.lazyderef (hd V2599) V2884) (if (= list V2600) (let V2601 (shen.lazyderef (tl V2599) V2884) (if (cons? V2601) (let A (hd V2601) (let V2602 (shen.lazyderef (tl V2601) V2884) (if (= () V2602) (do (shen.incinfs) (thaw V2885)) (if (shen.pvar? V2602) (do (shen.bindv V2602 () V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2602 V2884) Result))) false)))) (if (shen.pvar? V2601) (let A (shen.newpv V2884) (do (shen.bindv V2601 (cons A ()) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2601 V2884) Result)))) false))) (if (shen.pvar? V2600) (do (shen.bindv V2600 list V2884) (let Result (let V2603 (shen.lazyderef (tl V2599) V2884) (if (cons? V2603) (let A (hd V2603) (let V2604 (shen.lazyderef (tl V2603) V2884) (if (= () V2604) (do (shen.incinfs) (thaw V2885)) (if (shen.pvar? V2604) (do (shen.bindv V2604 () V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2604 V2884) Result))) false)))) (if (shen.pvar? V2603) (let A (shen.newpv V2884) (do (shen.bindv V2603 (cons A ()) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2603 V2884) Result)))) false))) (do (shen.unbindv V2600 V2884) Result))) false))) (if (shen.pvar? V2599) (let A (shen.newpv V2884) (do (shen.bindv V2599 (cons list (cons A ())) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2599 V2884) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2887 V2888 V2889 V2890 V2891) (let Case (let V2586 (shen.lazyderef V2889 V2890) (if (cons? V2586) (let V2587 (shen.lazyderef (hd V2586) V2890) (if (cons? V2587) (let Y (hd V2587) (let V2588 (shen.lazyderef (tl V2587) V2890) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V2890) (if (= : V2589) (let V2590 (shen.lazyderef (tl V2588) V2890) (if (cons? V2590) (let B (hd V2590) (let V2591 (shen.lazyderef (tl V2590) V2890) (if (= () V2591) (do (shen.incinfs) (identical V2887 Y V2890 (freeze (unify! V2888 B V2890 V2891)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2592 (shen.lazyderef V2889 V2890) (if (cons? V2592) (let Hyp (tl V2592) (do (shen.incinfs) (shen.by_hypothesis V2887 V2888 Hyp V2890 V2891))) false)) Case))) +(defun shen.by_hypothesis (V2886 V2887 V2888 V2889 V2890) (let Case (let V2585 (shen.lazyderef V2888 V2889) (if (cons? V2585) (let V2586 (shen.lazyderef (hd V2585) V2889) (if (cons? V2586) (let Y (hd V2586) (let V2587 (shen.lazyderef (tl V2586) V2889) (if (cons? V2587) (let V2588 (shen.lazyderef (hd V2587) V2889) (if (= : V2588) (let V2589 (shen.lazyderef (tl V2587) V2889) (if (cons? V2589) (let B (hd V2589) (let V2590 (shen.lazyderef (tl V2589) V2889) (if (= () V2590) (do (shen.incinfs) (identical V2886 Y V2889 (freeze (unify! V2887 B V2889 V2890)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2591 (shen.lazyderef V2888 V2889) (if (cons? V2591) (let Hyp (tl V2591) (do (shen.incinfs) (shen.by_hypothesis V2886 V2887 Hyp V2889 V2890))) false)) Case))) -(defun shen.t*-def (V2892 V2893 V2894 V2895 V2896) (let V2580 (shen.lazyderef V2892 V2895) (if (cons? V2580) (let V2581 (shen.lazyderef (hd V2580) V2895) (if (= define V2581) (let V2582 (shen.lazyderef (tl V2580) V2895) (if (cons? V2582) (let F (hd V2582) (let X (tl V2582) (let E (shen.newpv V2895) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2891 V2892 V2893 V2894 V2895) (let V2579 (shen.lazyderef V2891 V2894) (if (cons? V2579) (let V2580 (shen.lazyderef (hd V2579) V2894) (if (= define V2580) (let V2581 (shen.lazyderef (tl V2579) V2894) (if (cons? V2581) (let F (hd V2581) (let X (tl V2581) (let E (shen.newpv V2894) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2893 V2894 V2895 V2896))))) false)) false)) false))) +")))) F V2892 V2893 V2894 V2895))))) false)) false)) false))) -(defun shen.t*-defh (V2897 V2898 V2899 V2900 V2901 V2902) (let V2576 (shen.lazyderef V2897 V2901) (if (cons? V2576) (let Sig (hd V2576) (let Rules (tl V2576) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2898 V2899 V2900 Rules V2901 V2902)))) false))) +(defun shen.t*-defh (V2896 V2897 V2898 V2899 V2900 V2901) (let V2575 (shen.lazyderef V2896 V2900) (if (cons? V2575) (let Sig (hd V2575) (let Rules (tl V2575) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2897 V2898 V2899 Rules V2900 V2901)))) false))) -(defun shen.t*-defhh (V2903 V2904 V2905 V2906 V2907 V2908 V2909 V2910) (do (shen.incinfs) (shen.t*-rules V2908 V2904 1 V2905 (cons (cons V2905 (cons : (cons V2904 ()))) V2907) V2909 (freeze (shen.memo V2905 V2903 V2906 V2909 V2910))))) +(defun shen.t*-defhh (V2902 V2903 V2904 V2905 V2906 V2907 V2908 V2909) (do (shen.incinfs) (shen.t*-rules V2907 V2903 1 V2904 (cons (cons V2904 (cons : (cons V2903 ()))) V2906) V2908 (freeze (shen.memo V2904 V2902 V2905 V2908 V2909))))) -(defun shen.memo (V2911 V2912 V2913 V2914 V2915) (let Jnk (shen.newpv V2914) (do (shen.incinfs) (unify! V2913 V2912 V2914 (freeze (bind Jnk (declare (shen.lazyderef V2911 V2914) (shen.lazyderef V2913 V2914)) V2914 V2915)))))) +(defun shen.memo (V2910 V2911 V2912 V2913 V2914) (let Jnk (shen.newpv V2913) (do (shen.incinfs) (unify! V2912 V2911 V2913 (freeze (bind Jnk (declare (shen.lazyderef V2910 V2913) (shen.lazyderef V2912 V2913)) V2913 V2914)))))) -(defun shen. (V2920) (let Result (let Parse_shen. (shen. V2920) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2919) (let Result (let Parse_shen. (shen. V2919) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2921) (cond ((and (cons? V2921) (and (cons? (tl V2921)) (and (= () (tl (tl V2921))) (= (hd V2921) protect)))) V2921) ((cons? V2921) (map shen.ue V2921)) ((variable? V2921) (concat && V2921)) (true V2921))) +(defun shen.ue (V2920) (cond ((and (cons? V2920) (and (cons? (tl V2920)) (and (= () (tl (tl V2920))) (= (hd V2920) protect)))) V2920) ((cons? V2920) (map shen.ue V2920)) ((variable? V2920) (concat && V2920)) (true V2920))) -(defun shen.ue-sig (V2922) (cond ((cons? V2922) (map shen.ue-sig V2922)) ((variable? V2922) (concat shen.&&& V2922)) (true V2922))) +(defun shen.ue-sig (V2921) (cond ((cons? V2921) (map shen.ue-sig V2921)) ((variable? V2921) (concat &&& V2921)) (true V2921))) -(defun shen.ues (V2927) (cond ((shen.ue? V2927) (cons V2927 ())) ((cons? V2927) (union (shen.ues (hd V2927)) (shen.ues (tl V2927)))) (true ()))) +(defun shen.ues (V2926) (cond ((shen.ue? V2926) (cons V2926 ())) ((cons? V2926) (union (shen.ues (hd V2926)) (shen.ues (tl V2926)))) (true ()))) -(defun shen.ue? (V2928) (and (symbol? V2928) (shen.ue-h? (str V2928)))) +(defun shen.ue? (V2927) (and (symbol? V2927) (shen.ue-h? (str V2927)))) -(defun shen.ue-h? (V2935) (cond ((and (shen.+string? V2935) (and (= "&" (pos V2935 0)) (and (shen.+string? (tlstr V2935)) (= "&" (pos (tlstr V2935) 0))))) true) (true false))) +(defun shen.ue-h? (V2934) (cond ((and (shen.+string? V2934) (and (= "&" (pos V2934 0)) (and (shen.+string? (tlstr V2934)) (= "&" (pos (tlstr V2934) 0))))) true) (true false))) -(defun shen.t*-rules (V2936 V2937 V2938 V2939 V2940 V2941 V2942) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2551 (shen.lazyderef V2936 V2941) (if (= () V2551) (do (shen.incinfs) (thaw V2942)) false)) (if (= Case false) (let Case (let V2552 (shen.lazyderef V2936 V2941) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V2941) (if (cons? V2553) (let V2554 (shen.lazyderef (hd V2553) V2941) (if (= () V2554) (let V2555 (shen.lazyderef (tl V2553) V2941) (if (cons? V2555) (let Action (hd V2555) (let V2556 (shen.lazyderef (tl V2555) V2941) (if (= () V2556) (let Rules (tl V2552) (let V2557 (shen.lazyderef V2937 V2941) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2941) (if (= --> V2558) (let V2559 (shen.lazyderef (tl V2557) V2941) (if (cons? V2559) (let A (hd V2559) (let V2560 (shen.lazyderef (tl V2559) V2941) (if (= () V2560) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2940 V2941 (freeze (cut Throwcontrol V2941 (freeze (shen.t*-rules Rules A (+ V2938 1) V2939 V2940 V2941 V2942)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2561 (shen.lazyderef V2936 V2941) (if (cons? V2561) (let Rule (hd V2561) (let Rules (tl V2561) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2937 V2940 V2941 (freeze (cut Throwcontrol V2941 (freeze (shen.t*-rules Rules V2937 (+ V2938 1) V2939 V2940 V2941 V2942)))))))) false)) (if (= Case false) (let Err (shen.newpv V2941) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2938 V2941) (cn " of " (shen.app (shen.lazyderef V2939 V2941) "" shen.a)) shen.a))) V2941 V2942))) Case)) Case)) Case))))) +(defun shen.t*-rules (V2935 V2936 V2937 V2938 V2939 V2940 V2941) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2550 (shen.lazyderef V2935 V2940) (if (= () V2550) (do (shen.incinfs) (thaw V2941)) false)) (if (= Case false) (let Case (let V2551 (shen.lazyderef V2935 V2940) (if (cons? V2551) (let V2552 (shen.lazyderef (hd V2551) V2940) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V2940) (if (= () V2553) (let V2554 (shen.lazyderef (tl V2552) V2940) (if (cons? V2554) (let Action (hd V2554) (let V2555 (shen.lazyderef (tl V2554) V2940) (if (= () V2555) (let Rules (tl V2551) (let V2556 (shen.lazyderef V2936 V2940) (if (cons? V2556) (let V2557 (shen.lazyderef (hd V2556) V2940) (if (= --> V2557) (let V2558 (shen.lazyderef (tl V2556) V2940) (if (cons? V2558) (let A (hd V2558) (let V2559 (shen.lazyderef (tl V2558) V2940) (if (= () V2559) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2939 V2940 (freeze (cut Throwcontrol V2940 (freeze (shen.t*-rules Rules A (+ V2937 1) V2938 V2939 V2940 V2941)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2560 (shen.lazyderef V2935 V2940) (if (cons? V2560) (let Rule (hd V2560) (let Rules (tl V2560) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2936 V2939 V2940 (freeze (cut Throwcontrol V2940 (freeze (shen.t*-rules Rules V2936 (+ V2937 1) V2938 V2939 V2940 V2941)))))))) false)) (if (= Case false) (let Err (shen.newpv V2940) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2937 V2940) (cn " of " (shen.app (shen.lazyderef V2938 V2940) "" shen.a)) shen.a))) V2940 V2941))) Case)) Case)) Case))))) -(defun shen.t*-rule (V2943 V2944 V2945 V2946 V2947) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2533 (shen.lazyderef V2943 V2946) (if (cons? V2533) (let V2534 (shen.lazyderef (hd V2533) V2946) (if (= () V2534) (let V2535 (shen.lazyderef (tl V2533) V2946) (if (cons? V2535) (let Action (hd V2535) (let V2536 (shen.lazyderef (tl V2535) V2946) (if (= () V2536) (do (shen.incinfs) (cut Throwcontrol V2946 (freeze (shen.t*-action (shen.curry Action) V2944 V2945 V2946 V2947)))) false))) false)) false)) false)) (if (= Case false) (let V2537 (shen.lazyderef V2943 V2946) (if (cons? V2537) (let V2538 (shen.lazyderef (hd V2537) V2946) (if (cons? V2538) (let Pattern (hd V2538) (let Patterns (tl V2538) (let V2539 (shen.lazyderef (tl V2537) V2946) (if (cons? V2539) (let Action (hd V2539) (let V2540 (shen.lazyderef (tl V2539) V2946) (if (= () V2540) (let V2541 (shen.lazyderef V2944 V2946) (if (cons? V2541) (let A (hd V2541) (let V2542 (shen.lazyderef (tl V2541) V2946) (if (cons? V2542) (let V2543 (shen.lazyderef (hd V2542) V2946) (if (= --> V2543) (let V2544 (shen.lazyderef (tl V2542) V2946) (if (cons? V2544) (let B (hd V2544) (let V2545 (shen.lazyderef (tl V2544) V2946) (if (= () V2545) (do (shen.incinfs) (shen.t*-pattern Pattern A V2946 (freeze (cut Throwcontrol V2946 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2945) V2946 V2947)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rule (V2942 V2943 V2944 V2945 V2946) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2532 (shen.lazyderef V2942 V2945) (if (cons? V2532) (let V2533 (shen.lazyderef (hd V2532) V2945) (if (= () V2533) (let V2534 (shen.lazyderef (tl V2532) V2945) (if (cons? V2534) (let Action (hd V2534) (let V2535 (shen.lazyderef (tl V2534) V2945) (if (= () V2535) (do (shen.incinfs) (cut Throwcontrol V2945 (freeze (shen.t*-action (shen.curry Action) V2943 V2944 V2945 V2946)))) false))) false)) false)) false)) (if (= Case false) (let V2536 (shen.lazyderef V2942 V2945) (if (cons? V2536) (let V2537 (shen.lazyderef (hd V2536) V2945) (if (cons? V2537) (let Pattern (hd V2537) (let Patterns (tl V2537) (let V2538 (shen.lazyderef (tl V2536) V2945) (if (cons? V2538) (let Action (hd V2538) (let V2539 (shen.lazyderef (tl V2538) V2945) (if (= () V2539) (let V2540 (shen.lazyderef V2943 V2945) (if (cons? V2540) (let A (hd V2540) (let V2541 (shen.lazyderef (tl V2540) V2945) (if (cons? V2541) (let V2542 (shen.lazyderef (hd V2541) V2945) (if (= --> V2542) (let V2543 (shen.lazyderef (tl V2541) V2945) (if (cons? V2543) (let B (hd V2543) (let V2544 (shen.lazyderef (tl V2543) V2945) (if (= () V2544) (do (shen.incinfs) (shen.t*-pattern Pattern A V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2944) V2945 V2946)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-action (V2948 V2949 V2950 V2951 V2952) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2510 (shen.lazyderef V2948 V2951) (if (cons? V2510) (let V2511 (shen.lazyderef (hd V2510) V2951) (if (= where V2511) (let V2512 (shen.lazyderef (tl V2510) V2951) (if (cons? V2512) (let P (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2951) (if (cons? V2513) (let Action (hd V2513) (let V2514 (shen.lazyderef (tl V2513) V2951) (if (= () V2514) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2950 V2951 (freeze (cut Throwcontrol V2951 (freeze (shen.t*-action Action V2949 (cons (cons P (cons : (cons verified ()))) V2950) V2951 V2952)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2515 (shen.lazyderef V2948 V2951) (if (cons? V2515) (let V2516 (shen.lazyderef (hd V2515) V2951) (if (= shen.choicepoint! V2516) (let V2517 (shen.lazyderef (tl V2515) V2951) (if (cons? V2517) (let V2518 (shen.lazyderef (hd V2517) V2951) (if (cons? V2518) (let V2519 (shen.lazyderef (hd V2518) V2951) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2951) (if (= fail-if V2520) (let V2521 (shen.lazyderef (tl V2519) V2951) (if (cons? V2521) (let F (hd V2521) (let V2522 (shen.lazyderef (tl V2521) V2951) (if (= () V2522) (let V2523 (shen.lazyderef (tl V2518) V2951) (if (cons? V2523) (let Action (hd V2523) (let V2524 (shen.lazyderef (tl V2523) V2951) (if (= () V2524) (let V2525 (shen.lazyderef (tl V2517) V2951) (if (= () V2525) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2949 V2950 V2951 V2952)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2526 (shen.lazyderef V2948 V2951) (if (cons? V2526) (let V2527 (shen.lazyderef (hd V2526) V2951) (if (= shen.choicepoint! V2527) (let V2528 (shen.lazyderef (tl V2526) V2951) (if (cons? V2528) (let Action (hd V2528) (let V2529 (shen.lazyderef (tl V2528) V2951) (if (= () V2529) (do (shen.incinfs) (cut Throwcontrol V2951 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2949 V2950 V2951 V2952)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2948 (cons : (cons V2949 ()))) V2950 V2951 V2952)) Case)) Case)) Case))))) +(defun shen.t*-action (V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2509 (shen.lazyderef V2947 V2950) (if (cons? V2509) (let V2510 (shen.lazyderef (hd V2509) V2950) (if (= where V2510) (let V2511 (shen.lazyderef (tl V2509) V2950) (if (cons? V2511) (let P (hd V2511) (let V2512 (shen.lazyderef (tl V2511) V2950) (if (cons? V2512) (let Action (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2950) (if (= () V2513) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-action Action V2948 (cons (cons P (cons : (cons verified ()))) V2949) V2950 V2951)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2514 (shen.lazyderef V2947 V2950) (if (cons? V2514) (let V2515 (shen.lazyderef (hd V2514) V2950) (if (= shen.choicepoint! V2515) (let V2516 (shen.lazyderef (tl V2514) V2950) (if (cons? V2516) (let V2517 (shen.lazyderef (hd V2516) V2950) (if (cons? V2517) (let V2518 (shen.lazyderef (hd V2517) V2950) (if (cons? V2518) (let V2519 (shen.lazyderef (hd V2518) V2950) (if (= fail-if V2519) (let V2520 (shen.lazyderef (tl V2518) V2950) (if (cons? V2520) (let F (hd V2520) (let V2521 (shen.lazyderef (tl V2520) V2950) (if (= () V2521) (let V2522 (shen.lazyderef (tl V2517) V2950) (if (cons? V2522) (let Action (hd V2522) (let V2523 (shen.lazyderef (tl V2522) V2950) (if (= () V2523) (let V2524 (shen.lazyderef (tl V2516) V2950) (if (= () V2524) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2948 V2949 V2950 V2951)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2525 (shen.lazyderef V2947 V2950) (if (cons? V2525) (let V2526 (shen.lazyderef (hd V2525) V2950) (if (= shen.choicepoint! V2526) (let V2527 (shen.lazyderef (tl V2525) V2950) (if (cons? V2527) (let Action (hd V2527) (let V2528 (shen.lazyderef (tl V2527) V2950) (if (= () V2528) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2948 V2949 V2950 V2951)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2947 (cons : (cons V2948 ()))) V2949 V2950 V2951)) Case)) Case)) Case))))) -(defun shen.t*-pattern (V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2955) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2953) Hyp V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t* (cons V2953 (cons : (cons V2954 ()))) Hyp V2955 V2956)))))))))) +(defun shen.t*-pattern (V2952 V2953 V2954 V2955) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2954) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2952) Hyp V2954 (freeze (cut Throwcontrol V2954 (freeze (shen.t* (cons V2952 (cons : (cons V2953 ()))) Hyp V2954 V2955)))))))))) -(defun shen.tms->hyp (V2957 V2958 V2959 V2960) (let Case (let V2494 (shen.lazyderef V2957 V2959) (if (= () V2494) (let V2495 (shen.lazyderef V2958 V2959) (if (= () V2495) (do (shen.incinfs) (thaw V2960)) (if (shen.pvar? V2495) (do (shen.bindv V2495 () V2959) (let Result (do (shen.incinfs) (thaw V2960)) (do (shen.unbindv V2495 V2959) Result))) false))) false)) (if (= Case false) (let V2496 (shen.lazyderef V2957 V2959) (if (cons? V2496) (let Tm2491 (hd V2496) (let Tms (tl V2496) (let V2497 (shen.lazyderef V2958 V2959) (if (cons? V2497) (let V2498 (shen.lazyderef (hd V2497) V2959) (if (cons? V2498) (let Tm (hd V2498) (let V2499 (shen.lazyderef (tl V2498) V2959) (if (cons? V2499) (let V2500 (shen.lazyderef (hd V2499) V2959) (if (= : V2500) (let V2501 (shen.lazyderef (tl V2499) V2959) (if (cons? V2501) (let A (hd V2501) (let V2502 (shen.lazyderef (tl V2501) V2959) (if (= () V2502) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (if (shen.pvar? V2502) (do (shen.bindv V2502 () V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2502 V2959) Result))) false)))) (if (shen.pvar? V2501) (let A (shen.newpv V2959) (do (shen.bindv V2501 (cons A ()) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2501 V2959) Result)))) false))) (if (shen.pvar? V2500) (do (shen.bindv V2500 : V2959) (let Result (let V2503 (shen.lazyderef (tl V2499) V2959) (if (cons? V2503) (let A (hd V2503) (let V2504 (shen.lazyderef (tl V2503) V2959) (if (= () V2504) (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (if (shen.pvar? V2504) (do (shen.bindv V2504 () V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2504 V2959) Result))) false)))) (if (shen.pvar? V2503) (let A (shen.newpv V2959) (do (shen.bindv V2503 (cons A ()) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2503 V2959) Result)))) false))) (do (shen.unbindv V2500 V2959) Result))) false))) (if (shen.pvar? V2499) (let A (shen.newpv V2959) (do (shen.bindv V2499 (cons : (cons A ())) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2499 V2959) Result)))) false)))) (if (shen.pvar? V2498) (let Tm (shen.newpv V2959) (let A (shen.newpv V2959) (do (shen.bindv V2498 (cons Tm (cons : (cons A ()))) V2959) (let Result (let Hyp (tl V2497) (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960))))) (do (shen.unbindv V2498 V2959) Result))))) false))) (if (shen.pvar? V2497) (let Tm (shen.newpv V2959) (let A (shen.newpv V2959) (let Hyp (shen.newpv V2959) (do (shen.bindv V2497 (cons (cons Tm (cons : (cons A ()))) Hyp) V2959) (let Result (do (shen.incinfs) (unify! Tm Tm2491 V2959 (freeze (shen.tms->hyp Tms Hyp V2959 V2960)))) (do (shen.unbindv V2497 V2959) Result)))))) false))))) false)) Case))) +(defun shen.tms->hyp (V2956 V2957 V2958 V2959) (let Case (let V2493 (shen.lazyderef V2956 V2958) (if (= () V2493) (let V2494 (shen.lazyderef V2957 V2958) (if (= () V2494) (do (shen.incinfs) (thaw V2959)) (if (shen.pvar? V2494) (do (shen.bindv V2494 () V2958) (let Result (do (shen.incinfs) (thaw V2959)) (do (shen.unbindv V2494 V2958) Result))) false))) false)) (if (= Case false) (let V2495 (shen.lazyderef V2956 V2958) (if (cons? V2495) (let Tm2490 (hd V2495) (let Tms (tl V2495) (let V2496 (shen.lazyderef V2957 V2958) (if (cons? V2496) (let V2497 (shen.lazyderef (hd V2496) V2958) (if (cons? V2497) (let Tm (hd V2497) (let V2498 (shen.lazyderef (tl V2497) V2958) (if (cons? V2498) (let V2499 (shen.lazyderef (hd V2498) V2958) (if (= : V2499) (let V2500 (shen.lazyderef (tl V2498) V2958) (if (cons? V2500) (let A (hd V2500) (let V2501 (shen.lazyderef (tl V2500) V2958) (if (= () V2501) (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (if (shen.pvar? V2501) (do (shen.bindv V2501 () V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2501 V2958) Result))) false)))) (if (shen.pvar? V2500) (let A (shen.newpv V2958) (do (shen.bindv V2500 (cons A ()) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2500 V2958) Result)))) false))) (if (shen.pvar? V2499) (do (shen.bindv V2499 : V2958) (let Result (let V2502 (shen.lazyderef (tl V2498) V2958) (if (cons? V2502) (let A (hd V2502) (let V2503 (shen.lazyderef (tl V2502) V2958) (if (= () V2503) (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (if (shen.pvar? V2503) (do (shen.bindv V2503 () V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2503 V2958) Result))) false)))) (if (shen.pvar? V2502) (let A (shen.newpv V2958) (do (shen.bindv V2502 (cons A ()) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2502 V2958) Result)))) false))) (do (shen.unbindv V2499 V2958) Result))) false))) (if (shen.pvar? V2498) (let A (shen.newpv V2958) (do (shen.bindv V2498 (cons : (cons A ())) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2498 V2958) Result)))) false)))) (if (shen.pvar? V2497) (let Tm (shen.newpv V2958) (let A (shen.newpv V2958) (do (shen.bindv V2497 (cons Tm (cons : (cons A ()))) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2497 V2958) Result))))) false))) (if (shen.pvar? V2496) (let Tm (shen.newpv V2958) (let A (shen.newpv V2958) (let Hyp (shen.newpv V2958) (do (shen.bindv V2496 (cons (cons Tm (cons : (cons A ()))) Hyp) V2958) (let Result (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959)))) (do (shen.unbindv V2496 V2958) Result)))))) false))))) false)) Case))) -(defun findall (V2961 V2962 V2963 V2964 V2965) (let B (shen.newpv V2964) (let A (shen.newpv V2964) (do (shen.incinfs) (bind A (gensym shen.a) V2964 (freeze (bind B (set (shen.lazyderef A V2964) ()) V2964 (freeze (shen.findallhelp V2961 V2962 V2963 A V2964 V2965))))))))) +(defun findall (V2960 V2961 V2962 V2963 V2964) (let B (shen.newpv V2963) (let A (shen.newpv V2963) (do (shen.incinfs) (bind A (gensym shen.a) V2963 (freeze (bind B (set (shen.lazyderef A V2963) ()) V2963 (freeze (shen.findallhelp V2960 V2961 V2962 A V2963 V2964))))))))) -(defun shen.findallhelp (V2966 V2967 V2968 V2969 V2970 V2971) (let Case (do (shen.incinfs) (call V2967 V2970 (freeze (shen.remember V2969 V2966 V2970 (freeze (fwhen false V2970 V2971)))))) (if (= Case false) (do (shen.incinfs) (bind V2968 (value (shen.lazyderef V2969 V2970)) V2970 V2971)) Case))) +(defun shen.findallhelp (V2965 V2966 V2967 V2968 V2969 V2970) (let Case (do (shen.incinfs) (call V2966 V2969 (freeze (shen.remember V2968 V2965 V2969 (freeze (fwhen false V2969 V2970)))))) (if (= Case false) (do (shen.incinfs) (bind V2967 (value (shen.lazyderef V2968 V2969)) V2969 V2970)) Case))) -(defun shen.remember (V2972 V2973 V2974 V2975) (let B (shen.newpv V2974) (do (shen.incinfs) (bind B (set (shen.deref V2972 V2974) (cons (shen.deref V2973 V2974) (value (shen.deref V2972 V2974)))) V2974 V2975)))) +(defun shen.remember (V2971 V2972 V2973 V2974) (let B (shen.newpv V2973) (do (shen.incinfs) (bind B (set (shen.deref V2971 V2973) (cons (shen.deref V2972 V2973) (value (shen.deref V2971 V2973)))) V2973 V2974)))) -(defun shen.t*-defcc (V2976 V2977 V2978 V2979 V2980) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2467 (shen.lazyderef V2976 V2979) (if (cons? V2467) (let V2468 (shen.lazyderef (hd V2467) V2979) (if (= defcc V2468) (let V2469 (shen.lazyderef (tl V2467) V2979) (if (cons? V2469) (let F (hd V2469) (let V2470 (shen.lazyderef (tl V2469) V2979) (if (cons? V2470) (let V2471 (shen.lazyderef (hd V2470) V2979) (if (= { V2471) (let V2472 (shen.lazyderef (tl V2470) V2979) (if (cons? V2472) (let V2473 (shen.lazyderef (hd V2472) V2979) (if (cons? V2473) (let V2474 (shen.lazyderef (hd V2473) V2979) (if (= list V2474) (let V2475 (shen.lazyderef (tl V2473) V2979) (if (cons? V2475) (let A (hd V2475) (let V2476 (shen.lazyderef (tl V2475) V2979) (if (= () V2476) (let V2477 (shen.lazyderef (tl V2472) V2979) (if (cons? V2477) (let V2478 (shen.lazyderef (hd V2477) V2979) (if (= ==> V2478) (let V2479 (shen.lazyderef (tl V2477) V2979) (if (cons? V2479) (let B (hd V2479) (let V2480 (shen.lazyderef (tl V2479) V2979) (if (cons? V2480) (let V2481 (shen.lazyderef (hd V2480) V2979) (if (= } V2481) (let Rest (tl V2480) (let Rest& (shen.newpv V2979) (let Rest&& (shen.newpv V2979) (let Rules (shen.newpv V2979) (let ListA&& (shen.newpv V2979) (let B&& (shen.newpv V2979) (let Sig (shen.newpv V2979) (let Declare (shen.newpv V2979) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2979) ())) (cons ==> (cons (shen.lazyderef B V2979) ())))) V2979 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2979)) V2979 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2979)))) V2979 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2979)) V2979 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2979)) V2979 (freeze (shen.get-rules Rules Rest&& V2979 (freeze (cut Throwcontrol V2979 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2978) 1 V2979 (freeze (unify V2977 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2979 (freeze (bind Declare (declare (shen.lazyderef F V2979) (cons (cons list (cons (shen.lazyderef A V2979) ())) (cons ==> (cons (shen.lazyderef B V2979) ())))) V2979 V2980)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) +(defun shen.t*-defcc (V2975 V2976 V2977 V2978 V2979) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2466 (shen.lazyderef V2975 V2978) (if (cons? V2466) (let V2467 (shen.lazyderef (hd V2466) V2978) (if (= defcc V2467) (let V2468 (shen.lazyderef (tl V2466) V2978) (if (cons? V2468) (let F (hd V2468) (let V2469 (shen.lazyderef (tl V2468) V2978) (if (cons? V2469) (let V2470 (shen.lazyderef (hd V2469) V2978) (if (= { V2470) (let V2471 (shen.lazyderef (tl V2469) V2978) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V2978) (if (cons? V2472) (let V2473 (shen.lazyderef (hd V2472) V2978) (if (= list V2473) (let V2474 (shen.lazyderef (tl V2472) V2978) (if (cons? V2474) (let A (hd V2474) (let V2475 (shen.lazyderef (tl V2474) V2978) (if (= () V2475) (let V2476 (shen.lazyderef (tl V2471) V2978) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2978) (if (= ==> V2477) (let V2478 (shen.lazyderef (tl V2476) V2978) (if (cons? V2478) (let B (hd V2478) (let V2479 (shen.lazyderef (tl V2478) V2978) (if (cons? V2479) (let V2480 (shen.lazyderef (hd V2479) V2978) (if (= } V2480) (let Rest (tl V2479) (let Rest& (shen.newpv V2978) (let Rest&& (shen.newpv V2978) (let Rules (shen.newpv V2978) (let ListA&& (shen.newpv V2978) (let B&& (shen.newpv V2978) (let Sig (shen.newpv V2978) (let Declare (shen.newpv V2978) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2978) ())) (cons ==> (cons (shen.lazyderef B V2978) ())))) V2978 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2978)) V2978 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2978)))) V2978 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2978)) V2978 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2978)) V2978 (freeze (shen.get-rules Rules Rest&& V2978 (freeze (cut Throwcontrol V2978 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2977) 1 V2978 (freeze (unify V2976 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2978 (freeze (bind Declare (declare (shen.lazyderef F V2978) (cons (cons list (cons (shen.lazyderef A V2978) ())) (cons ==> (cons (shen.lazyderef B V2978) ())))) V2978 V2979)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) -(defun shen.plug-wildcards (V2981) (cond ((cons? V2981) (map shen.plug-wildcards V2981)) ((= V2981 _) (gensym (intern "X"))) (true V2981))) +(defun shen.plug-wildcards (V2980) (cond ((cons? V2980) (map shen.plug-wildcards V2980)) ((= V2980 _) (gensym (intern "X"))) (true V2980))) -(defun shen.get-rules (V2982 V2983 V2984 V2985) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2460 (shen.lazyderef V2982 V2984) (if (= () V2460) (let V2461 (shen.lazyderef V2983 V2984) (if (= () V2461) (do (shen.incinfs) (cut Throwcontrol V2984 V2985)) false)) (if (shen.pvar? V2460) (do (shen.bindv V2460 () V2984) (let Result (let V2462 (shen.lazyderef V2983 V2984) (if (= () V2462) (do (shen.incinfs) (cut Throwcontrol V2984 V2985)) false)) (do (shen.unbindv V2460 V2984) Result))) false))) (if (= Case false) (let V2463 (shen.lazyderef V2982 V2984) (if (cons? V2463) (let Rule (hd V2463) (let Rules (tl V2463) (let Other (shen.newpv V2984) (do (shen.incinfs) (shen.first-rule V2983 Rule Other V2984 (freeze (cut Throwcontrol V2984 (freeze (shen.get-rules Rules Other V2984 V2985))))))))) (if (shen.pvar? V2463) (let Rule (shen.newpv V2984) (let Rules (shen.newpv V2984) (do (shen.bindv V2463 (cons Rule Rules) V2984) (let Result (let Other (shen.newpv V2984) (do (shen.incinfs) (shen.first-rule V2983 Rule Other V2984 (freeze (cut Throwcontrol V2984 (freeze (shen.get-rules Rules Other V2984 V2985))))))) (do (shen.unbindv V2463 V2984) Result))))) false))) Case))))) +(defun shen.get-rules (V2981 V2982 V2983 V2984) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2459 (shen.lazyderef V2981 V2983) (if (= () V2459) (let V2460 (shen.lazyderef V2982 V2983) (if (= () V2460) (do (shen.incinfs) (cut Throwcontrol V2983 V2984)) false)) (if (shen.pvar? V2459) (do (shen.bindv V2459 () V2983) (let Result (let V2461 (shen.lazyderef V2982 V2983) (if (= () V2461) (do (shen.incinfs) (cut Throwcontrol V2983 V2984)) false)) (do (shen.unbindv V2459 V2983) Result))) false))) (if (= Case false) (let V2462 (shen.lazyderef V2981 V2983) (if (cons? V2462) (let Rule (hd V2462) (let Rules (tl V2462) (let Other (shen.newpv V2983) (do (shen.incinfs) (shen.first-rule V2982 Rule Other V2983 (freeze (cut Throwcontrol V2983 (freeze (shen.get-rules Rules Other V2983 V2984))))))))) (if (shen.pvar? V2462) (let Rule (shen.newpv V2983) (let Rules (shen.newpv V2983) (do (shen.bindv V2462 (cons Rule Rules) V2983) (let Result (let Other (shen.newpv V2983) (do (shen.incinfs) (shen.first-rule V2982 Rule Other V2983 (freeze (cut Throwcontrol V2983 (freeze (shen.get-rules Rules Other V2983 V2984))))))) (do (shen.unbindv V2462 V2983) Result))))) false))) Case))))) -(defun shen.first-rule (V2986 V2987 V2988 V2989 V2990) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2453 (shen.lazyderef V2986 V2989) (if (cons? V2453) (let V2454 (shen.lazyderef (hd V2453) V2989) (if (= ; V2454) (let Other2448 (tl V2453) (let V2455 (shen.lazyderef V2987 V2989) (if (= () V2455) (do (shen.incinfs) (unify! V2988 Other2448 V2989 (freeze (cut Throwcontrol V2989 V2990)))) (if (shen.pvar? V2455) (do (shen.bindv V2455 () V2989) (let Result (do (shen.incinfs) (unify! V2988 Other2448 V2989 (freeze (cut Throwcontrol V2989 V2990)))) (do (shen.unbindv V2455 V2989) Result))) false)))) false)) false)) (if (= Case false) (let V2456 (shen.lazyderef V2986 V2989) (if (cons? V2456) (let X2449 (hd V2456) (let Rest (tl V2456) (let V2457 (shen.lazyderef V2987 V2989) (if (cons? V2457) (let X (hd V2457) (let Rule (tl V2457) (do (shen.incinfs) (unify! X X2449 V2989 (freeze (shen.first-rule Rest Rule V2988 V2989 V2990)))))) (if (shen.pvar? V2457) (let X (shen.newpv V2989) (let Rule (shen.newpv V2989) (do (shen.bindv V2457 (cons X Rule) V2989) (let Result (do (shen.incinfs) (unify! X X2449 V2989 (freeze (shen.first-rule Rest Rule V2988 V2989 V2990)))) (do (shen.unbindv V2457 V2989) Result))))) false))))) false)) Case))))) +(defun shen.first-rule (V2985 V2986 V2987 V2988 V2989) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2452 (shen.lazyderef V2985 V2988) (if (cons? V2452) (let V2453 (shen.lazyderef (hd V2452) V2988) (if (= ; V2453) (let Other2447 (tl V2452) (let V2454 (shen.lazyderef V2986 V2988) (if (= () V2454) (do (shen.incinfs) (unify! V2987 Other2447 V2988 (freeze (cut Throwcontrol V2988 V2989)))) (if (shen.pvar? V2454) (do (shen.bindv V2454 () V2988) (let Result (do (shen.incinfs) (unify! V2987 Other2447 V2988 (freeze (cut Throwcontrol V2988 V2989)))) (do (shen.unbindv V2454 V2988) Result))) false)))) false)) false)) (if (= Case false) (let V2455 (shen.lazyderef V2985 V2988) (if (cons? V2455) (let X2448 (hd V2455) (let Rest (tl V2455) (let V2456 (shen.lazyderef V2986 V2988) (if (cons? V2456) (let X (hd V2456) (let Rule (tl V2456) (do (shen.incinfs) (unify! X X2448 V2988 (freeze (shen.first-rule Rest Rule V2987 V2988 V2989)))))) (if (shen.pvar? V2456) (let X (shen.newpv V2988) (let Rule (shen.newpv V2988) (do (shen.bindv V2456 (cons X Rule) V2988) (let Result (do (shen.incinfs) (unify! X X2448 V2988 (freeze (shen.first-rule Rest Rule V2987 V2988 V2989)))) (do (shen.unbindv V2456 V2988) Result))))) false))))) false)) Case))))) -(defun shen.tc-rules (V2991 V2992 V2993 V2994 V2995 V2996 V2997 V2998) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2442 (shen.lazyderef V2992 V2997) (if (= () V2442) (do (shen.incinfs) (thaw V2998)) false)) (if (= Case false) (let V2443 (shen.lazyderef V2992 V2997) (if (cons? V2443) (let Rule (hd V2443) (let Rules (tl V2443) (let V2444 (shen.lazyderef V2993 V2997) (if (cons? V2444) (let V2445 (shen.lazyderef (hd V2444) V2997) (if (= list V2445) (let V2446 (shen.lazyderef (tl V2444) V2997) (if (cons? V2446) (let A (hd V2446) (let V2447 (shen.lazyderef (tl V2446) V2997) (if (= () V2447) (let M (shen.newpv V2997) (do (shen.incinfs) (shen.tc-rule V2991 Rule A V2994 V2995 V2996 V2997 (freeze (bind M (+ (shen.deref V2996 V2997) 1) V2997 (freeze (cut Throwcontrol V2997 (freeze (shen.tc-rules V2991 Rules (cons list (cons A ())) V2994 V2995 M V2997 V2998))))))))) false))) false)) false)) false)))) false)) Case))))) +(defun shen.tc-rules (V2990 V2991 V2992 V2993 V2994 V2995 V2996 V2997) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2441 (shen.lazyderef V2991 V2996) (if (= () V2441) (do (shen.incinfs) (thaw V2997)) false)) (if (= Case false) (let V2442 (shen.lazyderef V2991 V2996) (if (cons? V2442) (let Rule (hd V2442) (let Rules (tl V2442) (let V2443 (shen.lazyderef V2992 V2996) (if (cons? V2443) (let V2444 (shen.lazyderef (hd V2443) V2996) (if (= list V2444) (let V2445 (shen.lazyderef (tl V2443) V2996) (if (cons? V2445) (let A (hd V2445) (let V2446 (shen.lazyderef (tl V2445) V2996) (if (= () V2446) (let M (shen.newpv V2996) (do (shen.incinfs) (shen.tc-rule V2990 Rule A V2993 V2994 V2995 V2996 (freeze (bind M (+ (shen.deref V2995 V2996) 1) V2996 (freeze (cut Throwcontrol V2996 (freeze (shen.tc-rules V2990 Rules (cons list (cons A ())) V2993 V2994 M V2996 V2997))))))))) false))) false)) false)) false)))) false)) Case))))) -(defun shen.tc-rule (V2999 V3000 V3001 V3002 V3003 V3004 V3005 V3006) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3000 V3001 V3002 V3003 V3005 V3006)) (if (= Case false) (let Err (shen.newpv V3005) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3004 V3005) (cn " of " (shen.app (shen.lazyderef V2999 V3005) "" shen.a)) shen.a))) V3005 V3006))) Case))) +(defun shen.tc-rule (V2998 V2999 V3000 V3001 V3002 V3003 V3004 V3005) (let Case (do (shen.incinfs) (shen.check-defcc-rule V2999 V3000 V3001 V3002 V3004 V3005)) (if (= Case false) (let Err (shen.newpv V3004) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3003 V3004) (cn " of " (shen.app (shen.lazyderef V2998 V3004) "" shen.a)) shen.a))) V3004 V3005))) Case))) -(defun shen.check-defcc-rule (V3007 V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3011) (let Semantics (shen.newpv V3011) (let SynHyps (shen.newpv V3011) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3007 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-hyps Syntax V3010 SynHyps V3008 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-check Syntax V3008 SynHyps V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.semantics-check Semantics V3009 SynHyps V3011 V3012)))))))))))))))))))) +(defun shen.check-defcc-rule (V3006 V3007 V3008 V3009 V3010 V3011) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3010) (let Semantics (shen.newpv V3010) (let SynHyps (shen.newpv V3010) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3006 V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.syntax-hyps Syntax V3009 SynHyps V3007 V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.syntax-check Syntax V3007 SynHyps V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.semantics-check Semantics V3008 SynHyps V3010 V3011)))))))))))))))))))) -(defun shen.syntax-hyps (V3013 V3014 V3015 V3016 V3017 V3018) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2415 (shen.lazyderef V3013 V3017) (if (= () V2415) (do (shen.incinfs) (unify! V3015 V3014 V3017 V3018)) false)) (if (= Case false) (let Case (let V2416 (shen.lazyderef V3013 V3017) (if (cons? V2416) (let X2409 (hd V2416) (let Y (tl V2416) (let V2417 (shen.lazyderef V3015 V3017) (if (cons? V2417) (let V2418 (shen.lazyderef (hd V2417) V3017) (if (cons? V2418) (let X (hd V2418) (let V2419 (shen.lazyderef (tl V2418) V3017) (if (cons? V2419) (let V2420 (shen.lazyderef (hd V2419) V3017) (if (= : V2420) (let V2421 (shen.lazyderef (tl V2419) V3017) (if (cons? V2421) (let A2410 (hd V2421) (let V2422 (shen.lazyderef (tl V2421) V3017) (if (= () V2422) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2422) (do (shen.bindv V2422 () V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2422 V3017) Result))) false)))) (if (shen.pvar? V2421) (let A2410 (shen.newpv V3017) (do (shen.bindv V2421 (cons A2410 ()) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2421 V3017) Result)))) false))) (if (shen.pvar? V2420) (do (shen.bindv V2420 : V3017) (let Result (let V2423 (shen.lazyderef (tl V2419) V3017) (if (cons? V2423) (let A2410 (hd V2423) (let V2424 (shen.lazyderef (tl V2423) V3017) (if (= () V2424) (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2424) (do (shen.bindv V2424 () V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2424 V3017) Result))) false)))) (if (shen.pvar? V2423) (let A2410 (shen.newpv V3017) (do (shen.bindv V2423 (cons A2410 ()) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2423 V3017) Result)))) false))) (do (shen.unbindv V2420 V3017) Result))) false))) (if (shen.pvar? V2419) (let A2410 (shen.newpv V3017) (do (shen.bindv V2419 (cons : (cons A2410 ())) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2419 V3017) Result)))) false)))) (if (shen.pvar? V2418) (let X (shen.newpv V3017) (let A2410 (shen.newpv V3017) (do (shen.bindv V2418 (cons X (cons : (cons A2410 ()))) V3017) (let Result (let SynHyps (tl V2417) (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2418 V3017) Result))))) false))) (if (shen.pvar? V2417) (let X (shen.newpv V3017) (let A2410 (shen.newpv V3017) (let SynHyps (shen.newpv V3017) (do (shen.bindv V2417 (cons (cons X (cons : (cons A2410 ()))) SynHyps) V3017) (let Result (do (shen.incinfs) (unify! V3016 A2410 V3017 (freeze (unify! X X2409 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018)))))))))) (do (shen.unbindv V2417 V3017) Result)))))) false))))) false)) (if (= Case false) (let V2425 (shen.lazyderef V3013 V3017) (if (cons? V2425) (let Y (tl V2425) (do (shen.incinfs) (shen.syntax-hyps Y V3014 V3015 V3016 V3017 V3018))) false)) Case)) Case))))) +(defun shen.syntax-hyps (V3012 V3013 V3014 V3015 V3016 V3017) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2414 (shen.lazyderef V3012 V3016) (if (= () V2414) (do (shen.incinfs) (unify! V3014 V3013 V3016 V3017)) false)) (if (= Case false) (let Case (let V2415 (shen.lazyderef V3012 V3016) (if (cons? V2415) (let X2408 (hd V2415) (let Y (tl V2415) (let V2416 (shen.lazyderef V3014 V3016) (if (cons? V2416) (let V2417 (shen.lazyderef (hd V2416) V3016) (if (cons? V2417) (let X (hd V2417) (let V2418 (shen.lazyderef (tl V2417) V3016) (if (cons? V2418) (let V2419 (shen.lazyderef (hd V2418) V3016) (if (= : V2419) (let V2420 (shen.lazyderef (tl V2418) V3016) (if (cons? V2420) (let A2409 (hd V2420) (let V2421 (shen.lazyderef (tl V2420) V3016) (if (= () V2421) (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (if (shen.pvar? V2421) (do (shen.bindv V2421 () V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2421 V3016) Result))) false)))) (if (shen.pvar? V2420) (let A2409 (shen.newpv V3016) (do (shen.bindv V2420 (cons A2409 ()) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2420 V3016) Result)))) false))) (if (shen.pvar? V2419) (do (shen.bindv V2419 : V3016) (let Result (let V2422 (shen.lazyderef (tl V2418) V3016) (if (cons? V2422) (let A2409 (hd V2422) (let V2423 (shen.lazyderef (tl V2422) V3016) (if (= () V2423) (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (if (shen.pvar? V2423) (do (shen.bindv V2423 () V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2423 V3016) Result))) false)))) (if (shen.pvar? V2422) (let A2409 (shen.newpv V3016) (do (shen.bindv V2422 (cons A2409 ()) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2422 V3016) Result)))) false))) (do (shen.unbindv V2419 V3016) Result))) false))) (if (shen.pvar? V2418) (let A2409 (shen.newpv V3016) (do (shen.bindv V2418 (cons : (cons A2409 ())) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2418 V3016) Result)))) false)))) (if (shen.pvar? V2417) (let X (shen.newpv V3016) (let A2409 (shen.newpv V3016) (do (shen.bindv V2417 (cons X (cons : (cons A2409 ()))) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2417 V3016) Result))))) false))) (if (shen.pvar? V2416) (let X (shen.newpv V3016) (let A2409 (shen.newpv V3016) (let SynHyps (shen.newpv V3016) (do (shen.bindv V2416 (cons (cons X (cons : (cons A2409 ()))) SynHyps) V3016) (let Result (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017)))))))))) (do (shen.unbindv V2416 V3016) Result)))))) false))))) false)) (if (= Case false) (let V2424 (shen.lazyderef V3012 V3016) (if (cons? V2424) (let Y (tl V2424) (do (shen.incinfs) (shen.syntax-hyps Y V3013 V3014 V3015 V3016 V3017))) false)) Case)) Case))))) -(defun shen.get-syntax+semantics (V3019 V3020 V3021 V3022 V3023) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2381 (shen.lazyderef V3019 V3022) (if (= () V2381) (let V2382 (shen.lazyderef V3021 V3022) (if (cons? V2382) (let V2383 (shen.lazyderef (hd V2382) V3022) (if (= := V2383) (let V2384 (shen.lazyderef (tl V2382) V3022) (if (cons? V2384) (let Semantics (hd V2384) (let V2385 (shen.lazyderef (tl V2384) V3022) (if (= () V2385) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (shen.lazyderef Semantics V3022) V3022 V3023)))) false))) false)) false)) false)) (if (shen.pvar? V2381) (do (shen.bindv V2381 () V3022) (let Result (let V2386 (shen.lazyderef V3021 V3022) (if (cons? V2386) (let V2387 (shen.lazyderef (hd V2386) V3022) (if (= := V2387) (let V2388 (shen.lazyderef (tl V2386) V3022) (if (cons? V2388) (let Semantics (hd V2388) (let V2389 (shen.lazyderef (tl V2388) V3022) (if (= () V2389) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (shen.lazyderef Semantics V3022) V3022 V3023)))) false))) false)) false)) false)) (do (shen.unbindv V2381 V3022) Result))) false))) (if (= Case false) (let Case (let V2390 (shen.lazyderef V3019 V3022) (if (= () V2390) (let V2391 (shen.lazyderef V3021 V3022) (if (cons? V2391) (let V2392 (shen.lazyderef (hd V2391) V3022) (if (= := V2392) (let V2393 (shen.lazyderef (tl V2391) V3022) (if (cons? V2393) (let Semantics (hd V2393) (let V2394 (shen.lazyderef (tl V2393) V3022) (if (cons? V2394) (let V2395 (shen.lazyderef (hd V2394) V3022) (if (= where V2395) (let V2396 (shen.lazyderef (tl V2394) V3022) (if (cons? V2396) (let G (hd V2396) (let V2397 (shen.lazyderef (tl V2396) V3022) (if (= () V2397) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (cons where (cons (shen.lazyderef G V3022) (cons (shen.lazyderef Semantics V3022) ()))) V3022 V3023)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2390) (do (shen.bindv V2390 () V3022) (let Result (let V2398 (shen.lazyderef V3021 V3022) (if (cons? V2398) (let V2399 (shen.lazyderef (hd V2398) V3022) (if (= := V2399) (let V2400 (shen.lazyderef (tl V2398) V3022) (if (cons? V2400) (let Semantics (hd V2400) (let V2401 (shen.lazyderef (tl V2400) V3022) (if (cons? V2401) (let V2402 (shen.lazyderef (hd V2401) V3022) (if (= where V2402) (let V2403 (shen.lazyderef (tl V2401) V3022) (if (cons? V2403) (let G (hd V2403) (let V2404 (shen.lazyderef (tl V2403) V3022) (if (= () V2404) (do (shen.incinfs) (cut Throwcontrol V3022 (freeze (bind V3020 (cons where (cons (shen.lazyderef G V3022) (cons (shen.lazyderef Semantics V3022) ()))) V3022 V3023)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2390 V3022) Result))) false))) (if (= Case false) (let V2405 (shen.lazyderef V3019 V3022) (if (cons? V2405) (let X2377 (hd V2405) (let Syntax (tl V2405) (let V2406 (shen.lazyderef V3021 V3022) (if (cons? V2406) (let X (hd V2406) (let Rule (tl V2406) (do (shen.incinfs) (unify! X X2377 V3022 (freeze (shen.get-syntax+semantics Syntax V3020 Rule V3022 V3023)))))) false)))) (if (shen.pvar? V2405) (let X2377 (shen.newpv V3022) (let Syntax (shen.newpv V3022) (do (shen.bindv V2405 (cons X2377 Syntax) V3022) (let Result (let V2407 (shen.lazyderef V3021 V3022) (if (cons? V2407) (let X (hd V2407) (let Rule (tl V2407) (do (shen.incinfs) (unify! X X2377 V3022 (freeze (shen.get-syntax+semantics Syntax V3020 Rule V3022 V3023)))))) false)) (do (shen.unbindv V2405 V3022) Result))))) false))) Case)) Case))))) +(defun shen.get-syntax+semantics (V3018 V3019 V3020 V3021 V3022) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2380 (shen.lazyderef V3018 V3021) (if (= () V2380) (let V2381 (shen.lazyderef V3020 V3021) (if (cons? V2381) (let V2382 (shen.lazyderef (hd V2381) V3021) (if (= := V2382) (let V2383 (shen.lazyderef (tl V2381) V3021) (if (cons? V2383) (let Semantics (hd V2383) (let V2384 (shen.lazyderef (tl V2383) V3021) (if (= () V2384) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (shen.lazyderef Semantics V3021) V3021 V3022)))) false))) false)) false)) false)) (if (shen.pvar? V2380) (do (shen.bindv V2380 () V3021) (let Result (let V2385 (shen.lazyderef V3020 V3021) (if (cons? V2385) (let V2386 (shen.lazyderef (hd V2385) V3021) (if (= := V2386) (let V2387 (shen.lazyderef (tl V2385) V3021) (if (cons? V2387) (let Semantics (hd V2387) (let V2388 (shen.lazyderef (tl V2387) V3021) (if (= () V2388) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (shen.lazyderef Semantics V3021) V3021 V3022)))) false))) false)) false)) false)) (do (shen.unbindv V2380 V3021) Result))) false))) (if (= Case false) (let Case (let V2389 (shen.lazyderef V3018 V3021) (if (= () V2389) (let V2390 (shen.lazyderef V3020 V3021) (if (cons? V2390) (let V2391 (shen.lazyderef (hd V2390) V3021) (if (= := V2391) (let V2392 (shen.lazyderef (tl V2390) V3021) (if (cons? V2392) (let Semantics (hd V2392) (let V2393 (shen.lazyderef (tl V2392) V3021) (if (cons? V2393) (let V2394 (shen.lazyderef (hd V2393) V3021) (if (= where V2394) (let V2395 (shen.lazyderef (tl V2393) V3021) (if (cons? V2395) (let G (hd V2395) (let V2396 (shen.lazyderef (tl V2395) V3021) (if (= () V2396) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (cons where (cons (shen.lazyderef G V3021) (cons (shen.lazyderef Semantics V3021) ()))) V3021 V3022)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2389) (do (shen.bindv V2389 () V3021) (let Result (let V2397 (shen.lazyderef V3020 V3021) (if (cons? V2397) (let V2398 (shen.lazyderef (hd V2397) V3021) (if (= := V2398) (let V2399 (shen.lazyderef (tl V2397) V3021) (if (cons? V2399) (let Semantics (hd V2399) (let V2400 (shen.lazyderef (tl V2399) V3021) (if (cons? V2400) (let V2401 (shen.lazyderef (hd V2400) V3021) (if (= where V2401) (let V2402 (shen.lazyderef (tl V2400) V3021) (if (cons? V2402) (let G (hd V2402) (let V2403 (shen.lazyderef (tl V2402) V3021) (if (= () V2403) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (cons where (cons (shen.lazyderef G V3021) (cons (shen.lazyderef Semantics V3021) ()))) V3021 V3022)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2389 V3021) Result))) false))) (if (= Case false) (let V2404 (shen.lazyderef V3018 V3021) (if (cons? V2404) (let X2376 (hd V2404) (let Syntax (tl V2404) (let V2405 (shen.lazyderef V3020 V3021) (if (cons? V2405) (let X (hd V2405) (let Rule (tl V2405) (do (shen.incinfs) (unify! X X2376 V3021 (freeze (shen.get-syntax+semantics Syntax V3019 Rule V3021 V3022)))))) false)))) (if (shen.pvar? V2404) (let X2376 (shen.newpv V3021) (let Syntax (shen.newpv V3021) (do (shen.bindv V2404 (cons X2376 Syntax) V3021) (let Result (let V2406 (shen.lazyderef V3020 V3021) (if (cons? V2406) (let X (hd V2406) (let Rule (tl V2406) (do (shen.incinfs) (unify! X X2376 V3021 (freeze (shen.get-syntax+semantics Syntax V3019 Rule V3021 V3022)))))) false)) (do (shen.unbindv V2404 V3021) Result))))) false))) Case)) Case))))) -(defun shen.syntax-check (V3024 V3025 V3026 V3027 V3028) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2374 (shen.lazyderef V3024 V3027) (if (= () V2374) (do (shen.incinfs) (thaw V3028)) false)) (if (= Case false) (let Case (let V2375 (shen.lazyderef V3024 V3027) (if (cons? V2375) (let X (hd V2375) (let Syntax (tl V2375) (let C (shen.newpv V3027) (let X&& (shen.newpv V3027) (let B (shen.newpv V3027) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3027)) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3026 V3027 (freeze (cut Throwcontrol V3027 (freeze (bind X&& (concat && (shen.lazyderef X V3027)) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3025 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3026) V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.syntax-check Syntax V3025 V3026 V3027 V3028))))))))))))))))))))))) false)) (if (= Case false) (let V2376 (shen.lazyderef V3024 V3027) (if (cons? V2376) (let X (hd V2376) (let Syntax (tl V2376) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3025 ()))) V3026 V3027 (freeze (cut Throwcontrol V3027 (freeze (shen.syntax-check Syntax V3025 V3026 V3027 V3028)))))))) false)) Case)) Case))))) +(defun shen.syntax-check (V3023 V3024 V3025 V3026 V3027) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2373 (shen.lazyderef V3023 V3026) (if (= () V2373) (do (shen.incinfs) (thaw V3027)) false)) (if (= Case false) (let Case (let V2374 (shen.lazyderef V3023 V3026) (if (cons? V2374) (let X (hd V2374) (let Syntax (tl V2374) (let C (shen.newpv V3026) (let X&& (shen.newpv V3026) (let B (shen.newpv V3026) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3025 V3026 (freeze (cut Throwcontrol V3026 (freeze (bind X&& (concat && (shen.lazyderef X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3024 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3025) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-check Syntax V3024 V3025 V3026 V3027))))))))))))))))))))))) false)) (if (= Case false) (let V2375 (shen.lazyderef V3023 V3026) (if (cons? V2375) (let X (hd V2375) (let Syntax (tl V2375) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3024 ()))) V3025 V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-check Syntax V3024 V3025 V3026 V3027)))))))) false)) Case)) Case))))) -(defun shen.semantics-check (V3029 V3030 V3031 V3032 V3033) (let Semantics* (shen.newpv V3032) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3029 V3032))) V3032 (freeze (shen.t* (cons Semantics* (cons : (cons V3030 ()))) V3031 V3032 V3033)))))) +(defun shen.semantics-check (V3028 V3029 V3030 V3031 V3032) (let Semantics* (shen.newpv V3031) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3028 V3031))) V3031 (freeze (shen.t* (cons Semantics* (cons : (cons V3029 ()))) V3030 V3031 V3032)))))) -(defun shen.rename-semantics (V3034) (cond ((cons? V3034) (cons (shen.rename-semantics (hd V3034)) (shen.rename-semantics (tl V3034)))) ((shen.grammar_symbol? V3034) (cons shen.<-sem (cons V3034 ()))) (true V3034))) +(defun shen.rename-semantics (V3033) (cond ((cons? V3033) (cons (shen.rename-semantics (hd V3033)) (shen.rename-semantics (tl V3033)))) ((shen.grammar_symbol? V3033) (cons shen.<-sem (cons V3033 ()))) (true V3033))) diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index ecb9d91..1374314 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -51,10 +51,6 @@ (defun shen.loop () (do (shen.initialise_environment) (do (shen.prompt) (do (trap-error (shen.read-evaluate-print) (lambda E (pr (error-to-string E) (stoutput)))) (shen.loop))))) -(defun version (V2288) (set *version* V2288)) - -(version "version 13.1") - (defun shen.credits () (do (shen.prhush " Shen 2010, copyright (C) 2010 Mark Tarver " (stoutput)) (do (shen.prhush "released under the Shen license @@ -65,27 +61,27 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.initialise_environment () (shen.multiple-set (cons shen.*call* (cons 0 (cons shen.*infs* (cons 0 (cons shen.*process-counter* (cons 0 (cons shen.*catch* (cons 0 ())))))))))) -(defun shen.multiple-set (V2289) (cond ((= () V2289) ()) ((and (cons? V2289) (cons? (tl V2289))) (do (set (hd V2289) (hd (tl V2289))) (shen.multiple-set (tl (tl V2289))))) (true (shen.sys-error shen.multiple-set)))) +(defun shen.multiple-set (V2288) (cond ((= () V2288) ()) ((and (cons? V2288) (cons? (tl V2288))) (do (set (hd V2288) (hd (tl V2288))) (shen.multiple-set (tl (tl V2288))))) (true (shen.sys-error shen.multiple-set)))) -(defun destroy (V2290) (declare V2290 ())) +(defun destroy (V2289) (declare V2289 ())) (set shen.*history* ()) (defun shen.read-evaluate-print () (let Lineread (shen.toplineread) (let History (value shen.*history*) (let NewLineread (shen.retrieve-from-history-if-needed Lineread History) (let NewHistory (shen.update_history NewLineread History) (let Parsed (fst NewLineread) (shen.toplevel Parsed))))))) -(defun shen.retrieve-from-history-if-needed (V2300 V2301) (cond ((and (tuple? V2300) (and (cons? (snd V2300)) (element? (hd (snd V2300)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2300) (tl (snd V2300))) V2301)) ((and (tuple? V2300) (and (cons? (snd V2300)) (and (cons? (tl (snd V2300))) (and (= () (tl (tl (snd V2300)))) (and (cons? V2301) (and (= (hd (snd V2300)) (shen.exclamation)) (= (hd (tl (snd V2300))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2301))) (hd V2301))) ((and (tuple? V2300) (and (cons? (snd V2300)) (= (hd (snd V2300)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2300)) V2301) (let Find (head (shen.find-past-inputs Key? V2301)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2300) (and (cons? (snd V2300)) (and (= () (tl (snd V2300))) (= (hd (snd V2300)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2301) 0) (abort))) ((and (tuple? V2300) (and (cons? (snd V2300)) (= (hd (snd V2300)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2300)) V2301) (let Pastprint (shen.print-past-inputs Key? (reverse V2301) 0) (abort)))) (true V2300))) +(defun shen.retrieve-from-history-if-needed (V2299 V2300) (cond ((and (tuple? V2299) (and (cons? (snd V2299)) (element? (hd (snd V2299)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2299) (tl (snd V2299))) V2300)) ((and (tuple? V2299) (and (cons? (snd V2299)) (and (cons? (tl (snd V2299))) (and (= () (tl (tl (snd V2299)))) (and (cons? V2300) (and (= (hd (snd V2299)) (shen.exclamation)) (= (hd (tl (snd V2299))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2300))) (hd V2300))) ((and (tuple? V2299) (and (cons? (snd V2299)) (= (hd (snd V2299)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2299)) V2300) (let Find (head (shen.find-past-inputs Key? V2300)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2299) (and (cons? (snd V2299)) (and (= () (tl (snd V2299))) (= (hd (snd V2299)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2300) 0) (abort))) ((and (tuple? V2299) (and (cons? (snd V2299)) (= (hd (snd V2299)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2299)) V2300) (let Pastprint (shen.print-past-inputs Key? (reverse V2300) 0) (abort)))) (true V2299))) (defun shen.percent () 37) (defun shen.exclamation () 33) -(defun shen.prbytes (V2302) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2302) (nl 1))) +(defun shen.prbytes (V2301) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2301) (nl 1))) -(defun shen.update_history (V2303 V2304) (set shen.*history* (cons V2303 V2304))) +(defun shen.update_history (V2302 V2303) (set shen.*history* (cons V2302 V2303))) (defun shen.toplineread () (shen.toplineread_loop (read-byte (stinput)) ())) -(defun shen.toplineread_loop (V2306 V2307) (cond ((= V2306 (shen.hat)) (simple-error "line read aborted")) ((element? V2306 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2307 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2307 (cons V2306 ()))) (@p Line V2307)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2307 (cons V2306 ())))))) +(defun shen.toplineread_loop (V2305 V2306) (cond ((= V2305 (shen.hat)) (simple-error "line read aborted")) ((element? V2305 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2306 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2306 (cons V2305 ()))) (@p Line V2306)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2306 (cons V2305 ())))))) (defun shen.hat () 94) @@ -93,7 +89,7 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.carriage-return () 13) -(defun tc (V2312) (cond ((= + V2312) (set shen.*tc* true)) ((= - V2312) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) +(defun tc (V2311) (cond ((= + V2311) (set shen.*tc* true)) ((= - V2311) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) (defun shen.prompt () (if (value shen.*tc*) (shen.prhush (cn " @@ -101,16 +97,16 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (" (shen.app (length (value shen.*history*)) "-) " shen.a)) (stoutput)))) -(defun shen.toplevel (V2313) (shen.toplevel_evaluate V2313 (value shen.*tc*))) +(defun shen.toplevel (V2312) (shen.toplevel_evaluate V2312 (value shen.*tc*))) -(defun shen.find-past-inputs (V2314 V2315) (let F (shen.find V2314 V2315) (if (empty? F) (simple-error "input not found +(defun shen.find-past-inputs (V2313 V2314) (let F (shen.find V2313 V2314) (if (empty? F) (simple-error "input not found ") F))) -(defun shen.make-key (V2316 V2317) (let Atom (hd (compile shen. V2316 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.make-key (V2315 V2316) (let Atom (hd (compile shen. V2315 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2317)))) (lambda X (shen.prefix? V2316 (shen.trim-gubbins (snd X))))))) +"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2316)))) (lambda X (shen.prefix? V2315 (shen.trim-gubbins (snd X))))))) -(defun shen.trim-gubbins (V2318) (cond ((and (cons? V2318) (= (hd V2318) (shen.space))) (shen.trim-gubbins (tl V2318))) ((and (cons? V2318) (= (hd V2318) (shen.newline))) (shen.trim-gubbins (tl V2318))) ((and (cons? V2318) (= (hd V2318) (shen.carriage-return))) (shen.trim-gubbins (tl V2318))) ((and (cons? V2318) (= (hd V2318) (shen.tab))) (shen.trim-gubbins (tl V2318))) ((and (cons? V2318) (= (hd V2318) (shen.left-round))) (shen.trim-gubbins (tl V2318))) (true V2318))) +(defun shen.trim-gubbins (V2317) (cond ((and (cons? V2317) (= (hd V2317) (shen.space))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.newline))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.carriage-return))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.tab))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.left-round))) (shen.trim-gubbins (tl V2317))) (true V2317))) (defun shen.space () 32) @@ -118,22 +114,22 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.left-round () 40) -(defun shen.find (V2325 V2326) (cond ((= () V2326) ()) ((and (cons? V2326) (V2325 (hd V2326))) (cons (hd V2326) (shen.find V2325 (tl V2326)))) ((cons? V2326) (shen.find V2325 (tl V2326))) (true (shen.sys-error shen.find)))) +(defun shen.find (V2324 V2325) (cond ((= () V2325) ()) ((and (cons? V2325) (V2324 (hd V2325))) (cons (hd V2325) (shen.find V2324 (tl V2325)))) ((cons? V2325) (shen.find V2324 (tl V2325))) (true (shen.sys-error shen.find)))) -(defun shen.prefix? (V2337 V2338) (cond ((= () V2337) true) ((and (cons? V2337) (and (cons? V2338) (= (hd V2338) (hd V2337)))) (shen.prefix? (tl V2337) (tl V2338))) (true false))) +(defun shen.prefix? (V2336 V2337) (cond ((= () V2336) true) ((and (cons? V2336) (and (cons? V2337) (= (hd V2337) (hd V2336)))) (shen.prefix? (tl V2336) (tl V2337))) (true false))) -(defun shen.print-past-inputs (V2348 V2349 V2350) (cond ((= () V2349) _) ((and (cons? V2349) (not (V2348 (hd V2349)))) (shen.print-past-inputs V2348 (tl V2349) (+ V2350 1))) ((and (cons? V2349) (tuple? (hd V2349))) (do (shen.prhush (shen.app V2350 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2349))) (shen.print-past-inputs V2348 (tl V2349) (+ V2350 1))))) (true (shen.sys-error shen.print-past-inputs)))) +(defun shen.print-past-inputs (V2347 V2348 V2349) (cond ((= () V2348) _) ((and (cons? V2348) (not (V2347 (hd V2348)))) (shen.print-past-inputs V2347 (tl V2348) (+ V2349 1))) ((and (cons? V2348) (tuple? (hd V2348))) (do (shen.prhush (shen.app V2349 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2348))) (shen.print-past-inputs V2347 (tl V2348) (+ V2349 1))))) (true (shen.sys-error shen.print-past-inputs)))) -(defun shen.toplevel_evaluate (V2351 V2352) (cond ((and (cons? V2351) (and (cons? (tl V2351)) (and (= : (hd (tl V2351))) (and (cons? (tl (tl V2351))) (and (= () (tl (tl (tl V2351)))) (= true V2352)))))) (shen.typecheck-and-evaluate (hd V2351) (hd (tl (tl V2351))))) ((and (cons? V2351) (cons? (tl V2351))) (do (shen.toplevel_evaluate (cons (hd V2351) ()) V2352) (do (nl 1) (shen.toplevel_evaluate (tl V2351) V2352)))) ((and (cons? V2351) (and (= () (tl V2351)) (= true V2352))) (shen.typecheck-and-evaluate (hd V2351) (gensym A))) ((and (cons? V2351) (and (= () (tl V2351)) (= false V2352))) (let Eval (shen.eval-without-macros (hd V2351)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) +(defun shen.toplevel_evaluate (V2350 V2351) (cond ((and (cons? V2350) (and (cons? (tl V2350)) (and (= : (hd (tl V2350))) (and (cons? (tl (tl V2350))) (and (= () (tl (tl (tl V2350)))) (= true V2351)))))) (shen.typecheck-and-evaluate (hd V2350) (hd (tl (tl V2350))))) ((and (cons? V2350) (cons? (tl V2350))) (do (shen.toplevel_evaluate (cons (hd V2350) ()) V2351) (do (nl 1) (shen.toplevel_evaluate (tl V2350) V2351)))) ((and (cons? V2350) (and (= () (tl V2350)) (= true V2351))) (shen.typecheck-and-evaluate (hd V2350) (gensym A))) ((and (cons? V2350) (and (= () (tl V2350)) (= false V2351))) (let Eval (shen.eval-without-macros (hd V2350)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) -(defun shen.typecheck-and-evaluate (V2353 V2354) (let Typecheck (shen.typecheck V2353 V2354) (if (= Typecheck false) (simple-error "type error -") (let Eval (shen.eval-without-macros V2353) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) +(defun shen.typecheck-and-evaluate (V2352 V2353) (let Typecheck (shen.typecheck V2352 V2353) (if (= Typecheck false) (simple-error "type error +") (let Eval (shen.eval-without-macros V2352) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) -(defun shen.pretty-type (V2355) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2355) V2355)) +(defun shen.pretty-type (V2354) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2354) V2354)) -(defun shen.extract-pvars (V2360) (cond ((shen.pvar? V2360) (cons V2360 ())) ((cons? V2360) (union (shen.extract-pvars (hd V2360)) (shen.extract-pvars (tl V2360)))) (true ()))) +(defun shen.extract-pvars (V2359) (cond ((shen.pvar? V2359) (cons V2359 ())) ((cons? V2359) (union (shen.extract-pvars (hd V2359)) (shen.extract-pvars (tl V2359)))) (true ()))) -(defun shen.mult_subst (V2365 V2366 V2367) (cond ((= () V2365) V2367) ((= () V2366) V2367) ((and (cons? V2365) (cons? V2366)) (shen.mult_subst (tl V2365) (tl V2366) (subst (hd V2365) (hd V2366) V2367))) (true (shen.sys-error shen.mult_subst)))) +(defun shen.mult_subst (V2364 V2365 V2366) (cond ((= () V2364) V2366) ((= () V2365) V2366) ((and (cons? V2364) (cons? V2365)) (shen.mult_subst (tl V2364) (tl V2365) (subst (hd V2364) (hd V2365) V2366))) (true (shen.sys-error shen.mult_subst)))) diff --git a/shen/klambda/types.kl b/shen/klambda/types.kl index b3781a8..08e6c25 100644 --- a/shen/klambda/types.kl +++ b/shen/klambda/types.kl @@ -138,6 +138,8 @@ (declare if (cons boolean (cons --> (cons (cons A (cons --> (cons (cons A (cons --> (cons A ()))) ()))) ())))) +(declare implementation (cons --> (cons string ()))) + (declare include (cons (cons list (cons symbol ())) (cons --> (cons (cons list (cons symbol ())) ())))) (declare include-all-but (cons (cons list (cons symbol ())) (cons --> (cons (cons list (cons symbol ())) ())))) @@ -152,6 +154,8 @@ (declare kill (cons --> (cons A ()))) +(declare language (cons --> (cons string ()))) + (declare length (cons (cons list (cons A ())) (cons --> (cons number ())))) (declare limit (cons (cons vector (cons A ())) (cons --> (cons number ())))) @@ -182,6 +186,12 @@ (declare or (cons boolean (cons --> (cons (cons boolean (cons --> (cons boolean ()))) ())))) +(declare os (cons --> (cons string ()))) + +(declare port (cons --> (cons string ()))) + +(declare porters (cons --> (cons string ()))) + (declare pos (cons string (cons --> (cons (cons number (cons --> (cons string ()))) ())))) (declare pr (cons string (cons --> (cons (cons (cons stream (cons out ())) (cons --> (cons string ()))) ())))) @@ -214,6 +224,8 @@ (declare read-from-string (cons string (cons --> (cons (cons list (cons unit ())) ())))) +(declare release (cons --> (cons string ()))) + (declare remove (cons A (cons --> (cons (cons (cons list (cons A ())) (cons --> (cons (cons list (cons A ())) ()))) ())))) (declare reverse (cons (cons list (cons A ())) (cons --> (cons (cons list (cons A ())) ())))) @@ -280,7 +292,7 @@ (declare vector? (cons A (cons --> (cons boolean ())))) -(declare version (cons string (cons --> (cons string ())))) +(declare version (cons --> (cons string ()))) (declare write-to-file (cons string (cons --> (cons (cons A (cons --> (cons A ()))) ())))) diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index 419e53f..0477f75 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -67,7 +67,7 @@ (set *tracking* []) (set *home-directory* "") (set *alphabet* [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]) -(set *special* [@p @s @v cons lambda let type where set open]) +(set *special* [@p @s @v cons lambda let where set open]) (set *extraspecial* [define process-datatype input+ defcc read+ defmacro]) (set *spy* false) (set *datatypes* []) @@ -85,6 +85,7 @@ (set *infs* 0) (set *hush* false) (set *optimise* false) +(set *version* "13.2.1") (define initialise_arity_table [] -> [] @@ -93,22 +94,24 @@ (define arity F -> (trap-error (get F arity) (/. E -1))) - + + (initialise_arity_table [absvector 1 adjoin 2 and 2 append 2 arity 1 assoc 2 boolean? 1 cd 1 compile 3 concat 2 cons 2 cons? 1 cn 2 declare 2 destroy 1 difference 2 do 2 element? 2 empty? 1 enable-type-theory 1 interror 2 eval 1 eval-kl 1 explode 1 external 1 fail-if 2 fail 0 fix 2 findall 5 freeze 1 fst 1 gensym 1 get 3 get-time 1 address-> 3 <-address 2 <-vector 2 > 2 >= 2 = 2 hd 1 hdv 1 hdstr 1 head 1 if 3 integer? 1 - intern 1 identical 4 inferences 0 input 1 input+ 2 intersection 2 kill 0 length 1 lineread 1 load 1 < 2 - <= 2 vector 1 macroexpand 1 map 2 mapcan 2 maxinferences 1 not 1 nth 2 n->string 1 number? 1 occurs-check 1 - occurrences 2 occurs-check 1 optimise 1 or 2 package 3 pos 2 print 1 profile 1 profile-results 0 pr 2 ps 1 - preclude 1 preclude-all-but 1 protect 1 address-> 3 put 4 reassemble 2 read-file-as-string 1 read-file 1 - read 1 read-byte 1 read-from-string 1 remove 2 reverse 1 set 2 simple-error 1 snd 1 specialise 1 spy 1 - step 1 stinput 0 stoutput 0 string->n 1 string->symbol 1 string? 1 strong-warning 1 subst 3 sum 1 - symbol? 1 tail 1 tl 1 tc 1 tc? 0 thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 1 return 3 - undefmacro 1 unprofile 1 unify 4 unify! 4 union 2 untrack 1 unspecialise 1 undefmacro 1 vector 1 - vector-> 3 value 1 variable? 1 version 1 warn 1 write-byte 2 write-to-file 2 y-or-n? 1 + 2 * 2 / 2 - 2 == 2 1 - @p 2 @v 2 @s 2 preclude 1 include 1 preclude-all-but 1 include-all-but 1 where 2]) + intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 kill 0 language 0 + length 1 lineread 1 load 1 < 2 <= 2 vector 1 macroexpand 1 map 2 mapcan 2 maxinferences 1 not 1 nth 2 + n->string 1 number? 1 occurs-check 1 occurrences 2 occurs-check 1 optimise 1 or 2 os 0 package 3 port 0 + porters 0 pos 2 print 1 profile 1 profile-results 0 pr 2 ps 1 preclude 1 preclude-all-but 1 protect 1 + address-> 3 put 4 reassemble 2 read-file-as-string 1 read-file 1 read 1 read-byte 1 read-from-string 1 + release 0 remove 2 reverse 1 set 2 simple-error 1 snd 1 specialise 1 spy 1 step 1 stinput 0 stoutput 0 + string->n 1 string->symbol 1 string? 1 strong-warning 1 subst 3 sum 1 symbol? 1 tail 1 tl 1 tc 1 tc? 0 + thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 1 return 3 undefmacro 1 unprofile 1 unify 4 unify! 4 + union 2 untrack 1 unspecialise 1 undefmacro 1 vector 1 vector-> 3 value 1 variable? 1 version 0 warn 1 + write-byte 2 write-to-file 2 y-or-n? 1 + 2 * 2 / 2 - 2 == 2 1 @p 2 @v 2 @s 2 preclude 1 include 1 + preclude-all-but 1 include-all-but 1 where 2]) (define systemf F -> (let Shen (intern "shen") @@ -119,16 +122,17 @@ X Y -> (if (element? X Y) Y [X | Y])) (put (intern "shen") external-symbols - [! } { --> <-- && : ; :- := _ *language* *implementation* *stinput* *home-directory* *version* *maximum-print-sequence-size* *macros* *os* *release* *property-vector* @v @p @s *port* *porters* *hush* - <- -> == = >= > /. =! $ - / * + <= < >> <> ==> y-or-n? write-to-file write-byte where when warn version verified variable? value vector-> <-vector vector vector? unspecialise untrack unit unix union unify + [! } { --> <-- && : ; :- := _ *language* *implementation* *stinput* *home-directory* *version* + *maximum-print-sequence-size* *macros* *os* *release* *property-vector* @v @p @s *port* *porters* *hush* + <- -> == = >= > /. =! $ - / * + <= < >> <> ==> y-or-n? write-to-file write-byte where when warn version verified variable? value vector-> <-vector vector vector? unspecialise untrack unit unix union unify unify! unprofile undefmacro return type tuple? true trap-error track time thaw tc? tc tl tlstr tlv tail systemf synonyms symbol symbol? string->symbol subst string? string->n stream string stinput - stoutput step spy specialise snd simple-error set save str run reverse remove read read+ read-file + stoutput step spy specialise snd simple-error set save str run reverse remove release read read+ read-file read-file-as-bytelist read-file-as-string read-byte read-from-string quit put preclude - preclude-all-but ps prolog? protect profile-results profile print pr pos package output out or + preclude-all-but ps prolog? protect profile-results profile print pr pos porters port package output out os or open occurrences occurs-check n->string number? number null nth not nl mode macro macroexpand - maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda kill is - intersection inferences intern integer? input input+ include include-all-but in if identical head + maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language kill is + intersection inferences intern integer? input input+ include include-all-but in implementation if identical head hd hdv hdstr hash get get-time gensym function fst freeze fix file fail fail-if fwhen findall false enable-type-theory explode external exception eval-kl eval error-to-string error empty? element? do difference destroy defun define defmacro defcc defprolog declare datatype cut cn diff --git a/shen/src/sys.shen b/shen/src/sys.shen index 80eb999..357ef18 100644 --- a/shen/src/sys.shen +++ b/shen/src/sys.shen @@ -475,6 +475,24 @@ - -> (set *optimise* false) _ -> (error "optimise expects a + or a -.~%"))) +(define os + -> (value *os*)) +(define language + -> (value *language*)) +(define version + -> (value *version*)) + +(define port + -> (value *port*)) + +(define porters + -> (value *porters*)) + +(define implementation + -> (value *implementation*)) + +(define release + -> (value *release*)) diff --git a/shen/src/t-star.shen b/shen/src/t-star.shen index 7b0add4..aedb915 100644 --- a/shen/src/t-star.shen +++ b/shen/src/t-star.shen @@ -64,6 +64,7 @@ (define curry [F | X] -> [F | (map (function curry) X)] where (special? F) [Def F | X] -> [Def F | X] where (extraspecial? Def) + [type X A] -> [type (curry X) A] [F X Y | Z] -> (curry [[F X] Y | Z]) [F X] -> [(curry F) (curry X)] X -> X) @@ -116,7 +117,7 @@ (bind X&& (placeholder)) (bind Z (ebr X&& X Y)) (th* Z B [[X&& : A] | Hyp]); - (mode [let X Y Z] -) A Hyp <-- ! (th* Y B Hyp) + (mode [let X Y Z] -) A Hyp <-- (th* Y B Hyp) (bind X&& (placeholder)) (bind W (ebr X&& X Z)) (th* W A [[X&& : B] | Hyp]); diff --git a/shen/src/toplevel.shen b/shen/src/toplevel.shen index 2a6e685..b152106 100644 --- a/shen/src/toplevel.shen +++ b/shen/src/toplevel.shen @@ -63,11 +63,6 @@ (trap-error (read-evaluate-print) (/. E (pr (error-to-string E) (stoutput)))) (loop))) -(define version - S -> (set *version* S)) - -(version "version 13.1") - (define credits -> (do (output "~%Shen 2010, copyright (C) 2010 Mark Tarver~%") (output "released under the Shen license~%") diff --git a/shen/src/types.shen b/shen/src/types.shen index 1c91adc..31d341f 100644 --- a/shen/src/types.shen +++ b/shen/src/types.shen @@ -135,6 +135,7 @@ (declare hdv [[vector A] --> A]) (declare hdstr [string --> string]) (declare if [boolean --> [A --> [A --> A]]]) +(declare implementation [--> string]) (declare include [[list symbol] --> [list symbol]]) (declare include-all-but [[list symbol] --> [list symbol]]) (declare inferences [--> number]) @@ -142,6 +143,7 @@ (declare integer? [A --> boolean]) (declare intersection [[list A] --> [[list A] --> [list A]]]) (declare kill [--> A]) +(declare language [--> string]) (declare length [[list A] --> number]) (declare limit [[vector A] --> number]) (declare load [string --> symbol]) @@ -156,7 +158,10 @@ (declare occurrences [A --> [B --> number]]) (declare occurs-check [symbol --> boolean]) (declare optimise [symbol --> boolean]) -(declare or [boolean --> [boolean --> boolean]]) +(declare or [boolean --> [boolean --> boolean]]) +(declare os [--> string]) +(declare port [--> string]) +(declare porters [--> string]) (declare pos [string --> [number --> string]]) (declare pr [string --> [[stream out] --> string]]) (declare print [A --> A]) @@ -173,6 +178,7 @@ (declare read-file-as-string [string --> string]) (declare read-file [string --> [list unit]]) (declare read-from-string [string --> [list unit]]) +(declare release [--> string]) (declare remove [A --> [[list A] --> [list A]]]) (declare reverse [[list A] --> [list A]]) (declare simple-error [string --> A]) @@ -206,7 +212,7 @@ (declare unspecialise [symbol --> symbol]) (declare variable? [A --> boolean]) (declare vector? [A --> boolean]) -(declare version [string --> string]) +(declare version [--> string]) (declare write-to-file [string --> [A --> A]]) (declare write-byte [number --> [[stream out] --> number]]) (declare y-or-n? [string --> boolean]) From ef1f9f9cccaf2441d05a5a6769618ce86933bf9b Mon Sep 17 00:00:00 2001 From: linux Date: Sat, 7 Sep 2013 08:07:43 +0100 Subject: [PATCH 06/57] b105 : updating with intelliJ formatting --- src/shen/Shen.java | 143 +++++++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 63 deletions(-) diff --git a/src/shen/Shen.java b/src/shen/Shen.java index 72cbcf3..09778b3 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -92,8 +92,13 @@ public static void main(String... args) throws Throwable { asList(Math.class, System.class).forEach(Primitives::KL_import); } - interface LLPredicate { boolean test(long a, long b); } - interface Invokable { MethodHandle invoker() throws Exception; } + interface LLPredicate { + boolean test(long a, long b); + } + + interface Invokable { + MethodHandle invoker() throws Exception; + } public static class Numbers implements Opcodes { static final long tag = 1, real = 0, integer = 1; @@ -393,16 +398,16 @@ public Object next() { if (!cons.isList()) return cons; return cons.car; } finally { - cons =!cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; + cons = !cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; } } - } + } } public static final class Primitives { public static boolean EQ(Object left, Object right) { if (Objects.equals(left, right)) return true; - if (absvectorP(left) && absvectorP(right)) { + if (absvectorP(left) && absvectorP(right)) { Object[] leftA = (Object[]) left; Object[] rightA = (Object[]) right; if (leftA.length != rightA.length) return false; @@ -441,10 +446,11 @@ public static boolean consP(Object x) { } public static Object simple_error(String s) { - throw new RuntimeException(s, null, false, false) {}; + throw new RuntimeException(s, null, false, false) { + }; } - public static String error_to_string(Throwable e) { + public static String error_to_string(Throwable e) { return e.getMessage() == null ? e.toString() : e.getMessage(); } @@ -538,8 +544,10 @@ public static Closeable open(String string, Symbol direction) throws IOException } switch (direction.symbol) { - case "in": return new BufferedInputStream(new FileInputStream(file)); - case "out": return new BufferedOutputStream(new FileOutputStream(file)); + case "in": + return new BufferedInputStream(new FileInputStream(file)); + case "out": + return new BufferedOutputStream(new FileOutputStream(file)); } throw new IllegalArgumentException("invalid direction"); } @@ -550,10 +558,13 @@ public static Object close(Closeable stream) throws IOException { } static long startTime = System.currentTimeMillis(); + public static long get_time(Symbol time) { switch (time.symbol) { - case "run": return real((currentTimeMillis() - startTime) / 1000.0); - case "unix": return integer(currentTimeMillis() / 1000); + case "run": + return real((currentTimeMillis() - startTime) / 1000.0); + case "unix": + return integer(currentTimeMillis() / 1000); } throw new IllegalArgumentException("get-time does not understand the parameter " + time); } @@ -620,7 +631,7 @@ public static long length(Collection x) { } public static Object[] ATp(Object x, Object y) { - return new Object[] {shen_tuple, x, y}; + return new Object[]{shen_tuple, x, y}; } public static long hash(Object s, long limit) { @@ -653,9 +664,9 @@ static void install() throws Throwable { for (String file : asList("toplevel", "core", "sys", "sequent", "yacc", "reader", "prolog", "track", "load", "writer", "macros", "declarations", "types", "t-star")) load("klambda/" + file, Callable.class).newInstance().call(); - //Loading custom klambda files + //Loading custom klambda files for (String file : asList("types")) - load("klambda-custom/" + file, Callable.class).newInstance().call(); + load("klambda-custom/" + file, Callable.class).newInstance().call(); set("shen-*installing-kl*", false); set("*home-directory*", getProperty("user.dir")); //Resetting it because it gets overwritten in declarations.kl builtins.addAll(vec(symbols.values().stream().filter(s -> !s.fn.isEmpty()))); @@ -696,7 +707,8 @@ static Class compile(String file, Class aClass) throws Throwable { //noinspection RedundantCast File compilePath = new File((String) intern("*compile-path*").value()); File classFile = new File(compilePath, file + ".class"); - if (!(compilePath.mkdirs() || compilePath.isDirectory())) throw new IOException("could not make directory: " + compilePath); + if (!(compilePath.mkdirs() || compilePath.isDirectory())) + throw new IOException("could not make directory: " + compilePath); try { return compiler.load(classFile.getName().replaceAll(".class$", ".kl"), aClass); } finally { @@ -716,7 +728,7 @@ static Reader resource(String resource) { static String version() { String version = null; try (InputStream manifest = getSystemClassLoader().getResourceAsStream("META-INF/MANIFEST.MF")) { - version = new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); + version = new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); } catch (IOException ignored) { } return version != null ? version : ""; @@ -803,7 +815,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr return java.invokeWithArguments(args); } throw new NoSuchMethodException("undefined function " + name + type - + (symbol.fn.isEmpty() ? "" : " in " + vec(symbol.fn.stream().map(MethodHandle::type)))); + + (symbol.fn.isEmpty() ? "" : " in " + vec(symbol.fn.stream().map(MethodHandle::type)))); } int arity = symbol.fn.get(0).type().parameterCount(); @@ -818,7 +830,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr debug("match based on argument types: %s", match); MethodHandle fallback = linker(site, toBytecodeName(name)).asType(type); - if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { + if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { match = guards.computeIfAbsent(asList(type, symbol.fn), key -> guard(type, symbol.fn)); debug("selected: %s", match); } @@ -828,9 +840,10 @@ public static Object link(MutableCallSite site, String name, Object... args) thr site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); } Object result = match.invokeWithArguments(args); - try{ + try { maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); - }catch(Exception e){ } + } catch (Exception e) { + } return result; } @@ -859,6 +872,7 @@ static void recompile(MethodType type, Symbol symbol) throws Throwable { } static final Map types = new HashMap<>(); + static { types.put(intern("symbol"), Symbol.class); types.put(intern("number"), long.class); @@ -922,7 +936,7 @@ static MethodHandle guard(MethodType type, List candidates) { MethodHandle target = candidates.get(i - 1); Class differentType = find(target.type().parameterList(), fallback.type().parameterList(), (x, y) -> !x.equals(y)); int firstDifferent = target.type().parameterList().indexOf(differentType); - if(firstDifferent == -1){ + if (firstDifferent == -1) { firstDifferent = 0; } debug("switching on %d argument type %s", firstDifferent, differentType); @@ -943,9 +957,9 @@ static List bestMatchingMethods(MethodType type, List xClass, Object x) { - if(xClass != null){ + if (xClass != null) { return canCastStrict(x.getClass(), xClass); - }else{ + } else { return false; } } @@ -975,7 +989,8 @@ public static Object proxy(Method sam, Object x) throws Throwable { int arity = sam.getParameterTypes().length; int actual = target.type().parameterCount(); if (arity < actual) target = insertArguments(target, arity, new Object[actual - arity]); - if (arity > actual) target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); + if (arity > actual) + target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); return asInterfaceInstance(sam.getDeclaringClass(), target); } return null; @@ -987,10 +1002,10 @@ static MethodHandle filterJavaTypes(MethodHandle method) throws IllegalAccessExc if (isSAM(method.type().parameterType(i))) filters[i] = proxy.bindTo(findSAM(method.type().parameterType(i))) .asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().parameterType(i), int.class)) + else if (canCast(method.type().parameterType(i), int.class)) filters[i] = asInt.asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().wrap().parameterType(i), Number.class)) - filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); + else if (canCast(method.type().wrap().parameterType(i), Number.class)) + filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); if (canCast(method.type().wrap().returnType(), Number.class)) method = filterReturnValue(method, number.asType(methodType(long.class, method.type().returnType()))); return filterArguments(method, 0, filters); @@ -1081,7 +1096,7 @@ static MethodHandle field(Class aClass, String name) { } static boolean canCast(Class a, Class b) { - return a == Object.class || b == Object.class || canCastStrict(a, b); + return a == Object.class || b == Object.class || canCastStrict(a, b); } static boolean canCastStrict(Class a, Class b) { @@ -1106,7 +1121,7 @@ public static Symbol defun(Symbol name, MethodHandle fn) throws Throwable { name.fn.add(fn); if (guard != null) { name.fnGuard = new SwitchPoint(); - invalidateAll(new SwitchPoint[] {guard}); + invalidateAll(new SwitchPoint[]{guard}); } return name; } @@ -1141,7 +1156,7 @@ public static MethodHandle bindTo(MethodHandle fn, Object arg) { } static String unscramble(String s) { - return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "") .replaceAll("GT", ">").replaceAll("EQ", "=") + return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "").replaceAll("GT", ">").replaceAll("EQ", "=") .replaceAll("LT", "<").replaceAll("EX$", "!").replaceAll("P$", "?").replaceAll("^AT", "@"); } @@ -1172,6 +1187,7 @@ public static class Compiler implements Opcodes { symbolBSM = handle(mh(RT.class, "symbolBSM")), or = handle(RT.mh(Primitives.class, "or")), and = handle(RT.mh(Primitives.class, "and")); static final Map push = new HashMap<>(); + static { register(Macros.class, Compiler::macro); } @@ -1217,8 +1233,9 @@ public Compiler(ClassWriter cn, String className, Object kl, Symbol... args) thr } static ClassWriter classWriter(String name, Class anInterface) { - ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) {}; // Needs to be in this package for some reason. - cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[] {getInternalName(anInterface)}); + ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) { + }; // Needs to be in this package for some reason. + cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[]{getInternalName(anInterface)}); return cw; } @@ -1352,7 +1369,7 @@ void indy(Symbol s, List args, Type returnType, boolean tail) throws Ref } void recur(List argumentTypes) { - for (int i = args.size()- 1; i >= 0; i--) { + for (int i = args.size() - 1; i >= 0; i--) { if (!isPrimitive(method.getArgumentTypes()[i])) mv.valueOf(argumentTypes.get(i)); mv.storeArg(i); } @@ -1479,7 +1496,7 @@ public void let(boolean tail, Type returnType, Symbol x, Object y, Object z) thr locals.put(x, let); compile(z, returnType, tail); if (hidden != null) locals.put(x, hidden); - else locals.remove(x); + else locals.remove(x); mv.push((String) null); mv.storeLocal(let); mv.visitLocalVariable(x.symbol, mv.getLocalType(let).getDescriptor(), null, start, mv.mark(), let); @@ -1527,11 +1544,14 @@ Stream closesOver(Set scope, Object kl) { List list = new ArrayList<>((Collection) kl); if (!list.isEmpty()) switch (list.get(0).toString()) { - case "let": return concat(closesOver(scope, list.get(2)), closesOver(conj(scope, list.get(2)), list.get(3))); - case "lambda": return closesOver(conj(scope, list.get(2)), list.get(2)); - case "defun": return closesOver(into(scope, (Collection) list.get(2)), list.get(3)); + case "let": + return concat(closesOver(scope, list.get(2)), closesOver(conj(scope, list.get(2)), list.get(3))); + case "lambda": + return closesOver(conj(scope, list.get(2)), list.get(2)); + case "defun": + return closesOver(into(scope, (Collection) list.get(2)), list.get(3)); } - return list.stream().flatMap(o -> closesOver(scope, o)); + return list.stream().flatMap(o -> closesOver(scope, o)); } return empty(); } @@ -1545,8 +1565,7 @@ void symbol(Symbol s) throws Throwable { if (asList("true", "false").contains(s.symbol)) { push(Boolean.class, Boolean.valueOf(s.symbol)); return; - } - else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); + } else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); else if (args.contains(s)) mv.loadArg(args.indexOf(s)); else push(s); topOfStack = typeOf(s); @@ -1600,7 +1619,8 @@ void unbox(Type type) { } void popStack() { - if (topOfStack.getSize() == 1) mv.pop(); else mv.pop2(); + if (topOfStack.getSize() == 1) mv.pop(); + else mv.pop2(); } void maybeCast(Class type) { @@ -1662,7 +1682,7 @@ void bindTo(Handle handle, Object arg) { } void bindTo() { - mv.invokeStatic(getType(RT.class), method("bindTo",desc(MethodHandle.class, MethodHandle.class, Object.class))); + mv.invokeStatic(getType(RT.class), method("bindTo", desc(MethodHandle.class, MethodHandle.class, Object.class))); topOfStack(MethodHandle.class); } @@ -1680,7 +1700,7 @@ static void printASM(byte[] bytes, Method method) { PrintWriter pw = new PrintWriter(err); TraceClassVisitor printer = new TraceClassVisitor(null, asm, pw); if (method == null) - new ClassReader(bytes).accept(printer, SKIP_DEBUG); + new ClassReader(bytes).accept(printer, SKIP_DEBUG); else { ClassNode cn = new ClassNode(); new ClassReader(bytes).accept(cn, SKIP_DEBUG); @@ -1743,11 +1763,11 @@ static boolean every(Collection c1, Collection c2, BiPredicate p //return zip(c1.stream(), c2.stream(), pred::test).allMatch(isEqual(true)); Iterator it1 = c1.iterator(); Iterator it2 = c2.iterator(); - List result= new ArrayList(); - while(it1.hasNext() && it2.hasNext()) { + List result = new ArrayList(); + while (it1.hasNext() && it2.hasNext()) { T value1 = it1.next(); T value2 = it2.next(); - result.add(pred.test(value1,value2)); + result.add(pred.test(value1, value2)); } boolean ret = !result.contains(false); return ret; @@ -1758,14 +1778,14 @@ static T find(Collection c1, Collection c2, BiPredicate pred) { // .filter(Objects::nonNull).findFirst().orElse(null); Iterator it1 = c1.iterator(); Iterator it2 = c2.iterator(); - Collection result = new ArrayList(c1); + Collection result = new ArrayList(c1); result.clear(); - while(it1.hasNext() && it2.hasNext()) { + while (it1.hasNext() && it2.hasNext()) { T value1 = it1.next(); T value2 = it2.next(); - if(pred.test(value1, value2) == true){ + if (pred.test(value1, value2) == true) { result.add(value1); - }else{ + } else { result.add(null); } } @@ -1790,6 +1810,7 @@ static T uncheckAndThrow(Throwable t) throws T { //noinspe //***************************************************************** //***************************************************************** //Stuff taken out of b93 and modified appropriately + /** * Creates a lazy concatenated {@code Stream} whose elements are all the * elements of a first {@code Stream} succeeded by all the elements of the @@ -1798,9 +1819,9 @@ static T uncheckAndThrow(Throwable t) throws T { //noinspe * streams is parallel. * * @param The type of stream elements - * @param a the first stream - * @param b the second stream to concatenate on to end of the first - * stream + * @param a the first stream + * @param b the second stream to concatenate on to end of the first + * stream * @return the concatenation of the two input streams */ public static Stream concat(Stream a, Stream b) { @@ -1814,8 +1835,8 @@ public static Stream concat(Stream a, Stream b) ? StreamSupport.parallelStream(split) : StreamSupport.stream(split);*/ return (a.isParallel() || b.isParallel()) - ? StreamSupport.stream(split,true) - : StreamSupport.stream(split,false); + ? StreamSupport.stream(split, true) + : StreamSupport.stream(split, false); } private abstract static class ConcatSpliterator> @@ -1847,8 +1868,7 @@ public boolean tryAdvance(Consumer consumer) { beforeSplit = false; hasNext = bSpliterator.tryAdvance(consumer); } - } - else + } else hasNext = bSpliterator.tryAdvance(consumer); return hasNext; } @@ -1867,8 +1887,7 @@ public long estimateSize() { // will either be Long.MAX_VALUE or overflow to a negative value long size = aSpliterator.estimateSize() + bSpliterator.estimateSize(); return (size >= 0) ? size : Long.MAX_VALUE; - } - else { + } else { return bSpliterator.estimateSize(); } } @@ -1879,8 +1898,7 @@ public int characteristics() { // Concatenation loses DISTINCT and SORTED characteristics return aSpliterator.characteristics() & bSpliterator.characteristics() & ~(Spliterator.DISTINCT | Spliterator.SORTED); - } - else { + } else { return bSpliterator.characteristics(); } } @@ -1914,8 +1932,7 @@ public boolean tryAdvance(T_CONS action) { beforeSplit = false; hasNext = bSpliterator.tryAdvance(action); } - } - else + } else hasNext = bSpliterator.tryAdvance(action); return hasNext; } From 7399dd505cc38be258880030a966115545e55427 Mon Sep 17 00:00:00 2001 From: linux Date: Sat, 7 Sep 2013 10:31:17 +0100 Subject: [PATCH 07/57] b105 : taking a step towards making b106 compatible --- src/shen/Shen.java | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/shen/Shen.java b/src/shen/Shen.java index 09778b3..c4f396f 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -1182,10 +1182,14 @@ public static class Compiler implements Opcodes { static final AnonymousClassLoader loader = AnonymousClassLoader.make(unsafe(), RT.class); static final Map macros = new HashMap<>(); static final List> literals = asList(Long.class, String.class, Boolean.class, Handle.class); + static final Handle - applyBSM = handle(mh(RT.class, "applyBSM")), invokeBSM = handle(mh(RT.class, "invokeBSM")), - symbolBSM = handle(mh(RT.class, "symbolBSM")), or = handle(RT.mh(Primitives.class, "or")), - and = handle(RT.mh(Primitives.class, "and")); + applyBSM = handle(RT.class, "shen/Shen$RT", "applyBSM"), + invokeBSM = handle(RT.class, "shen/Shen$RT", "invokeBSM"), + symbolBSM = handle(RT.class, "shen/Shen$RT", "symbolBSM"), + or = handle(Primitives.class, "shen/Shen$Primitives", "or"), + and = handle(Primitives.class, "shen/Shen$Primitives", "and"); + static final Map push = new HashMap<>(); static { @@ -1252,9 +1256,9 @@ static String desc(Type returnType, List argumentTypes) { return getMethodDescriptor(returnType, argumentTypes.toArray(new Type[argumentTypes.size()])); } - static Handle handle(MethodHandle handle) { - MethodHandleInfo info = new MethodHandleInfo(handle); - return handle(getInternalName(info.getDeclaringClass()), info.getName(), handle.type().toMethodDescriptorString()); + static Handle handle(Class aClass, String shenClassName, String shenRTFunc) { + MethodHandle hand = mh(aClass, shenRTFunc); + return handle(shenClassName, shenRTFunc, hand.type().toMethodDescriptorString()); } static Handle handle(String className, String name, String desc) { @@ -1804,6 +1808,7 @@ static RuntimeException uncheck(Throwable t) { static T uncheckAndThrow(Throwable t) throws T { //noinspection unchecked throw (T) t; } + //***************************************************************** //***************************************************************** //***************************************************************** @@ -1969,4 +1974,11 @@ private OfDouble(Spliterator.OfDouble aSpliterator, Spliterator.OfDouble bSplite } } } + + //***************************************************************** + //***************************************************************** + //***************************************************************** + //***************************************************************** + //***************************************************************** + } From fc0080915f418c0108e6eccb9ee9f5768c4941d3 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 05:21:06 +0000 Subject: [PATCH 08/57] replacing file with version from https://github.com/hraberg/Shen.java --- src/shen/Shen.java | 363 +++++++++------------------------------------ 1 file changed, 72 insertions(+), 291 deletions(-) diff --git a/src/shen/Shen.java b/src/shen/Shen.java index c4f396f..26d767c 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -15,6 +15,7 @@ import java.lang.reflect.Executable; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.nio.charset.Charset; import java.util.*; import java.util.ArrayList; import java.util.concurrent.Callable; @@ -23,11 +24,12 @@ import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; -import java.util.stream.StreamSupport; import static java.lang.Character.isUpperCase; import static java.lang.ClassLoader.getSystemClassLoader; -import static java.lang.Double.*; +import static java.lang.ClassLoader.getSystemResources; +import static java.lang.Double.doubleToLongBits; +import static java.lang.Double.longBitsToDouble; import static java.lang.Math.floorMod; import static java.lang.Math.toIntExact; import static java.lang.String.format; @@ -41,14 +43,13 @@ import static java.lang.reflect.Modifier.isPublic; import static java.util.Arrays.*; import static java.util.Arrays.fill; -import static java.util.Arrays.stream; import static java.util.Collections.*; import static java.util.Objects.deepEquals; -import static java.util.function.Predicate.*; +import static java.util.function.Predicate.isEqual; import static java.util.jar.Attributes.Name.IMPLEMENTATION_VERSION; import static java.util.stream.Collectors.toSet; +import static java.util.stream.Stream.concat; import static java.util.stream.Stream.empty; -//import static java.util.stream.Streams.*; import static jdk.internal.org.objectweb.asm.ClassReader.SKIP_DEBUG; import static jdk.internal.org.objectweb.asm.ClassWriter.COMPUTE_FRAMES; import static jdk.internal.org.objectweb.asm.Type.*; @@ -58,6 +59,8 @@ import static shen.Shen.KLReader.lines; import static shen.Shen.KLReader.read; import static shen.Shen.Numbers.*; +import static shen.Shen.Numbers.asNumber; +import static shen.Shen.Primitives.EQ; import static shen.Shen.Primitives.*; import static shen.Shen.RT.*; import static shen.Shen.RT.lookup; @@ -77,7 +80,7 @@ public static void main(String... args) throws Throwable { static { set("*language*", "Java"); set("*implementation*", format("%s (build %s)", getProperty("java.runtime.name"), getProperty("java.runtime.version"))); - set("*porters*", "Håkan Råberg"); + set("*porters*", new String("Håkan Råberg".getBytes(), Charset.forName("ISO-8859-1"))); set("*port*", version()); set("*stinput*", in); set("*stoutput*", out); @@ -92,13 +95,8 @@ public static void main(String... args) throws Throwable { asList(Math.class, System.class).forEach(Primitives::KL_import); } - interface LLPredicate { - boolean test(long a, long b); - } - - interface Invokable { - MethodHandle invoker() throws Exception; - } + interface LLPredicate { boolean test(long a, long b); } + interface Invokable { MethodHandle invoker() throws Exception; } public static class Numbers implements Opcodes { static final long tag = 1, real = 0, integer = 1; @@ -398,16 +396,16 @@ public Object next() { if (!cons.isList()) return cons; return cons.car; } finally { - cons = !cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; + cons =!cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; } } - } + } } public static final class Primitives { public static boolean EQ(Object left, Object right) { if (Objects.equals(left, right)) return true; - if (absvectorP(left) && absvectorP(right)) { + if (absvectorP(left) && absvectorP(right)) { Object[] leftA = (Object[]) left; Object[] rightA = (Object[]) right; if (leftA.length != rightA.length) return false; @@ -446,11 +444,10 @@ public static boolean consP(Object x) { } public static Object simple_error(String s) { - throw new RuntimeException(s, null, false, false) { - }; + throw new RuntimeException(s, null, false, false) {}; } - public static String error_to_string(Throwable e) { + public static String error_to_string(Throwable e) { return e.getMessage() == null ? e.toString() : e.getMessage(); } @@ -526,8 +523,7 @@ public static long read_byte(InputStream s) throws IOException { } public static Long convertToLong(Object x) { - if (x instanceof Long) x = asNumber((Long) x); - return Long.valueOf((Long) x); + return (Long) asNumber((Long) x); } public static T write_byte(T x, OutputStream s) throws IOException { @@ -544,10 +540,8 @@ public static Closeable open(String string, Symbol direction) throws IOException } switch (direction.symbol) { - case "in": - return new BufferedInputStream(new FileInputStream(file)); - case "out": - return new BufferedOutputStream(new FileOutputStream(file)); + case "in": return new BufferedInputStream(new FileInputStream(file)); + case "out": return new BufferedOutputStream(new FileOutputStream(file)); } throw new IllegalArgumentException("invalid direction"); } @@ -558,13 +552,10 @@ public static Object close(Closeable stream) throws IOException { } static long startTime = System.currentTimeMillis(); - public static long get_time(Symbol time) { switch (time.symbol) { - case "run": - return real((currentTimeMillis() - startTime) / 1000.0); - case "unix": - return integer(currentTimeMillis() / 1000); + case "run": return real((currentTimeMillis() - startTime) / 1000.0); + case "unix": return integer(currentTimeMillis() / 1000); } throw new IllegalArgumentException("get-time does not understand the parameter " + time); } @@ -631,7 +622,7 @@ public static long length(Collection x) { } public static Object[] ATp(Object x, Object y) { - return new Object[]{shen_tuple, x, y}; + return new Object[] {shen_tuple, x, y}; } public static long hash(Object s, long limit) { @@ -664,9 +655,8 @@ static void install() throws Throwable { for (String file : asList("toplevel", "core", "sys", "sequent", "yacc", "reader", "prolog", "track", "load", "writer", "macros", "declarations", "types", "t-star")) load("klambda/" + file, Callable.class).newInstance().call(); - //Loading custom klambda files for (String file : asList("types")) - load("klambda-custom/" + file, Callable.class).newInstance().call(); + load("klambda-custom/" + file, Callable.class).newInstance().call(); set("shen-*installing-kl*", false); set("*home-directory*", getProperty("user.dir")); //Resetting it because it gets overwritten in declarations.kl builtins.addAll(vec(symbols.values().stream().filter(s -> !s.fn.isEmpty()))); @@ -707,8 +697,7 @@ static Class compile(String file, Class aClass) throws Throwable { //noinspection RedundantCast File compilePath = new File((String) intern("*compile-path*").value()); File classFile = new File(compilePath, file + ".class"); - if (!(compilePath.mkdirs() || compilePath.isDirectory())) - throw new IOException("could not make directory: " + compilePath); + if (!(compilePath.mkdirs() || compilePath.isDirectory())) throw new IOException("could not make directory: " + compilePath); try { return compiler.load(classFile.getName().replaceAll(".class$", ".kl"), aClass); } finally { @@ -726,12 +715,12 @@ static Reader resource(String resource) { } static String version() { - String version = null; - try (InputStream manifest = getSystemClassLoader().getResourceAsStream("META-INF/MANIFEST.MF")) { - version = new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); - } catch (IOException ignored) { + try (InputStream manifest = find(Collections.list(getSystemResources("META-INF/MANIFEST.MF")).stream(), + u -> u.getPath().matches(".*shen.java.*?.jar!.*")).openStream()) { + return new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); + } catch (IOException | NullPointerException ignored) { } - return version != null ? version : ""; + return ""; } public static class KLReader { @@ -815,7 +804,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr return java.invokeWithArguments(args); } throw new NoSuchMethodException("undefined function " + name + type - + (symbol.fn.isEmpty() ? "" : " in " + vec(symbol.fn.stream().map(MethodHandle::type)))); + + (symbol.fn.isEmpty() ? "" : " in " + vec(symbol.fn.stream().map(MethodHandle::type)))); } int arity = symbol.fn.get(0).type().parameterCount(); @@ -830,7 +819,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr debug("match based on argument types: %s", match); MethodHandle fallback = linker(site, toBytecodeName(name)).asType(type); - if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { + if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { match = guards.computeIfAbsent(asList(type, symbol.fn), key -> guard(type, symbol.fn)); debug("selected: %s", match); } @@ -840,10 +829,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); } Object result = match.invokeWithArguments(args); - try { - maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); - } catch (Exception e) { - } + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); return result; } @@ -872,7 +858,6 @@ static void recompile(MethodType type, Symbol symbol) throws Throwable { } static final Map types = new HashMap<>(); - static { types.put(intern("symbol"), Symbol.class); types.put(intern("number"), long.class); @@ -936,9 +921,7 @@ static MethodHandle guard(MethodType type, List candidates) { MethodHandle target = candidates.get(i - 1); Class differentType = find(target.type().parameterList(), fallback.type().parameterList(), (x, y) -> !x.equals(y)); int firstDifferent = target.type().parameterList().indexOf(differentType); - if (firstDifferent == -1) { - firstDifferent = 0; - } + if (firstDifferent == -1) firstDifferent = 0; debug("switching on %d argument type %s", firstDifferent, differentType); debug("target: %s ; fallback: %s", target, fallback); MethodHandle test = checkClass.bindTo(differentType); @@ -957,11 +940,7 @@ static List bestMatchingMethods(MethodType type, List xClass, Object x) { - if (xClass != null) { - return canCastStrict(x.getClass(), xClass); - } else { - return false; - } + return xClass != null && canCastStrict(x.getClass(), xClass); } static MethodHandle relinkOn(Class exception, MethodHandle fn, MethodHandle fallback) { @@ -989,8 +968,7 @@ public static Object proxy(Method sam, Object x) throws Throwable { int arity = sam.getParameterTypes().length; int actual = target.type().parameterCount(); if (arity < actual) target = insertArguments(target, arity, new Object[actual - arity]); - if (arity > actual) - target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); + if (arity > actual) target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); return asInterfaceInstance(sam.getDeclaringClass(), target); } return null; @@ -1002,10 +980,10 @@ static MethodHandle filterJavaTypes(MethodHandle method) throws IllegalAccessExc if (isSAM(method.type().parameterType(i))) filters[i] = proxy.bindTo(findSAM(method.type().parameterType(i))) .asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().parameterType(i), int.class)) + else if (canCast(method.type().parameterType(i), int.class)) filters[i] = asInt.asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().wrap().parameterType(i), Number.class)) - filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); + else if (canCast(method.type().wrap().parameterType(i), Number.class)) + filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); if (canCast(method.type().wrap().returnType(), Number.class)) method = filterReturnValue(method, number.asType(methodType(long.class, method.type().returnType()))); return filterArguments(method, 0, filters); @@ -1096,7 +1074,7 @@ static MethodHandle field(Class aClass, String name) { } static boolean canCast(Class a, Class b) { - return a == Object.class || b == Object.class || canCastStrict(a, b); + return a == Object.class || b == Object.class || canCastStrict(a, b); } static boolean canCastStrict(Class a, Class b) { @@ -1121,7 +1099,7 @@ public static Symbol defun(Symbol name, MethodHandle fn) throws Throwable { name.fn.add(fn); if (guard != null) { name.fnGuard = new SwitchPoint(); - invalidateAll(new SwitchPoint[]{guard}); + invalidateAll(new SwitchPoint[] {guard}); } return name; } @@ -1156,7 +1134,7 @@ public static MethodHandle bindTo(MethodHandle fn, Object arg) { } static String unscramble(String s) { - return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "").replaceAll("GT", ">").replaceAll("EQ", "=") + return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "") .replaceAll("GT", ">").replaceAll("EQ", "=") .replaceAll("LT", "<").replaceAll("EX$", "!").replaceAll("P$", "?").replaceAll("^AT", "@"); } @@ -1182,16 +1160,11 @@ public static class Compiler implements Opcodes { static final AnonymousClassLoader loader = AnonymousClassLoader.make(unsafe(), RT.class); static final Map macros = new HashMap<>(); static final List> literals = asList(Long.class, String.class, Boolean.class, Handle.class); - static final Handle - applyBSM = handle(RT.class, "shen/Shen$RT", "applyBSM"), - invokeBSM = handle(RT.class, "shen/Shen$RT", "invokeBSM"), - symbolBSM = handle(RT.class, "shen/Shen$RT", "symbolBSM"), - or = handle(Primitives.class, "shen/Shen$Primitives", "or"), - and = handle(Primitives.class, "shen/Shen$Primitives", "and"); - + applyBSM = handle(RT.class, "applyBSM"), invokeBSM = handle(RT.class, "invokeBSM"), + symbolBSM = handle(RT.class, "symbolBSM"), or = handle(Primitives.class, "or"), + and = handle(Primitives.class, "and"); static final Map push = new HashMap<>(); - static { register(Macros.class, Compiler::macro); } @@ -1237,9 +1210,8 @@ public Compiler(ClassWriter cn, String className, Object kl, Symbol... args) thr } static ClassWriter classWriter(String name, Class anInterface) { - ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) { - }; // Needs to be in this package for some reason. - cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[]{getInternalName(anInterface)}); + ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) {}; // Needs to be in this package for some reason. + cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[] {getInternalName(anInterface)}); return cw; } @@ -1256,9 +1228,8 @@ static String desc(Type returnType, List argumentTypes) { return getMethodDescriptor(returnType, argumentTypes.toArray(new Type[argumentTypes.size()])); } - static Handle handle(Class aClass, String shenClassName, String shenRTFunc) { - MethodHandle hand = mh(aClass, shenRTFunc); - return handle(shenClassName, shenRTFunc, hand.type().toMethodDescriptorString()); + static Handle handle(Class declaringClass, String name) { + return handle(getInternalName(declaringClass), name, mh(declaringClass, name).type().toMethodDescriptorString()); } static Handle handle(String className, String name, String desc) { @@ -1373,7 +1344,7 @@ void indy(Symbol s, List args, Type returnType, boolean tail) throws Ref } void recur(List argumentTypes) { - for (int i = args.size() - 1; i >= 0; i--) { + for (int i = args.size()- 1; i >= 0; i--) { if (!isPrimitive(method.getArgumentTypes()[i])) mv.valueOf(argumentTypes.get(i)); mv.storeArg(i); } @@ -1500,9 +1471,11 @@ public void let(boolean tail, Type returnType, Symbol x, Object y, Object z) thr locals.put(x, let); compile(z, returnType, tail); if (hidden != null) locals.put(x, hidden); - else locals.remove(x); - mv.push((String) null); - mv.storeLocal(let); + else locals.remove(x); + if (!tail) { + mv.push((String) null); + mv.storeLocal(let); + } mv.visitLocalVariable(x.symbol, mv.getLocalType(let).getDescriptor(), null, start, mv.mark(), let); } @@ -1548,14 +1521,11 @@ Stream closesOver(Set scope, Object kl) { List list = new ArrayList<>((Collection) kl); if (!list.isEmpty()) switch (list.get(0).toString()) { - case "let": - return concat(closesOver(scope, list.get(2)), closesOver(conj(scope, list.get(2)), list.get(3))); - case "lambda": - return closesOver(conj(scope, list.get(2)), list.get(2)); - case "defun": - return closesOver(into(scope, (Collection) list.get(2)), list.get(3)); + case "let": return concat(closesOver(scope, list.get(2)), closesOver(conj(scope, list.get(2)), list.get(3))); + case "lambda": return closesOver(conj(scope, list.get(2)), list.get(2)); + case "defun": return closesOver(into(scope, (Collection) list.get(2)), list.get(3)); } - return list.stream().flatMap(o -> closesOver(scope, o)); + return list.stream().flatMap(o -> closesOver(scope, o)); } return empty(); } @@ -1569,7 +1539,8 @@ void symbol(Symbol s) throws Throwable { if (asList("true", "false").contains(s.symbol)) { push(Boolean.class, Boolean.valueOf(s.symbol)); return; - } else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); + } + else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); else if (args.contains(s)) mv.loadArg(args.indexOf(s)); else push(s); topOfStack = typeOf(s); @@ -1623,8 +1594,7 @@ void unbox(Type type) { } void popStack() { - if (topOfStack.getSize() == 1) mv.pop(); - else mv.pop2(); + if (topOfStack.getSize() == 1) mv.pop(); else mv.pop2(); } void maybeCast(Class type) { @@ -1686,7 +1656,7 @@ void bindTo(Handle handle, Object arg) { } void bindTo() { - mv.invokeStatic(getType(RT.class), method("bindTo", desc(MethodHandle.class, MethodHandle.class, Object.class))); + mv.invokeStatic(getType(RT.class), method("bindTo",desc(MethodHandle.class, MethodHandle.class, Object.class))); topOfStack(MethodHandle.class); } @@ -1704,7 +1674,7 @@ static void printASM(byte[] bytes, Method method) { PrintWriter pw = new PrintWriter(err); TraceClassVisitor printer = new TraceClassVisitor(null, asm, pw); if (method == null) - new ClassReader(bytes).accept(printer, SKIP_DEBUG); + new ClassReader(bytes).accept(printer, SKIP_DEBUG); else { ClassNode cn = new ClassNode(); new ClassReader(bytes).accept(cn, SKIP_DEBUG); @@ -1763,38 +1733,22 @@ static List cons(T x, List seq) { return into(singletonList(x), seq); } - static boolean every(Collection c1, Collection c2, BiPredicate pred) { - //return zip(c1.stream(), c2.stream(), pred::test).allMatch(isEqual(true)); + static Stream map(Stream c1, Stream c2, BiFunction f) { Iterator it1 = c1.iterator(); Iterator it2 = c2.iterator(); - List result = new ArrayList(); + List result= new ArrayList(); while (it1.hasNext() && it2.hasNext()) { - T value1 = it1.next(); - T value2 = it2.next(); - result.add(pred.test(value1, value2)); + result.add(f.apply(it1.next(), it2.next())); } - boolean ret = !result.contains(false); - return ret; + return result.stream(); } - static T find(Collection c1, Collection c2, BiPredicate pred) { - //return zip(c1.stream(), c2.stream(), (x, y) -> pred.test(x, y) ? x : null) - // .filter(Objects::nonNull).findFirst().orElse(null); - Iterator it1 = c1.iterator(); - Iterator it2 = c2.iterator(); - Collection result = new ArrayList(c1); - result.clear(); - while (it1.hasNext() && it2.hasNext()) { - T value1 = it1.next(); - T value2 = it2.next(); - if (pred.test(value1, value2) == true) { - result.add(value1); - } else { - result.add(null); - } - } + static boolean every(Collection c1, Collection c2, BiPredicate pred) { + return map(c1.stream(), c2.stream(), pred::test).allMatch(isEqual(true)); + } - return result.stream().filter(Objects::nonNull).findFirst().orElse(null); + static T find(Collection c1, Collection c2, BiPredicate pred) { + return find(map(c1.stream(), c2.stream(), (x, y) -> pred.test(x, y) ? x : null), Objects::nonNull); } static List rest(List coll) { @@ -1808,177 +1762,4 @@ static RuntimeException uncheck(Throwable t) { static T uncheckAndThrow(Throwable t) throws T { //noinspection unchecked throw (T) t; } - - //***************************************************************** - //***************************************************************** - //***************************************************************** - //***************************************************************** - //***************************************************************** - //Stuff taken out of b93 and modified appropriately - - /** - * Creates a lazy concatenated {@code Stream} whose elements are all the - * elements of a first {@code Stream} succeeded by all the elements of the - * second {@code Stream}. The resulting stream is ordered if both - * of the input streams are ordered, and parallel if either of the input - * streams is parallel. - * - * @param The type of stream elements - * @param a the first stream - * @param b the second stream to concatenate on to end of the first - * stream - * @return the concatenation of the two input streams - */ - public static Stream concat(Stream a, Stream b) { - Objects.requireNonNull(a); - Objects.requireNonNull(b); - - @SuppressWarnings("unchecked") - Spliterator split = new ConcatSpliterator.OfRef<>((Spliterator) a.spliterator(), - (Spliterator) b.spliterator()); - /*return (a.isParallel() || b.isParallel()) - ? StreamSupport.parallelStream(split) - : StreamSupport.stream(split);*/ - return (a.isParallel() || b.isParallel()) - ? StreamSupport.stream(split, true) - : StreamSupport.stream(split, false); - } - - private abstract static class ConcatSpliterator> - implements Spliterator { - protected final T_SPLITR aSpliterator; - protected final T_SPLITR bSpliterator; - // True when no split has occurred, otherwise false - boolean beforeSplit; - - public ConcatSpliterator(T_SPLITR aSpliterator, T_SPLITR bSpliterator) { - this.aSpliterator = aSpliterator; - this.bSpliterator = bSpliterator; - beforeSplit = true; - } - - @Override - public T_SPLITR trySplit() { - T_SPLITR ret = beforeSplit ? aSpliterator : (T_SPLITR) bSpliterator.trySplit(); - beforeSplit = false; - return ret; - } - - @Override - public boolean tryAdvance(Consumer consumer) { - boolean hasNext; - if (beforeSplit) { - hasNext = aSpliterator.tryAdvance(consumer); - if (!hasNext) { - beforeSplit = false; - hasNext = bSpliterator.tryAdvance(consumer); - } - } else - hasNext = bSpliterator.tryAdvance(consumer); - return hasNext; - } - - @Override - public void forEachRemaining(Consumer consumer) { - if (beforeSplit) - aSpliterator.forEachRemaining(consumer); - bSpliterator.forEachRemaining(consumer); - } - - @Override - public long estimateSize() { - if (beforeSplit) { - // If one or both estimates are Long.MAX_VALUE then the sum - // will either be Long.MAX_VALUE or overflow to a negative value - long size = aSpliterator.estimateSize() + bSpliterator.estimateSize(); - return (size >= 0) ? size : Long.MAX_VALUE; - } else { - return bSpliterator.estimateSize(); - } - } - - @Override - public int characteristics() { - if (beforeSplit) { - // Concatenation loses DISTINCT and SORTED characteristics - return aSpliterator.characteristics() & bSpliterator.characteristics() & - ~(Spliterator.DISTINCT | Spliterator.SORTED); - } else { - return bSpliterator.characteristics(); - } - } - - @Override - public Comparator getComparator() { - if (beforeSplit) - throw new IllegalStateException(); - return bSpliterator.getComparator(); - } - - private static class OfRef extends ConcatSpliterator> { - private OfRef(Spliterator aSpliterator, Spliterator bSpliterator) { - super(aSpliterator, bSpliterator); - } - } - - private static abstract class OfPrimitive> - extends ConcatSpliterator - implements Spliterator.OfPrimitive { - private OfPrimitive(T_SPLITR aSpliterator, T_SPLITR bSpliterator) { - super(aSpliterator, bSpliterator); - } - - @Override - public boolean tryAdvance(T_CONS action) { - boolean hasNext; - if (beforeSplit) { - hasNext = aSpliterator.tryAdvance(action); - if (!hasNext) { - beforeSplit = false; - hasNext = bSpliterator.tryAdvance(action); - } - } else - hasNext = bSpliterator.tryAdvance(action); - return hasNext; - } - - @Override - public void forEachRemaining(T_CONS action) { - if (beforeSplit) - aSpliterator.forEachRemaining(action); - bSpliterator.forEachRemaining(action); - } - } - - private static class OfInt - extends ConcatSpliterator.OfPrimitive - implements Spliterator.OfInt { - private OfInt(Spliterator.OfInt aSpliterator, Spliterator.OfInt bSpliterator) { - super(aSpliterator, bSpliterator); - } - } - - private static class OfLong - extends ConcatSpliterator.OfPrimitive - implements Spliterator.OfLong { - private OfLong(Spliterator.OfLong aSpliterator, Spliterator.OfLong bSpliterator) { - super(aSpliterator, bSpliterator); - } - } - - private static class OfDouble - extends ConcatSpliterator.OfPrimitive - implements Spliterator.OfDouble { - private OfDouble(Spliterator.OfDouble aSpliterator, Spliterator.OfDouble bSpliterator) { - super(aSpliterator, bSpliterator); - } - } - } - - //***************************************************************** - //***************************************************************** - //***************************************************************** - //***************************************************************** - //***************************************************************** - } From bdb0cc112f7d7482ba41c024f8f2f8d60237f1c1 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 05:34:34 +0000 Subject: [PATCH 09/57] making changes to allow Shen.java to work with let recursive functions. See See https://github.com/hraberg/Shen.java/pull/11 for original pull request. See https://github.com/artella-coding/Shen.java/commit/a56343f58cb88deee99893b771ab3289ce798bda for original code changes. --- src/shen/Shen.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/shen/Shen.java b/src/shen/Shen.java index 26d767c..4e9acf1 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -829,7 +829,10 @@ public static Object link(MutableCallSite site, String name, Object... args) thr site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); } Object result = match.invokeWithArguments(args); - maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + try{ + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + }catch(Exception e){ } return result; } From ff6d45d9f0793554d034760336c822db7afff00e Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 05:56:05 +0000 Subject: [PATCH 10/57] updating with Shen 14 sources --- shen/Test Programs/Chap13/problems.txt | 26 ---- shen/benchmarks/heatwave.gif | Bin 107932 -> 0 bytes shen/benchmarks/picture.jpg | Bin 145206 -> 0 bytes shen/benchmarks/plato.jpg | Bin 17249 -> 0 bytes shen/klambda/declarations.kl | 55 ++++++- shen/klambda/macros.kl | 44 +++--- shen/klambda/prolog.kl | 194 ++++++++++++------------ shen/klambda/reader.kl | 158 ++++++++++---------- shen/klambda/sequent.kl | 106 ++++++------- shen/klambda/sys.kl | 196 ++++++++++++------------- shen/klambda/t-star.kl | 100 ++++++------- shen/klambda/toplevel.kl | 42 +++--- shen/klambda/track.kl | 50 +++---- shen/klambda/types.kl | 16 +- shen/klambda/writer.kl | 50 +++---- shen/klambda/yacc.kl | 58 ++++---- shen/src/declarations.shen | 2 +- shen/src/macros.shen | 19 ++- shen/src/t-star.shen | 2 +- shen/src/toplevel.shen | 2 +- shen/src/types.shen | 2 +- shen/src/yacc.shen | 71 ++++----- 22 files changed, 607 insertions(+), 586 deletions(-) delete mode 100644 shen/Test Programs/Chap13/problems.txt delete mode 100644 shen/benchmarks/heatwave.gif delete mode 100644 shen/benchmarks/picture.jpg delete mode 100644 shen/benchmarks/plato.jpg diff --git a/shen/Test Programs/Chap13/problems.txt b/shen/Test Programs/Chap13/problems.txt deleted file mode 100644 index 9eba58b..0000000 --- a/shen/Test Programs/Chap13/problems.txt +++ /dev/null @@ -1,26 +0,0 @@ - -[[[y-combinator [/. ADD [/. X [/. Y [if [= X 0] Y [[ADD [-- X]] [++ Y]]]]]]] 2] 3] - - -[[[y-combinator [/. ADD [/. X [/. Y [if [= X 0] Y [[ADD [-- X]] [++ Y]]]]]]] 33] 4] - -[[[/. [@p X Y] X] -[y-combinator [/. T -[@p [/. A [cases [[/. 1 false] A] - [[/. X [[[/. [@p X Y] Y] T] [-- X]]] A]]] - [/. A [cases [[/. 1 true] A] - [[/. X [[[/. [@p X Y] X] T] [-- X]]] A]]]]]]] 6] - - - - - - - - - - - - - - diff --git a/shen/benchmarks/heatwave.gif b/shen/benchmarks/heatwave.gif deleted file mode 100644 index 434dee3487646ca77d6d3a93b3e6328385b27b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107932 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 diff --git a/shen/benchmarks/picture.jpg b/shen/benchmarks/picture.jpg deleted file mode 100644 index 8874988ac18848052f4248bf834177429f33a572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145206 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%0A)ZNBmH0z_sB*Uk-ckF)QIx0nN$ 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�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 WlS^>&(5NJu=$L;kO$?|23jf&&)`p4z diff --git a/shen/benchmarks/plato.jpg b/shen/benchmarks/plato.jpg deleted file mode 100644 index 9465fbf924538c547af9beef93de9564c67d46e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17249 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 Nhs2$ZW;dTt{x4R (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons shen.sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (defun systemf (V822) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V822 External) (value *property-vector*))))) diff --git a/shen/klambda/macros.kl b/shen/klambda/macros.kl index 06d89ae..bfeebc8 100644 --- a/shen/klambda/macros.kl +++ b/shen/klambda/macros.kl @@ -63,15 +63,17 @@ (defun shen.compile-macro (V875) (cond ((and (cons? V875) (and (= compile (hd V875)) (and (cons? (tl V875)) (and (cons? (tl (tl V875))) (= () (tl (tl (tl V875)))))))) (cons compile (cons (hd (tl V875)) (cons (hd (tl (tl V875))) (cons (cons lambda (cons E (cons (cons if (cons (cons cons? (cons E ())) (cons (cons error (cons "parse error here: ~S~%" (cons E ()))) (cons (cons error (cons "parse error~%" ())) ())))) ()))) ()))))) (true V875))) -(defun shen.prolog-macro (V876) (cond ((and (cons? V876) (= prolog? (hd V876))) (cons shen.intprolog (cons (shen.prolog-form (tl V876)) ()))) (true V876))) +(defun shen.prolog-macro (V876) (cond ((and (cons? V876) (= prolog? (hd V876))) (let F (gensym shen.f) (let Receive (shen.receive-terms (tl V876)) (let PrologDef (eval (append (cons defprolog (cons F ())) (append Receive (append (cons <-- ()) (append (shen.pass-literals (tl V876)) (cons ; ())))))) (let Query (cons F (append Receive (cons (cons shen.start-new-prolog-process ()) (cons (cons freeze (cons true ())) ())))) Query))))) (true V876))) -(defun shen.defprolog-macro (V877) (cond ((and (cons? V877) (and (= defprolog (hd V877)) (cons? (tl V877)))) (compile shen. (tl V877) (lambda Y (shen.prolog-error (hd (tl V877)) Y)))) (true V877))) +(defun shen.receive-terms (V881) (cond ((= () V881) ()) ((and (cons? V881) (and (cons? (hd V881)) (and (= receive (hd (hd V881))) (and (cons? (tl (hd V881))) (= () (tl (tl (hd V881)))))))) (cons (hd (tl (hd V881))) (shen.receive-terms (tl V881)))) ((cons? V881) (shen.receive-terms (tl V881))) (true (shen.sys-error shen.receive-terms)))) -(defun shen.prolog-form (V878) (shen.cons_form (map shen.cons_form V878))) +(defun shen.pass-literals (V884) (cond ((= () V884) ()) ((and (cons? V884) (and (cons? (hd V884)) (and (= receive (hd (hd V884))) (and (cons? (tl (hd V884))) (= () (tl (tl (hd V884)))))))) (shen.pass-literals (tl V884))) ((cons? V884) (cons (hd V884) (shen.pass-literals (tl V884)))) (true (shen.sys-error shen.pass-literals)))) -(defun shen.datatype-macro (V879) (cond ((and (cons? V879) (and (= datatype (hd V879)) (cons? (tl V879)))) (cons shen.process-datatype (cons (shen.intern-type (hd (tl V879))) (cons (cons compile (cons (cons function (cons shen. ())) (cons (shen.rcons_form (tl (tl V879))) (cons (cons function (cons shen.datatype-error ())) ())))) ())))) (true V879))) +(defun shen.defprolog-macro (V885) (cond ((and (cons? V885) (and (= defprolog (hd V885)) (cons? (tl V885)))) (compile shen. (tl V885) (lambda Y (shen.prolog-error (hd (tl V885)) Y)))) (true V885))) -(defun shen.intern-type (V880) (intern (cn "type#" (str V880)))) +(defun shen.datatype-macro (V886) (cond ((and (cons? V886) (and (= datatype (hd V886)) (cons? (tl V886)))) (cons shen.process-datatype (cons (shen.intern-type (hd (tl V886))) (cons (cons compile (cons (cons function (cons shen. ())) (cons (shen.rcons_form (tl (tl V886))) (cons (cons function (cons shen.datatype-error ())) ())))) ())))) (true V886))) + +(defun shen.intern-type (V887) (intern (cn "type#" (str V887)))) "(defcc := [define | ];) @@ -89,36 +91,36 @@ (defcc := [[walk [function macroexpand] ]];)" -(defun shen.@s-macro (V881) (cond ((and (cons? V881) (and (= @s (hd V881)) (and (cons? (tl V881)) (and (cons? (tl (tl V881))) (cons? (tl (tl (tl V881)))))))) (cons @s (cons (hd (tl V881)) (cons (shen.@s-macro (cons @s (tl (tl V881)))) ())))) ((and (cons? V881) (and (= @s (hd V881)) (and (cons? (tl V881)) (and (cons? (tl (tl V881))) (and (= () (tl (tl (tl V881)))) (string? (hd (tl V881)))))))) (let E (explode (hd (tl V881))) (if (> (length E) 1) (shen.@s-macro (cons @s (append E (tl (tl V881))))) V881))) (true V881))) +(defun shen.@s-macro (V888) (cond ((and (cons? V888) (and (= @s (hd V888)) (and (cons? (tl V888)) (and (cons? (tl (tl V888))) (cons? (tl (tl (tl V888)))))))) (cons @s (cons (hd (tl V888)) (cons (shen.@s-macro (cons @s (tl (tl V888)))) ())))) ((and (cons? V888) (and (= @s (hd V888)) (and (cons? (tl V888)) (and (cons? (tl (tl V888))) (and (= () (tl (tl (tl V888)))) (string? (hd (tl V888)))))))) (let E (explode (hd (tl V888))) (if (> (length E) 1) (shen.@s-macro (cons @s (append E (tl (tl V888))))) V888))) (true V888))) -(defun shen.synonyms-macro (V882) (cond ((and (cons? V882) (= synonyms (hd V882))) (cons shen.synonyms-help (cons (shen.rcons_form (tl V882)) ()))) (true V882))) +(defun shen.synonyms-macro (V889) (cond ((and (cons? V889) (= synonyms (hd V889))) (cons shen.synonyms-help (cons (shen.rcons_form (tl V889)) ()))) (true V889))) -(defun shen.nl-macro (V883) (cond ((and (cons? V883) (and (= nl (hd V883)) (= () (tl V883)))) (cons nl (cons 1 ()))) (true V883))) +(defun shen.nl-macro (V890) (cond ((and (cons? V890) (and (= nl (hd V890)) (= () (tl V890)))) (cons nl (cons 1 ()))) (true V890))) -(defun shen.assoc-macro (V884) (cond ((and (cons? V884) (and (cons? (tl V884)) (and (cons? (tl (tl V884))) (and (cons? (tl (tl (tl V884)))) (element? (hd V884) (cons @p (cons @v (cons append (cons and (cons or (cons + (cons * (cons do ()))))))))))))) (cons (hd V884) (cons (hd (tl V884)) (cons (shen.assoc-macro (cons (hd V884) (tl (tl V884)))) ())))) (true V884))) +(defun shen.assoc-macro (V891) (cond ((and (cons? V891) (and (cons? (tl V891)) (and (cons? (tl (tl V891))) (and (cons? (tl (tl (tl V891)))) (element? (hd V891) (cons @p (cons @v (cons append (cons and (cons or (cons + (cons * (cons do ()))))))))))))) (cons (hd V891) (cons (hd (tl V891)) (cons (shen.assoc-macro (cons (hd V891) (tl (tl V891)))) ())))) (true V891))) -(defun shen.let-macro (V885) (cond ((and (cons? V885) (and (= let (hd V885)) (and (cons? (tl V885)) (and (cons? (tl (tl V885))) (and (cons? (tl (tl (tl V885)))) (cons? (tl (tl (tl (tl V885)))))))))) (cons let (cons (hd (tl V885)) (cons (hd (tl (tl V885))) (cons (shen.let-macro (cons let (tl (tl (tl V885))))) ()))))) (true V885))) +(defun shen.let-macro (V892) (cond ((and (cons? V892) (and (= let (hd V892)) (and (cons? (tl V892)) (and (cons? (tl (tl V892))) (and (cons? (tl (tl (tl V892)))) (cons? (tl (tl (tl (tl V892)))))))))) (cons let (cons (hd (tl V892)) (cons (hd (tl (tl V892))) (cons (shen.let-macro (cons let (tl (tl (tl V892))))) ()))))) (true V892))) -(defun shen.abs-macro (V886) (cond ((and (cons? V886) (and (= /. (hd V886)) (and (cons? (tl V886)) (and (cons? (tl (tl V886))) (cons? (tl (tl (tl V886)))))))) (cons lambda (cons (hd (tl V886)) (cons (shen.abs-macro (cons /. (tl (tl V886)))) ())))) ((and (cons? V886) (and (= /. (hd V886)) (and (cons? (tl V886)) (and (cons? (tl (tl V886))) (= () (tl (tl (tl V886)))))))) (cons lambda (tl V886))) (true V886))) +(defun shen.abs-macro (V893) (cond ((and (cons? V893) (and (= /. (hd V893)) (and (cons? (tl V893)) (and (cons? (tl (tl V893))) (cons? (tl (tl (tl V893)))))))) (cons lambda (cons (hd (tl V893)) (cons (shen.abs-macro (cons /. (tl (tl V893)))) ())))) ((and (cons? V893) (and (= /. (hd V893)) (and (cons? (tl V893)) (and (cons? (tl (tl V893))) (= () (tl (tl (tl V893)))))))) (cons lambda (tl V893))) (true V893))) -(defun shen.cases-macro (V889) (cond ((and (cons? V889) (and (= cases (hd V889)) (and (cons? (tl V889)) (and (= true (hd (tl V889))) (cons? (tl (tl V889))))))) (hd (tl (tl V889)))) ((and (cons? V889) (and (= cases (hd V889)) (and (cons? (tl V889)) (and (cons? (tl (tl V889))) (= () (tl (tl (tl V889)))))))) (cons if (cons (hd (tl V889)) (cons (hd (tl (tl V889))) (cons (cons simple-error (cons "error: cases exhausted" ())) ()))))) ((and (cons? V889) (and (= cases (hd V889)) (and (cons? (tl V889)) (cons? (tl (tl V889)))))) (cons if (cons (hd (tl V889)) (cons (hd (tl (tl V889))) (cons (shen.cases-macro (cons cases (tl (tl (tl V889))))) ()))))) ((and (cons? V889) (and (= cases (hd V889)) (and (cons? (tl V889)) (= () (tl (tl V889)))))) (simple-error "error: odd number of case elements -")) (true V889))) +(defun shen.cases-macro (V896) (cond ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (and (= true (hd (tl V896))) (cons? (tl (tl V896))))))) (hd (tl (tl V896)))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (and (cons? (tl (tl V896))) (= () (tl (tl (tl V896)))))))) (cons if (cons (hd (tl V896)) (cons (hd (tl (tl V896))) (cons (cons simple-error (cons "error: cases exhausted" ())) ()))))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (cons? (tl (tl V896)))))) (cons if (cons (hd (tl V896)) (cons (hd (tl (tl V896))) (cons (shen.cases-macro (cons cases (tl (tl (tl V896))))) ()))))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (= () (tl (tl V896)))))) (simple-error "error: odd number of case elements +")) (true V896))) -(defun shen.timer-macro (V890) (cond ((and (cons? V890) (and (= time (hd V890)) (and (cons? (tl V890)) (= () (tl (tl V890)))))) (shen.let-macro (cons let (cons Start (cons (cons get-time (cons run ())) (cons Result (cons (hd (tl V890)) (cons Finish (cons (cons get-time (cons run ())) (cons Time (cons (cons - (cons Finish (cons Start ()))) (cons Message (cons (cons shen.prhush (cons (cons cn (cons " +(defun shen.timer-macro (V897) (cond ((and (cons? V897) (and (= time (hd V897)) (and (cons? (tl V897)) (= () (tl (tl V897)))))) (shen.let-macro (cons let (cons Start (cons (cons get-time (cons run ())) (cons Result (cons (hd (tl V897)) (cons Finish (cons (cons get-time (cons run ())) (cons Time (cons (cons - (cons Finish (cons Start ()))) (cons Message (cons (cons shen.prhush (cons (cons cn (cons " run time: " (cons (cons cn (cons (cons str (cons Time ())) (cons " secs -" ()))) ()))) (cons (cons stoutput ()) ()))) (cons Result ())))))))))))))) (true V890))) +" ()))) ()))) (cons (cons stoutput ()) ()))) (cons Result ())))))))))))))) (true V897))) -(defun shen.tuple-up (V891) (cond ((cons? V891) (cons @p (cons (hd V891) (cons (shen.tuple-up (tl V891)) ())))) (true V891))) +(defun shen.tuple-up (V898) (cond ((cons? V898) (cons @p (cons (hd V898) (cons (shen.tuple-up (tl V898)) ())))) (true V898))) -(defun shen.put/get-macro (V892) (cond ((and (cons? V892) (and (= put (hd V892)) (and (cons? (tl V892)) (and (cons? (tl (tl V892))) (and (cons? (tl (tl (tl V892)))) (= () (tl (tl (tl (tl V892)))))))))) (cons put (cons (hd (tl V892)) (cons (hd (tl (tl V892))) (cons (hd (tl (tl (tl V892)))) (cons (cons value (cons *property-vector* ())) ())))))) ((and (cons? V892) (and (= get (hd V892)) (and (cons? (tl V892)) (and (cons? (tl (tl V892))) (= () (tl (tl (tl V892)))))))) (cons get (cons (hd (tl V892)) (cons (hd (tl (tl V892))) (cons (cons value (cons *property-vector* ())) ()))))) (true V892))) +(defun shen.put/get-macro (V899) (cond ((and (cons? V899) (and (= put (hd V899)) (and (cons? (tl V899)) (and (cons? (tl (tl V899))) (and (cons? (tl (tl (tl V899)))) (= () (tl (tl (tl (tl V899)))))))))) (cons put (cons (hd (tl V899)) (cons (hd (tl (tl V899))) (cons (hd (tl (tl (tl V899)))) (cons (cons value (cons *property-vector* ())) ())))))) ((and (cons? V899) (and (= get (hd V899)) (and (cons? (tl V899)) (and (cons? (tl (tl V899))) (= () (tl (tl (tl V899)))))))) (cons get (cons (hd (tl V899)) (cons (hd (tl (tl V899))) (cons (cons value (cons *property-vector* ())) ()))))) (true V899))) -(defun shen.function-macro (V893) (cond ((and (cons? V893) (and (= function (hd V893)) (and (cons? (tl V893)) (= () (tl (tl V893)))))) (shen.function-abstraction (hd (tl V893)) (arity (hd (tl V893))))) (true V893))) +(defun shen.function-macro (V900) (cond ((and (cons? V900) (and (= function (hd V900)) (and (cons? (tl V900)) (= () (tl (tl V900)))))) (shen.function-abstraction (hd (tl V900)) (arity (hd (tl V900))))) (true V900))) -(defun shen.function-abstraction (V894 V895) (cond ((= 0 V895) (cons freeze (cons V894 ()))) ((= -1 V895) V894) (true (shen.function-abstraction-help V894 V895 ())))) +(defun shen.function-abstraction (V901 V902) (cond ((= 0 V902) (cons freeze (cons V901 ()))) ((= -1 V902) V901) (true (shen.function-abstraction-help V901 V902 ())))) -(defun shen.function-abstraction-help (V896 V897 V898) (cond ((= 0 V897) (cons V896 V898)) (true (let X (gensym V) (cons /. (cons X (cons (shen.function-abstraction-help V896 (- V897 1) (append V898 (cons X ()))) ()))))))) +(defun shen.function-abstraction-help (V903 V904 V905) (cond ((= 0 V904) (cons V903 V905)) (true (let X (gensym V) (cons /. (cons X (cons (shen.function-abstraction-help V903 (- V904 1) (append V905 (cons X ()))) ()))))))) -(defun undefmacro (V899) (do (set *macros* (remove V899 (value *macros*))) V899)) +(defun undefmacro (V906) (do (set *macros* (remove V906 (value *macros*))) V906)) diff --git a/shen/klambda/prolog.kl b/shen/klambda/prolog.kl index 5ddd356..b934969 100644 --- a/shen/klambda/prolog.kl +++ b/shen/klambda/prolog.kl @@ -47,206 +47,206 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen. (V906) (let Result (let Parse_shen. (shen. V906) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (hd (shen.prolog->shen (map (lambda Parse_X (shen.insert-predicate (shen.hdtl Parse_shen.) Parse_X)) (shen.hdtl Parse_shen.))))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +"(defun shen. (V913) (let Result (let Parse_shen. (shen. V913) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (hd (shen.prolog->shen (map (lambda Parse_X (shen.insert-predicate (shen.hdtl Parse_shen.) Parse_X)) (shen.hdtl Parse_shen.))))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.prolog-error (V913 V914) (cond ((and (cons? V914) (and (cons? (tl V914)) (= () (tl (tl V914))))) (simple-error (cn "prolog syntax error in " (shen.app V913 (cn " here: +(defun shen.prolog-error (V920 V921) (cond ((and (cons? V921) (and (cons? (tl V921)) (= () (tl (tl V921))))) (simple-error (cn "prolog syntax error in " (shen.app V920 (cn " here: - " (shen.app (shen.next-50 50 (hd V914)) " -" shen.a)) shen.a)))) (true (simple-error (cn "prolog syntax error in " (shen.app V913 " + " (shen.app (shen.next-50 50 (hd V921)) " +" shen.a)) shen.a)))) (true (simple-error (cn "prolog syntax error in " (shen.app V920 " " shen.a)))))) -(defun shen.next-50 (V919 V920) (cond ((= () V920) "") ((= 0 V919) "") ((cons? V920) (cn (shen.decons-string (hd V920)) (shen.next-50 (- V919 1) (tl V920)))) (true (shen.sys-error shen.next-50)))) +(defun shen.next-50 (V926 V927) (cond ((= () V927) "") ((= 0 V926) "") ((cons? V927) (cn (shen.decons-string (hd V927)) (shen.next-50 (- V926 1) (tl V927)))) (true (shen.sys-error shen.next-50)))) -(defun shen.decons-string (V921) (cond ((and (cons? V921) (and (= cons (hd V921)) (and (cons? (tl V921)) (and (cons? (tl (tl V921))) (= () (tl (tl (tl V921)))))))) (shen.app (shen.eval-cons V921) " " shen.s)) (true (shen.app V921 " " shen.r)))) +(defun shen.decons-string (V928) (cond ((and (cons? V928) (and (= cons (hd V928)) (and (cons? (tl V928)) (and (cons? (tl (tl V928))) (= () (tl (tl (tl V928)))))))) (shen.app (shen.eval-cons V928) " " shen.s)) (true (shen.app V928 " " shen.r)))) -(defun shen.insert-predicate (V922 V923) (cond ((and (cons? V923) (and (cons? (tl V923)) (= () (tl (tl V923))))) (cons (cons V922 (hd V923)) (cons :- (tl V923)))) (true (shen.sys-error shen.insert-predicate)))) +(defun shen.insert-predicate (V929 V930) (cond ((and (cons? V930) (and (cons? (tl V930)) (= () (tl (tl V930))))) (cons (cons V929 (hd V930)) (cons :- (tl V930)))) (true (shen.sys-error shen.insert-predicate)))) -(defun shen. (V928) (let Result (if (cons? (hd V928)) (let Parse_X (hd (hd V928)) (shen.pair (hd (shen.pair (tl (hd V928)) (shen.hdtl V928))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V935) (let Result (if (cons? (hd V935)) (let Parse_X (hd (hd V935)) (shen.pair (hd (shen.pair (tl (hd V935)) (shen.hdtl V935))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V933) (let Result (let Parse_shen. (shen. V933) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V933) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V940) (let Result (let Parse_shen. (shen. V940) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V940) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V938) (let Result (let Parse_shen. (shen. V938) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <-- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V945) (let Result (let Parse_shen. (shen. V945) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <-- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V943) (let Result (let Parse_shen. (shen. V943) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V943) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V950) (let Result (let Parse_shen. (shen. V950) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V950) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V948) (let Result (if (cons? (hd V948)) (let Parse_X (hd (hd V948)) (if (and (not (= <-- Parse_X)) (shen.legitimate-term? Parse_X)) (shen.pair (hd (shen.pair (tl (hd V948)) (shen.hdtl V948))) (shen.eval-cons Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V955) (let Result (if (cons? (hd V955)) (let Parse_X (hd (hd V955)) (if (and (not (= <-- Parse_X)) (shen.legitimate-term? Parse_X)) (shen.pair (hd (shen.pair (tl (hd V955)) (shen.hdtl V955))) (shen.eval-cons Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.legitimate-term? (V953) (cond ((and (cons? V953) (and (= cons (hd V953)) (and (cons? (tl V953)) (and (cons? (tl (tl V953))) (= () (tl (tl (tl V953)))))))) (and (shen.legitimate-term? (hd (tl V953))) (shen.legitimate-term? (hd (tl (tl V953)))))) ((and (cons? V953) (and (= mode (hd V953)) (and (cons? (tl V953)) (and (cons? (tl (tl V953))) (and (= + (hd (tl (tl V953)))) (= () (tl (tl (tl V953))))))))) (shen.legitimate-term? (hd (tl V953)))) ((and (cons? V953) (and (= mode (hd V953)) (and (cons? (tl V953)) (and (cons? (tl (tl V953))) (and (= - (hd (tl (tl V953)))) (= () (tl (tl (tl V953))))))))) (shen.legitimate-term? (hd (tl V953)))) ((cons? V953) false) (true true))) +(defun shen.legitimate-term? (V960) (cond ((and (cons? V960) (and (= cons (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (= () (tl (tl (tl V960)))))))) (and (shen.legitimate-term? (hd (tl V960))) (shen.legitimate-term? (hd (tl (tl V960)))))) ((and (cons? V960) (and (= mode (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (and (= + (hd (tl (tl V960)))) (= () (tl (tl (tl V960))))))))) (shen.legitimate-term? (hd (tl V960)))) ((and (cons? V960) (and (= mode (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (and (= - (hd (tl (tl V960)))) (= () (tl (tl (tl V960))))))))) (shen.legitimate-term? (hd (tl V960)))) ((cons? V960) false) (true true))) -(defun shen.eval-cons (V954) (cond ((and (cons? V954) (and (= cons (hd V954)) (and (cons? (tl V954)) (and (cons? (tl (tl V954))) (= () (tl (tl (tl V954)))))))) (cons (shen.eval-cons (hd (tl V954))) (shen.eval-cons (hd (tl (tl V954)))))) ((and (cons? V954) (and (= mode (hd V954)) (and (cons? (tl V954)) (and (cons? (tl (tl V954))) (= () (tl (tl (tl V954)))))))) (cons mode (cons (shen.eval-cons (hd (tl V954))) (tl (tl V954))))) (true V954))) +(defun shen.eval-cons (V961) (cond ((and (cons? V961) (and (= cons (hd V961)) (and (cons? (tl V961)) (and (cons? (tl (tl V961))) (= () (tl (tl (tl V961)))))))) (cons (shen.eval-cons (hd (tl V961))) (shen.eval-cons (hd (tl (tl V961)))))) ((and (cons? V961) (and (= mode (hd V961)) (and (cons? (tl V961)) (and (cons? (tl (tl V961))) (= () (tl (tl (tl V961)))))))) (cons mode (cons (shen.eval-cons (hd (tl V961))) (tl (tl V961))))) (true V961))) -(defun shen. (V959) (let Result (let Parse_shen. (shen. V959) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V959) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V966) (let Result (let Parse_shen. (shen. V966) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V966) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V964) (let Result (if (and (cons? (hd V964)) (= ! (hd (hd V964)))) (shen.pair (hd (shen.pair (tl (hd V964)) (shen.hdtl V964))) (cons cut (cons (intern "Throwcontrol") ()))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V964)) (let Parse_X (hd (hd V964)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V964)) (shen.hdtl V964))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V971) (let Result (if (and (cons? (hd V971)) (= ! (hd (hd V971)))) (shen.pair (hd (shen.pair (tl (hd V971)) (shen.hdtl V971))) (cons cut (cons (intern "Throwcontrol") ()))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V971)) (let Parse_X (hd (hd V971)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V971)) (shen.hdtl V971))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V969) (let Result (if (cons? (hd V969)) (let Parse_X (hd (hd V969)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V969)) (shen.hdtl V969))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V976) (let Result (if (cons? (hd V976)) (let Parse_X (hd (hd V976)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V976)) (shen.hdtl V976))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun cut (V970 V971 V972) (let Result (thaw V972) (if (= Result false) V970 Result))) +(defun cut (V977 V978 V979) (let Result (thaw V979) (if (= Result false) V977 Result))) -(defun shen.insert_modes (V973) (cond ((and (cons? V973) (and (= mode (hd V973)) (and (cons? (tl V973)) (and (cons? (tl (tl V973))) (= () (tl (tl (tl V973)))))))) V973) ((= () V973) ()) ((cons? V973) (cons (cons mode (cons (hd V973) (cons + ()))) (cons mode (cons (shen.insert_modes (tl V973)) (cons - ()))))) (true V973))) +(defun shen.insert_modes (V980) (cond ((and (cons? V980) (and (= mode (hd V980)) (and (cons? (tl V980)) (and (cons? (tl (tl V980))) (= () (tl (tl (tl V980)))))))) V980) ((= () V980) ()) ((cons? V980) (cons (cons mode (cons (hd V980) (cons + ()))) (cons mode (cons (shen.insert_modes (tl V980)) (cons - ()))))) (true V980))) -(defun shen.s-prolog (V974) (map (lambda V900 (eval V900)) (shen.prolog->shen V974))) +(defun shen.s-prolog (V981) (map (lambda V907 (eval V907)) (shen.prolog->shen V981))) -(defun shen.prolog->shen (V975) (map shen.compile_prolog_procedure (shen.group_clauses (map shen.s-prolog_clause (mapcan shen.head_abstraction V975))))) +(defun shen.prolog->shen (V982) (map shen.compile_prolog_procedure (shen.group_clauses (map shen.s-prolog_clause (mapcan shen.head_abstraction V982))))) -(defun shen.s-prolog_clause (V976) (cond ((and (cons? V976) (and (cons? (tl V976)) (and (= :- (hd (tl V976))) (and (cons? (tl (tl V976))) (= () (tl (tl (tl V976)))))))) (cons (hd V976) (cons :- (cons (map shen.s-prolog_literal (hd (tl (tl V976)))) ())))) (true (shen.sys-error shen.s-prolog_clause)))) +(defun shen.s-prolog_clause (V983) (cond ((and (cons? V983) (and (cons? (tl V983)) (and (= :- (hd (tl V983))) (and (cons? (tl (tl V983))) (= () (tl (tl (tl V983)))))))) (cons (hd V983) (cons :- (cons (map shen.s-prolog_literal (hd (tl (tl V983)))) ())))) (true (shen.sys-error shen.s-prolog_clause)))) -(defun shen.head_abstraction (V977) (cond ((and (cons? V977) (and (cons? (tl V977)) (and (= :- (hd (tl V977))) (and (cons? (tl (tl V977))) (and (= () (tl (tl (tl V977)))) (< (shen.complexity_head (hd V977)) (value shen.*maxcomplexity*))))))) (cons V977 ())) ((and (cons? V977) (and (cons? (hd V977)) (and (cons? (tl V977)) (and (= :- (hd (tl V977))) (and (cons? (tl (tl V977))) (= () (tl (tl (tl V977))))))))) (let Terms (map (lambda Y (gensym V)) (tl (hd V977))) (let XTerms (shen.rcons_form (shen.remove_modes (tl (hd V977)))) (let Literal (cons unify (cons (shen.cons_form Terms) (cons XTerms ()))) (let Clause (cons (cons (hd (hd V977)) Terms) (cons :- (cons (cons Literal (hd (tl (tl V977)))) ()))) (cons Clause ())))))) (true (shen.sys-error shen.head_abstraction)))) +(defun shen.head_abstraction (V984) (cond ((and (cons? V984) (and (cons? (tl V984)) (and (= :- (hd (tl V984))) (and (cons? (tl (tl V984))) (and (= () (tl (tl (tl V984)))) (< (shen.complexity_head (hd V984)) (value shen.*maxcomplexity*))))))) (cons V984 ())) ((and (cons? V984) (and (cons? (hd V984)) (and (cons? (tl V984)) (and (= :- (hd (tl V984))) (and (cons? (tl (tl V984))) (= () (tl (tl (tl V984))))))))) (let Terms (map (lambda Y (gensym V)) (tl (hd V984))) (let XTerms (shen.rcons_form (shen.remove_modes (tl (hd V984)))) (let Literal (cons unify (cons (shen.cons_form Terms) (cons XTerms ()))) (let Clause (cons (cons (hd (hd V984)) Terms) (cons :- (cons (cons Literal (hd (tl (tl V984)))) ()))) (cons Clause ())))))) (true (shen.sys-error shen.head_abstraction)))) -(defun shen.complexity_head (V982) (cond ((cons? V982) (shen.product (map shen.complexity (tl V982)))) (true (shen.sys-error shen.complexity_head)))) +(defun shen.complexity_head (V989) (cond ((cons? V989) (shen.product (map shen.complexity (tl V989)))) (true (shen.sys-error shen.complexity_head)))) -(defun shen.complexity (V990) (cond ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (hd (tl V990))) (and (= mode (hd (hd (tl V990)))) (and (cons? (tl (hd (tl V990)))) (and (cons? (tl (tl (hd (tl V990))))) (and (= () (tl (tl (tl (hd (tl V990)))))) (and (cons? (tl (tl V990))) (= () (tl (tl (tl V990))))))))))))) (shen.complexity (hd (tl V990)))) ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (hd (tl V990))) (and (cons? (tl (tl V990))) (and (= + (hd (tl (tl V990)))) (= () (tl (tl (tl V990)))))))))) (* 2 (* (shen.complexity (cons mode (cons (hd (hd (tl V990))) (tl (tl V990))))) (shen.complexity (cons mode (cons (tl (hd (tl V990))) (tl (tl V990)))))))) ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (hd (tl V990))) (and (cons? (tl (tl V990))) (and (= - (hd (tl (tl V990)))) (= () (tl (tl (tl V990)))))))))) (* (shen.complexity (cons mode (cons (hd (hd (tl V990))) (tl (tl V990))))) (shen.complexity (cons mode (cons (tl (hd (tl V990))) (tl (tl V990))))))) ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (tl (tl V990))) (and (= () (tl (tl (tl V990)))) (variable? (hd (tl V990)))))))) 1) ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (tl (tl V990))) (and (= + (hd (tl (tl V990)))) (= () (tl (tl (tl V990))))))))) 2) ((and (cons? V990) (and (= mode (hd V990)) (and (cons? (tl V990)) (and (cons? (tl (tl V990))) (and (= - (hd (tl (tl V990)))) (= () (tl (tl (tl V990))))))))) 1) (true (shen.complexity (cons mode (cons V990 (cons + ()))))))) +(defun shen.complexity (V997) (cond ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (= mode (hd (hd (tl V997)))) (and (cons? (tl (hd (tl V997)))) (and (cons? (tl (tl (hd (tl V997))))) (and (= () (tl (tl (tl (hd (tl V997)))))) (and (cons? (tl (tl V997))) (= () (tl (tl (tl V997))))))))))))) (shen.complexity (hd (tl V997)))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (cons? (tl (tl V997))) (and (= + (hd (tl (tl V997)))) (= () (tl (tl (tl V997)))))))))) (* 2 (* (shen.complexity (cons mode (cons (hd (hd (tl V997))) (tl (tl V997))))) (shen.complexity (cons mode (cons (tl (hd (tl V997))) (tl (tl V997)))))))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (cons? (tl (tl V997))) (and (= - (hd (tl (tl V997)))) (= () (tl (tl (tl V997)))))))))) (* (shen.complexity (cons mode (cons (hd (hd (tl V997))) (tl (tl V997))))) (shen.complexity (cons mode (cons (tl (hd (tl V997))) (tl (tl V997))))))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= () (tl (tl (tl V997)))) (variable? (hd (tl V997)))))))) 1) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= + (hd (tl (tl V997)))) (= () (tl (tl (tl V997))))))))) 2) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= - (hd (tl (tl V997)))) (= () (tl (tl (tl V997))))))))) 1) (true (shen.complexity (cons mode (cons V997 (cons + ()))))))) -(defun shen.product (V991) (cond ((= () V991) 1) ((cons? V991) (* (hd V991) (shen.product (tl V991)))) (true (shen.sys-error shen.product)))) +(defun shen.product (V998) (cond ((= () V998) 1) ((cons? V998) (* (hd V998) (shen.product (tl V998)))) (true (shen.sys-error shen.product)))) -(defun shen.s-prolog_literal (V992) (cond ((and (cons? V992) (and (= is (hd V992)) (and (cons? (tl V992)) (and (cons? (tl (tl V992))) (= () (tl (tl (tl V992)))))))) (cons bind (cons (hd (tl V992)) (cons (shen.insert_deref (hd (tl (tl V992)))) ())))) ((and (cons? V992) (and (= when (hd V992)) (and (cons? (tl V992)) (= () (tl (tl V992)))))) (cons fwhen (cons (shen.insert_deref (hd (tl V992))) ()))) ((and (cons? V992) (and (= bind (hd V992)) (and (cons? (tl V992)) (and (cons? (tl (tl V992))) (= () (tl (tl (tl V992)))))))) (cons bind (cons (hd (tl V992)) (cons (shen.insert_lazyderef (hd (tl (tl V992)))) ())))) ((and (cons? V992) (and (= fwhen (hd V992)) (and (cons? (tl V992)) (= () (tl (tl V992)))))) (cons fwhen (cons (shen.insert_lazyderef (hd (tl V992))) ()))) ((cons? V992) (cons (shen.m_prolog_to_s-prolog_predicate (hd V992)) (tl V992))) (true (shen.sys-error shen.s-prolog_literal)))) +(defun shen.s-prolog_literal (V999) (cond ((and (cons? V999) (and (= is (hd V999)) (and (cons? (tl V999)) (and (cons? (tl (tl V999))) (= () (tl (tl (tl V999)))))))) (cons bind (cons (hd (tl V999)) (cons (shen.insert_deref (hd (tl (tl V999)))) ())))) ((and (cons? V999) (and (= when (hd V999)) (and (cons? (tl V999)) (= () (tl (tl V999)))))) (cons fwhen (cons (shen.insert_deref (hd (tl V999))) ()))) ((and (cons? V999) (and (= bind (hd V999)) (and (cons? (tl V999)) (and (cons? (tl (tl V999))) (= () (tl (tl (tl V999)))))))) (cons bind (cons (hd (tl V999)) (cons (shen.insert_lazyderef (hd (tl (tl V999)))) ())))) ((and (cons? V999) (and (= fwhen (hd V999)) (and (cons? (tl V999)) (= () (tl (tl V999)))))) (cons fwhen (cons (shen.insert_lazyderef (hd (tl V999))) ()))) ((cons? V999) (cons (shen.m_prolog_to_s-prolog_predicate (hd V999)) (tl V999))) (true (shen.sys-error shen.s-prolog_literal)))) -(defun shen.insert_deref (V993) (cond ((variable? V993) (cons shen.deref (cons V993 (cons ProcessN ())))) ((cons? V993) (cons (shen.insert_deref (hd V993)) (shen.insert_deref (tl V993)))) (true V993))) +(defun shen.insert_deref (V1000) (cond ((variable? V1000) (cons shen.deref (cons V1000 (cons ProcessN ())))) ((cons? V1000) (cons (shen.insert_deref (hd V1000)) (shen.insert_deref (tl V1000)))) (true V1000))) -(defun shen.insert_lazyderef (V994) (cond ((variable? V994) (cons shen.lazyderef (cons V994 (cons ProcessN ())))) ((cons? V994) (cons (shen.insert_lazyderef (hd V994)) (shen.insert_lazyderef (tl V994)))) (true V994))) +(defun shen.insert_lazyderef (V1001) (cond ((variable? V1001) (cons shen.lazyderef (cons V1001 (cons ProcessN ())))) ((cons? V1001) (cons (shen.insert_lazyderef (hd V1001)) (shen.insert_lazyderef (tl V1001)))) (true V1001))) -(defun shen.m_prolog_to_s-prolog_predicate (V995) (cond ((= = V995) unify) ((= =! V995) unify!) ((= == V995) identical) (true V995))) +(defun shen.m_prolog_to_s-prolog_predicate (V1002) (cond ((= = V1002) unify) ((= =! V1002) unify!) ((= == V1002) identical) (true V1002))) -(defun shen.group_clauses (V996) (cond ((= () V996) ()) ((cons? V996) (let Group (shen.collect (lambda X (shen.same_predicate? (hd V996) X)) V996) (let Rest (difference V996 Group) (cons Group (shen.group_clauses Rest))))) (true (shen.sys-error shen.group_clauses)))) +(defun shen.group_clauses (V1003) (cond ((= () V1003) ()) ((cons? V1003) (let Group (shen.collect (lambda X (shen.same_predicate? (hd V1003) X)) V1003) (let Rest (difference V1003 Group) (cons Group (shen.group_clauses Rest))))) (true (shen.sys-error shen.group_clauses)))) -(defun shen.collect (V999 V1000) (cond ((= () V1000) ()) ((cons? V1000) (if (V999 (hd V1000)) (cons (hd V1000) (shen.collect V999 (tl V1000))) (shen.collect V999 (tl V1000)))) (true (shen.sys-error shen.collect)))) +(defun shen.collect (V1006 V1007) (cond ((= () V1007) ()) ((cons? V1007) (if (V1006 (hd V1007)) (cons (hd V1007) (shen.collect V1006 (tl V1007))) (shen.collect V1006 (tl V1007)))) (true (shen.sys-error shen.collect)))) -(defun shen.same_predicate? (V1017 V1018) (cond ((and (cons? V1017) (and (cons? (hd V1017)) (and (cons? V1018) (cons? (hd V1018))))) (= (hd (hd V1017)) (hd (hd V1018)))) (true (shen.sys-error shen.same_predicate?)))) +(defun shen.same_predicate? (V1024 V1025) (cond ((and (cons? V1024) (and (cons? (hd V1024)) (and (cons? V1025) (cons? (hd V1025))))) (= (hd (hd V1024)) (hd (hd V1025)))) (true (shen.sys-error shen.same_predicate?)))) -(defun shen.compile_prolog_procedure (V1019) (let F (shen.procedure_name V1019) (let Shen (shen.clauses-to-shen F V1019) Shen))) +(defun shen.compile_prolog_procedure (V1026) (let F (shen.procedure_name V1026) (let Shen (shen.clauses-to-shen F V1026) Shen))) -(defun shen.procedure_name (V1032) (cond ((and (cons? V1032) (and (cons? (hd V1032)) (cons? (hd (hd V1032))))) (hd (hd (hd V1032)))) (true (shen.sys-error shen.procedure_name)))) +(defun shen.procedure_name (V1039) (cond ((and (cons? V1039) (and (cons? (hd V1039)) (cons? (hd (hd V1039))))) (hd (hd (hd V1039)))) (true (shen.sys-error shen.procedure_name)))) -(defun shen.clauses-to-shen (V1033 V1034) (let Linear (map shen.linearise-clause V1034) (let Arity (shen.prolog-aritycheck V1033 (map (lambda V901 (head V901)) V1034)) (let Parameters (shen.parameters Arity) (let AUM_instructions (map (lambda X (shen.aum X Parameters)) Linear) (let Code (shen.catch-cut (shen.nest-disjunct (map shen.aum_to_shen AUM_instructions))) (let ShenDef (cons define (cons V1033 (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) ShenDef))))))) +(defun shen.clauses-to-shen (V1040 V1041) (let Linear (map shen.linearise-clause V1041) (let Arity (shen.prolog-aritycheck V1040 (map (lambda V908 (head V908)) V1041)) (let Parameters (shen.parameters Arity) (let AUM_instructions (map (lambda X (shen.aum X Parameters)) Linear) (let Code (shen.catch-cut (shen.nest-disjunct (map shen.aum_to_shen AUM_instructions))) (let ShenDef (cons define (cons V1040 (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) ShenDef))))))) -(defun shen.catch-cut (V1035) (cond ((not (shen.occurs? cut V1035)) V1035) (true (cons let (cons Throwcontrol (cons (cons shen.catchpoint ()) (cons (cons shen.cutpoint (cons Throwcontrol (cons V1035 ()))) ()))))))) +(defun shen.catch-cut (V1042) (cond ((not (shen.occurs? cut V1042)) V1042) (true (cons let (cons Throwcontrol (cons (cons shen.catchpoint ()) (cons (cons shen.cutpoint (cons Throwcontrol (cons V1042 ()))) ()))))))) (defun shen.catchpoint () (set shen.*catch* (+ 1 (value shen.*catch*)))) -(defun shen.cutpoint (V1040 V1041) (cond ((= V1041 V1040) false) (true V1041))) +(defun shen.cutpoint (V1047 V1048) (cond ((= V1048 V1047) false) (true V1048))) -(defun shen.nest-disjunct (V1043) (cond ((and (cons? V1043) (= () (tl V1043))) (hd V1043)) ((cons? V1043) (shen.lisp-or (hd V1043) (shen.nest-disjunct (tl V1043)))) (true (shen.sys-error shen.nest-disjunct)))) +(defun shen.nest-disjunct (V1050) (cond ((and (cons? V1050) (= () (tl V1050))) (hd V1050)) ((cons? V1050) (shen.lisp-or (hd V1050) (shen.nest-disjunct (tl V1050)))) (true (shen.sys-error shen.nest-disjunct)))) -(defun shen.lisp-or (V1044 V1045) (cons let (cons Case (cons V1044 (cons (cons if (cons (cons = (cons Case (cons false ()))) (cons V1045 (cons Case ())))) ()))))) +(defun shen.lisp-or (V1051 V1052) (cons let (cons Case (cons V1051 (cons (cons if (cons (cons = (cons Case (cons false ()))) (cons V1052 (cons Case ())))) ()))))) -(defun shen.prolog-aritycheck (V1048 V1049) (cond ((and (cons? V1049) (= () (tl V1049))) (- (length (hd V1049)) 1)) ((and (cons? V1049) (cons? (tl V1049))) (if (= (length (hd V1049)) (length (hd (tl V1049)))) (shen.prolog-aritycheck V1048 (tl V1049)) (simple-error (cn "arity error in prolog procedure " (shen.app (cons V1048 ()) " +(defun shen.prolog-aritycheck (V1055 V1056) (cond ((and (cons? V1056) (= () (tl V1056))) (- (length (hd V1056)) 1)) ((and (cons? V1056) (cons? (tl V1056))) (if (= (length (hd V1056)) (length (hd (tl V1056)))) (shen.prolog-aritycheck V1055 (tl V1056)) (simple-error (cn "arity error in prolog procedure " (shen.app (cons V1055 ()) " " shen.a))))) (true (shen.sys-error shen.prolog-aritycheck)))) -(defun shen.linearise-clause (V1050) (cond ((and (cons? V1050) (and (cons? (tl V1050)) (and (= :- (hd (tl V1050))) (and (cons? (tl (tl V1050))) (= () (tl (tl (tl V1050)))))))) (let Linear (shen.linearise (cons (hd V1050) (tl (tl V1050)))) (shen.clause_form Linear))) (true (shen.sys-error shen.linearise-clause)))) +(defun shen.linearise-clause (V1057) (cond ((and (cons? V1057) (and (cons? (tl V1057)) (and (= :- (hd (tl V1057))) (and (cons? (tl (tl V1057))) (= () (tl (tl (tl V1057)))))))) (let Linear (shen.linearise (cons (hd V1057) (tl (tl V1057)))) (shen.clause_form Linear))) (true (shen.sys-error shen.linearise-clause)))) -(defun shen.clause_form (V1051) (cond ((and (cons? V1051) (and (cons? (tl V1051)) (= () (tl (tl V1051))))) (cons (shen.explicit_modes (hd V1051)) (cons :- (cons (shen.cf_help (hd (tl V1051))) ())))) (true (shen.sys-error shen.clause_form)))) +(defun shen.clause_form (V1058) (cond ((and (cons? V1058) (and (cons? (tl V1058)) (= () (tl (tl V1058))))) (cons (shen.explicit_modes (hd V1058)) (cons :- (cons (shen.cf_help (hd (tl V1058))) ())))) (true (shen.sys-error shen.clause_form)))) -(defun shen.explicit_modes (V1052) (cond ((cons? V1052) (cons (hd V1052) (map shen.em_help (tl V1052)))) (true (shen.sys-error shen.explicit_modes)))) +(defun shen.explicit_modes (V1059) (cond ((cons? V1059) (cons (hd V1059) (map shen.em_help (tl V1059)))) (true (shen.sys-error shen.explicit_modes)))) -(defun shen.em_help (V1053) (cond ((and (cons? V1053) (and (= mode (hd V1053)) (and (cons? (tl V1053)) (and (cons? (tl (tl V1053))) (= () (tl (tl (tl V1053)))))))) V1053) (true (cons mode (cons V1053 (cons + ())))))) +(defun shen.em_help (V1060) (cond ((and (cons? V1060) (and (= mode (hd V1060)) (and (cons? (tl V1060)) (and (cons? (tl (tl V1060))) (= () (tl (tl (tl V1060)))))))) V1060) (true (cons mode (cons V1060 (cons + ())))))) -(defun shen.cf_help (V1054) (cond ((and (cons? V1054) (and (= where (hd V1054)) (and (cons? (tl V1054)) (and (cons? (hd (tl V1054))) (and (= = (hd (hd (tl V1054)))) (and (cons? (tl (hd (tl V1054)))) (and (cons? (tl (tl (hd (tl V1054))))) (and (= () (tl (tl (tl (hd (tl V1054)))))) (and (cons? (tl (tl V1054))) (= () (tl (tl (tl V1054))))))))))))) (cons (cons (if (value shen.*occurs*) unify! unify) (tl (hd (tl V1054)))) (shen.cf_help (hd (tl (tl V1054)))))) (true V1054))) +(defun shen.cf_help (V1061) (cond ((and (cons? V1061) (and (= where (hd V1061)) (and (cons? (tl V1061)) (and (cons? (hd (tl V1061))) (and (= = (hd (hd (tl V1061)))) (and (cons? (tl (hd (tl V1061)))) (and (cons? (tl (tl (hd (tl V1061))))) (and (= () (tl (tl (tl (hd (tl V1061)))))) (and (cons? (tl (tl V1061))) (= () (tl (tl (tl V1061))))))))))))) (cons (cons (if (value shen.*occurs*) unify! unify) (tl (hd (tl V1061)))) (shen.cf_help (hd (tl (tl V1061)))))) (true V1061))) -(defun occurs-check (V1059) (cond ((= + V1059) (set shen.*occurs* true)) ((= - V1059) (set shen.*occurs* false)) (true (simple-error "occurs-check expects + or - +(defun occurs-check (V1066) (cond ((= + V1066) (set shen.*occurs* true)) ((= - V1066) (set shen.*occurs* false)) (true (simple-error "occurs-check expects + or - ")))) -(defun shen.aum (V1060 V1061) (cond ((and (cons? V1060) (and (cons? (hd V1060)) (and (cons? (tl V1060)) (and (= :- (hd (tl V1060))) (and (cons? (tl (tl V1060))) (= () (tl (tl (tl V1060))))))))) (let MuApplication (shen.make_mu_application (cons shen.mu (cons (tl (hd V1060)) (cons (shen.continuation_call (tl (hd V1060)) (hd (tl (tl V1060)))) ()))) V1061) (shen.mu_reduction MuApplication +))) (true (shen.sys-error shen.aum)))) +(defun shen.aum (V1067 V1068) (cond ((and (cons? V1067) (and (cons? (hd V1067)) (and (cons? (tl V1067)) (and (= :- (hd (tl V1067))) (and (cons? (tl (tl V1067))) (= () (tl (tl (tl V1067))))))))) (let MuApplication (shen.make_mu_application (cons shen.mu (cons (tl (hd V1067)) (cons (shen.continuation_call (tl (hd V1067)) (hd (tl (tl V1067)))) ()))) V1068) (shen.mu_reduction MuApplication +))) (true (shen.sys-error shen.aum)))) -(defun shen.continuation_call (V1062 V1063) (let VTerms (cons ProcessN (shen.extract_vars V1062)) (let VBody (shen.extract_vars V1063) (let Free (remove Throwcontrol (difference VBody VTerms)) (shen.cc_help Free V1063))))) +(defun shen.continuation_call (V1069 V1070) (let VTerms (cons ProcessN (shen.extract_vars V1069)) (let VBody (shen.extract_vars V1070) (let Free (remove Throwcontrol (difference VBody VTerms)) (shen.cc_help Free V1070))))) -(defun remove (V1064 V1065) (shen.remove-h V1064 V1065 ())) +(defun remove (V1071 V1072) (shen.remove-h V1071 V1072 ())) -(defun shen.remove-h (V1068 V1069 V1070) (cond ((= () V1069) (reverse V1070)) ((and (cons? V1069) (= (hd V1069) V1068)) (shen.remove-h (hd V1069) (tl V1069) V1070)) ((cons? V1069) (shen.remove-h V1068 (tl V1069) (cons (hd V1069) V1070))) (true (shen.sys-error shen.remove-h)))) +(defun shen.remove-h (V1075 V1076 V1077) (cond ((= () V1076) (reverse V1077)) ((and (cons? V1076) (= (hd V1076) V1075)) (shen.remove-h (hd V1076) (tl V1076) V1077)) ((cons? V1076) (shen.remove-h V1075 (tl V1076) (cons (hd V1076) V1077))) (true (shen.sys-error shen.remove-h)))) -(defun shen.cc_help (V1072 V1073) (cond ((and (= () V1072) (= () V1073)) (cons shen.pop (cons shen.the (cons shen.stack ())))) ((= () V1073) (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1072 (cons and (cons shen.then (cons (cons shen.pop (cons shen.the (cons shen.stack ()))) ()))))))))) ((= () V1072) (cons call (cons shen.the (cons shen.continuation (cons V1073 ()))))) (true (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1072 (cons and (cons shen.then (cons (cons call (cons shen.the (cons shen.continuation (cons V1073 ())))) ()))))))))))) +(defun shen.cc_help (V1079 V1080) (cond ((and (= () V1079) (= () V1080)) (cons shen.pop (cons shen.the (cons shen.stack ())))) ((= () V1080) (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1079 (cons and (cons shen.then (cons (cons shen.pop (cons shen.the (cons shen.stack ()))) ()))))))))) ((= () V1079) (cons call (cons shen.the (cons shen.continuation (cons V1080 ()))))) (true (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1079 (cons and (cons shen.then (cons (cons call (cons shen.the (cons shen.continuation (cons V1080 ())))) ()))))))))))) -(defun shen.make_mu_application (V1074 V1075) (cond ((and (cons? V1074) (and (= shen.mu (hd V1074)) (and (cons? (tl V1074)) (and (= () (hd (tl V1074))) (and (cons? (tl (tl V1074))) (and (= () (tl (tl (tl V1074)))) (= () V1075))))))) (hd (tl (tl V1074)))) ((and (cons? V1074) (and (= shen.mu (hd V1074)) (and (cons? (tl V1074)) (and (cons? (hd (tl V1074))) (and (cons? (tl (tl V1074))) (and (= () (tl (tl (tl V1074)))) (cons? V1075))))))) (cons (cons shen.mu (cons (hd (hd (tl V1074))) (cons (shen.make_mu_application (cons shen.mu (cons (tl (hd (tl V1074))) (tl (tl V1074)))) (tl V1075)) ()))) (cons (hd V1075) ()))) (true (shen.sys-error shen.make_mu_application)))) +(defun shen.make_mu_application (V1081 V1082) (cond ((and (cons? V1081) (and (= shen.mu (hd V1081)) (and (cons? (tl V1081)) (and (= () (hd (tl V1081))) (and (cons? (tl (tl V1081))) (and (= () (tl (tl (tl V1081)))) (= () V1082))))))) (hd (tl (tl V1081)))) ((and (cons? V1081) (and (= shen.mu (hd V1081)) (and (cons? (tl V1081)) (and (cons? (hd (tl V1081))) (and (cons? (tl (tl V1081))) (and (= () (tl (tl (tl V1081)))) (cons? V1082))))))) (cons (cons shen.mu (cons (hd (hd (tl V1081))) (cons (shen.make_mu_application (cons shen.mu (cons (tl (hd (tl V1081))) (tl (tl V1081)))) (tl V1082)) ()))) (cons (hd V1082) ()))) (true (shen.sys-error shen.make_mu_application)))) -(defun shen.mu_reduction (V1082 V1083) (cond ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (hd (tl (hd V1082)))) (and (= mode (hd (hd (tl (hd V1082))))) (and (cons? (tl (hd (tl (hd V1082))))) (and (cons? (tl (tl (hd (tl (hd V1082)))))) (and (= () (tl (tl (tl (hd (tl (hd V1082))))))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (= () (tl (tl V1082))))))))))))))) (shen.mu_reduction (cons (cons shen.mu (cons (hd (tl (hd (tl (hd V1082))))) (tl (tl (hd V1082))))) (tl V1082)) (hd (tl (tl (hd (tl (hd V1082)))))))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (= _ (hd (tl (hd V1082)))))))))))) (shen.mu_reduction (hd (tl (tl (hd V1082)))) V1083)) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (shen.ephemeral_variable? (hd (tl (hd V1082))) (hd (tl V1082))))))))))) (subst (hd (tl V1082)) (hd (tl (hd V1082))) (shen.mu_reduction (hd (tl (tl (hd V1082)))) V1083))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (variable? (hd (tl (hd V1082)))))))))))) (cons let (cons (hd (tl (hd V1082))) (cons shen.be (cons (hd (tl V1082)) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1082)))) V1083) ()))))))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (and (= - V1083) (shen.prolog_constant? (hd (tl (hd V1082))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1082))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1082))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1082)))) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (and (= + V1083) (shen.prolog_constant? (hd (tl (hd V1082))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1082))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1082))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1082)))) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (hd (tl (hd V1082))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1082)))) +) ())))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (hd (tl (hd V1082)))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (= - V1083)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1082))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1082)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1082)))) (tl (tl (hd V1082))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1082) (and (cons? (hd V1082)) (and (= shen.mu (hd (hd V1082))) (and (cons? (tl (hd V1082))) (and (cons? (hd (tl (hd V1082)))) (and (cons? (tl (tl (hd V1082)))) (and (= () (tl (tl (tl (hd V1082))))) (and (cons? (tl V1082)) (and (= () (tl (tl V1082))) (= + V1083)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1082))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1082)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1082)))) (tl (tl (hd V1082))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (shen.extract_vars (hd (tl (hd V1082)))) (cons and (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (shen.rcons_form (shen.remove_modes (hd (tl (hd V1082))))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1082)))) +) ())))))) ())))))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) (true V1082))) +(defun shen.mu_reduction (V1089 V1090) (cond ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (= mode (hd (hd (tl (hd V1089))))) (and (cons? (tl (hd (tl (hd V1089))))) (and (cons? (tl (tl (hd (tl (hd V1089)))))) (and (= () (tl (tl (tl (hd (tl (hd V1089))))))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (= () (tl (tl V1089))))))))))))))) (shen.mu_reduction (cons (cons shen.mu (cons (hd (tl (hd (tl (hd V1089))))) (tl (tl (hd V1089))))) (tl V1089)) (hd (tl (tl (hd (tl (hd V1089)))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= _ (hd (tl (hd V1089)))))))))))) (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090)) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (shen.ephemeral_variable? (hd (tl (hd V1089))) (hd (tl V1089))))))))))) (subst (hd (tl V1089)) (hd (tl (hd V1089))) (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (variable? (hd (tl (hd V1089)))))))))))) (cons let (cons (hd (tl (hd V1089))) (cons shen.be (cons (hd (tl V1089)) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090) ()))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (and (= - V1090) (shen.prolog_constant? (hd (tl (hd V1089))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1089))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (and (= + V1090) (shen.prolog_constant? (hd (tl (hd V1089))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1089))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (hd (tl (hd V1089))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) ())))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= - V1090)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1089)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1089)))) (tl (tl (hd V1089))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= + V1090)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1089)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1089)))) (tl (tl (hd V1089))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (shen.extract_vars (hd (tl (hd V1089)))) (cons and (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (shen.rcons_form (shen.remove_modes (hd (tl (hd V1089))))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) ())))))) ())))))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) (true V1089))) -(defun shen.rcons_form (V1084) (cond ((cons? V1084) (cons cons (cons (shen.rcons_form (hd V1084)) (cons (shen.rcons_form (tl V1084)) ())))) (true V1084))) +(defun shen.rcons_form (V1091) (cond ((cons? V1091) (cons cons (cons (shen.rcons_form (hd V1091)) (cons (shen.rcons_form (tl V1091)) ())))) (true V1091))) -(defun shen.remove_modes (V1085) (cond ((and (cons? V1085) (and (= mode (hd V1085)) (and (cons? (tl V1085)) (and (cons? (tl (tl V1085))) (and (= + (hd (tl (tl V1085)))) (= () (tl (tl (tl V1085))))))))) (shen.remove_modes (hd (tl V1085)))) ((and (cons? V1085) (and (= mode (hd V1085)) (and (cons? (tl V1085)) (and (cons? (tl (tl V1085))) (and (= - (hd (tl (tl V1085)))) (= () (tl (tl (tl V1085))))))))) (shen.remove_modes (hd (tl V1085)))) ((cons? V1085) (cons (shen.remove_modes (hd V1085)) (shen.remove_modes (tl V1085)))) (true V1085))) +(defun shen.remove_modes (V1092) (cond ((and (cons? V1092) (and (= mode (hd V1092)) (and (cons? (tl V1092)) (and (cons? (tl (tl V1092))) (and (= + (hd (tl (tl V1092)))) (= () (tl (tl (tl V1092))))))))) (shen.remove_modes (hd (tl V1092)))) ((and (cons? V1092) (and (= mode (hd V1092)) (and (cons? (tl V1092)) (and (cons? (tl (tl V1092))) (and (= - (hd (tl (tl V1092)))) (= () (tl (tl (tl V1092))))))))) (shen.remove_modes (hd (tl V1092)))) ((cons? V1092) (cons (shen.remove_modes (hd V1092)) (shen.remove_modes (tl V1092)))) (true V1092))) -(defun shen.ephemeral_variable? (V1086 V1087) (and (variable? V1086) (variable? V1087))) +(defun shen.ephemeral_variable? (V1093 V1094) (and (variable? V1093) (variable? V1094))) -(defun shen.prolog_constant? (V1096) (cond ((cons? V1096) false) (true true))) +(defun shen.prolog_constant? (V1103) (cond ((cons? V1103) false) (true true))) -(defun shen.aum_to_shen (V1097) (cond ((and (cons? V1097) (and (= let (hd V1097)) (and (cons? (tl V1097)) (and (cons? (tl (tl V1097))) (and (= shen.be (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (cons? (tl (tl (tl (tl V1097))))) (and (= in (hd (tl (tl (tl (tl V1097)))))) (and (cons? (tl (tl (tl (tl (tl V1097)))))) (= () (tl (tl (tl (tl (tl (tl V1097)))))))))))))))) (cons let (cons (hd (tl V1097)) (cons (shen.aum_to_shen (hd (tl (tl (tl V1097))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1097))))))) ()))))) ((and (cons? V1097) (and (= shen.the (hd V1097)) (and (cons? (tl V1097)) (and (= shen.result (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.of (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= shen.dereferencing (hd (tl (tl (tl V1097))))) (and (cons? (tl (tl (tl (tl V1097))))) (= () (tl (tl (tl (tl (tl V1097))))))))))))))) (cons shen.lazyderef (cons (shen.aum_to_shen (hd (tl (tl (tl (tl V1097)))))) (cons ProcessN ())))) ((and (cons? V1097) (and (= if (hd V1097)) (and (cons? (tl V1097)) (and (cons? (tl (tl V1097))) (and (= shen.then (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (cons? (tl (tl (tl (tl V1097))))) (and (= shen.else (hd (tl (tl (tl (tl V1097)))))) (and (cons? (tl (tl (tl (tl (tl V1097)))))) (= () (tl (tl (tl (tl (tl (tl V1097)))))))))))))))) (cons if (cons (shen.aum_to_shen (hd (tl V1097))) (cons (shen.aum_to_shen (hd (tl (tl (tl V1097))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1097))))))) ()))))) ((and (cons? V1097) (and (cons? (tl V1097)) (and (= is (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.a (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= shen.variable (hd (tl (tl (tl V1097))))) (= () (tl (tl (tl (tl V1097)))))))))))) (cons shen.pvar? (cons (hd V1097) ()))) ((and (cons? V1097) (and (cons? (tl V1097)) (and (= is (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.a (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= shen.non-empty (hd (tl (tl (tl V1097))))) (and (cons? (tl (tl (tl (tl V1097))))) (and (= list (hd (tl (tl (tl (tl V1097)))))) (= () (tl (tl (tl (tl (tl V1097))))))))))))))) (cons cons? (cons (hd V1097) ()))) ((and (cons? V1097) (and (= shen.rename (hd V1097)) (and (cons? (tl V1097)) (and (= shen.the (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.variables (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= in (hd (tl (tl (tl V1097))))) (and (cons? (tl (tl (tl (tl V1097))))) (and (= () (hd (tl (tl (tl (tl V1097)))))) (and (cons? (tl (tl (tl (tl (tl V1097)))))) (and (= and (hd (tl (tl (tl (tl (tl V1097))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1097))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1097)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1097)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1097)))))))))))))))))))))))) (shen.aum_to_shen (hd (tl (tl (tl (tl (tl (tl (tl V1097)))))))))) ((and (cons? V1097) (and (= shen.rename (hd V1097)) (and (cons? (tl V1097)) (and (= shen.the (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.variables (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= in (hd (tl (tl (tl V1097))))) (and (cons? (tl (tl (tl (tl V1097))))) (and (cons? (hd (tl (tl (tl (tl V1097)))))) (and (cons? (tl (tl (tl (tl (tl V1097)))))) (and (= and (hd (tl (tl (tl (tl (tl V1097))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1097))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1097)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1097)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1097)))))))))))))))))))))))) (cons let (cons (hd (hd (tl (tl (tl (tl V1097)))))) (cons (cons shen.newpv (cons ProcessN ())) (cons (shen.aum_to_shen (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (tl (hd (tl (tl (tl (tl V1097)))))) (tl (tl (tl (tl (tl V1097))))))))))) ()))))) ((and (cons? V1097) (and (= bind (hd V1097)) (and (cons? (tl V1097)) (and (cons? (tl (tl V1097))) (and (= shen.to (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (cons? (tl (tl (tl (tl V1097))))) (and (= in (hd (tl (tl (tl (tl V1097)))))) (and (cons? (tl (tl (tl (tl (tl V1097)))))) (= () (tl (tl (tl (tl (tl (tl V1097)))))))))))))))) (cons do (cons (cons shen.bindv (cons (hd (tl V1097)) (cons (shen.chwild (hd (tl (tl (tl V1097))))) (cons ProcessN ())))) (cons (cons let (cons Result (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1097))))))) (cons (cons do (cons (cons shen.unbindv (cons (hd (tl V1097)) (cons ProcessN ()))) (cons Result ()))) ())))) ())))) ((and (cons? V1097) (and (cons? (tl V1097)) (and (= is (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= identical (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (and (= shen.to (hd (tl (tl (tl V1097))))) (and (cons? (tl (tl (tl (tl V1097))))) (= () (tl (tl (tl (tl (tl V1097)))))))))))))) (cons = (cons (hd (tl (tl (tl (tl V1097))))) (cons (hd V1097) ())))) ((= shen.failed! V1097) false) ((and (cons? V1097) (and (= shen.the (hd V1097)) (and (cons? (tl V1097)) (and (= head (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.of (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (= () (tl (tl (tl (tl V1097)))))))))))) (cons hd (tl (tl (tl V1097))))) ((and (cons? V1097) (and (= shen.the (hd V1097)) (and (cons? (tl V1097)) (and (= tail (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.of (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (= () (tl (tl (tl (tl V1097)))))))))))) (cons tl (tl (tl (tl V1097))))) ((and (cons? V1097) (and (= shen.pop (hd V1097)) (and (cons? (tl V1097)) (and (= shen.the (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.stack (hd (tl (tl V1097)))) (= () (tl (tl (tl V1097)))))))))) (cons do (cons (cons shen.incinfs ()) (cons (cons thaw (cons Continuation ())) ())))) ((and (cons? V1097) (and (= call (hd V1097)) (and (cons? (tl V1097)) (and (= shen.the (hd (tl V1097))) (and (cons? (tl (tl V1097))) (and (= shen.continuation (hd (tl (tl V1097)))) (and (cons? (tl (tl (tl V1097)))) (= () (tl (tl (tl (tl V1097)))))))))))) (cons do (cons (cons shen.incinfs ()) (cons (shen.call_the_continuation (shen.chwild (hd (tl (tl (tl V1097))))) ProcessN Continuation) ())))) (true V1097))) +(defun shen.aum_to_shen (V1104) (cond ((and (cons? V1104) (and (= let (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.be (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= in (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons let (cons (hd (tl V1104)) (cons (shen.aum_to_shen (hd (tl (tl (tl V1104))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) ()))))) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= shen.result (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.dereferencing (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl (tl V1104))))))))))))))) (cons shen.lazyderef (cons (shen.aum_to_shen (hd (tl (tl (tl (tl V1104)))))) (cons ProcessN ())))) ((and (cons? V1104) (and (= if (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.then (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= shen.else (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons if (cons (shen.aum_to_shen (hd (tl V1104))) (cons (shen.aum_to_shen (hd (tl (tl (tl V1104))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) ()))))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.a (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.variable (hd (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons shen.pvar? (cons (hd V1104) ()))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.a (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.non-empty (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= list (hd (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl V1104))))))))))))))) (cons cons? (cons (hd V1104) ()))) ((and (cons? V1104) (and (= shen.rename (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.variables (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= in (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= () (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (and (= and (hd (tl (tl (tl (tl (tl V1104))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1104))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1104)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1104)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1104)))))))))))))))))))))))) (shen.aum_to_shen (hd (tl (tl (tl (tl (tl (tl (tl V1104)))))))))) ((and (cons? V1104) (and (= shen.rename (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.variables (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= in (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (cons? (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (and (= and (hd (tl (tl (tl (tl (tl V1104))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1104))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1104)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1104)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1104)))))))))))))))))))))))) (cons let (cons (hd (hd (tl (tl (tl (tl V1104)))))) (cons (cons shen.newpv (cons ProcessN ())) (cons (shen.aum_to_shen (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (tl (hd (tl (tl (tl (tl V1104)))))) (tl (tl (tl (tl (tl V1104))))))))))) ()))))) ((and (cons? V1104) (and (= bind (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.to (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= in (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons do (cons (cons shen.bindv (cons (hd (tl V1104)) (cons (shen.chwild (hd (tl (tl (tl V1104))))) (cons ProcessN ())))) (cons (cons let (cons Result (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) (cons (cons do (cons (cons shen.unbindv (cons (hd (tl V1104)) (cons ProcessN ()))) (cons Result ()))) ())))) ())))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= identical (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.to (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl (tl V1104)))))))))))))) (cons = (cons (hd (tl (tl (tl (tl V1104))))) (cons (hd V1104) ())))) ((= shen.failed! V1104) false) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= head (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons hd (tl (tl (tl V1104))))) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= tail (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons tl (tl (tl (tl V1104))))) ((and (cons? V1104) (and (= shen.pop (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.stack (hd (tl (tl V1104)))) (= () (tl (tl (tl V1104)))))))))) (cons do (cons (cons shen.incinfs ()) (cons (cons thaw (cons Continuation ())) ())))) ((and (cons? V1104) (and (= call (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.continuation (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons do (cons (cons shen.incinfs ()) (cons (shen.call_the_continuation (shen.chwild (hd (tl (tl (tl V1104))))) ProcessN Continuation) ())))) (true V1104))) -(defun shen.chwild (V1098) (cond ((= V1098 _) (cons shen.newpv (cons ProcessN ()))) ((cons? V1098) (map shen.chwild V1098)) (true V1098))) +(defun shen.chwild (V1105) (cond ((= V1105 _) (cons shen.newpv (cons ProcessN ()))) ((cons? V1105) (map shen.chwild V1105)) (true V1105))) -(defun shen.newpv (V1099) (let Count+1 (+ (<-address (value shen.*varcounter*) V1099) 1) (let IncVar (address-> (value shen.*varcounter*) V1099 Count+1) (let Vector (<-address (value shen.*prologvectors*) V1099) (let ResizeVectorIfNeeded (if (= Count+1 (limit Vector)) (shen.resizeprocessvector V1099 Count+1) shen.skip) (shen.mk-pvar Count+1)))))) +(defun shen.newpv (V1106) (let Count+1 (+ (<-address (value shen.*varcounter*) V1106) 1) (let IncVar (address-> (value shen.*varcounter*) V1106 Count+1) (let Vector (<-address (value shen.*prologvectors*) V1106) (let ResizeVectorIfNeeded (if (= Count+1 (limit Vector)) (shen.resizeprocessvector V1106 Count+1) shen.skip) (shen.mk-pvar Count+1)))))) -(defun shen.resizeprocessvector (V1100 V1101) (let Vector (<-address (value shen.*prologvectors*) V1100) (let BigVector (shen.resize-vector Vector (+ V1101 V1101) shen.-null-) (address-> (value shen.*prologvectors*) V1100 BigVector)))) +(defun shen.resizeprocessvector (V1107 V1108) (let Vector (<-address (value shen.*prologvectors*) V1107) (let BigVector (shen.resize-vector Vector (+ V1108 V1108) shen.-null-) (address-> (value shen.*prologvectors*) V1107 BigVector)))) -(defun shen.resize-vector (V1102 V1103 V1104) (let BigVector (address-> (absvector (+ 1 V1103)) 0 V1103) (shen.copy-vector V1102 BigVector (limit V1102) V1103 V1104))) +(defun shen.resize-vector (V1109 V1110 V1111) (let BigVector (address-> (absvector (+ 1 V1110)) 0 V1110) (shen.copy-vector V1109 BigVector (limit V1109) V1110 V1111))) -(defun shen.copy-vector (V1105 V1106 V1107 V1108 V1109) (shen.copy-vector-stage-2 (+ 1 V1107) (+ V1108 1) V1109 (shen.copy-vector-stage-1 1 V1105 V1106 (+ 1 V1107)))) +(defun shen.copy-vector (V1112 V1113 V1114 V1115 V1116) (shen.copy-vector-stage-2 (+ 1 V1114) (+ V1115 1) V1116 (shen.copy-vector-stage-1 1 V1112 V1113 (+ 1 V1114)))) -(defun shen.copy-vector-stage-1 (V1112 V1113 V1114 V1115) (cond ((= V1115 V1112) V1114) (true (shen.copy-vector-stage-1 (+ 1 V1112) V1113 (address-> V1114 V1112 (<-address V1113 V1112)) V1115)))) +(defun shen.copy-vector-stage-1 (V1119 V1120 V1121 V1122) (cond ((= V1122 V1119) V1121) (true (shen.copy-vector-stage-1 (+ 1 V1119) V1120 (address-> V1121 V1119 (<-address V1120 V1119)) V1122)))) -(defun shen.copy-vector-stage-2 (V1119 V1120 V1121 V1122) (cond ((= V1120 V1119) V1122) (true (shen.copy-vector-stage-2 (+ V1119 1) V1120 V1121 (address-> V1122 V1119 V1121))))) +(defun shen.copy-vector-stage-2 (V1126 V1127 V1128 V1129) (cond ((= V1127 V1126) V1129) (true (shen.copy-vector-stage-2 (+ V1126 1) V1127 V1128 (address-> V1129 V1126 V1128))))) -(defun shen.mk-pvar (V1124) (address-> (address-> (absvector 2) 0 shen.pvar) 1 V1124)) +(defun shen.mk-pvar (V1131) (address-> (address-> (absvector 2) 0 shen.pvar) 1 V1131)) -(defun shen.pvar? (V1125) (and (absvector? V1125) (= (<-address V1125 0) shen.pvar))) +(defun shen.pvar? (V1132) (and (absvector? V1132) (= (<-address V1132 0) shen.pvar))) -(defun shen.bindv (V1126 V1127 V1128) (let Vector (<-address (value shen.*prologvectors*) V1128) (address-> Vector (<-address V1126 1) V1127))) +(defun shen.bindv (V1133 V1134 V1135) (let Vector (<-address (value shen.*prologvectors*) V1135) (address-> Vector (<-address V1133 1) V1134))) -(defun shen.unbindv (V1129 V1130) (let Vector (<-address (value shen.*prologvectors*) V1130) (address-> Vector (<-address V1129 1) shen.-null-))) +(defun shen.unbindv (V1136 V1137) (let Vector (<-address (value shen.*prologvectors*) V1137) (address-> Vector (<-address V1136 1) shen.-null-))) (defun shen.incinfs () (set shen.*infs* (+ 1 (value shen.*infs*)))) -(defun shen.call_the_continuation (V1131 V1132 V1133) (cond ((and (cons? V1131) (and (cons? (hd V1131)) (= () (tl V1131)))) (cons (hd (hd V1131)) (append (tl (hd V1131)) (cons V1132 (cons V1133 ()))))) ((and (cons? V1131) (cons? (hd V1131))) (let NewContinuation (shen.newcontinuation (tl V1131) V1132 V1133) (cons (hd (hd V1131)) (append (tl (hd V1131)) (cons V1132 (cons NewContinuation ())))))) (true (shen.sys-error shen.call_the_continuation)))) +(defun shen.call_the_continuation (V1138 V1139 V1140) (cond ((and (cons? V1138) (and (cons? (hd V1138)) (= () (tl V1138)))) (cons (hd (hd V1138)) (append (tl (hd V1138)) (cons V1139 (cons V1140 ()))))) ((and (cons? V1138) (cons? (hd V1138))) (let NewContinuation (shen.newcontinuation (tl V1138) V1139 V1140) (cons (hd (hd V1138)) (append (tl (hd V1138)) (cons V1139 (cons NewContinuation ())))))) (true (shen.sys-error shen.call_the_continuation)))) -(defun shen.newcontinuation (V1134 V1135 V1136) (cond ((= () V1134) V1136) ((and (cons? V1134) (cons? (hd V1134))) (cons freeze (cons (cons (hd (hd V1134)) (append (tl (hd V1134)) (cons V1135 (cons (shen.newcontinuation (tl V1134) V1135 V1136) ())))) ()))) (true (shen.sys-error shen.newcontinuation)))) +(defun shen.newcontinuation (V1141 V1142 V1143) (cond ((= () V1141) V1143) ((and (cons? V1141) (cons? (hd V1141))) (cons freeze (cons (cons (hd (hd V1141)) (append (tl (hd V1141)) (cons V1142 (cons (shen.newcontinuation (tl V1141) V1142 V1143) ())))) ()))) (true (shen.sys-error shen.newcontinuation)))) -(defun return (V1141 V1142 V1143) (shen.deref V1141 V1142)) +(defun return (V1148 V1149 V1150) (shen.deref V1148 V1149)) -(defun shen.measure&return (V1148 V1149 V1150) (do (shen.prhush (shen.app (value shen.*infs*) " inferences -" shen.a) (stoutput)) (shen.deref V1148 V1149))) +(defun shen.measure&return (V1155 V1156 V1157) (do (shen.prhush (shen.app (value shen.*infs*) " inferences +" shen.a) (stoutput)) (shen.deref V1155 V1156))) -(defun unify (V1151 V1152 V1153 V1154) (shen.lzy= (shen.lazyderef V1151 V1153) (shen.lazyderef V1152 V1153) V1153 V1154)) +(defun unify (V1158 V1159 V1160 V1161) (shen.lzy= (shen.lazyderef V1158 V1160) (shen.lazyderef V1159 V1160) V1160 V1161)) -(defun shen.lzy= (V1171 V1172 V1173 V1174) (cond ((= V1172 V1171) (thaw V1174)) ((shen.pvar? V1171) (bind V1171 V1172 V1173 V1174)) ((shen.pvar? V1172) (bind V1172 V1171 V1173 V1174)) ((and (cons? V1171) (cons? V1172)) (shen.lzy= (shen.lazyderef (hd V1171) V1173) (shen.lazyderef (hd V1172) V1173) V1173 (freeze (shen.lzy= (shen.lazyderef (tl V1171) V1173) (shen.lazyderef (tl V1172) V1173) V1173 V1174)))) (true false))) +(defun shen.lzy= (V1178 V1179 V1180 V1181) (cond ((= V1179 V1178) (thaw V1181)) ((shen.pvar? V1178) (bind V1178 V1179 V1180 V1181)) ((shen.pvar? V1179) (bind V1179 V1178 V1180 V1181)) ((and (cons? V1178) (cons? V1179)) (shen.lzy= (shen.lazyderef (hd V1178) V1180) (shen.lazyderef (hd V1179) V1180) V1180 (freeze (shen.lzy= (shen.lazyderef (tl V1178) V1180) (shen.lazyderef (tl V1179) V1180) V1180 V1181)))) (true false))) -(defun shen.deref (V1176 V1177) (cond ((cons? V1176) (cons (shen.deref (hd V1176) V1177) (shen.deref (tl V1176) V1177))) (true (if (shen.pvar? V1176) (let Value (shen.valvector V1176 V1177) (if (= Value shen.-null-) V1176 (shen.deref Value V1177))) V1176)))) +(defun shen.deref (V1183 V1184) (cond ((cons? V1183) (cons (shen.deref (hd V1183) V1184) (shen.deref (tl V1183) V1184))) (true (if (shen.pvar? V1183) (let Value (shen.valvector V1183 V1184) (if (= Value shen.-null-) V1183 (shen.deref Value V1184))) V1183)))) -(defun shen.lazyderef (V1178 V1179) (if (shen.pvar? V1178) (let Value (shen.valvector V1178 V1179) (if (= Value shen.-null-) V1178 (shen.lazyderef Value V1179))) V1178)) +(defun shen.lazyderef (V1185 V1186) (if (shen.pvar? V1185) (let Value (shen.valvector V1185 V1186) (if (= Value shen.-null-) V1185 (shen.lazyderef Value V1186))) V1185)) -(defun shen.valvector (V1180 V1181) (<-address (<-address (value shen.*prologvectors*) V1181) (<-address V1180 1))) +(defun shen.valvector (V1187 V1188) (<-address (<-address (value shen.*prologvectors*) V1188) (<-address V1187 1))) -(defun unify! (V1182 V1183 V1184 V1185) (shen.lzy=! (shen.lazyderef V1182 V1184) (shen.lazyderef V1183 V1184) V1184 V1185)) +(defun unify! (V1189 V1190 V1191 V1192) (shen.lzy=! (shen.lazyderef V1189 V1191) (shen.lazyderef V1190 V1191) V1191 V1192)) -(defun shen.lzy=! (V1202 V1203 V1204 V1205) (cond ((= V1203 V1202) (thaw V1205)) ((and (shen.pvar? V1202) (not (shen.occurs? V1202 (shen.deref V1203 V1204)))) (bind V1202 V1203 V1204 V1205)) ((and (shen.pvar? V1203) (not (shen.occurs? V1203 (shen.deref V1202 V1204)))) (bind V1203 V1202 V1204 V1205)) ((and (cons? V1202) (cons? V1203)) (shen.lzy=! (shen.lazyderef (hd V1202) V1204) (shen.lazyderef (hd V1203) V1204) V1204 (freeze (shen.lzy=! (shen.lazyderef (tl V1202) V1204) (shen.lazyderef (tl V1203) V1204) V1204 V1205)))) (true false))) +(defun shen.lzy=! (V1209 V1210 V1211 V1212) (cond ((= V1210 V1209) (thaw V1212)) ((and (shen.pvar? V1209) (not (shen.occurs? V1209 (shen.deref V1210 V1211)))) (bind V1209 V1210 V1211 V1212)) ((and (shen.pvar? V1210) (not (shen.occurs? V1210 (shen.deref V1209 V1211)))) (bind V1210 V1209 V1211 V1212)) ((and (cons? V1209) (cons? V1210)) (shen.lzy=! (shen.lazyderef (hd V1209) V1211) (shen.lazyderef (hd V1210) V1211) V1211 (freeze (shen.lzy=! (shen.lazyderef (tl V1209) V1211) (shen.lazyderef (tl V1210) V1211) V1211 V1212)))) (true false))) -(defun shen.occurs? (V1215 V1216) (cond ((= V1216 V1215) true) ((cons? V1216) (or (shen.occurs? V1215 (hd V1216)) (shen.occurs? V1215 (tl V1216)))) (true false))) +(defun shen.occurs? (V1222 V1223) (cond ((= V1223 V1222) true) ((cons? V1223) (or (shen.occurs? V1222 (hd V1223)) (shen.occurs? V1222 (tl V1223)))) (true false))) -(defun identical (V1218 V1219 V1220 V1221) (shen.lzy== (shen.lazyderef V1218 V1220) (shen.lazyderef V1219 V1220) V1220 V1221)) +(defun identical (V1225 V1226 V1227 V1228) (shen.lzy== (shen.lazyderef V1225 V1227) (shen.lazyderef V1226 V1227) V1227 V1228)) -(defun shen.lzy== (V1238 V1239 V1240 V1241) (cond ((= V1239 V1238) (thaw V1241)) ((and (cons? V1238) (cons? V1239)) (shen.lzy== (shen.lazyderef (hd V1238) V1240) (shen.lazyderef (hd V1239) V1240) V1240 (freeze (shen.lzy== (tl V1238) (tl V1239) V1240 V1241)))) (true false))) +(defun shen.lzy== (V1245 V1246 V1247 V1248) (cond ((= V1246 V1245) (thaw V1248)) ((and (cons? V1245) (cons? V1246)) (shen.lzy== (shen.lazyderef (hd V1245) V1247) (shen.lazyderef (hd V1246) V1247) V1247 (freeze (shen.lzy== (tl V1245) (tl V1246) V1247 V1248)))) (true false))) -(defun shen.pvar (V1243) (cn "Var" (shen.app (<-address V1243 1) "" shen.a))) +(defun shen.pvar (V1250) (cn "Var" (shen.app (<-address V1250 1) "" shen.a))) -(defun bind (V1244 V1245 V1246 V1247) (do (shen.bindv V1244 V1245 V1246) (let Result (thaw V1247) (do (shen.unbindv V1244 V1246) Result)))) +(defun bind (V1251 V1252 V1253 V1254) (do (shen.bindv V1251 V1252 V1253) (let Result (thaw V1254) (do (shen.unbindv V1251 V1253) Result)))) -(defun fwhen (V1262 V1263 V1264) (cond ((= true V1262) (thaw V1264)) ((= false V1262) false) (true (simple-error (cn "fwhen expects a boolean: not " (shen.app V1262 "%" shen.s)))))) +(defun fwhen (V1269 V1270 V1271) (cond ((= true V1269) (thaw V1271)) ((= false V1269) false) (true (simple-error (cn "fwhen expects a boolean: not " (shen.app V1269 "%" shen.s)))))) -(defun call (V1277 V1278 V1279) (cond ((cons? V1277) (shen.call-help (shen.m_prolog_to_s-prolog_predicate (shen.lazyderef (hd V1277) V1278)) (tl V1277) V1278 V1279)) (true false))) +(defun call (V1284 V1285 V1286) (cond ((cons? V1284) (shen.call-help (shen.m_prolog_to_s-prolog_predicate (shen.lazyderef (hd V1284) V1285)) (tl V1284) V1285 V1286)) (true false))) -(defun shen.call-help (V1280 V1281 V1282 V1283) (cond ((= () V1281) (V1280 V1282 V1283)) ((cons? V1281) (shen.call-help (V1280 (hd V1281)) (tl V1281) V1282 V1283)) (true (shen.sys-error shen.call-help)))) +(defun shen.call-help (V1287 V1288 V1289 V1290) (cond ((= () V1288) (V1287 V1289 V1290)) ((cons? V1288) (shen.call-help (V1287 (hd V1288)) (tl V1288) V1289 V1290)) (true (shen.sys-error shen.call-help)))) -(defun shen.intprolog (V1284) (cond ((and (cons? V1284) (cons? (hd V1284))) (let ProcessN (shen.start-new-prolog-process) (shen.intprolog-help (hd (hd V1284)) (shen.insert-prolog-variables (cons (tl (hd V1284)) (cons (tl V1284) ())) ProcessN) ProcessN))) (true (shen.sys-error shen.intprolog)))) +(defun shen.intprolog (V1291) (cond ((and (cons? V1291) (cons? (hd V1291))) (let ProcessN (shen.start-new-prolog-process) (shen.intprolog-help (hd (hd V1291)) (shen.insert-prolog-variables (cons (tl (hd V1291)) (cons (tl V1291) ())) ProcessN) ProcessN))) (true (shen.sys-error shen.intprolog)))) -(defun shen.intprolog-help (V1285 V1286 V1287) (cond ((and (cons? V1286) (and (cons? (tl V1286)) (= () (tl (tl V1286))))) (shen.intprolog-help-help V1285 (hd V1286) (hd (tl V1286)) V1287)) (true (shen.sys-error shen.intprolog-help)))) +(defun shen.intprolog-help (V1292 V1293 V1294) (cond ((and (cons? V1293) (and (cons? (tl V1293)) (= () (tl (tl V1293))))) (shen.intprolog-help-help V1292 (hd V1293) (hd (tl V1293)) V1294)) (true (shen.sys-error shen.intprolog-help)))) -(defun shen.intprolog-help-help (V1288 V1289 V1290 V1291) (cond ((= () V1289) (V1288 V1291 (freeze (shen.call-rest V1290 V1291)))) ((cons? V1289) (shen.intprolog-help-help (V1288 (hd V1289)) (tl V1289) V1290 V1291)) (true (shen.sys-error shen.intprolog-help-help)))) +(defun shen.intprolog-help-help (V1295 V1296 V1297 V1298) (cond ((= () V1296) (V1295 V1298 (freeze (shen.call-rest V1297 V1298)))) ((cons? V1296) (shen.intprolog-help-help (V1295 (hd V1296)) (tl V1296) V1297 V1298)) (true (shen.sys-error shen.intprolog-help-help)))) -(defun shen.call-rest (V1294 V1295) (cond ((= () V1294) true) ((and (cons? V1294) (and (cons? (hd V1294)) (cons? (tl (hd V1294))))) (shen.call-rest (cons (cons ((hd (hd V1294)) (hd (tl (hd V1294)))) (tl (tl (hd V1294)))) (tl V1294)) V1295)) ((and (cons? V1294) (and (cons? (hd V1294)) (= () (tl (hd V1294))))) ((hd (hd V1294)) V1295 (freeze (shen.call-rest (tl V1294) V1295)))) (true (shen.sys-error shen.call-rest)))) +(defun shen.call-rest (V1301 V1302) (cond ((= () V1301) true) ((and (cons? V1301) (and (cons? (hd V1301)) (cons? (tl (hd V1301))))) (shen.call-rest (cons (cons ((hd (hd V1301)) (hd (tl (hd V1301)))) (tl (tl (hd V1301)))) (tl V1301)) V1302)) ((and (cons? V1301) (and (cons? (hd V1301)) (= () (tl (hd V1301))))) ((hd (hd V1301)) V1302 (freeze (shen.call-rest (tl V1301) V1302)))) (true (shen.sys-error shen.call-rest)))) (defun shen.start-new-prolog-process () (let IncrementProcessCounter (set shen.*process-counter* (+ 1 (value shen.*process-counter*))) (shen.initialise-prolog IncrementProcessCounter))) -(defun shen.insert-prolog-variables (V1296 V1297) (shen.insert-prolog-variables-help V1296 (shen.flatten V1296) V1297)) +(defun shen.insert-prolog-variables (V1303 V1304) (shen.insert-prolog-variables-help V1303 (shen.flatten V1303) V1304)) -(defun shen.insert-prolog-variables-help (V1302 V1303 V1304) (cond ((= () V1303) V1302) ((and (cons? V1303) (variable? (hd V1303))) (let V (shen.newpv V1304) (let XV/Y (subst V (hd V1303) V1302) (let Z-Y (remove (hd V1303) (tl V1303)) (shen.insert-prolog-variables-help XV/Y Z-Y V1304))))) ((cons? V1303) (shen.insert-prolog-variables-help V1302 (tl V1303) V1304)) (true (shen.sys-error shen.insert-prolog-variables-help)))) +(defun shen.insert-prolog-variables-help (V1309 V1310 V1311) (cond ((= () V1310) V1309) ((and (cons? V1310) (variable? (hd V1310))) (let V (shen.newpv V1311) (let XV/Y (subst V (hd V1310) V1309) (let Z-Y (remove (hd V1310) (tl V1310)) (shen.insert-prolog-variables-help XV/Y Z-Y V1311))))) ((cons? V1310) (shen.insert-prolog-variables-help V1309 (tl V1310) V1311)) (true (shen.sys-error shen.insert-prolog-variables-help)))) -(defun shen.initialise-prolog (V1305) (let Vector (address-> (value shen.*prologvectors*) V1305 (shen.fillvector (vector 10) 1 10 shen.-null-)) (let Counter (address-> (value shen.*varcounter*) V1305 1) V1305))) +(defun shen.initialise-prolog (V1312) (let Vector (address-> (value shen.*prologvectors*) V1312 (shen.fillvector (vector 10) 1 10 shen.-null-)) (let Counter (address-> (value shen.*varcounter*) V1312 1) V1312))) diff --git a/shen/klambda/reader.kl b/shen/klambda/reader.kl index 0314995..f1a3dae 100644 --- a/shen/klambda/reader.kl +++ b/shen/klambda/reader.kl @@ -47,166 +47,166 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun read-file-as-bytelist (V1307) (let Stream (open V1307 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) +"(defun read-file-as-bytelist (V1314) (let Stream (open V1314 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) -(defun shen.read-file-as-bytelist-help (V1308 V1309 V1310) (cond ((= -1 V1309) V1310) (true (shen.read-file-as-bytelist-help V1308 (read-byte V1308) (cons V1309 V1310))))) +(defun shen.read-file-as-bytelist-help (V1315 V1316 V1317) (cond ((= -1 V1316) V1317) (true (shen.read-file-as-bytelist-help V1315 (read-byte V1315) (cons V1316 V1317))))) -(defun read-file-as-string (V1311) (let Stream (open V1311 in) (shen.rfas-h Stream (read-byte Stream) ""))) +(defun read-file-as-string (V1318) (let Stream (open V1318 in) (shen.rfas-h Stream (read-byte Stream) ""))) -(defun shen.rfas-h (V1312 V1313 V1314) (cond ((= -1 V1313) (do (close V1312) V1314)) (true (shen.rfas-h V1312 (read-byte V1312) (cn V1314 (n->string V1313)))))) +(defun shen.rfas-h (V1319 V1320 V1321) (cond ((= -1 V1320) (do (close V1319) V1321)) (true (shen.rfas-h V1319 (read-byte V1319) (cn V1321 (n->string V1320)))))) -(defun input (V1315) (eval-kl (read V1315))) +(defun input (V1322) (eval-kl (read V1322))) -(defun input+ (V1316 V1317) (let Mono? (shen.monotype V1316) (let Input (read V1317) (if (= false (shen.typecheck Input V1316)) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1316 " +(defun input+ (V1323 V1324) (let Mono? (shen.monotype V1323) (let Input (read V1324) (if (= false (shen.typecheck Input V1323)) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1323 " " shen.r)) shen.r))) (eval-kl Input))))) -(defun shen.monotype (V1318) (cond ((cons? V1318) (map shen.monotype V1318)) (true (if (variable? V1318) (simple-error (cn "input+ expects a monotype: not " (shen.app V1318 " -" shen.a))) V1318)))) +(defun shen.monotype (V1325) (cond ((cons? V1325) (map shen.monotype V1325)) (true (if (variable? V1325) (simple-error (cn "input+ expects a monotype: not " (shen.app V1325 " +" shen.a))) V1325)))) -(defun read (V1319) (hd (shen.read-loop V1319 (read-byte V1319) ()))) +(defun read (V1326) (hd (shen.read-loop V1326 (read-byte V1326) ()))) -(defun shen.read-loop (V1322 V1323 V1324) (cond ((= -1 V1323) (if (empty? V1324) (simple-error "error: empty stream") (compile shen. V1324 (lambda E E)))) ((shen.terminator? V1323) (let AllBytes (append V1324 (cons V1323 ())) (let Read (compile shen. AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1322 (read-byte V1322) AllBytes) Read)))) (true (shen.read-loop V1322 (read-byte V1322) (append V1324 (cons V1323 ())))))) +(defun shen.read-loop (V1329 V1330 V1331) (cond ((= -1 V1330) (if (empty? V1331) (simple-error "error: empty stream") (compile shen. V1331 (lambda E E)))) ((shen.terminator? V1330) (let AllBytes (append V1331 (cons V1330 ())) (let Read (compile shen. AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1329 (read-byte V1329) AllBytes) Read)))) (true (shen.read-loop V1329 (read-byte V1329) (append V1331 (cons V1330 ())))))) -(defun shen.terminator? (V1325) (element? V1325 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) +(defun shen.terminator? (V1332) (element? V1332 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) -(defun lineread (V1326) (shen.lineread-loop (read-byte V1326) () V1326)) +(defun lineread (V1333) (shen.lineread-loop (read-byte V1333) () V1333)) -(defun shen.lineread-loop (V1328 V1329 V1330) (cond ((= -1 V1328) (if (empty? V1329) (simple-error "empty stream") (compile shen. V1329 (lambda E E)))) ((= V1328 (shen.hat)) (simple-error "line read aborted")) ((element? V1328 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V1329 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1330) (append V1329 (cons V1328 ())) V1330) Line))) (true (shen.lineread-loop (read-byte V1330) (append V1329 (cons V1328 ())) V1330)))) +(defun shen.lineread-loop (V1335 V1336 V1337) (cond ((= -1 V1335) (if (empty? V1336) (simple-error "empty stream") (compile shen. V1336 (lambda E E)))) ((= V1335 (shen.hat)) (simple-error "line read aborted")) ((element? V1335 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V1336 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1337) (append V1336 (cons V1335 ())) V1337) Line))) (true (shen.lineread-loop (read-byte V1337) (append V1336 (cons V1335 ())) V1337)))) -(defun read-file (V1331) (let Bytelist (read-file-as-bytelist V1331) (compile shen. Bytelist shen.read-error))) +(defun read-file (V1338) (let Bytelist (read-file-as-bytelist V1338) (compile shen. Bytelist shen.read-error))) -(defun read-from-string (V1332) (let Ns (map (lambda V1306 (string->n V1306)) (explode V1332)) (compile shen. Ns shen.read-error))) +(defun read-from-string (V1339) (let Ns (map (lambda V1313 (string->n V1313)) (explode V1339)) (compile shen. Ns shen.read-error))) -(defun shen.read-error (V1339) (cond ((and (cons? V1339) (and (cons? (hd V1339)) (and (cons? (tl V1339)) (= () (tl (tl V1339)))))) (simple-error (cn "read error here: +(defun shen.read-error (V1346) (cond ((and (cons? V1346) (and (cons? (hd V1346)) (and (cons? (tl V1346)) (= () (tl (tl V1346)))))) (simple-error (cn "read error here: - " (shen.app (shen.compress-50 50 (hd V1339)) " + " (shen.app (shen.compress-50 50 (hd V1346)) " " shen.a)))) (true (simple-error "read error ")))) -(defun shen.compress-50 (V1344 V1345) (cond ((= () V1345) "") ((= 0 V1344) "") ((cons? V1345) (cn (n->string (hd V1345)) (shen.compress-50 (- V1344 1) (tl V1345)))) (true (shen.sys-error shen.compress-50)))) +(defun shen.compress-50 (V1351 V1352) (cond ((= () V1352) "") ((= 0 V1351) "") ((cons? V1352) (cn (n->string (hd V1352)) (shen.compress-50 (- V1351 1) (tl V1352)))) (true (shen.sys-error shen.compress-50)))) -(defun shen. (V1350) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1350) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1350) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1357) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1357) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1355) (let Result (if (and (cons? (hd V1355)) (= 91 (hd (hd V1355)))) (shen.pair (hd (shen.pair (tl (hd V1355)) (shen.hdtl V1355))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1362) (let Result (if (and (cons? (hd V1362)) (= 91 (hd (hd V1362)))) (shen.pair (hd (shen.pair (tl (hd V1362)) (shen.hdtl V1362))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1360) (let Result (if (and (cons? (hd V1360)) (= 93 (hd (hd V1360)))) (shen.pair (hd (shen.pair (tl (hd V1360)) (shen.hdtl V1360))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1367) (let Result (if (and (cons? (hd V1367)) (= 93 (hd (hd V1367)))) (shen.pair (hd (shen.pair (tl (hd V1367)) (shen.hdtl V1367))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1365) (let Result (if (and (cons? (hd V1365)) (= 123 (hd (hd V1365)))) (shen.pair (hd (shen.pair (tl (hd V1365)) (shen.hdtl V1365))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1372) (let Result (if (and (cons? (hd V1372)) (= 123 (hd (hd V1372)))) (shen.pair (hd (shen.pair (tl (hd V1372)) (shen.hdtl V1372))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1370) (let Result (if (and (cons? (hd V1370)) (= 125 (hd (hd V1370)))) (shen.pair (hd (shen.pair (tl (hd V1370)) (shen.hdtl V1370))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1377) (let Result (if (and (cons? (hd V1377)) (= 125 (hd (hd V1377)))) (shen.pair (hd (shen.pair (tl (hd V1377)) (shen.hdtl V1377))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1375) (let Result (if (and (cons? (hd V1375)) (= 124 (hd (hd V1375)))) (shen.pair (hd (shen.pair (tl (hd V1375)) (shen.hdtl V1375))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1382) (let Result (if (and (cons? (hd V1382)) (= 124 (hd (hd V1382)))) (shen.pair (hd (shen.pair (tl (hd V1382)) (shen.hdtl V1382))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1380) (let Result (if (and (cons? (hd V1380)) (= 59 (hd (hd V1380)))) (shen.pair (hd (shen.pair (tl (hd V1380)) (shen.hdtl V1380))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1387) (let Result (if (and (cons? (hd V1387)) (= 59 (hd (hd V1387)))) (shen.pair (hd (shen.pair (tl (hd V1387)) (shen.hdtl V1387))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1385) (let Result (if (and (cons? (hd V1385)) (= 58 (hd (hd V1385)))) (shen.pair (hd (shen.pair (tl (hd V1385)) (shen.hdtl V1385))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1392) (let Result (if (and (cons? (hd V1392)) (= 58 (hd (hd V1392)))) (shen.pair (hd (shen.pair (tl (hd V1392)) (shen.hdtl V1392))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1390) (let Result (if (and (cons? (hd V1390)) (= 44 (hd (hd V1390)))) (shen.pair (hd (shen.pair (tl (hd V1390)) (shen.hdtl V1390))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1397) (let Result (if (and (cons? (hd V1397)) (= 44 (hd (hd V1397)))) (shen.pair (hd (shen.pair (tl (hd V1397)) (shen.hdtl V1397))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1395) (let Result (if (and (cons? (hd V1395)) (= 61 (hd (hd V1395)))) (shen.pair (hd (shen.pair (tl (hd V1395)) (shen.hdtl V1395))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1402) (let Result (if (and (cons? (hd V1402)) (= 61 (hd (hd V1402)))) (shen.pair (hd (shen.pair (tl (hd V1402)) (shen.hdtl V1402))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1400) (let Result (if (and (cons? (hd V1400)) (= 45 (hd (hd V1400)))) (shen.pair (hd (shen.pair (tl (hd V1400)) (shen.hdtl V1400))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1407) (let Result (if (and (cons? (hd V1407)) (= 45 (hd (hd V1407)))) (shen.pair (hd (shen.pair (tl (hd V1407)) (shen.hdtl V1407))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1405) (let Result (if (and (cons? (hd V1405)) (= 40 (hd (hd V1405)))) (shen.pair (hd (shen.pair (tl (hd V1405)) (shen.hdtl V1405))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1412) (let Result (if (and (cons? (hd V1412)) (= 40 (hd (hd V1412)))) (shen.pair (hd (shen.pair (tl (hd V1412)) (shen.hdtl V1412))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1410) (let Result (if (and (cons? (hd V1410)) (= 41 (hd (hd V1410)))) (shen.pair (hd (shen.pair (tl (hd V1410)) (shen.hdtl V1410))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1417) (let Result (if (and (cons? (hd V1417)) (= 41 (hd (hd V1417)))) (shen.pair (hd (shen.pair (tl (hd V1417)) (shen.hdtl V1417))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1415) (let Result (let Parse_shen. (shen. V1415) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1415) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1415) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1422) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen.control-chars (V1416) (cond ((= () V1416) "") ((and (cons? V1416) (and (= "c" (hd V1416)) (and (cons? (tl V1416)) (= "#" (hd (tl V1416)))))) (let CodePoint (shen.code-point (tl (tl V1416))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1416))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1416) (@s (hd V1416) (shen.control-chars (tl V1416)))) (true (shen.sys-error shen.control-chars)))) +(defun shen.control-chars (V1423) (cond ((= () V1423) "") ((and (cons? V1423) (and (= "c" (hd V1423)) (and (cons? (tl V1423)) (= "#" (hd (tl V1423)))))) (let CodePoint (shen.code-point (tl (tl V1423))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1423))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1423) (@s (hd V1423) (shen.control-chars (tl V1423)))) (true (shen.sys-error shen.control-chars)))) -(defun shen.code-point (V1419) (cond ((and (cons? V1419) (= ";" (hd V1419))) "") ((and (cons? V1419) (element? (hd V1419) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1419) (shen.code-point (tl V1419)))) (true (simple-error (cn "code point parse error " (shen.app V1419 " +(defun shen.code-point (V1426) (cond ((and (cons? V1426) (= ";" (hd V1426))) "") ((and (cons? V1426) (element? (hd V1426) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1426) (shen.code-point (tl V1426)))) (true (simple-error (cn "code point parse error " (shen.app V1426 " " shen.a)))))) -(defun shen.after-codepoint (V1424) (cond ((= () V1424) ()) ((and (cons? V1424) (= ";" (hd V1424))) (tl V1424)) ((cons? V1424) (shen.after-codepoint (tl V1424))) (true (shen.sys-error shen.after-codepoint)))) +(defun shen.after-codepoint (V1431) (cond ((= () V1431) ()) ((and (cons? V1431) (= ";" (hd V1431))) (tl V1431)) ((cons? V1431) (shen.after-codepoint (tl V1431))) (true (shen.sys-error shen.after-codepoint)))) -(defun shen.decimalise (V1425) (shen.pre (reverse (shen.digits->integers V1425)) 0)) +(defun shen.decimalise (V1432) (shen.pre (reverse (shen.digits->integers V1432)) 0)) -(defun shen.digits->integers (V1430) (cond ((and (cons? V1430) (= "0" (hd V1430))) (cons 0 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "1" (hd V1430))) (cons 1 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "2" (hd V1430))) (cons 2 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "3" (hd V1430))) (cons 3 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "4" (hd V1430))) (cons 4 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "5" (hd V1430))) (cons 5 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "6" (hd V1430))) (cons 6 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "7" (hd V1430))) (cons 7 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "8" (hd V1430))) (cons 8 (shen.digits->integers (tl V1430)))) ((and (cons? V1430) (= "9" (hd V1430))) (cons 9 (shen.digits->integers (tl V1430)))) (true ()))) +(defun shen.digits->integers (V1437) (cond ((and (cons? V1437) (= "0" (hd V1437))) (cons 0 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "1" (hd V1437))) (cons 1 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "2" (hd V1437))) (cons 2 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "3" (hd V1437))) (cons 3 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "4" (hd V1437))) (cons 4 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "5" (hd V1437))) (cons 5 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "6" (hd V1437))) (cons 6 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "7" (hd V1437))) (cons 7 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "8" (hd V1437))) (cons 8 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "9" (hd V1437))) (cons 9 (shen.digits->integers (tl V1437)))) (true ()))) -(defun shen. (V1435) (let Result (let Parse_shen. (shen. V1435) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1442) (let Result (let Parse_shen. (shen. V1442) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1440) (let Result (let Parse_shen. (shen. V1440) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1440) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1447) (let Result (let Parse_shen. (shen. V1447) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1447) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1445) (let Result (let Parse_shen. (shen. V1445) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1445) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1452) (let Result (let Parse_shen. (shen. V1452) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1452) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1450) (let Result (if (cons? (hd V1450)) (let Parse_Byte (hd (hd V1450)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1450)) (shen.hdtl V1450))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1457) (let Result (if (cons? (hd V1457)) (let Parse_Byte (hd (hd V1457)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1457)) (shen.hdtl V1457))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.numbyte? (V1455) (cond ((= 48 V1455) true) ((= 49 V1455) true) ((= 50 V1455) true) ((= 51 V1455) true) ((= 52 V1455) true) ((= 53 V1455) true) ((= 54 V1455) true) ((= 55 V1455) true) ((= 56 V1455) true) ((= 57 V1455) true) (true false))) +(defun shen.numbyte? (V1462) (cond ((= 48 V1462) true) ((= 49 V1462) true) ((= 50 V1462) true) ((= 51 V1462) true) ((= 52 V1462) true) ((= 53 V1462) true) ((= 54 V1462) true) ((= 55 V1462) true) ((= 56 V1462) true) ((= 57 V1462) true) (true false))) -(defun shen. (V1460) (let Result (if (cons? (hd V1460)) (let Parse_Byte (hd (hd V1460)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1460)) (shen.hdtl V1460))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1467) (let Result (if (cons? (hd V1467)) (let Parse_Byte (hd (hd V1467)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1467)) (shen.hdtl V1467))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.symbol-code? (V1461) (or (= V1461 126) (or (and (> V1461 94) (< V1461 123)) (or (and (> V1461 59) (< V1461 91)) (or (and (> V1461 41) (and (< V1461 58) (not (= V1461 44)))) (or (and (> V1461 34) (< V1461 40)) (= V1461 33))))))) +(defun shen.symbol-code? (V1468) (or (= V1468 126) (or (and (> V1468 94) (< V1468 123)) (or (and (> V1468 59) (< V1468 91)) (or (and (> V1468 41) (and (< V1468 58) (not (= V1468 44)))) (or (and (> V1468 34) (< V1468 40)) (= V1468 33))))))) -(defun shen. (V1466) (let Result (let Parse_shen. (shen. V1466) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1473) (let Result (let Parse_shen. (shen. V1473) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1471) (let Result (if (cons? (hd V1471)) (let Parse_Byte (hd (hd V1471)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1471)) (shen.hdtl V1471))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1478) (let Result (if (cons? (hd V1478)) (let Parse_Byte (hd (hd V1478)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1478)) (shen.hdtl V1478))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1476) (let Result (let Parse_shen. (shen. V1476) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1476) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1483) (let Result (let Parse_shen. (shen. V1483) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1483) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1481) (let Result (if (cons? (hd V1481)) (let Parse_Byte (hd (hd V1481)) (shen.pair (hd (shen.pair (tl (hd V1481)) (shen.hdtl V1481))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1488) (let Result (if (cons? (hd V1488)) (let Parse_Byte (hd (hd V1488)) (shen.pair (hd (shen.pair (tl (hd V1488)) (shen.hdtl V1488))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1486) (let Result (if (cons? (hd V1486)) (let Parse_Byte (hd (hd V1486)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1486)) (shen.hdtl V1486))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1493) (let Result (if (cons? (hd V1493)) (let Parse_Byte (hd (hd V1493)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1493)) (shen.hdtl V1493))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1491) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1491) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1498) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1496) (let Result (if (and (cons? (hd V1496)) (= 101 (hd (hd V1496)))) (shen.pair (hd (shen.pair (tl (hd V1496)) (shen.hdtl V1496))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1503) (let Result (if (and (cons? (hd V1503)) (= 101 (hd (hd V1503)))) (shen.pair (hd (shen.pair (tl (hd V1503)) (shen.hdtl V1503))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1501) (let Result (let Parse_shen. (shen. V1501) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1501) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1508) (let Result (let Parse_shen. (shen. V1508) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1508) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1506) (let Result (if (cons? (hd V1506)) (let Parse_Byte (hd (hd V1506)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1506)) (shen.hdtl V1506))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1513) (let Result (if (cons? (hd V1513)) (let Parse_Byte (hd (hd V1513)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1513)) (shen.hdtl V1513))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1511) (let Result (if (cons? (hd V1511)) (let Parse_Byte (hd (hd V1511)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1511)) (shen.hdtl V1511))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1518) (let Result (if (cons? (hd V1518)) (let Parse_Byte (hd (hd V1518)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1518)) (shen.hdtl V1518))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1516) (let Result (let Parse_shen. (shen. V1516) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1516) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1523) (let Result (let Parse_shen. (shen. V1523) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1523) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1521) (let Result (let Parse_shen. (shen. V1521) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1528) (let Result (let Parse_shen. (shen. V1528) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1526) (let Result (let Parse_shen. (shen. V1526) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1526) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1533) (let Result (let Parse_shen. (shen. V1533) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1533) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1531) (let Result (if (cons? (hd V1531)) (let Parse_X (hd (hd V1531)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1531)) (shen.hdtl V1531))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1538) (let Result (if (cons? (hd V1538)) (let Parse_X (hd (hd V1538)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1538)) (shen.hdtl V1538))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.byte->digit (V1532) (cond ((= 48 V1532) 0) ((= 49 V1532) 1) ((= 50 V1532) 2) ((= 51 V1532) 3) ((= 52 V1532) 4) ((= 53 V1532) 5) ((= 54 V1532) 6) ((= 55 V1532) 7) ((= 56 V1532) 8) ((= 57 V1532) 9) (true (shen.sys-error shen.byte->digit)))) +(defun shen.byte->digit (V1539) (cond ((= 48 V1539) 0) ((= 49 V1539) 1) ((= 50 V1539) 2) ((= 51 V1539) 3) ((= 52 V1539) 4) ((= 53 V1539) 5) ((= 54 V1539) 6) ((= 55 V1539) 7) ((= 56 V1539) 8) ((= 57 V1539) 9) (true (shen.sys-error shen.byte->digit)))) -(defun shen.pre (V1535 V1536) (cond ((= () V1535) 0) ((cons? V1535) (+ (* (shen.expt 10 V1536) (hd V1535)) (shen.pre (tl V1535) (+ V1536 1)))) (true (shen.sys-error shen.pre)))) +(defun shen.pre (V1542 V1543) (cond ((= () V1542) 0) ((cons? V1542) (+ (* (shen.expt 10 V1543) (hd V1542)) (shen.pre (tl V1542) (+ V1543 1)))) (true (shen.sys-error shen.pre)))) -(defun shen.post (V1539 V1540) (cond ((= () V1539) 0) ((cons? V1539) (+ (* (shen.expt 10 (- 0 V1540)) (hd V1539)) (shen.post (tl V1539) (+ V1540 1)))) (true (shen.sys-error shen.post)))) +(defun shen.post (V1546 V1547) (cond ((= () V1546) 0) ((cons? V1546) (+ (* (shen.expt 10 (- 0 V1547)) (hd V1546)) (shen.post (tl V1546) (+ V1547 1)))) (true (shen.sys-error shen.post)))) -(defun shen.expt (V1543 V1544) (cond ((= 0 V1544) 1) ((> V1544 0) (* V1543 (shen.expt V1543 (- V1544 1)))) (true (* 1 (/ (shen.expt V1543 (+ V1544 1)) V1543))))) +(defun shen.expt (V1550 V1551) (cond ((= 0 V1551) 1) ((> V1551 0) (* V1550 (shen.expt V1550 (- V1551 1)))) (true (* 1 (/ (shen.expt V1550 (+ V1551 1)) V1550))))) -(defun shen. (V1549) (let Result (let Parse_shen. (shen. V1549) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1556) (let Result (let Parse_shen. (shen. V1556) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1554) (let Result (let Parse_shen. (shen. V1554) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1561) (let Result (let Parse_shen. (shen. V1561) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1559) (let Result (let Parse_shen. (shen. V1559) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1559) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1566) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1564) (let Result (let Parse_shen. (shen. V1564) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1571) (let Result (let Parse_shen. (shen. V1571) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1569) (let Result (if (and (cons? (hd V1569)) (= 92 (hd (hd V1569)))) (shen.pair (hd (shen.pair (tl (hd V1569)) (shen.hdtl V1569))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1576) (let Result (if (and (cons? (hd V1576)) (= 92 (hd (hd V1576)))) (shen.pair (hd (shen.pair (tl (hd V1576)) (shen.hdtl V1576))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1574) (let Result (let Parse_shen. (shen. V1574) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1574) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1581) (let Result (let Parse_shen. (shen. V1581) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1581) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1579) (let Result (if (cons? (hd V1579)) (let Parse_X (hd (hd V1579)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1579)) (shen.hdtl V1579))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1586) (let Result (if (cons? (hd V1586)) (let Parse_X (hd (hd V1586)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1586)) (shen.hdtl V1586))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1584) (let Result (if (cons? (hd V1584)) (let Parse_X (hd (hd V1584)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1584)) (shen.hdtl V1584))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1591) (let Result (if (cons? (hd V1591)) (let Parse_X (hd (hd V1591)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1591)) (shen.hdtl V1591))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1589) (let Result (let Parse_shen. (shen. V1589) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1596) (let Result (let Parse_shen. (shen. V1596) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1594) (let Result (if (and (cons? (hd V1594)) (= 42 (hd (hd V1594)))) (shen.pair (hd (shen.pair (tl (hd V1594)) (shen.hdtl V1594))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1601) (let Result (if (and (cons? (hd V1601)) (= 42 (hd (hd V1601)))) (shen.pair (hd (shen.pair (tl (hd V1601)) (shen.hdtl V1601))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1599) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1599)) (let Parse_X (hd (hd V1599)) (let Parse_shen. (shen. (shen.pair (tl (hd V1599)) (shen.hdtl V1599))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1606) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1606)) (let Parse_X (hd (hd V1606)) (let Parse_shen. (shen. (shen.pair (tl (hd V1606)) (shen.hdtl V1606))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1604) (let Result (let Parse_shen. (shen. V1604) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1604) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1611) (let Result (let Parse_shen. (shen. V1611) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1611) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1609) (let Result (if (cons? (hd V1609)) (let Parse_X (hd (hd V1609)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1609)) (shen.hdtl V1609))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1616) (let Result (if (cons? (hd V1616)) (let Parse_X (hd (hd V1616)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1616)) (shen.hdtl V1616))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.cons_form (V1610) (cond ((= () V1610) ()) ((and (cons? V1610) (and (cons? (tl V1610)) (and (cons? (tl (tl V1610))) (and (= () (tl (tl (tl V1610)))) (= (hd (tl V1610)) bar!))))) (cons cons (cons (hd V1610) (tl (tl V1610))))) ((cons? V1610) (cons cons (cons (hd V1610) (cons (shen.cons_form (tl V1610)) ())))) (true (shen.sys-error shen.cons_form)))) +(defun shen.cons_form (V1617) (cond ((= () V1617) ()) ((and (cons? V1617) (and (cons? (tl V1617)) (and (cons? (tl (tl V1617))) (and (= () (tl (tl (tl V1617)))) (= (hd (tl V1617)) bar!))))) (cons cons (cons (hd V1617) (tl (tl V1617))))) ((cons? V1617) (cons cons (cons (hd V1617) (cons (shen.cons_form (tl V1617)) ())))) (true (shen.sys-error shen.cons_form)))) -(defun shen.package-macro (V1613 V1614) (cond ((and (cons? V1613) (and (= $ (hd V1613)) (and (cons? (tl V1613)) (= () (tl (tl V1613)))))) (append (explode (hd (tl V1613))) V1614)) ((and (cons? V1613) (and (= package (hd V1613)) (and (cons? (tl V1613)) (and (= null (hd (tl V1613))) (cons? (tl (tl V1613))))))) (append (tl (tl (tl V1613))) V1614)) ((and (cons? V1613) (and (= package (hd V1613)) (and (cons? (tl V1613)) (cons? (tl (tl V1613)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1613)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1613))) (let PackageNameDot (intern (cn (str (hd (tl V1613))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1613)))) V1614))))) (true (cons V1613 V1614)))) +(defun shen.package-macro (V1620 V1621) (cond ((and (cons? V1620) (and (= $ (hd V1620)) (and (cons? (tl V1620)) (= () (tl (tl V1620)))))) (append (explode (hd (tl V1620))) V1621)) ((and (cons? V1620) (and (= package (hd V1620)) (and (cons? (tl V1620)) (and (= null (hd (tl V1620))) (cons? (tl (tl V1620))))))) (append (tl (tl (tl V1620))) V1621)) ((and (cons? V1620) (and (= package (hd V1620)) (and (cons? (tl V1620)) (cons? (tl (tl V1620)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1620)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1620))) (let PackageNameDot (intern (cn (str (hd (tl V1620))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1620)))) V1621))))) (true (cons V1620 V1621)))) -(defun shen.record-exceptions (V1615 V1616) (let CurrExceptions (trap-error (get V1616 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1615 CurrExceptions) (put V1616 shen.external-symbols AllExceptions (value *property-vector*))))) +(defun shen.record-exceptions (V1622 V1623) (let CurrExceptions (trap-error (get V1623 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1622 CurrExceptions) (put V1623 shen.external-symbols AllExceptions (value *property-vector*))))) -(defun shen.packageh (V1625 V1626 V1627) (cond ((cons? V1627) (cons (shen.packageh V1625 V1626 (hd V1627)) (shen.packageh V1625 V1626 (tl V1627)))) ((or (shen.sysfunc? V1627) (or (variable? V1627) (or (element? V1627 V1626) (or (shen.doubleunderline? V1627) (shen.singleunderline? V1627))))) V1627) ((and (symbol? V1627) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1627)))) (concat V1625 V1627)) (true V1627))) +(defun shen.packageh (V1632 V1633 V1634) (cond ((cons? V1634) (cons (shen.packageh V1632 V1633 (hd V1634)) (shen.packageh V1632 V1633 (tl V1634)))) ((or (shen.sysfunc? V1634) (or (variable? V1634) (or (element? V1634 V1633) (or (shen.doubleunderline? V1634) (shen.singleunderline? V1634))))) V1634) ((and (symbol? V1634) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1634)))) (concat V1632 V1634)) (true V1634))) diff --git a/shen/klambda/sequent.kl b/shen/klambda/sequent.kl index 4283a82..6a35123 100644 --- a/shen/klambda/sequent.kl +++ b/shen/klambda/sequent.kl @@ -47,114 +47,114 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.datatype-error (V1632) (cond ((and (cons? V1632) (and (cons? (tl V1632)) (= () (tl (tl V1632))))) (simple-error (cn "datatype syntax error here: +"(defun shen.datatype-error (V1639) (cond ((and (cons? V1639) (and (cons? (tl V1639)) (= () (tl (tl V1639))))) (simple-error (cn "datatype syntax error here: - " (shen.app (shen.next-50 50 (hd V1632)) " + " (shen.app (shen.next-50 50 (hd V1639)) " " shen.a)))) (true (shen.sys-error shen.datatype-error)))) -(defun shen. (V1637) (let Result (let Parse_shen. (shen. V1637) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1637) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1644) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1644) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1642) (let Result (let Parse_shen. (shen. V1642) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1642) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1649) (let Result (let Parse_shen. (shen. V1649) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1649) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1647) (let Result (let Parse_shen. (shen. V1647) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1647) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1654) (let Result (let Parse_shen. (shen. V1654) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1654) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1652) (let Result (if (and (cons? (hd V1652)) (= if (hd (hd V1652)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1652)) (shen.hdtl V1652))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1652)) (= let (hd (hd V1652)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1652)) (shen.hdtl V1652))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1659) (let Result (if (and (cons? (hd V1659)) (= if (hd (hd V1659)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1659)) (shen.hdtl V1659))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1659)) (= let (hd (hd V1659)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1659)) (shen.hdtl V1659))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1657) (let Result (if (cons? (hd V1657)) (let Parse_X (hd (hd V1657)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1657)) (shen.hdtl V1657))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1664) (let Result (if (cons? (hd V1664)) (let Parse_X (hd (hd V1664)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1664)) (shen.hdtl V1664))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1662) (let Result (if (cons? (hd V1662)) (let Parse_X (hd (hd V1662)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1662)) (shen.hdtl V1662))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1669) (let Result (if (cons? (hd V1669)) (let Parse_X (hd (hd V1669)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1669)) (shen.hdtl V1669))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.remove-bar (V1663) (cond ((and (cons? V1663) (and (cons? (tl V1663)) (and (cons? (tl (tl V1663))) (and (= () (tl (tl (tl V1663)))) (= (hd (tl V1663)) bar!))))) (cons (hd V1663) (hd (tl (tl V1663))))) ((cons? V1663) (cons (shen.remove-bar (hd V1663)) (shen.remove-bar (tl V1663)))) (true V1663))) +(defun shen.remove-bar (V1670) (cond ((and (cons? V1670) (and (cons? (tl V1670)) (and (cons? (tl (tl V1670))) (and (= () (tl (tl (tl V1670)))) (= (hd (tl V1670)) bar!))))) (cons (hd V1670) (hd (tl (tl V1670))))) ((cons? V1670) (cons (shen.remove-bar (hd V1670)) (shen.remove-bar (tl V1670)))) (true V1670))) -(defun shen. (V1668) (let Result (let Parse_shen. (shen. V1668) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1668) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1675) (let Result (let Parse_shen. (shen. V1675) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1675) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1673) (let Result (if (cons? (hd V1673)) (let Parse_X (hd (hd V1673)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1673)) (shen.hdtl V1673))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1680) (let Result (if (cons? (hd V1680)) (let Parse_X (hd (hd V1680)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1680)) (shen.hdtl V1680))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1678) (let Result (if (and (cons? (hd V1678)) (= ! (hd (hd V1678)))) (shen.pair (hd (shen.pair (tl (hd V1678)) (shen.hdtl V1678))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1678) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1678) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1685) (let Result (if (and (cons? (hd V1685)) (= ! (hd (hd V1685)))) (shen.pair (hd (shen.pair (tl (hd V1685)) (shen.hdtl V1685))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1685) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1685) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1683) (let Result (let Parse_shen. (shen. V1683) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1683) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1690) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen.sequent (V1684 V1685) (@p V1684 V1685)) +(defun shen.sequent (V1691 V1692) (@p V1691 V1692)) -(defun shen. (V1690) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1690) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1697) (let Result (let Parse_shen. (shen. V1697) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1697) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1697) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1695) (let Result (if (cons? (hd V1695)) (let Parse_X (hd (hd V1695)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1695)) (shen.hdtl V1695))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1702) (let Result (if (cons? (hd V1702)) (let Parse_X (hd (hd V1702)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1702)) (shen.hdtl V1702))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1700) (let Result (let Parse_shen. (shen. V1700) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1700) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1707) (let Result (let Parse_shen. (shen. V1707) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1707) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1705) (let Result (let Parse_shen. (shen. V1705) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1712) (let Result (let Parse_shen. (shen. V1712) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1710) (let Result (if (cons? (hd V1710)) (let Parse_X (hd (hd V1710)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1710)) (shen.hdtl V1710))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1717) (let Result (if (cons? (hd V1717)) (let Parse_X (hd (hd V1717)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1717)) (shen.hdtl V1717))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1715) (let Result (if (cons? (hd V1715)) (let Parse_X (hd (hd V1715)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1715)) (shen.hdtl V1715))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1722) (let Result (if (cons? (hd V1722)) (let Parse_X (hd (hd V1722)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1722)) (shen.hdtl V1722))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.singleunderline? (V1716) (and (symbol? V1716) (shen.sh? (str V1716)))) +(defun shen.singleunderline? (V1723) (and (symbol? V1723) (shen.sh? (str V1723)))) -(defun shen.sh? (V1717) (cond ((= "_" V1717) true) (true (and (= (pos V1717 0) "_") (shen.sh? (tlstr V1717)))))) +(defun shen.sh? (V1724) (cond ((= "_" V1724) true) (true (and (= (pos V1724 0) "_") (shen.sh? (tlstr V1724)))))) -(defun shen.doubleunderline? (V1718) (and (symbol? V1718) (shen.dh? (str V1718)))) +(defun shen.doubleunderline? (V1725) (and (symbol? V1725) (shen.dh? (str V1725)))) -(defun shen.dh? (V1719) (cond ((= "=" V1719) true) (true (and (= (pos V1719 0) "=") (shen.dh? (tlstr V1719)))))) +(defun shen.dh? (V1726) (cond ((= "=" V1726) true) (true (and (= (pos V1726 0) "=") (shen.dh? (tlstr V1726)))))) -(defun shen.process-datatype (V1720 V1721) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1720 V1721)))) +(defun shen.process-datatype (V1727 V1728) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1727 V1728)))) -(defun shen.remember-datatype (V1726) (cond ((cons? V1726) (do (set shen.*datatypes* (adjoin (hd V1726) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1726) (value shen.*alldatatypes*))) (hd V1726)))) (true (shen.sys-error shen.remember-datatype)))) +(defun shen.remember-datatype (V1733) (cond ((cons? V1733) (do (set shen.*datatypes* (adjoin (hd V1733) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1733) (value shen.*alldatatypes*))) (hd V1733)))) (true (shen.sys-error shen.remember-datatype)))) -(defun shen.rules->horn-clauses (V1729 V1730) (cond ((= () V1730) ()) ((and (cons? V1730) (and (tuple? (hd V1730)) (= shen.single (fst (hd V1730))))) (cons (shen.rule->horn-clause V1729 (snd (hd V1730))) (shen.rules->horn-clauses V1729 (tl V1730)))) ((and (cons? V1730) (and (tuple? (hd V1730)) (= shen.double (fst (hd V1730))))) (shen.rules->horn-clauses V1729 (append (shen.double->singles (snd (hd V1730))) (tl V1730)))) (true (shen.sys-error shen.rules->horn-clauses)))) +(defun shen.rules->horn-clauses (V1736 V1737) (cond ((= () V1737) ()) ((and (cons? V1737) (and (tuple? (hd V1737)) (= shen.single (fst (hd V1737))))) (cons (shen.rule->horn-clause V1736 (snd (hd V1737))) (shen.rules->horn-clauses V1736 (tl V1737)))) ((and (cons? V1737) (and (tuple? (hd V1737)) (= shen.double (fst (hd V1737))))) (shen.rules->horn-clauses V1736 (append (shen.double->singles (snd (hd V1737))) (tl V1737)))) (true (shen.sys-error shen.rules->horn-clauses)))) -(defun shen.double->singles (V1731) (cons (shen.right-rule V1731) (cons (shen.left-rule V1731) ()))) +(defun shen.double->singles (V1738) (cons (shen.right-rule V1738) (cons (shen.left-rule V1738) ()))) -(defun shen.right-rule (V1732) (@p shen.single V1732)) +(defun shen.right-rule (V1739) (@p shen.single V1739)) -(defun shen.left-rule (V1733) (cond ((and (cons? V1733) (and (cons? (tl V1733)) (and (cons? (tl (tl V1733))) (and (tuple? (hd (tl (tl V1733)))) (and (= () (fst (hd (tl (tl V1733))))) (= () (tl (tl (tl V1733))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1733)))) ()) Q) (let NewPremises (cons (@p (map shen.right->left (hd (tl V1733))) Q) ()) (@p shen.single (cons (hd V1733) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) +(defun shen.left-rule (V1740) (cond ((and (cons? V1740) (and (cons? (tl V1740)) (and (cons? (tl (tl V1740))) (and (tuple? (hd (tl (tl V1740)))) (and (= () (fst (hd (tl (tl V1740))))) (= () (tl (tl (tl V1740))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1740)))) ()) Q) (let NewPremises (cons (@p (map shen.right->left (hd (tl V1740))) Q) ()) (@p shen.single (cons (hd V1740) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) -(defun shen.right->left (V1738) (cond ((and (tuple? V1738) (= () (fst V1738))) (snd V1738)) (true (simple-error "syntax error with ========== +(defun shen.right->left (V1745) (cond ((and (tuple? V1745) (= () (fst V1745))) (snd V1745)) (true (simple-error "syntax error with ========== ")))) -(defun shen.rule->horn-clause (V1739 V1740) (cond ((and (cons? V1740) (and (cons? (tl V1740)) (and (cons? (tl (tl V1740))) (and (tuple? (hd (tl (tl V1740)))) (= () (tl (tl (tl V1740)))))))) (cons (shen.rule->horn-clause-head V1739 (snd (hd (tl (tl V1740))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1740) (hd (tl V1740)) (fst (hd (tl (tl V1740))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) +(defun shen.rule->horn-clause (V1746 V1747) (cond ((and (cons? V1747) (and (cons? (tl V1747)) (and (cons? (tl (tl V1747))) (and (tuple? (hd (tl (tl V1747)))) (= () (tl (tl (tl V1747)))))))) (cons (shen.rule->horn-clause-head V1746 (snd (hd (tl (tl V1747))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1747) (hd (tl V1747)) (fst (hd (tl (tl V1747))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) -(defun shen.rule->horn-clause-head (V1741 V1742) (cons V1741 (cons (shen.mode-ify V1742) (cons Context_1957 ())))) +(defun shen.rule->horn-clause-head (V1748 V1749) (cons V1748 (cons (shen.mode-ify V1749) (cons Context_1957 ())))) -(defun shen.mode-ify (V1743) (cond ((and (cons? V1743) (and (cons? (tl V1743)) (and (= : (hd (tl V1743))) (and (cons? (tl (tl V1743))) (= () (tl (tl (tl V1743)))))))) (cons mode (cons (cons (hd V1743) (cons : (cons (cons mode (cons (hd (tl (tl V1743))) (cons + ()))) ()))) (cons - ())))) (true V1743))) +(defun shen.mode-ify (V1750) (cond ((and (cons? V1750) (and (cons? (tl V1750)) (and (= : (hd (tl V1750))) (and (cons? (tl (tl V1750))) (= () (tl (tl (tl V1750)))))))) (cons mode (cons (cons (hd V1750) (cons : (cons (cons mode (cons (hd (tl (tl V1750))) (cons + ()))) ()))) (cons - ())))) (true V1750))) -(defun shen.rule->horn-clause-body (V1744 V1745 V1746) (let Variables (map shen.extract_vars V1746) (let Predicates (map (lambda X (gensym shen.cl)) V1746) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1746 Variables) (let SideLiterals (shen.construct-side-literals V1744) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1746))) V1745) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) +(defun shen.rule->horn-clause-body (V1751 V1752 V1753) (let Variables (map shen.extract_vars V1753) (let Predicates (map (lambda X (gensym shen.cl)) V1753) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1753 Variables) (let SideLiterals (shen.construct-side-literals V1751) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1753))) V1752) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) -(defun shen.construct-search-literals (V1751 V1752 V1753 V1754) (cond ((and (= () V1751) (= () V1752)) ()) (true (shen.csl-help V1751 V1752 V1753 V1754)))) +(defun shen.construct-search-literals (V1758 V1759 V1760 V1761) (cond ((and (= () V1758) (= () V1759)) ()) (true (shen.csl-help V1758 V1759 V1760 V1761)))) -(defun shen.csl-help (V1757 V1758 V1759 V1760) (cond ((and (= () V1757) (= () V1758)) (cons (cons bind (cons ContextOut_1957 (cons V1759 ()))) ())) ((and (cons? V1757) (cons? V1758)) (cons (cons (hd V1757) (cons V1759 (cons V1760 (hd V1758)))) (shen.csl-help (tl V1757) (tl V1758) V1760 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) +(defun shen.csl-help (V1764 V1765 V1766 V1767) (cond ((and (= () V1764) (= () V1765)) (cons (cons bind (cons ContextOut_1957 (cons V1766 ()))) ())) ((and (cons? V1764) (cons? V1765)) (cons (cons (hd V1764) (cons V1766 (cons V1767 (hd V1765)))) (shen.csl-help (tl V1764) (tl V1765) V1767 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) -(defun shen.construct-search-clauses (V1761 V1762 V1763) (cond ((and (= () V1761) (and (= () V1762) (= () V1763))) shen.skip) ((and (cons? V1761) (and (cons? V1762) (cons? V1763))) (do (shen.construct-search-clause (hd V1761) (hd V1762) (hd V1763)) (shen.construct-search-clauses (tl V1761) (tl V1762) (tl V1763)))) (true (shen.sys-error shen.construct-search-clauses)))) +(defun shen.construct-search-clauses (V1768 V1769 V1770) (cond ((and (= () V1768) (and (= () V1769) (= () V1770))) shen.skip) ((and (cons? V1768) (and (cons? V1769) (cons? V1770))) (do (shen.construct-search-clause (hd V1768) (hd V1769) (hd V1770)) (shen.construct-search-clauses (tl V1768) (tl V1769) (tl V1770)))) (true (shen.sys-error shen.construct-search-clauses)))) -(defun shen.construct-search-clause (V1764 V1765 V1766) (shen.s-prolog (cons (shen.construct-base-search-clause V1764 V1765 V1766) (cons (shen.construct-recursive-search-clause V1764 V1765 V1766) ())))) +(defun shen.construct-search-clause (V1771 V1772 V1773) (shen.s-prolog (cons (shen.construct-base-search-clause V1771 V1772 V1773) (cons (shen.construct-recursive-search-clause V1771 V1772 V1773) ())))) -(defun shen.construct-base-search-clause (V1767 V1768 V1769) (cons (cons V1767 (cons (cons (shen.mode-ify V1768) In_1957) (cons In_1957 V1769))) (cons :- (cons () ())))) +(defun shen.construct-base-search-clause (V1774 V1775 V1776) (cons (cons V1774 (cons (cons (shen.mode-ify V1775) In_1957) (cons In_1957 V1776))) (cons :- (cons () ())))) -(defun shen.construct-recursive-search-clause (V1770 V1771 V1772) (cons (cons V1770 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1772))) (cons :- (cons (cons (cons V1770 (cons Assumptions_1957 (cons Out_1957 V1772))) ()) ())))) +(defun shen.construct-recursive-search-clause (V1777 V1778 V1779) (cons (cons V1777 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1779))) (cons :- (cons (cons (cons V1777 (cons Assumptions_1957 (cons Out_1957 V1779))) ()) ())))) -(defun shen.construct-side-literals (V1777) (cond ((= () V1777) ()) ((and (cons? V1777) (and (cons? (hd V1777)) (and (= if (hd (hd V1777))) (and (cons? (tl (hd V1777))) (= () (tl (tl (hd V1777)))))))) (cons (cons when (tl (hd V1777))) (shen.construct-side-literals (tl V1777)))) ((and (cons? V1777) (and (cons? (hd V1777)) (and (= let (hd (hd V1777))) (and (cons? (tl (hd V1777))) (and (cons? (tl (tl (hd V1777)))) (= () (tl (tl (tl (hd V1777)))))))))) (cons (cons is (tl (hd V1777))) (shen.construct-side-literals (tl V1777)))) ((cons? V1777) (shen.construct-side-literals (tl V1777))) (true (shen.sys-error shen.construct-side-literals)))) +(defun shen.construct-side-literals (V1784) (cond ((= () V1784) ()) ((and (cons? V1784) (and (cons? (hd V1784)) (and (= if (hd (hd V1784))) (and (cons? (tl (hd V1784))) (= () (tl (tl (hd V1784)))))))) (cons (cons when (tl (hd V1784))) (shen.construct-side-literals (tl V1784)))) ((and (cons? V1784) (and (cons? (hd V1784)) (and (= let (hd (hd V1784))) (and (cons? (tl (hd V1784))) (and (cons? (tl (tl (hd V1784)))) (= () (tl (tl (tl (hd V1784)))))))))) (cons (cons is (tl (hd V1784))) (shen.construct-side-literals (tl V1784)))) ((cons? V1784) (shen.construct-side-literals (tl V1784))) (true (shen.sys-error shen.construct-side-literals)))) -(defun shen.construct-premiss-literal (V1782 V1783) (cond ((tuple? V1782) (cons shen.t* (cons (shen.recursive_cons_form (snd V1782)) (cons (shen.construct-context V1783 (fst V1782)) ())))) ((= ! V1782) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) +(defun shen.construct-premiss-literal (V1789 V1790) (cond ((tuple? V1789) (cons shen.t* (cons (shen.recursive_cons_form (snd V1789)) (cons (shen.construct-context V1790 (fst V1789)) ())))) ((= ! V1789) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) -(defun shen.construct-context (V1784 V1785) (cond ((and (= true V1784) (= () V1785)) Context_1957) ((and (= false V1784) (= () V1785)) ContextOut_1957) ((cons? V1785) (cons cons (cons (shen.recursive_cons_form (hd V1785)) (cons (shen.construct-context V1784 (tl V1785)) ())))) (true (shen.sys-error shen.construct-context)))) +(defun shen.construct-context (V1791 V1792) (cond ((and (= true V1791) (= () V1792)) Context_1957) ((and (= false V1791) (= () V1792)) ContextOut_1957) ((cons? V1792) (cons cons (cons (shen.recursive_cons_form (hd V1792)) (cons (shen.construct-context V1791 (tl V1792)) ())))) (true (shen.sys-error shen.construct-context)))) -(defun shen.recursive_cons_form (V1786) (cond ((cons? V1786) (cons cons (cons (shen.recursive_cons_form (hd V1786)) (cons (shen.recursive_cons_form (tl V1786)) ())))) (true V1786))) +(defun shen.recursive_cons_form (V1793) (cond ((cons? V1793) (cons cons (cons (shen.recursive_cons_form (hd V1793)) (cons (shen.recursive_cons_form (tl V1793)) ())))) (true V1793))) -(defun preclude (V1787) (shen.preclude-h (map shen.intern-type V1787))) +(defun preclude (V1794) (shen.preclude-h (map shen.intern-type V1794))) -(defun shen.preclude-h (V1788) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1788)) (value shen.*datatypes*))) +(defun shen.preclude-h (V1795) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1795)) (value shen.*datatypes*))) -(defun include (V1789) (shen.include-h (map shen.intern-type V1789))) +(defun include (V1796) (shen.include-h (map shen.intern-type V1796))) -(defun shen.include-h (V1790) (let ValidTypes (intersection V1790 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) +(defun shen.include-h (V1797) (let ValidTypes (intersection V1797 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) -(defun preclude-all-but (V1791) (shen.preclude-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1791)))) +(defun preclude-all-but (V1798) (shen.preclude-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1798)))) -(defun include-all-but (V1792) (shen.include-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1792)))) +(defun include-all-but (V1799) (shen.include-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1799)))) -(defun shen.synonyms-help (V1797) (cond ((= () V1797) synonyms) ((and (cons? V1797) (cons? (tl V1797))) (do (shen.pushnew (cons (hd V1797) (shen.curry-type (hd (tl V1797)))) shen.*synonyms*) (shen.synonyms-help (tl (tl V1797))))) (true (simple-error (cn "odd number of synonyms +(defun shen.synonyms-help (V1804) (cond ((= () V1804) synonyms) ((and (cons? V1804) (cons? (tl V1804))) (do (shen.pushnew (cons (hd V1804) (shen.curry-type (hd (tl V1804)))) shen.*synonyms*) (shen.synonyms-help (tl (tl V1804))))) (true (simple-error (cn "odd number of synonyms " ""))))) -(defun shen.pushnew (V1798 V1799) (if (element? V1798 (value V1799)) (value V1799) (set V1799 (cons V1798 (value V1799))))) +(defun shen.pushnew (V1805 V1806) (if (element? V1805 (value V1806)) (value V1806) (set V1806 (cons V1805 (value V1806))))) diff --git a/shen/klambda/sys.kl b/shen/klambda/sys.kl index 7171f6c..ab6e37f 100644 --- a/shen/klambda/sys.kl +++ b/shen/klambda/sys.kl @@ -47,210 +47,210 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun thaw (V1802) (V1802)) +"(defun thaw (V1809) (V1809)) -(defun eval (V1803) (let Macroexpand (shen.walk (lambda V1800 (macroexpand V1800)) V1803) (if (shen.packaged? Macroexpand) (map shen.eval-without-macros (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) +(defun eval (V1810) (let Macroexpand (shen.walk (lambda V1807 (macroexpand V1807)) V1810) (if (shen.packaged? Macroexpand) (map shen.eval-without-macros (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) -(defun shen.eval-without-macros (V1804) (eval-kl (shen.elim-def (shen.proc-input+ V1804)))) +(defun shen.eval-without-macros (V1811) (eval-kl (shen.elim-def (shen.proc-input+ V1811)))) -(defun shen.proc-input+ (V1805) (cond ((and (cons? V1805) (and (= input+ (hd V1805)) (and (cons? (tl V1805)) (and (cons? (tl (tl V1805))) (= () (tl (tl (tl V1805)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1805))) (tl (tl V1805))))) ((and (cons? V1805) (and (= read+ (hd V1805)) (and (cons? (tl V1805)) (and (cons? (tl (tl V1805))) (= () (tl (tl (tl V1805)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1805))) (tl (tl V1805))))) ((cons? V1805) (map shen.proc-input+ V1805)) (true V1805))) +(defun shen.proc-input+ (V1812) (cond ((and (cons? V1812) (and (= input+ (hd V1812)) (and (cons? (tl V1812)) (and (cons? (tl (tl V1812))) (= () (tl (tl (tl V1812)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1812))) (tl (tl V1812))))) ((and (cons? V1812) (and (= read+ (hd V1812)) (and (cons? (tl V1812)) (and (cons? (tl (tl V1812))) (= () (tl (tl (tl V1812)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1812))) (tl (tl V1812))))) ((cons? V1812) (map shen.proc-input+ V1812)) (true V1812))) -(defun shen.elim-def (V1806) (cond ((and (cons? V1806) (and (= define (hd V1806)) (cons? (tl V1806)))) (shen.shen->kl (hd (tl V1806)) (tl (tl V1806)))) ((and (cons? V1806) (and (= defmacro (hd V1806)) (cons? (tl V1806)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1806)) (append (tl (tl V1806)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1806))) Def)))) ((and (cons? V1806) (and (= defcc (hd V1806)) (cons? (tl V1806)))) (shen.elim-def (shen.yacc V1806))) ((cons? V1806) (map shen.elim-def V1806)) (true V1806))) +(defun shen.elim-def (V1813) (cond ((and (cons? V1813) (and (= define (hd V1813)) (cons? (tl V1813)))) (shen.shen->kl (hd (tl V1813)) (tl (tl V1813)))) ((and (cons? V1813) (and (= defmacro (hd V1813)) (cons? (tl V1813)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1813)) (append (tl (tl V1813)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1813))) Def)))) ((and (cons? V1813) (and (= defcc (hd V1813)) (cons? (tl V1813)))) (shen.elim-def (shen.yacc V1813))) ((cons? V1813) (map shen.elim-def V1813)) (true V1813))) -(defun shen.add-macro (V1807) (set *macros* (adjoin V1807 (value *macros*)))) +(defun shen.add-macro (V1814) (set *macros* (adjoin V1814 (value *macros*)))) -(defun shen.packaged? (V1814) (cond ((and (cons? V1814) (and (= package (hd V1814)) (and (cons? (tl V1814)) (cons? (tl (tl V1814)))))) true) (true false))) +(defun shen.packaged? (V1821) (cond ((and (cons? V1821) (and (= package (hd V1821)) (and (cons? (tl V1821)) (cons? (tl (tl V1821)))))) true) (true false))) -(defun external (V1815) (trap-error (get V1815 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1815 " has not been used. +(defun external (V1822) (trap-error (get V1822 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1822 " has not been used. " shen.a)))))) -(defun shen.package-contents (V1818) (cond ((and (cons? V1818) (and (= package (hd V1818)) (and (cons? (tl V1818)) (and (= null (hd (tl V1818))) (cons? (tl (tl V1818))))))) (tl (tl (tl V1818)))) ((and (cons? V1818) (and (= package (hd V1818)) (and (cons? (tl V1818)) (cons? (tl (tl V1818)))))) (shen.packageh (hd (tl V1818)) (hd (tl (tl V1818))) (tl (tl (tl V1818))))) (true (shen.sys-error shen.package-contents)))) +(defun shen.package-contents (V1825) (cond ((and (cons? V1825) (and (= package (hd V1825)) (and (cons? (tl V1825)) (and (= null (hd (tl V1825))) (cons? (tl (tl V1825))))))) (tl (tl (tl V1825)))) ((and (cons? V1825) (and (= package (hd V1825)) (and (cons? (tl V1825)) (cons? (tl (tl V1825)))))) (shen.packageh (hd (tl V1825)) (hd (tl (tl V1825))) (tl (tl (tl V1825))))) (true (shen.sys-error shen.package-contents)))) -(defun shen.walk (V1819 V1820) (cond ((cons? V1820) (V1819 (map (lambda Z (shen.walk V1819 Z)) V1820))) (true (V1819 V1820)))) +(defun shen.walk (V1826 V1827) (cond ((cons? V1827) (V1826 (map (lambda Z (shen.walk V1826 Z)) V1827))) (true (V1826 V1827)))) -(defun compile (V1821 V1822 V1823) (let O (V1821 (cons V1822 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1823 O) (shen.hdtl O)))) +(defun compile (V1828 V1829 V1830) (let O (V1828 (cons V1829 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1830 O) (shen.hdtl O)))) -(defun fail-if (V1824 V1825) (if (V1824 V1825) (fail) V1825)) +(defun fail-if (V1831 V1832) (if (V1831 V1832) (fail) V1832)) -(defun @s (V1826 V1827) (cn V1826 V1827)) +(defun @s (V1833 V1834) (cn V1833 V1834)) (defun tc? () (value shen.*tc*)) -(defun ps (V1828) (trap-error (get V1828 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1828 " not found. +(defun ps (V1835) (trap-error (get V1835 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1835 " not found. " shen.a))))) (defun stinput () (value *stinput*)) -(defun shen.+vector? (V1829) (and (absvector? V1829) (> (<-address V1829 0) 0))) +(defun shen.+vector? (V1836) (and (absvector? V1836) (> (<-address V1836 0) 0))) -(defun vector (V1830) (let Vector (absvector (+ V1830 1)) (let ZeroStamp (address-> Vector 0 V1830) (let Standard (if (= V1830 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1830 (fail))) Standard)))) +(defun vector (V1837) (let Vector (absvector (+ V1837 1)) (let ZeroStamp (address-> Vector 0 V1837) (let Standard (if (= V1837 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1837 (fail))) Standard)))) -(defun shen.fillvector (V1831 V1832 V1833 V1834) (cond ((= V1833 V1832) (address-> V1831 V1833 V1834)) (true (shen.fillvector (address-> V1831 V1832 V1834) (+ 1 V1832) V1833 V1834)))) +(defun shen.fillvector (V1838 V1839 V1840 V1841) (cond ((= V1840 V1839) (address-> V1838 V1840 V1841)) (true (shen.fillvector (address-> V1838 V1839 V1841) (+ 1 V1839) V1840 V1841)))) -(defun vector? (V1836) (and (absvector? V1836) (trap-error (>= (<-address V1836 0) 0) (lambda E false)))) +(defun vector? (V1843) (and (absvector? V1843) (trap-error (>= (<-address V1843 0) 0) (lambda E false)))) -(defun vector-> (V1837 V1838 V1839) (if (= V1838 0) (simple-error "cannot access 0th element of a vector -") (address-> V1837 V1838 V1839))) +(defun vector-> (V1844 V1845 V1846) (if (= V1845 0) (simple-error "cannot access 0th element of a vector +") (address-> V1844 V1845 V1846))) -(defun <-vector (V1840 V1841) (if (= V1841 0) (simple-error "cannot access 0th element of a vector -") (let VectorElement (<-address V1840 V1841) (if (= VectorElement (fail)) (simple-error "vector element not found +(defun <-vector (V1847 V1848) (if (= V1848 0) (simple-error "cannot access 0th element of a vector +") (let VectorElement (<-address V1847 V1848) (if (= VectorElement (fail)) (simple-error "vector element not found ") VectorElement)))) -(defun shen.posint? (V1842) (and (integer? V1842) (>= V1842 0))) +(defun shen.posint? (V1849) (and (integer? V1849) (>= V1849 0))) -(defun limit (V1843) (<-address V1843 0)) +(defun limit (V1850) (<-address V1850 0)) -(defun symbol? (V1844) (cond ((or (boolean? V1844) (or (number? V1844) (string? V1844))) false) (true (trap-error (let String (str V1844) (shen.analyse-symbol? String)) (lambda E false))))) +(defun symbol? (V1851) (cond ((or (boolean? V1851) (or (number? V1851) (string? V1851))) false) (true (trap-error (let String (str V1851) (shen.analyse-symbol? String)) (lambda E false))))) -(defun shen.analyse-symbol? (V1845) (cond ((shen.+string? V1845) (and (shen.alpha? (pos V1845 0)) (shen.alphanums? (tlstr V1845)))) (true (shen.sys-error shen.analyse-symbol?)))) +(defun shen.analyse-symbol? (V1852) (cond ((shen.+string? V1852) (and (shen.alpha? (pos V1852 0)) (shen.alphanums? (tlstr V1852)))) (true (shen.sys-error shen.analyse-symbol?)))) -(defun shen.alpha? (V1846) (element? V1846 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(defun shen.alpha? (V1853) (element? V1853 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -(defun shen.alphanums? (V1847) (cond ((= "" V1847) true) ((shen.+string? V1847) (and (shen.alphanum? (pos V1847 0)) (shen.alphanums? (tlstr V1847)))) (true (shen.sys-error shen.alphanums?)))) +(defun shen.alphanums? (V1854) (cond ((= "" V1854) true) ((shen.+string? V1854) (and (shen.alphanum? (pos V1854 0)) (shen.alphanums? (tlstr V1854)))) (true (shen.sys-error shen.alphanums?)))) -(defun shen.alphanum? (V1848) (or (shen.alpha? V1848) (shen.digit? V1848))) +(defun shen.alphanum? (V1855) (or (shen.alpha? V1855) (shen.digit? V1855))) -(defun shen.digit? (V1849) (element? V1849 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) +(defun shen.digit? (V1856) (element? V1856 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) -(defun variable? (V1850) (cond ((or (boolean? V1850) (or (number? V1850) (string? V1850))) false) (true (trap-error (let String (str V1850) (shen.analyse-variable? String)) (lambda E false))))) +(defun variable? (V1857) (cond ((or (boolean? V1857) (or (number? V1857) (string? V1857))) false) (true (trap-error (let String (str V1857) (shen.analyse-variable? String)) (lambda E false))))) -(defun shen.analyse-variable? (V1851) (cond ((shen.+string? V1851) (and (shen.uppercase? (pos V1851 0)) (shen.alphanums? (tlstr V1851)))) (true (shen.sys-error shen.analyse-variable?)))) +(defun shen.analyse-variable? (V1858) (cond ((shen.+string? V1858) (and (shen.uppercase? (pos V1858 0)) (shen.alphanums? (tlstr V1858)))) (true (shen.sys-error shen.analyse-variable?)))) -(defun shen.uppercase? (V1852) (element? V1852 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) +(defun shen.uppercase? (V1859) (element? V1859 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) -(defun gensym (V1853) (concat V1853 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) +(defun gensym (V1860) (concat V1860 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) -(defun concat (V1854 V1855) (intern (cn (str V1854) (str V1855)))) +(defun concat (V1861 V1862) (intern (cn (str V1861) (str V1862)))) -(defun @p (V1856 V1857) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1856) (let Snd (address-> Vector 2 V1857) Vector))))) +(defun @p (V1863 V1864) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1863) (let Snd (address-> Vector 2 V1864) Vector))))) -(defun fst (V1858) (<-address V1858 1)) +(defun fst (V1865) (<-address V1865 1)) -(defun snd (V1859) (<-address V1859 2)) +(defun snd (V1866) (<-address V1866 2)) -(defun tuple? (V1860) (trap-error (and (absvector? V1860) (= shen.tuple (<-address V1860 0))) (lambda E false))) +(defun tuple? (V1867) (trap-error (and (absvector? V1867) (= shen.tuple (<-address V1867 0))) (lambda E false))) -(defun append (V1861 V1862) (cond ((= () V1861) V1862) ((cons? V1861) (cons (hd V1861) (append (tl V1861) V1862))) (true (shen.sys-error append)))) +(defun append (V1868 V1869) (cond ((= () V1868) V1869) ((cons? V1868) (cons (hd V1868) (append (tl V1868) V1869))) (true (shen.sys-error append)))) -(defun @v (V1863 V1864) (let Limit (limit V1864) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1863) (if (= Limit 0) X+NewVector (shen.@v-help V1864 1 Limit X+NewVector)))))) +(defun @v (V1870 V1871) (let Limit (limit V1871) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1870) (if (= Limit 0) X+NewVector (shen.@v-help V1871 1 Limit X+NewVector)))))) -(defun shen.@v-help (V1865 V1866 V1867 V1868) (cond ((= V1867 V1866) (shen.copyfromvector V1865 V1868 V1867 (+ V1867 1))) (true (shen.@v-help V1865 (+ V1866 1) V1867 (shen.copyfromvector V1865 V1868 V1866 (+ V1866 1)))))) +(defun shen.@v-help (V1872 V1873 V1874 V1875) (cond ((= V1874 V1873) (shen.copyfromvector V1872 V1875 V1874 (+ V1874 1))) (true (shen.@v-help V1872 (+ V1873 1) V1874 (shen.copyfromvector V1872 V1875 V1873 (+ V1873 1)))))) -(defun shen.copyfromvector (V1870 V1871 V1872 V1873) (trap-error (vector-> V1871 V1873 (<-vector V1870 V1872)) (lambda E V1871))) +(defun shen.copyfromvector (V1877 V1878 V1879 V1880) (trap-error (vector-> V1878 V1880 (<-vector V1877 V1879)) (lambda E V1878))) -(defun hdv (V1874) (trap-error (<-vector V1874 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1874 " +(defun hdv (V1881) (trap-error (<-vector V1881 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1881 " " shen.s)))))) -(defun tlv (V1875) (let Limit (limit V1875) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector -") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1875 2 Limit (vector (- Limit 1)))))))) +(defun tlv (V1882) (let Limit (limit V1882) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector +") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1882 2 Limit (vector (- Limit 1)))))))) -(defun shen.tlv-help (V1876 V1877 V1878 V1879) (cond ((= V1878 V1877) (shen.copyfromvector V1876 V1879 V1878 (- V1878 1))) (true (shen.tlv-help V1876 (+ V1877 1) V1878 (shen.copyfromvector V1876 V1879 V1877 (- V1877 1)))))) +(defun shen.tlv-help (V1883 V1884 V1885 V1886) (cond ((= V1885 V1884) (shen.copyfromvector V1883 V1886 V1885 (- V1885 1))) (true (shen.tlv-help V1883 (+ V1884 1) V1885 (shen.copyfromvector V1883 V1886 V1884 (- V1884 1)))))) -(defun assoc (V1889 V1890) (cond ((= () V1890) ()) ((and (cons? V1890) (and (cons? (hd V1890)) (= (hd (hd V1890)) V1889))) (hd V1890)) ((cons? V1890) (assoc V1889 (tl V1890))) (true (shen.sys-error assoc)))) +(defun assoc (V1896 V1897) (cond ((= () V1897) ()) ((and (cons? V1897) (and (cons? (hd V1897)) (= (hd (hd V1897)) V1896))) (hd V1897)) ((cons? V1897) (assoc V1896 (tl V1897))) (true (shen.sys-error assoc)))) -(defun boolean? (V1896) (cond ((= true V1896) true) ((= false V1896) true) (true false))) +(defun boolean? (V1903) (cond ((= true V1903) true) ((= false V1903) true) (true false))) -(defun nl (V1897) (cond ((= 0 V1897) 0) (true (do (shen.prhush " -" (stoutput)) (nl (- V1897 1)))))) +(defun nl (V1904) (cond ((= 0 V1904) 0) (true (do (shen.prhush " +" (stoutput)) (nl (- V1904 1)))))) -(defun difference (V1900 V1901) (cond ((= () V1900) ()) ((cons? V1900) (if (element? (hd V1900) V1901) (difference (tl V1900) V1901) (cons (hd V1900) (difference (tl V1900) V1901)))) (true (shen.sys-error difference)))) +(defun difference (V1907 V1908) (cond ((= () V1907) ()) ((cons? V1907) (if (element? (hd V1907) V1908) (difference (tl V1907) V1908) (cons (hd V1907) (difference (tl V1907) V1908)))) (true (shen.sys-error difference)))) -(defun do (V1902 V1903) V1903) +(defun do (V1909 V1910) V1910) -(defun element? (V1912 V1913) (cond ((= () V1913) false) ((and (cons? V1913) (= (hd V1913) V1912)) true) ((cons? V1913) (element? V1912 (tl V1913))) (true (shen.sys-error element?)))) +(defun element? (V1919 V1920) (cond ((= () V1920) false) ((and (cons? V1920) (= (hd V1920) V1919)) true) ((cons? V1920) (element? V1919 (tl V1920))) (true (shen.sys-error element?)))) -(defun empty? (V1919) (cond ((= () V1919) true) (true false))) +(defun empty? (V1926) (cond ((= () V1926) true) (true false))) -(defun fix (V1920 V1921) (shen.fix-help V1920 V1921 (V1920 V1921))) +(defun fix (V1927 V1928) (shen.fix-help V1927 V1928 (V1927 V1928))) -(defun shen.fix-help (V1928 V1929 V1930) (cond ((= V1930 V1929) V1930) (true (shen.fix-help V1928 V1930 (V1928 V1930))))) +(defun shen.fix-help (V1935 V1936 V1937) (cond ((= V1937 V1936) V1937) (true (shen.fix-help V1935 V1937 (V1935 V1937))))) -(defun put (V1932 V1933 V1934 V1935) (let N (hash V1932 (limit V1935)) (let Entry (trap-error (<-vector V1935 N) (lambda E ())) (let Change (vector-> V1935 N (shen.change-pointer-value V1932 V1933 V1934 Entry)) V1934)))) +(defun put (V1939 V1940 V1941 V1942) (let N (hash V1939 (limit V1942)) (let Entry (trap-error (<-vector V1942 N) (lambda E ())) (let Change (vector-> V1942 N (shen.change-pointer-value V1939 V1940 V1941 Entry)) V1941)))) -(defun shen.change-pointer-value (V1938 V1939 V1940 V1941) (cond ((= () V1941) (cons (cons (cons V1938 (cons V1939 ())) V1940) ())) ((and (cons? V1941) (and (cons? (hd V1941)) (and (cons? (hd (hd V1941))) (and (cons? (tl (hd (hd V1941)))) (and (= () (tl (tl (hd (hd V1941))))) (and (= (hd (tl (hd (hd V1941)))) V1939) (= (hd (hd (hd V1941))) V1938))))))) (cons (cons (hd (hd V1941)) V1940) (tl V1941))) ((cons? V1941) (cons (hd V1941) (shen.change-pointer-value V1938 V1939 V1940 (tl V1941)))) (true (shen.sys-error shen.change-pointer-value)))) +(defun shen.change-pointer-value (V1945 V1946 V1947 V1948) (cond ((= () V1948) (cons (cons (cons V1945 (cons V1946 ())) V1947) ())) ((and (cons? V1948) (and (cons? (hd V1948)) (and (cons? (hd (hd V1948))) (and (cons? (tl (hd (hd V1948)))) (and (= () (tl (tl (hd (hd V1948))))) (and (= (hd (tl (hd (hd V1948)))) V1946) (= (hd (hd (hd V1948))) V1945))))))) (cons (cons (hd (hd V1948)) V1947) (tl V1948))) ((cons? V1948) (cons (hd V1948) (shen.change-pointer-value V1945 V1946 V1947 (tl V1948)))) (true (shen.sys-error shen.change-pointer-value)))) -(defun get (V1944 V1945 V1946) (let N (hash V1944 (limit V1946)) (let Entry (trap-error (<-vector V1946 N) (lambda E (simple-error "pointer not found -"))) (let Result (assoc (cons V1944 (cons V1945 ())) Entry) (if (empty? Result) (simple-error "value not found +(defun get (V1951 V1952 V1953) (let N (hash V1951 (limit V1953)) (let Entry (trap-error (<-vector V1953 N) (lambda E (simple-error "pointer not found +"))) (let Result (assoc (cons V1951 (cons V1952 ())) Entry) (if (empty? Result) (simple-error "value not found ") (tl Result)))))) -(defun hash (V1947 V1948) (let Hash (shen.mod (shen.sum (map (lambda V1801 (string->n V1801)) (explode V1947))) V1948) (if (= 0 Hash) 1 Hash))) +(defun hash (V1954 V1955) (let Hash (shen.mod (sum (map (lambda V1808 (string->n V1808)) (explode V1954))) V1955) (if (= 0 Hash) 1 Hash))) -(defun shen.mod (V1949 V1950) (shen.modh V1949 (shen.multiples V1949 (cons V1950 ())))) +(defun shen.mod (V1956 V1957) (shen.modh V1956 (shen.multiples V1956 (cons V1957 ())))) -(defun shen.multiples (V1951 V1952) (cond ((and (cons? V1952) (> (hd V1952) V1951)) (tl V1952)) ((cons? V1952) (shen.multiples V1951 (cons (* 2 (hd V1952)) V1952))) (true (shen.sys-error shen.multiples)))) +(defun shen.multiples (V1958 V1959) (cond ((and (cons? V1959) (> (hd V1959) V1958)) (tl V1959)) ((cons? V1959) (shen.multiples V1958 (cons (* 2 (hd V1959)) V1959))) (true (shen.sys-error shen.multiples)))) -(defun shen.modh (V1955 V1956) (cond ((= 0 V1955) 0) ((= () V1956) V1955) ((and (cons? V1956) (> (hd V1956) V1955)) (if (empty? (tl V1956)) V1955 (shen.modh V1955 (tl V1956)))) ((cons? V1956) (shen.modh (- V1955 (hd V1956)) V1956)) (true (shen.sys-error shen.modh)))) +(defun shen.modh (V1962 V1963) (cond ((= 0 V1962) 0) ((= () V1963) V1962) ((and (cons? V1963) (> (hd V1963) V1962)) (if (empty? (tl V1963)) V1962 (shen.modh V1962 (tl V1963)))) ((cons? V1963) (shen.modh (- V1962 (hd V1963)) V1963)) (true (shen.sys-error shen.modh)))) -(defun shen.sum (V1957) (cond ((= () V1957) 0) ((cons? V1957) (+ (hd V1957) (shen.sum (tl V1957)))) (true (shen.sys-error shen.sum)))) +(defun sum (V1964) (cond ((= () V1964) 0) ((cons? V1964) (+ (hd V1964) (sum (tl V1964)))) (true (shen.sys-error sum)))) -(defun head (V1964) (cond ((cons? V1964) (hd V1964)) (true (simple-error "head expects a non-empty list")))) +(defun head (V1971) (cond ((cons? V1971) (hd V1971)) (true (simple-error "head expects a non-empty list")))) -(defun tail (V1971) (cond ((cons? V1971) (tl V1971)) (true (simple-error "tail expects a non-empty list")))) +(defun tail (V1978) (cond ((cons? V1978) (tl V1978)) (true (simple-error "tail expects a non-empty list")))) -(defun hdstr (V1972) (pos V1972 0)) +(defun hdstr (V1979) (pos V1979 0)) -(defun intersection (V1975 V1976) (cond ((= () V1975) ()) ((cons? V1975) (if (element? (hd V1975) V1976) (cons (hd V1975) (intersection (tl V1975) V1976)) (intersection (tl V1975) V1976))) (true (shen.sys-error intersection)))) +(defun intersection (V1982 V1983) (cond ((= () V1982) ()) ((cons? V1982) (if (element? (hd V1982) V1983) (cons (hd V1982) (intersection (tl V1982) V1983)) (intersection (tl V1982) V1983))) (true (shen.sys-error intersection)))) -(defun reverse (V1977) (shen.reverse_help V1977 ())) +(defun reverse (V1984) (shen.reverse_help V1984 ())) -(defun shen.reverse_help (V1978 V1979) (cond ((= () V1978) V1979) ((cons? V1978) (shen.reverse_help (tl V1978) (cons (hd V1978) V1979))) (true (shen.sys-error shen.reverse_help)))) +(defun shen.reverse_help (V1985 V1986) (cond ((= () V1985) V1986) ((cons? V1985) (shen.reverse_help (tl V1985) (cons (hd V1985) V1986))) (true (shen.sys-error shen.reverse_help)))) -(defun union (V1980 V1981) (cond ((= () V1980) V1981) ((cons? V1980) (if (element? (hd V1980) V1981) (union (tl V1980) V1981) (cons (hd V1980) (union (tl V1980) V1981)))) (true (shen.sys-error union)))) +(defun union (V1987 V1988) (cond ((= () V1987) V1988) ((cons? V1987) (if (element? (hd V1987) V1988) (union (tl V1987) V1988) (cons (hd V1987) (union (tl V1987) V1988)))) (true (shen.sys-error union)))) -(defun y-or-n? (V1982) (let Message (shen.prhush (shen.proc-nl V1982) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n -" (stoutput)) (y-or-n? V1982)))))))) +(defun y-or-n? (V1989) (let Message (shen.prhush (shen.proc-nl V1989) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n +" (stoutput)) (y-or-n? V1989)))))))) -(defun not (V1983) (if V1983 false true)) +(defun not (V1990) (if V1990 false true)) -(defun subst (V1992 V1993 V1994) (cond ((= V1994 V1993) V1992) ((cons? V1994) (cons (subst V1992 V1993 (hd V1994)) (subst V1992 V1993 (tl V1994)))) (true V1994))) +(defun subst (V1999 V2000 V2001) (cond ((= V2001 V2000) V1999) ((cons? V2001) (cons (subst V1999 V2000 (hd V2001)) (subst V1999 V2000 (tl V2001)))) (true V2001))) -(defun explode (V1996) (shen.explode-h (shen.app V1996 "" shen.a))) +(defun explode (V2003) (shen.explode-h (shen.app V2003 "" shen.a))) -(defun shen.explode-h (V1997) (cond ((= "" V1997) ()) ((shen.+string? V1997) (cons (pos V1997 0) (shen.explode-h (tlstr V1997)))) (true (shen.sys-error shen.explode-h)))) +(defun shen.explode-h (V2004) (cond ((= "" V2004) ()) ((shen.+string? V2004) (cons (pos V2004 0) (shen.explode-h (tlstr V2004)))) (true (shen.sys-error shen.explode-h)))) -(defun cd (V1998) (set *home-directory* (if (= V1998 "") "" (shen.app V1998 "/" shen.a)))) +(defun cd (V2005) (set *home-directory* (if (= V2005 "") "" (shen.app V2005 "/" shen.a)))) -(defun map (V1999 V2000) (shen.map-h V1999 V2000 ())) +(defun map (V2006 V2007) (shen.map-h V2006 V2007 ())) -(defun shen.map-h (V2003 V2004 V2005) (cond ((= () V2004) (reverse V2005)) ((cons? V2004) (shen.map-h V2003 (tl V2004) (cons (V2003 (hd V2004)) V2005))) (true (shen.sys-error shen.map-h)))) +(defun shen.map-h (V2010 V2011 V2012) (cond ((= () V2011) (reverse V2012)) ((cons? V2011) (shen.map-h V2010 (tl V2011) (cons (V2010 (hd V2011)) V2012))) (true (shen.sys-error shen.map-h)))) -(defun length (V2006) (shen.length-h V2006 0)) +(defun length (V2013) (shen.length-h V2013 0)) -(defun shen.length-h (V2007 V2008) (cond ((= () V2007) V2008) (true (shen.length-h (tl V2007) (+ V2008 1))))) +(defun shen.length-h (V2014 V2015) (cond ((= () V2014) V2015) (true (shen.length-h (tl V2014) (+ V2015 1))))) -(defun occurrences (V2017 V2018) (cond ((= V2018 V2017) 1) ((cons? V2018) (+ (occurrences V2017 (hd V2018)) (occurrences V2017 (tl V2018)))) (true 0))) +(defun occurrences (V2024 V2025) (cond ((= V2025 V2024) 1) ((cons? V2025) (+ (occurrences V2024 (hd V2025)) (occurrences V2024 (tl V2025)))) (true 0))) -(defun nth (V2026 V2027) (cond ((and (= 1 V2026) (cons? V2027)) (hd V2027)) ((cons? V2027) (nth (- V2026 1) (tl V2027))) (true (shen.sys-error nth)))) +(defun nth (V2033 V2034) (cond ((and (= 1 V2033) (cons? V2034)) (hd V2034)) ((cons? V2034) (nth (- V2033 1) (tl V2034))) (true (shen.sys-error nth)))) -(defun integer? (V2028) (and (number? V2028) (let Abs (shen.abs V2028) (shen.integer-test? Abs (shen.magless Abs 1))))) +(defun integer? (V2035) (and (number? V2035) (let Abs (shen.abs V2035) (shen.integer-test? Abs (shen.magless Abs 1))))) -(defun shen.abs (V2029) (if (> V2029 0) V2029 (- 0 V2029))) +(defun shen.abs (V2036) (if (> V2036 0) V2036 (- 0 V2036))) -(defun shen.magless (V2030 V2031) (let Nx2 (* V2031 2) (if (> Nx2 V2030) V2031 (shen.magless V2030 Nx2)))) +(defun shen.magless (V2037 V2038) (let Nx2 (* V2038 2) (if (> Nx2 V2037) V2038 (shen.magless V2037 Nx2)))) -(defun shen.integer-test? (V2035 V2036) (cond ((= 0 V2035) true) ((> 1 V2035) false) (true (let Abs-N (- V2035 V2036) (if (> 0 Abs-N) (integer? V2035) (shen.integer-test? Abs-N V2036)))))) +(defun shen.integer-test? (V2042 V2043) (cond ((= 0 V2042) true) ((> 1 V2042) false) (true (let Abs-N (- V2042 V2043) (if (> 0 Abs-N) (integer? V2042) (shen.integer-test? Abs-N V2043)))))) -(defun mapcan (V2039 V2040) (cond ((= () V2040) ()) ((cons? V2040) (append (V2039 (hd V2040)) (mapcan V2039 (tl V2040)))) (true (shen.sys-error mapcan)))) +(defun mapcan (V2046 V2047) (cond ((= () V2047) ()) ((cons? V2047) (append (V2046 (hd V2047)) (mapcan V2046 (tl V2047)))) (true (shen.sys-error mapcan)))) -(defun == (V2049 V2050) (cond ((= V2050 V2049) true) (true false))) +(defun == (V2056 V2057) (cond ((= V2057 V2056) true) (true false))) (defun abort () (simple-error "")) -(defun bound? (V2052) (and (symbol? V2052) (let Val (trap-error (value V2052) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) +(defun bound? (V2059) (and (symbol? V2059) (let Val (trap-error (value V2059) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) -(defun shen.string->bytes (V2053) (cond ((= "" V2053) ()) (true (cons (string->n (pos V2053 0)) (shen.string->bytes (tlstr V2053)))))) +(defun shen.string->bytes (V2060) (cond ((= "" V2060) ()) (true (cons (string->n (pos V2060 0)) (shen.string->bytes (tlstr V2060)))))) -(defun maxinferences (V2054) (set shen.*maxinferences* V2054)) +(defun maxinferences (V2061) (set shen.*maxinferences* V2061)) (defun inferences () (value shen.*infs*)) -(defun protect (V2055) V2055) +(defun protect (V2062) V2062) (defun stoutput () (value *stoutput*)) -(defun string->symbol (V2056) (let Symbol (intern V2056) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2056 " to a symbol" shen.s)))))) +(defun string->symbol (V2063) (let Symbol (intern V2063) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2063 " to a symbol" shen.s)))))) -(defun shen.optimise (V2061) (cond ((= + V2061) (set shen.*optimise* true)) ((= - V2061) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. +(defun shen.optimise (V2068) (cond ((= + V2068) (set shen.*optimise* true)) ((= - V2068) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. ")))) (defun os () (value *os*)) diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index cc1090b..4641ca6 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,117 +47,117 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2821 V2822) (let Curry (shen.curry V2821) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2822)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2831 V2832) (let Curry (shen.curry V2831) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2832)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2823) (cond ((and (cons? V2823) (shen.special? (hd V2823))) (cons (hd V2823) (map shen.curry (tl V2823)))) ((and (cons? V2823) (and (cons? (tl V2823)) (shen.extraspecial? (hd V2823)))) V2823) ((and (cons? V2823) (and (= type (hd V2823)) (and (cons? (tl V2823)) (and (cons? (tl (tl V2823))) (= () (tl (tl (tl V2823)))))))) (cons type (cons (shen.curry (hd (tl V2823))) (tl (tl V2823))))) ((and (cons? V2823) (and (cons? (tl V2823)) (cons? (tl (tl V2823))))) (shen.curry (cons (cons (hd V2823) (cons (hd (tl V2823)) ())) (tl (tl V2823))))) ((and (cons? V2823) (and (cons? (tl V2823)) (= () (tl (tl V2823))))) (cons (shen.curry (hd V2823)) (cons (shen.curry (hd (tl V2823))) ()))) (true V2823))) +(defun shen.curry (V2833) (cond ((and (cons? V2833) (shen.special? (hd V2833))) (cons (hd V2833) (map shen.curry (tl V2833)))) ((and (cons? V2833) (and (cons? (tl V2833)) (shen.extraspecial? (hd V2833)))) V2833) ((and (cons? V2833) (and (= type (hd V2833)) (and (cons? (tl V2833)) (and (cons? (tl (tl V2833))) (= () (tl (tl (tl V2833)))))))) (cons type (cons (shen.curry (hd (tl V2833))) (tl (tl V2833))))) ((and (cons? V2833) (and (cons? (tl V2833)) (cons? (tl (tl V2833))))) (shen.curry (cons (cons (hd V2833) (cons (hd (tl V2833)) ())) (tl (tl V2833))))) ((and (cons? V2833) (and (cons? (tl V2833)) (= () (tl (tl V2833))))) (cons (shen.curry (hd V2833)) (cons (shen.curry (hd (tl V2833))) ()))) (true V2833))) -(defun shen.special? (V2824) (element? V2824 (value shen.*special*))) +(defun shen.special? (V2834) (element? V2834 (value shen.*special*))) -(defun shen.extraspecial? (V2825) (element? V2825 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2835) (element? V2835 (value shen.*extraspecial*))) -(defun shen.t* (V2826 V2827 V2828 V2829) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2828) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2828 (freeze (bind Error (shen.errormaxinfs) V2828 V2829))))) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2826 V2828) (if (= fail V2815) (do (shen.incinfs) (cut Throwcontrol V2828 (freeze (shen.prolog-failure V2828 V2829)))) false)) (if (= Case false) (let Case (let V2816 (shen.lazyderef V2826 V2828) (if (cons? V2816) (let X (hd V2816) (let V2817 (shen.lazyderef (tl V2816) V2828) (if (cons? V2817) (let V2818 (shen.lazyderef (hd V2817) V2828) (if (= : V2818) (let V2819 (shen.lazyderef (tl V2817) V2828) (if (cons? V2819) (let A (hd V2819) (let V2820 (shen.lazyderef (tl V2819) V2828) (if (= () V2820) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2828 (freeze (cut Throwcontrol V2828 (freeze (shen.th* X A V2827 V2828 V2829)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2828) (do (shen.incinfs) (shen.show V2826 V2827 V2828 (freeze (bind Datatypes (value shen.*datatypes*) V2828 (freeze (shen.udefs* V2826 V2827 Datatypes V2828 V2829))))))) Case)) Case)) Case))))) +(defun shen.t* (V2836 V2837 V2838 V2839) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2838) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2838 (freeze (bind Error (shen.errormaxinfs) V2838 V2839))))) (if (= Case false) (let Case (let V2825 (shen.lazyderef V2836 V2838) (if (= fail V2825) (do (shen.incinfs) (cut Throwcontrol V2838 (freeze (shen.prolog-failure V2838 V2839)))) false)) (if (= Case false) (let Case (let V2826 (shen.lazyderef V2836 V2838) (if (cons? V2826) (let X (hd V2826) (let V2827 (shen.lazyderef (tl V2826) V2838) (if (cons? V2827) (let V2828 (shen.lazyderef (hd V2827) V2838) (if (= : V2828) (let V2829 (shen.lazyderef (tl V2827) V2838) (if (cons? V2829) (let A (hd V2829) (let V2830 (shen.lazyderef (tl V2829) V2838) (if (= () V2830) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2838 (freeze (cut Throwcontrol V2838 (freeze (shen.th* X A V2837 V2838 V2839)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2838) (do (shen.incinfs) (shen.show V2836 V2837 V2838 (freeze (bind Datatypes (value shen.*datatypes*) V2838 (freeze (shen.udefs* V2836 V2837 Datatypes V2838 V2839))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2834) (cond ((= + V2834) (set shen.*shen-type-theory-enabled?* true)) ((= - V2834) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2844) (cond ((= + V2844) (set shen.*shen-type-theory-enabled?* true)) ((= - V2844) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2843 V2844) false) +(defun shen.prolog-failure (V2853 V2854) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2845 V2846 V2847 V2848 V2849) (let Case (let V2811 (shen.lazyderef V2847 V2848) (if (cons? V2811) (let D (hd V2811) (do (shen.incinfs) (call (cons D (cons V2845 (cons V2846 ()))) V2848 V2849))) false)) (if (= Case false) (let V2812 (shen.lazyderef V2847 V2848) (if (cons? V2812) (let Ds (tl V2812) (do (shen.incinfs) (shen.udefs* V2845 V2846 Ds V2848 V2849))) false)) Case))) +(defun shen.udefs* (V2855 V2856 V2857 V2858 V2859) (let Case (let V2821 (shen.lazyderef V2857 V2858) (if (cons? V2821) (let D (hd V2821) (do (shen.incinfs) (call (cons D (cons V2855 (cons V2856 ()))) V2858 V2859))) false)) (if (= Case false) (let V2822 (shen.lazyderef V2857 V2858) (if (cons? V2822) (let Ds (tl V2822) (do (shen.incinfs) (shen.udefs* V2855 V2856 Ds V2858 V2859))) false)) Case))) -(defun shen.th* (V2850 V2851 V2852 V2853 V2854) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2850 (cons : (cons V2851 ()))) V2852 V2853 (freeze (fwhen false V2853 V2854)))) (if (= Case false) (let Case (let F (shen.newpv V2853) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2850 V2853)) V2853 (freeze (bind F (shen.sigf (shen.lazyderef V2850 V2853)) V2853 (freeze (call (cons F (cons V2851 ())) V2853 V2854))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2850 V2851 V2853 V2854)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2850 V2851 V2852 V2853 V2854)) (if (= Case false) (let Case (let V2696 (shen.lazyderef V2850 V2853) (if (cons? V2696) (let F (hd V2696) (let V2697 (shen.lazyderef (tl V2696) V2853) (if (= () V2697) (do (shen.incinfs) (shen.th* F (cons --> (cons V2851 ())) V2852 V2853 V2854)) false))) false)) (if (= Case false) (let Case (let V2698 (shen.lazyderef V2850 V2853) (if (cons? V2698) (let F (hd V2698) (let V2699 (shen.lazyderef (tl V2698) V2853) (if (cons? V2699) (let X (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2853) (if (= () V2700) (let B (shen.newpv V2853) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2851 ()))) V2852 V2853 (freeze (shen.th* X B V2852 V2853 V2854))))) false))) false))) false)) (if (= Case false) (let Case (let V2701 (shen.lazyderef V2850 V2853) (if (cons? V2701) (let V2702 (shen.lazyderef (hd V2701) V2853) (if (= cons V2702) (let V2703 (shen.lazyderef (tl V2701) V2853) (if (cons? V2703) (let X (hd V2703) (let V2704 (shen.lazyderef (tl V2703) V2853) (if (cons? V2704) (let Y (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2853) (if (= () V2705) (let V2706 (shen.lazyderef V2851 V2853) (if (cons? V2706) (let V2707 (shen.lazyderef (hd V2706) V2853) (if (= list V2707) (let V2708 (shen.lazyderef (tl V2706) V2853) (if (cons? V2708) (let A (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2853) (if (= () V2709) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2709) (do (shen.bindv V2709 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2709 V2853) Result))) false)))) (if (shen.pvar? V2708) (let A (shen.newpv V2853) (do (shen.bindv V2708 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2708 V2853) Result)))) false))) (if (shen.pvar? V2707) (do (shen.bindv V2707 list V2853) (let Result (let V2710 (shen.lazyderef (tl V2706) V2853) (if (cons? V2710) (let A (hd V2710) (let V2711 (shen.lazyderef (tl V2710) V2853) (if (= () V2711) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2711) (do (shen.bindv V2711 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2711 V2853) Result))) false)))) (if (shen.pvar? V2710) (let A (shen.newpv V2853) (do (shen.bindv V2710 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2710 V2853) Result)))) false))) (do (shen.unbindv V2707 V2853) Result))) false))) (if (shen.pvar? V2706) (let A (shen.newpv V2853) (do (shen.bindv V2706 (cons list (cons A ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons list (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2706 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2712 (shen.lazyderef V2850 V2853) (if (cons? V2712) (let V2713 (shen.lazyderef (hd V2712) V2853) (if (= @p V2713) (let V2714 (shen.lazyderef (tl V2712) V2853) (if (cons? V2714) (let X (hd V2714) (let V2715 (shen.lazyderef (tl V2714) V2853) (if (cons? V2715) (let Y (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2853) (if (= () V2716) (let V2717 (shen.lazyderef V2851 V2853) (if (cons? V2717) (let A (hd V2717) (let V2718 (shen.lazyderef (tl V2717) V2853) (if (cons? V2718) (let V2719 (shen.lazyderef (hd V2718) V2853) (if (= * V2719) (let V2720 (shen.lazyderef (tl V2718) V2853) (if (cons? V2720) (let B (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2853) (if (= () V2721) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (if (shen.pvar? V2721) (do (shen.bindv V2721 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2721 V2853) Result))) false)))) (if (shen.pvar? V2720) (let B (shen.newpv V2853) (do (shen.bindv V2720 (cons B ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2720 V2853) Result)))) false))) (if (shen.pvar? V2719) (do (shen.bindv V2719 * V2853) (let Result (let V2722 (shen.lazyderef (tl V2718) V2853) (if (cons? V2722) (let B (hd V2722) (let V2723 (shen.lazyderef (tl V2722) V2853) (if (= () V2723) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (if (shen.pvar? V2723) (do (shen.bindv V2723 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2723 V2853) Result))) false)))) (if (shen.pvar? V2722) (let B (shen.newpv V2853) (do (shen.bindv V2722 (cons B ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2722 V2853) Result)))) false))) (do (shen.unbindv V2719 V2853) Result))) false))) (if (shen.pvar? V2718) (let B (shen.newpv V2853) (do (shen.bindv V2718 (cons * (cons B ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2718 V2853) Result)))) false)))) (if (shen.pvar? V2717) (let A (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.bindv V2717 (cons A (cons * (cons B ()))) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y B V2852 V2853 V2854)))) (do (shen.unbindv V2717 V2853) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2724 (shen.lazyderef V2850 V2853) (if (cons? V2724) (let V2725 (shen.lazyderef (hd V2724) V2853) (if (= @v V2725) (let V2726 (shen.lazyderef (tl V2724) V2853) (if (cons? V2726) (let X (hd V2726) (let V2727 (shen.lazyderef (tl V2726) V2853) (if (cons? V2727) (let Y (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2853) (if (= () V2728) (let V2729 (shen.lazyderef V2851 V2853) (if (cons? V2729) (let V2730 (shen.lazyderef (hd V2729) V2853) (if (= vector V2730) (let V2731 (shen.lazyderef (tl V2729) V2853) (if (cons? V2731) (let A (hd V2731) (let V2732 (shen.lazyderef (tl V2731) V2853) (if (= () V2732) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2732) (do (shen.bindv V2732 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2732 V2853) Result))) false)))) (if (shen.pvar? V2731) (let A (shen.newpv V2853) (do (shen.bindv V2731 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2731 V2853) Result)))) false))) (if (shen.pvar? V2730) (do (shen.bindv V2730 vector V2853) (let Result (let V2733 (shen.lazyderef (tl V2729) V2853) (if (cons? V2733) (let A (hd V2733) (let V2734 (shen.lazyderef (tl V2733) V2853) (if (= () V2734) (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (if (shen.pvar? V2734) (do (shen.bindv V2734 () V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2734 V2853) Result))) false)))) (if (shen.pvar? V2733) (let A (shen.newpv V2853) (do (shen.bindv V2733 (cons A ()) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2733 V2853) Result)))) false))) (do (shen.unbindv V2730 V2853) Result))) false))) (if (shen.pvar? V2729) (let A (shen.newpv V2853) (do (shen.bindv V2729 (cons vector (cons A ())) V2853) (let Result (do (shen.incinfs) (shen.th* X A V2852 V2853 (freeze (shen.th* Y (cons vector (cons A ())) V2852 V2853 V2854)))) (do (shen.unbindv V2729 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2735 (shen.lazyderef V2850 V2853) (if (cons? V2735) (let V2736 (shen.lazyderef (hd V2735) V2853) (if (= @s V2736) (let V2737 (shen.lazyderef (tl V2735) V2853) (if (cons? V2737) (let X (hd V2737) (let V2738 (shen.lazyderef (tl V2737) V2853) (if (cons? V2738) (let Y (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2853) (if (= () V2739) (let V2740 (shen.lazyderef V2851 V2853) (if (= string V2740) (do (shen.incinfs) (shen.th* X string V2852 V2853 (freeze (shen.th* Y string V2852 V2853 V2854)))) (if (shen.pvar? V2740) (do (shen.bindv V2740 string V2853) (let Result (do (shen.incinfs) (shen.th* X string V2852 V2853 (freeze (shen.th* Y string V2852 V2853 V2854)))) (do (shen.unbindv V2740 V2853) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2741 (shen.lazyderef V2850 V2853) (if (cons? V2741) (let V2742 (shen.lazyderef (hd V2741) V2853) (if (= lambda V2742) (let V2743 (shen.lazyderef (tl V2741) V2853) (if (cons? V2743) (let X (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2853) (if (cons? V2744) (let Y (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2853) (if (= () V2745) (let V2746 (shen.lazyderef V2851 V2853) (if (cons? V2746) (let A (hd V2746) (let V2747 (shen.lazyderef (tl V2746) V2853) (if (cons? V2747) (let V2748 (shen.lazyderef (hd V2747) V2853) (if (= --> V2748) (let V2749 (shen.lazyderef (tl V2747) V2853) (if (cons? V2749) (let B (hd V2749) (let V2750 (shen.lazyderef (tl V2749) V2853) (if (= () V2750) (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (if (shen.pvar? V2750) (do (shen.bindv V2750 () V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2750 V2853) Result))) false)))) (if (shen.pvar? V2749) (let B (shen.newpv V2853) (do (shen.bindv V2749 (cons B ()) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2749 V2853) Result)))) false))) (if (shen.pvar? V2748) (do (shen.bindv V2748 --> V2853) (let Result (let V2751 (shen.lazyderef (tl V2747) V2853) (if (cons? V2751) (let B (hd V2751) (let V2752 (shen.lazyderef (tl V2751) V2853) (if (= () V2752) (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (if (shen.pvar? V2752) (do (shen.bindv V2752 () V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2752 V2853) Result))) false)))) (if (shen.pvar? V2751) (let B (shen.newpv V2853) (do (shen.bindv V2751 (cons B ()) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2751 V2853) Result)))) false))) (do (shen.unbindv V2748 V2853) Result))) false))) (if (shen.pvar? V2747) (let B (shen.newpv V2853) (do (shen.bindv V2747 (cons --> (cons B ())) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2747 V2853) Result)))) false)))) (if (shen.pvar? V2746) (let A (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.bindv V2746 (cons A (cons --> (cons B ()))) V2853) (let Result (let Z (shen.newpv V2853) (let X&& (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Y V2853)) V2853 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2852) V2853 V2854)))))))))) (do (shen.unbindv V2746 V2853) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2753 (shen.lazyderef V2850 V2853) (if (cons? V2753) (let V2754 (shen.lazyderef (hd V2753) V2853) (if (= let V2754) (let V2755 (shen.lazyderef (tl V2753) V2853) (if (cons? V2755) (let X (hd V2755) (let V2756 (shen.lazyderef (tl V2755) V2853) (if (cons? V2756) (let Y (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2853) (if (cons? V2757) (let Z (hd V2757) (let V2758 (shen.lazyderef (tl V2757) V2853) (if (= () V2758) (let W (shen.newpv V2853) (let X&& (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.incinfs) (shen.th* Y B V2852 V2853 (freeze (bind X&& (shen.placeholder) V2853 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2853) (shen.lazyderef X V2853) (shen.lazyderef Z V2853)) V2853 (freeze (shen.th* W V2851 (cons (cons X&& (cons : (cons B ()))) V2852) V2853 V2854))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2759 (shen.lazyderef V2850 V2853) (if (cons? V2759) (let V2760 (shen.lazyderef (hd V2759) V2853) (if (= open V2760) (let V2761 (shen.lazyderef (tl V2759) V2853) (if (cons? V2761) (let FileName (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2853) (if (cons? V2762) (let Direction2692 (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2853) (if (= () V2763) (let V2764 (shen.lazyderef V2851 V2853) (if (cons? V2764) (let V2765 (shen.lazyderef (hd V2764) V2853) (if (= stream V2765) (let V2766 (shen.lazyderef (tl V2764) V2853) (if (cons? V2766) (let Direction (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2853) (if (= () V2767) (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (if (shen.pvar? V2767) (do (shen.bindv V2767 () V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2767 V2853) Result))) false)))) (if (shen.pvar? V2766) (let Direction (shen.newpv V2853) (do (shen.bindv V2766 (cons Direction ()) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2766 V2853) Result)))) false))) (if (shen.pvar? V2765) (do (shen.bindv V2765 stream V2853) (let Result (let V2768 (shen.lazyderef (tl V2764) V2853) (if (cons? V2768) (let Direction (hd V2768) (let V2769 (shen.lazyderef (tl V2768) V2853) (if (= () V2769) (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (if (shen.pvar? V2769) (do (shen.bindv V2769 () V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2769 V2853) Result))) false)))) (if (shen.pvar? V2768) (let Direction (shen.newpv V2853) (do (shen.bindv V2768 (cons Direction ()) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2768 V2853) Result)))) false))) (do (shen.unbindv V2765 V2853) Result))) false))) (if (shen.pvar? V2764) (let Direction (shen.newpv V2853) (do (shen.bindv V2764 (cons stream (cons Direction ())) V2853) (let Result (do (shen.incinfs) (unify! Direction Direction2692 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* FileName string V2852 V2853 V2854)))))) (do (shen.unbindv V2764 V2853) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2770 (shen.lazyderef V2850 V2853) (if (cons? V2770) (let V2771 (shen.lazyderef (hd V2770) V2853) (if (= type V2771) (let V2772 (shen.lazyderef (tl V2770) V2853) (if (cons? V2772) (let X (hd V2772) (let V2773 (shen.lazyderef (tl V2772) V2853) (if (cons? V2773) (let A (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2853) (if (= () V2774) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (unify A V2851 V2853 (freeze (shen.th* X A V2852 V2853 V2854)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2775 (shen.lazyderef V2850 V2853) (if (cons? V2775) (let V2776 (shen.lazyderef (hd V2775) V2853) (if (= input+ V2776) (let V2777 (shen.lazyderef (tl V2775) V2853) (if (cons? V2777) (let A (hd V2777) (let V2778 (shen.lazyderef (tl V2777) V2853) (if (cons? V2778) (let Stream (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2853) (if (= () V2779) (let C (shen.newpv V2853) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2853)) V2853 (freeze (unify V2851 C V2853 (freeze (shen.th* Stream (cons stream (cons in ())) V2852 V2853 V2854))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2850 V2853) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2853) (if (= set V2781) (let V2782 (shen.lazyderef (tl V2780) V2853) (if (cons? V2782) (let Var (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2853) (if (cons? V2783) (let Val (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2853) (if (= () V2784) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.th* Var symbol V2852 V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* (cons value (cons Var ())) V2851 V2852 V2853 (freeze (shen.th* Val V2851 V2852 V2853 V2854)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2850 V2853) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2853) (if (= shen.<-sem V2786) (let V2787 (shen.lazyderef (tl V2785) V2853) (if (cons? V2787) (let F (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2853) (if (= () V2788) (let A (shen.newpv V2853) (let F&& (shen.newpv V2853) (let B (shen.newpv V2853) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2852 V2853 (freeze (cut Throwcontrol V2853 (freeze (bind F&& (concat && (shen.lazyderef F V2853)) V2853 (freeze (cut Throwcontrol V2853 (freeze (shen.th* F&& V2851 (cons (cons F&& (cons : (cons B ()))) V2852) V2853 V2854))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2789 (shen.lazyderef V2850 V2853) (if (cons? V2789) (let V2790 (shen.lazyderef (hd V2789) V2853) (if (= fail V2790) (let V2791 (shen.lazyderef (tl V2789) V2853) (if (= () V2791) (let V2792 (shen.lazyderef V2851 V2853) (if (= symbol V2792) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2792) (do (shen.bindv V2792 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2792 V2853) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2853) (do (shen.incinfs) (shen.t*-hyps V2852 NewHyp V2853 (freeze (shen.th* V2850 V2851 NewHyp V2853 V2854))))) (if (= Case false) (let Case (let V2793 (shen.lazyderef V2850 V2853) (if (cons? V2793) (let V2794 (shen.lazyderef (hd V2793) V2853) (if (= define V2794) (let V2795 (shen.lazyderef (tl V2793) V2853) (if (cons? V2795) (let F (hd V2795) (let X (tl V2795) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.t*-def (cons define (cons F X)) V2851 V2852 V2853 V2854)))))) false)) false)) false)) (if (= Case false) (let Case (let V2796 (shen.lazyderef V2850 V2853) (if (cons? V2796) (let V2797 (shen.lazyderef (hd V2796) V2853) (if (= defcc V2797) (let V2798 (shen.lazyderef (tl V2796) V2853) (if (cons? V2798) (let F (hd V2798) (let X (tl V2798) (do (shen.incinfs) (cut Throwcontrol V2853 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2851 V2852 V2853 V2854)))))) false)) false)) false)) (if (= Case false) (let Case (let V2799 (shen.lazyderef V2850 V2853) (if (cons? V2799) (let V2800 (shen.lazyderef (hd V2799) V2853) (if (= defmacro V2800) (let V2801 (shen.lazyderef V2851 V2853) (if (= unit V2801) (do (shen.incinfs) (cut Throwcontrol V2853 V2854)) (if (shen.pvar? V2801) (do (shen.bindv V2801 unit V2853) (let Result (do (shen.incinfs) (cut Throwcontrol V2853 V2854)) (do (shen.unbindv V2801 V2853) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2802 (shen.lazyderef V2850 V2853) (if (cons? V2802) (let V2803 (shen.lazyderef (hd V2802) V2853) (if (= shen.process-datatype V2803) (let V2804 (shen.lazyderef V2851 V2853) (if (= symbol V2804) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2804) (do (shen.bindv V2804 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2804 V2853) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2805 (shen.lazyderef V2850 V2853) (if (cons? V2805) (let V2806 (shen.lazyderef (hd V2805) V2853) (if (= shen.synonyms-help V2806) (let V2807 (shen.lazyderef V2851 V2853) (if (= symbol V2807) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2807) (do (shen.bindv V2807 symbol V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2807 V2853) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2853) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2853 (freeze (shen.udefs* (cons V2850 (cons : (cons V2851 ()))) V2852 Datatypes V2853 V2854))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2860 V2861 V2862 V2863 V2864) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2860 (cons : (cons V2861 ()))) V2862 V2863 (freeze (fwhen false V2863 V2864)))) (if (= Case false) (let Case (let F (shen.newpv V2863) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2860 V2863)) V2863 (freeze (bind F (shen.sigf (shen.lazyderef V2860 V2863)) V2863 (freeze (call (cons F (cons V2861 ())) V2863 V2864))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2860 V2861 V2863 V2864)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2860 V2861 V2862 V2863 V2864)) (if (= Case false) (let Case (let V2706 (shen.lazyderef V2860 V2863) (if (cons? V2706) (let F (hd V2706) (let V2707 (shen.lazyderef (tl V2706) V2863) (if (= () V2707) (do (shen.incinfs) (shen.th* F (cons --> (cons V2861 ())) V2862 V2863 V2864)) false))) false)) (if (= Case false) (let Case (let V2708 (shen.lazyderef V2860 V2863) (if (cons? V2708) (let F (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2863) (if (cons? V2709) (let X (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2863) (if (= () V2710) (let B (shen.newpv V2863) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2861 ()))) V2862 V2863 (freeze (shen.th* X B V2862 V2863 V2864))))) false))) false))) false)) (if (= Case false) (let Case (let V2711 (shen.lazyderef V2860 V2863) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2863) (if (= cons V2712) (let V2713 (shen.lazyderef (tl V2711) V2863) (if (cons? V2713) (let X (hd V2713) (let V2714 (shen.lazyderef (tl V2713) V2863) (if (cons? V2714) (let Y (hd V2714) (let V2715 (shen.lazyderef (tl V2714) V2863) (if (= () V2715) (let V2716 (shen.lazyderef V2861 V2863) (if (cons? V2716) (let V2717 (shen.lazyderef (hd V2716) V2863) (if (= list V2717) (let V2718 (shen.lazyderef (tl V2716) V2863) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2863) (if (= () V2719) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2719) (do (shen.bindv V2719 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2719 V2863) Result))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2863) (do (shen.bindv V2718 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2718 V2863) Result)))) false))) (if (shen.pvar? V2717) (do (shen.bindv V2717 list V2863) (let Result (let V2720 (shen.lazyderef (tl V2716) V2863) (if (cons? V2720) (let A (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2863) (if (= () V2721) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2721) (do (shen.bindv V2721 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2721 V2863) Result))) false)))) (if (shen.pvar? V2720) (let A (shen.newpv V2863) (do (shen.bindv V2720 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2720 V2863) Result)))) false))) (do (shen.unbindv V2717 V2863) Result))) false))) (if (shen.pvar? V2716) (let A (shen.newpv V2863) (do (shen.bindv V2716 (cons list (cons A ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2716 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2722 (shen.lazyderef V2860 V2863) (if (cons? V2722) (let V2723 (shen.lazyderef (hd V2722) V2863) (if (= @p V2723) (let V2724 (shen.lazyderef (tl V2722) V2863) (if (cons? V2724) (let X (hd V2724) (let V2725 (shen.lazyderef (tl V2724) V2863) (if (cons? V2725) (let Y (hd V2725) (let V2726 (shen.lazyderef (tl V2725) V2863) (if (= () V2726) (let V2727 (shen.lazyderef V2861 V2863) (if (cons? V2727) (let A (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2863) (if (cons? V2728) (let V2729 (shen.lazyderef (hd V2728) V2863) (if (= * V2729) (let V2730 (shen.lazyderef (tl V2728) V2863) (if (cons? V2730) (let B (hd V2730) (let V2731 (shen.lazyderef (tl V2730) V2863) (if (= () V2731) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (if (shen.pvar? V2731) (do (shen.bindv V2731 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2731 V2863) Result))) false)))) (if (shen.pvar? V2730) (let B (shen.newpv V2863) (do (shen.bindv V2730 (cons B ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2730 V2863) Result)))) false))) (if (shen.pvar? V2729) (do (shen.bindv V2729 * V2863) (let Result (let V2732 (shen.lazyderef (tl V2728) V2863) (if (cons? V2732) (let B (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2863) (if (= () V2733) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2733 V2863) Result))) false)))) (if (shen.pvar? V2732) (let B (shen.newpv V2863) (do (shen.bindv V2732 (cons B ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2732 V2863) Result)))) false))) (do (shen.unbindv V2729 V2863) Result))) false))) (if (shen.pvar? V2728) (let B (shen.newpv V2863) (do (shen.bindv V2728 (cons * (cons B ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2728 V2863) Result)))) false)))) (if (shen.pvar? V2727) (let A (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.bindv V2727 (cons A (cons * (cons B ()))) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2727 V2863) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2734 (shen.lazyderef V2860 V2863) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2863) (if (= @v V2735) (let V2736 (shen.lazyderef (tl V2734) V2863) (if (cons? V2736) (let X (hd V2736) (let V2737 (shen.lazyderef (tl V2736) V2863) (if (cons? V2737) (let Y (hd V2737) (let V2738 (shen.lazyderef (tl V2737) V2863) (if (= () V2738) (let V2739 (shen.lazyderef V2861 V2863) (if (cons? V2739) (let V2740 (shen.lazyderef (hd V2739) V2863) (if (= vector V2740) (let V2741 (shen.lazyderef (tl V2739) V2863) (if (cons? V2741) (let A (hd V2741) (let V2742 (shen.lazyderef (tl V2741) V2863) (if (= () V2742) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2742) (do (shen.bindv V2742 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2742 V2863) Result))) false)))) (if (shen.pvar? V2741) (let A (shen.newpv V2863) (do (shen.bindv V2741 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2741 V2863) Result)))) false))) (if (shen.pvar? V2740) (do (shen.bindv V2740 vector V2863) (let Result (let V2743 (shen.lazyderef (tl V2739) V2863) (if (cons? V2743) (let A (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2863) (if (= () V2744) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2744) (do (shen.bindv V2744 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2744 V2863) Result))) false)))) (if (shen.pvar? V2743) (let A (shen.newpv V2863) (do (shen.bindv V2743 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2743 V2863) Result)))) false))) (do (shen.unbindv V2740 V2863) Result))) false))) (if (shen.pvar? V2739) (let A (shen.newpv V2863) (do (shen.bindv V2739 (cons vector (cons A ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2739 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2745 (shen.lazyderef V2860 V2863) (if (cons? V2745) (let V2746 (shen.lazyderef (hd V2745) V2863) (if (= @s V2746) (let V2747 (shen.lazyderef (tl V2745) V2863) (if (cons? V2747) (let X (hd V2747) (let V2748 (shen.lazyderef (tl V2747) V2863) (if (cons? V2748) (let Y (hd V2748) (let V2749 (shen.lazyderef (tl V2748) V2863) (if (= () V2749) (let V2750 (shen.lazyderef V2861 V2863) (if (= string V2750) (do (shen.incinfs) (shen.th* X string V2862 V2863 (freeze (shen.th* Y string V2862 V2863 V2864)))) (if (shen.pvar? V2750) (do (shen.bindv V2750 string V2863) (let Result (do (shen.incinfs) (shen.th* X string V2862 V2863 (freeze (shen.th* Y string V2862 V2863 V2864)))) (do (shen.unbindv V2750 V2863) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2751 (shen.lazyderef V2860 V2863) (if (cons? V2751) (let V2752 (shen.lazyderef (hd V2751) V2863) (if (= lambda V2752) (let V2753 (shen.lazyderef (tl V2751) V2863) (if (cons? V2753) (let X (hd V2753) (let V2754 (shen.lazyderef (tl V2753) V2863) (if (cons? V2754) (let Y (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2863) (if (= () V2755) (let V2756 (shen.lazyderef V2861 V2863) (if (cons? V2756) (let A (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2863) (if (cons? V2757) (let V2758 (shen.lazyderef (hd V2757) V2863) (if (= --> V2758) (let V2759 (shen.lazyderef (tl V2757) V2863) (if (cons? V2759) (let B (hd V2759) (let V2760 (shen.lazyderef (tl V2759) V2863) (if (= () V2760) (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (if (shen.pvar? V2760) (do (shen.bindv V2760 () V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2760 V2863) Result))) false)))) (if (shen.pvar? V2759) (let B (shen.newpv V2863) (do (shen.bindv V2759 (cons B ()) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2759 V2863) Result)))) false))) (if (shen.pvar? V2758) (do (shen.bindv V2758 --> V2863) (let Result (let V2761 (shen.lazyderef (tl V2757) V2863) (if (cons? V2761) (let B (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2863) (if (= () V2762) (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (if (shen.pvar? V2762) (do (shen.bindv V2762 () V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2762 V2863) Result))) false)))) (if (shen.pvar? V2761) (let B (shen.newpv V2863) (do (shen.bindv V2761 (cons B ()) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2761 V2863) Result)))) false))) (do (shen.unbindv V2758 V2863) Result))) false))) (if (shen.pvar? V2757) (let B (shen.newpv V2863) (do (shen.bindv V2757 (cons --> (cons B ())) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2757 V2863) Result)))) false)))) (if (shen.pvar? V2756) (let A (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.bindv V2756 (cons A (cons --> (cons B ()))) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2756 V2863) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2763 (shen.lazyderef V2860 V2863) (if (cons? V2763) (let V2764 (shen.lazyderef (hd V2763) V2863) (if (= let V2764) (let V2765 (shen.lazyderef (tl V2763) V2863) (if (cons? V2765) (let X (hd V2765) (let V2766 (shen.lazyderef (tl V2765) V2863) (if (cons? V2766) (let Y (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2863) (if (cons? V2767) (let Z (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2863) (if (= () V2768) (let W (shen.newpv V2863) (let X&& (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.incinfs) (shen.th* Y B V2862 V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Z V2863)) V2863 (freeze (shen.th* W V2861 (cons (cons X&& (cons : (cons B ()))) V2862) V2863 V2864))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2769 (shen.lazyderef V2860 V2863) (if (cons? V2769) (let V2770 (shen.lazyderef (hd V2769) V2863) (if (= open V2770) (let V2771 (shen.lazyderef (tl V2769) V2863) (if (cons? V2771) (let FileName (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2863) (if (cons? V2772) (let Direction2702 (hd V2772) (let V2773 (shen.lazyderef (tl V2772) V2863) (if (= () V2773) (let V2774 (shen.lazyderef V2861 V2863) (if (cons? V2774) (let V2775 (shen.lazyderef (hd V2774) V2863) (if (= stream V2775) (let V2776 (shen.lazyderef (tl V2774) V2863) (if (cons? V2776) (let Direction (hd V2776) (let V2777 (shen.lazyderef (tl V2776) V2863) (if (= () V2777) (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (if (shen.pvar? V2777) (do (shen.bindv V2777 () V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2777 V2863) Result))) false)))) (if (shen.pvar? V2776) (let Direction (shen.newpv V2863) (do (shen.bindv V2776 (cons Direction ()) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2776 V2863) Result)))) false))) (if (shen.pvar? V2775) (do (shen.bindv V2775 stream V2863) (let Result (let V2778 (shen.lazyderef (tl V2774) V2863) (if (cons? V2778) (let Direction (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2863) (if (= () V2779) (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (if (shen.pvar? V2779) (do (shen.bindv V2779 () V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2779 V2863) Result))) false)))) (if (shen.pvar? V2778) (let Direction (shen.newpv V2863) (do (shen.bindv V2778 (cons Direction ()) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2778 V2863) Result)))) false))) (do (shen.unbindv V2775 V2863) Result))) false))) (if (shen.pvar? V2774) (let Direction (shen.newpv V2863) (do (shen.bindv V2774 (cons stream (cons Direction ())) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2774 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2860 V2863) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2863) (if (= type V2781) (let V2782 (shen.lazyderef (tl V2780) V2863) (if (cons? V2782) (let X (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2863) (if (cons? V2783) (let A (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2863) (if (= () V2784) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (unify A V2861 V2863 (freeze (shen.th* X A V2862 V2863 V2864)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2860 V2863) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2863) (if (= input+ V2786) (let V2787 (shen.lazyderef (tl V2785) V2863) (if (cons? V2787) (let A (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2863) (if (cons? V2788) (let Stream (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2863) (if (= () V2789) (let C (shen.newpv V2863) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2863)) V2863 (freeze (unify V2861 C V2863 (freeze (shen.th* Stream (cons stream (cons in ())) V2862 V2863 V2864))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2860 V2863) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2863) (if (= set V2791) (let V2792 (shen.lazyderef (tl V2790) V2863) (if (cons? V2792) (let Var (hd V2792) (let V2793 (shen.lazyderef (tl V2792) V2863) (if (cons? V2793) (let Val (hd V2793) (let V2794 (shen.lazyderef (tl V2793) V2863) (if (= () V2794) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.th* Var symbol V2862 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* (cons value (cons Var ())) V2861 V2862 V2863 (freeze (shen.th* Val V2861 V2862 V2863 V2864)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2795 (shen.lazyderef V2860 V2863) (if (cons? V2795) (let V2796 (shen.lazyderef (hd V2795) V2863) (if (= shen.<-sem V2796) (let V2797 (shen.lazyderef (tl V2795) V2863) (if (cons? V2797) (let F (hd V2797) (let V2798 (shen.lazyderef (tl V2797) V2863) (if (= () V2798) (let A (shen.newpv V2863) (let F&& (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2862 V2863 (freeze (cut Throwcontrol V2863 (freeze (bind F&& (concat && (shen.lazyderef F V2863)) V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* F&& V2861 (cons (cons F&& (cons : (cons B ()))) V2862) V2863 V2864))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2799 (shen.lazyderef V2860 V2863) (if (cons? V2799) (let V2800 (shen.lazyderef (hd V2799) V2863) (if (= fail V2800) (let V2801 (shen.lazyderef (tl V2799) V2863) (if (= () V2801) (let V2802 (shen.lazyderef V2861 V2863) (if (= symbol V2802) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2802) (do (shen.bindv V2802 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2802 V2863) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2863) (do (shen.incinfs) (shen.t*-hyps V2862 NewHyp V2863 (freeze (shen.th* V2860 V2861 NewHyp V2863 V2864))))) (if (= Case false) (let Case (let V2803 (shen.lazyderef V2860 V2863) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2863) (if (= define V2804) (let V2805 (shen.lazyderef (tl V2803) V2863) (if (cons? V2805) (let F (hd V2805) (let X (tl V2805) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.t*-def (cons define (cons F X)) V2861 V2862 V2863 V2864)))))) false)) false)) false)) (if (= Case false) (let Case (let V2806 (shen.lazyderef V2860 V2863) (if (cons? V2806) (let V2807 (shen.lazyderef (hd V2806) V2863) (if (= defcc V2807) (let V2808 (shen.lazyderef (tl V2806) V2863) (if (cons? V2808) (let F (hd V2808) (let X (tl V2808) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2861 V2862 V2863 V2864)))))) false)) false)) false)) (if (= Case false) (let Case (let V2809 (shen.lazyderef V2860 V2863) (if (cons? V2809) (let V2810 (shen.lazyderef (hd V2809) V2863) (if (= defmacro V2810) (let V2811 (shen.lazyderef V2861 V2863) (if (= unit V2811) (do (shen.incinfs) (cut Throwcontrol V2863 V2864)) (if (shen.pvar? V2811) (do (shen.bindv V2811 unit V2863) (let Result (do (shen.incinfs) (cut Throwcontrol V2863 V2864)) (do (shen.unbindv V2811 V2863) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2812 (shen.lazyderef V2860 V2863) (if (cons? V2812) (let V2813 (shen.lazyderef (hd V2812) V2863) (if (= shen.process-datatype V2813) (let V2814 (shen.lazyderef V2861 V2863) (if (= symbol V2814) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2814) (do (shen.bindv V2814 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2814 V2863) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2860 V2863) (if (cons? V2815) (let V2816 (shen.lazyderef (hd V2815) V2863) (if (= shen.synonyms-help V2816) (let V2817 (shen.lazyderef V2861 V2863) (if (= symbol V2817) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2817) (do (shen.bindv V2817 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2817 V2863) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2863) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2863 (freeze (shen.udefs* (cons V2860 (cons : (cons V2861 ()))) V2862 Datatypes V2863 V2864))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2855 V2856 V2857 V2858) (let Case (let V2607 (shen.lazyderef V2855 V2857) (if (cons? V2607) (let V2608 (shen.lazyderef (hd V2607) V2857) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V2857) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2857) (if (= cons V2610) (let V2611 (shen.lazyderef (tl V2609) V2857) (if (cons? V2611) (let X (hd V2611) (let V2612 (shen.lazyderef (tl V2611) V2857) (if (cons? V2612) (let Y (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2857) (if (= () V2613) (let V2614 (shen.lazyderef (tl V2608) V2857) (if (cons? V2614) (let V2615 (shen.lazyderef (hd V2614) V2857) (if (= : V2615) (let V2616 (shen.lazyderef (tl V2614) V2857) (if (cons? V2616) (let V2617 (shen.lazyderef (hd V2616) V2857) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2857) (if (= list V2618) (let V2619 (shen.lazyderef (tl V2617) V2857) (if (cons? V2619) (let A (hd V2619) (let V2620 (shen.lazyderef (tl V2619) V2857) (if (= () V2620) (let V2621 (shen.lazyderef (tl V2616) V2857) (if (= () V2621) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2621 V2857) Result))) false))) (if (shen.pvar? V2620) (do (shen.bindv V2620 () V2857) (let Result (let V2622 (shen.lazyderef (tl V2616) V2857) (if (= () V2622) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2622 V2857) Result))) false))) (do (shen.unbindv V2620 V2857) Result))) false)))) (if (shen.pvar? V2619) (let A (shen.newpv V2857) (do (shen.bindv V2619 (cons A ()) V2857) (let Result (let V2623 (shen.lazyderef (tl V2616) V2857) (if (= () V2623) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2623 V2857) Result))) false))) (do (shen.unbindv V2619 V2857) Result)))) false))) (if (shen.pvar? V2618) (do (shen.bindv V2618 list V2857) (let Result (let V2624 (shen.lazyderef (tl V2617) V2857) (if (cons? V2624) (let A (hd V2624) (let V2625 (shen.lazyderef (tl V2624) V2857) (if (= () V2625) (let V2626 (shen.lazyderef (tl V2616) V2857) (if (= () V2626) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2626 V2857) Result))) false))) (if (shen.pvar? V2625) (do (shen.bindv V2625 () V2857) (let Result (let V2627 (shen.lazyderef (tl V2616) V2857) (if (= () V2627) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2627 V2857) Result))) false))) (do (shen.unbindv V2625 V2857) Result))) false)))) (if (shen.pvar? V2624) (let A (shen.newpv V2857) (do (shen.bindv V2624 (cons A ()) V2857) (let Result (let V2628 (shen.lazyderef (tl V2616) V2857) (if (= () V2628) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2628 V2857) Result))) false))) (do (shen.unbindv V2624 V2857) Result)))) false))) (do (shen.unbindv V2618 V2857) Result))) false))) (if (shen.pvar? V2617) (let A (shen.newpv V2857) (do (shen.bindv V2617 (cons list (cons A ())) V2857) (let Result (let V2629 (shen.lazyderef (tl V2616) V2857) (if (= () V2629) (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2629) (do (shen.bindv V2629 () V2857) (let Result (let Hyp (tl V2607) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons list (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2629 V2857) Result))) false))) (do (shen.unbindv V2617 V2857) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2630 (shen.lazyderef V2855 V2857) (if (cons? V2630) (let V2631 (shen.lazyderef (hd V2630) V2857) (if (cons? V2631) (let V2632 (shen.lazyderef (hd V2631) V2857) (if (cons? V2632) (let V2633 (shen.lazyderef (hd V2632) V2857) (if (= @p V2633) (let V2634 (shen.lazyderef (tl V2632) V2857) (if (cons? V2634) (let X (hd V2634) (let V2635 (shen.lazyderef (tl V2634) V2857) (if (cons? V2635) (let Y (hd V2635) (let V2636 (shen.lazyderef (tl V2635) V2857) (if (= () V2636) (let V2637 (shen.lazyderef (tl V2631) V2857) (if (cons? V2637) (let V2638 (shen.lazyderef (hd V2637) V2857) (if (= : V2638) (let V2639 (shen.lazyderef (tl V2637) V2857) (if (cons? V2639) (let V2640 (shen.lazyderef (hd V2639) V2857) (if (cons? V2640) (let A (hd V2640) (let V2641 (shen.lazyderef (tl V2640) V2857) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2857) (if (= * V2642) (let V2643 (shen.lazyderef (tl V2641) V2857) (if (cons? V2643) (let B (hd V2643) (let V2644 (shen.lazyderef (tl V2643) V2857) (if (= () V2644) (let V2645 (shen.lazyderef (tl V2639) V2857) (if (= () V2645) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2645 V2857) Result))) false))) (if (shen.pvar? V2644) (do (shen.bindv V2644 () V2857) (let Result (let V2646 (shen.lazyderef (tl V2639) V2857) (if (= () V2646) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2646 V2857) Result))) false))) (do (shen.unbindv V2644 V2857) Result))) false)))) (if (shen.pvar? V2643) (let B (shen.newpv V2857) (do (shen.bindv V2643 (cons B ()) V2857) (let Result (let V2647 (shen.lazyderef (tl V2639) V2857) (if (= () V2647) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2647 V2857) Result))) false))) (do (shen.unbindv V2643 V2857) Result)))) false))) (if (shen.pvar? V2642) (do (shen.bindv V2642 * V2857) (let Result (let V2648 (shen.lazyderef (tl V2641) V2857) (if (cons? V2648) (let B (hd V2648) (let V2649 (shen.lazyderef (tl V2648) V2857) (if (= () V2649) (let V2650 (shen.lazyderef (tl V2639) V2857) (if (= () V2650) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2650 V2857) Result))) false))) (if (shen.pvar? V2649) (do (shen.bindv V2649 () V2857) (let Result (let V2651 (shen.lazyderef (tl V2639) V2857) (if (= () V2651) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2651 V2857) Result))) false))) (do (shen.unbindv V2649 V2857) Result))) false)))) (if (shen.pvar? V2648) (let B (shen.newpv V2857) (do (shen.bindv V2648 (cons B ()) V2857) (let Result (let V2652 (shen.lazyderef (tl V2639) V2857) (if (= () V2652) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2652 V2857) Result))) false))) (do (shen.unbindv V2648 V2857) Result)))) false))) (do (shen.unbindv V2642 V2857) Result))) false))) (if (shen.pvar? V2641) (let B (shen.newpv V2857) (do (shen.bindv V2641 (cons * (cons B ())) V2857) (let Result (let V2653 (shen.lazyderef (tl V2639) V2857) (if (= () V2653) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2653) (do (shen.bindv V2653 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2653 V2857) Result))) false))) (do (shen.unbindv V2641 V2857) Result)))) false)))) (if (shen.pvar? V2640) (let A (shen.newpv V2857) (let B (shen.newpv V2857) (do (shen.bindv V2640 (cons A (cons * (cons B ()))) V2857) (let Result (let V2654 (shen.lazyderef (tl V2639) V2857) (if (= () V2654) (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2857) (let Result (let Hyp (tl V2630) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (shen.lazyderef B V2857) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2654 V2857) Result))) false))) (do (shen.unbindv V2640 V2857) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2655 (shen.lazyderef V2855 V2857) (if (cons? V2655) (let V2656 (shen.lazyderef (hd V2655) V2857) (if (cons? V2656) (let V2657 (shen.lazyderef (hd V2656) V2857) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2857) (if (= @v V2658) (let V2659 (shen.lazyderef (tl V2657) V2857) (if (cons? V2659) (let X (hd V2659) (let V2660 (shen.lazyderef (tl V2659) V2857) (if (cons? V2660) (let Y (hd V2660) (let V2661 (shen.lazyderef (tl V2660) V2857) (if (= () V2661) (let V2662 (shen.lazyderef (tl V2656) V2857) (if (cons? V2662) (let V2663 (shen.lazyderef (hd V2662) V2857) (if (= : V2663) (let V2664 (shen.lazyderef (tl V2662) V2857) (if (cons? V2664) (let V2665 (shen.lazyderef (hd V2664) V2857) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2857) (if (= vector V2666) (let V2667 (shen.lazyderef (tl V2665) V2857) (if (cons? V2667) (let A (hd V2667) (let V2668 (shen.lazyderef (tl V2667) V2857) (if (= () V2668) (let V2669 (shen.lazyderef (tl V2664) V2857) (if (= () V2669) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2669) (do (shen.bindv V2669 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2669 V2857) Result))) false))) (if (shen.pvar? V2668) (do (shen.bindv V2668 () V2857) (let Result (let V2670 (shen.lazyderef (tl V2664) V2857) (if (= () V2670) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2670) (do (shen.bindv V2670 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2670 V2857) Result))) false))) (do (shen.unbindv V2668 V2857) Result))) false)))) (if (shen.pvar? V2667) (let A (shen.newpv V2857) (do (shen.bindv V2667 (cons A ()) V2857) (let Result (let V2671 (shen.lazyderef (tl V2664) V2857) (if (= () V2671) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2671) (do (shen.bindv V2671 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2671 V2857) Result))) false))) (do (shen.unbindv V2667 V2857) Result)))) false))) (if (shen.pvar? V2666) (do (shen.bindv V2666 vector V2857) (let Result (let V2672 (shen.lazyderef (tl V2665) V2857) (if (cons? V2672) (let A (hd V2672) (let V2673 (shen.lazyderef (tl V2672) V2857) (if (= () V2673) (let V2674 (shen.lazyderef (tl V2664) V2857) (if (= () V2674) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2674 V2857) Result))) false))) (if (shen.pvar? V2673) (do (shen.bindv V2673 () V2857) (let Result (let V2675 (shen.lazyderef (tl V2664) V2857) (if (= () V2675) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2675 V2857) Result))) false))) (do (shen.unbindv V2673 V2857) Result))) false)))) (if (shen.pvar? V2672) (let A (shen.newpv V2857) (do (shen.bindv V2672 (cons A ()) V2857) (let Result (let V2676 (shen.lazyderef (tl V2664) V2857) (if (= () V2676) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2676 V2857) Result))) false))) (do (shen.unbindv V2672 V2857) Result)))) false))) (do (shen.unbindv V2666 V2857) Result))) false))) (if (shen.pvar? V2665) (let A (shen.newpv V2857) (do (shen.bindv V2665 (cons vector (cons A ())) V2857) (let Result (let V2677 (shen.lazyderef (tl V2664) V2857) (if (= () V2677) (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2857) (let Result (let Hyp (tl V2655) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons (shen.lazyderef A V2857) ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons (cons vector (cons (shen.lazyderef A V2857) ())) ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2677 V2857) Result))) false))) (do (shen.unbindv V2665 V2857) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2678 (shen.lazyderef V2855 V2857) (if (cons? V2678) (let V2679 (shen.lazyderef (hd V2678) V2857) (if (cons? V2679) (let V2680 (shen.lazyderef (hd V2679) V2857) (if (cons? V2680) (let V2681 (shen.lazyderef (hd V2680) V2857) (if (= @s V2681) (let V2682 (shen.lazyderef (tl V2680) V2857) (if (cons? V2682) (let X (hd V2682) (let V2683 (shen.lazyderef (tl V2682) V2857) (if (cons? V2683) (let Y (hd V2683) (let V2684 (shen.lazyderef (tl V2683) V2857) (if (= () V2684) (let V2685 (shen.lazyderef (tl V2679) V2857) (if (cons? V2685) (let V2686 (shen.lazyderef (hd V2685) V2857) (if (= : V2686) (let V2687 (shen.lazyderef (tl V2685) V2857) (if (cons? V2687) (let V2688 (shen.lazyderef (hd V2687) V2857) (if (= string V2688) (let V2689 (shen.lazyderef (tl V2687) V2857) (if (= () V2689) (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2689) (do (shen.bindv V2689 () V2857) (let Result (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2689 V2857) Result))) false))) (if (shen.pvar? V2688) (do (shen.bindv V2688 string V2857) (let Result (let V2690 (shen.lazyderef (tl V2687) V2857) (if (= () V2690) (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (if (shen.pvar? V2690) (do (shen.bindv V2690 () V2857) (let Result (let Hyp (tl V2678) (do (shen.incinfs) (bind V2856 (cons (cons (shen.lazyderef X V2857) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2857) (cons : (cons string ()))) (shen.lazyderef Hyp V2857))) V2857 V2858))) (do (shen.unbindv V2690 V2857) Result))) false))) (do (shen.unbindv V2688 V2857) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2691 (shen.lazyderef V2855 V2857) (if (cons? V2691) (let X (hd V2691) (let Hyp (tl V2691) (let NewHyps (shen.newpv V2857) (do (shen.incinfs) (bind V2856 (cons (shen.lazyderef X V2857) (shen.lazyderef NewHyps V2857)) V2857 (freeze (shen.t*-hyps Hyp NewHyps V2857 V2858))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2865 V2866 V2867 V2868) (let Case (let V2617 (shen.lazyderef V2865 V2867) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2867) (if (cons? V2618) (let V2619 (shen.lazyderef (hd V2618) V2867) (if (cons? V2619) (let V2620 (shen.lazyderef (hd V2619) V2867) (if (= cons V2620) (let V2621 (shen.lazyderef (tl V2619) V2867) (if (cons? V2621) (let X (hd V2621) (let V2622 (shen.lazyderef (tl V2621) V2867) (if (cons? V2622) (let Y (hd V2622) (let V2623 (shen.lazyderef (tl V2622) V2867) (if (= () V2623) (let V2624 (shen.lazyderef (tl V2618) V2867) (if (cons? V2624) (let V2625 (shen.lazyderef (hd V2624) V2867) (if (= : V2625) (let V2626 (shen.lazyderef (tl V2624) V2867) (if (cons? V2626) (let V2627 (shen.lazyderef (hd V2626) V2867) (if (cons? V2627) (let V2628 (shen.lazyderef (hd V2627) V2867) (if (= list V2628) (let V2629 (shen.lazyderef (tl V2627) V2867) (if (cons? V2629) (let A (hd V2629) (let V2630 (shen.lazyderef (tl V2629) V2867) (if (= () V2630) (let V2631 (shen.lazyderef (tl V2626) V2867) (if (= () V2631) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2631) (do (shen.bindv V2631 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2631 V2867) Result))) false))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2867) (let Result (let V2632 (shen.lazyderef (tl V2626) V2867) (if (= () V2632) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2632) (do (shen.bindv V2632 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2632 V2867) Result))) false))) (do (shen.unbindv V2630 V2867) Result))) false)))) (if (shen.pvar? V2629) (let A (shen.newpv V2867) (do (shen.bindv V2629 (cons A ()) V2867) (let Result (let V2633 (shen.lazyderef (tl V2626) V2867) (if (= () V2633) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2633) (do (shen.bindv V2633 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2633 V2867) Result))) false))) (do (shen.unbindv V2629 V2867) Result)))) false))) (if (shen.pvar? V2628) (do (shen.bindv V2628 list V2867) (let Result (let V2634 (shen.lazyderef (tl V2627) V2867) (if (cons? V2634) (let A (hd V2634) (let V2635 (shen.lazyderef (tl V2634) V2867) (if (= () V2635) (let V2636 (shen.lazyderef (tl V2626) V2867) (if (= () V2636) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2636) (do (shen.bindv V2636 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2636 V2867) Result))) false))) (if (shen.pvar? V2635) (do (shen.bindv V2635 () V2867) (let Result (let V2637 (shen.lazyderef (tl V2626) V2867) (if (= () V2637) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2637) (do (shen.bindv V2637 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2637 V2867) Result))) false))) (do (shen.unbindv V2635 V2867) Result))) false)))) (if (shen.pvar? V2634) (let A (shen.newpv V2867) (do (shen.bindv V2634 (cons A ()) V2867) (let Result (let V2638 (shen.lazyderef (tl V2626) V2867) (if (= () V2638) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2638) (do (shen.bindv V2638 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2638 V2867) Result))) false))) (do (shen.unbindv V2634 V2867) Result)))) false))) (do (shen.unbindv V2628 V2867) Result))) false))) (if (shen.pvar? V2627) (let A (shen.newpv V2867) (do (shen.bindv V2627 (cons list (cons A ())) V2867) (let Result (let V2639 (shen.lazyderef (tl V2626) V2867) (if (= () V2639) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2639) (do (shen.bindv V2639 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2639 V2867) Result))) false))) (do (shen.unbindv V2627 V2867) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2640 (shen.lazyderef V2865 V2867) (if (cons? V2640) (let V2641 (shen.lazyderef (hd V2640) V2867) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2867) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2867) (if (= @p V2643) (let V2644 (shen.lazyderef (tl V2642) V2867) (if (cons? V2644) (let X (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2867) (if (cons? V2645) (let Y (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2867) (if (= () V2646) (let V2647 (shen.lazyderef (tl V2641) V2867) (if (cons? V2647) (let V2648 (shen.lazyderef (hd V2647) V2867) (if (= : V2648) (let V2649 (shen.lazyderef (tl V2647) V2867) (if (cons? V2649) (let V2650 (shen.lazyderef (hd V2649) V2867) (if (cons? V2650) (let A (hd V2650) (let V2651 (shen.lazyderef (tl V2650) V2867) (if (cons? V2651) (let V2652 (shen.lazyderef (hd V2651) V2867) (if (= * V2652) (let V2653 (shen.lazyderef (tl V2651) V2867) (if (cons? V2653) (let B (hd V2653) (let V2654 (shen.lazyderef (tl V2653) V2867) (if (= () V2654) (let V2655 (shen.lazyderef (tl V2649) V2867) (if (= () V2655) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2655 V2867) Result))) false))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2867) (let Result (let V2656 (shen.lazyderef (tl V2649) V2867) (if (= () V2656) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2656) (do (shen.bindv V2656 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2656 V2867) Result))) false))) (do (shen.unbindv V2654 V2867) Result))) false)))) (if (shen.pvar? V2653) (let B (shen.newpv V2867) (do (shen.bindv V2653 (cons B ()) V2867) (let Result (let V2657 (shen.lazyderef (tl V2649) V2867) (if (= () V2657) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2657) (do (shen.bindv V2657 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2657 V2867) Result))) false))) (do (shen.unbindv V2653 V2867) Result)))) false))) (if (shen.pvar? V2652) (do (shen.bindv V2652 * V2867) (let Result (let V2658 (shen.lazyderef (tl V2651) V2867) (if (cons? V2658) (let B (hd V2658) (let V2659 (shen.lazyderef (tl V2658) V2867) (if (= () V2659) (let V2660 (shen.lazyderef (tl V2649) V2867) (if (= () V2660) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2660) (do (shen.bindv V2660 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2660 V2867) Result))) false))) (if (shen.pvar? V2659) (do (shen.bindv V2659 () V2867) (let Result (let V2661 (shen.lazyderef (tl V2649) V2867) (if (= () V2661) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2661) (do (shen.bindv V2661 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2661 V2867) Result))) false))) (do (shen.unbindv V2659 V2867) Result))) false)))) (if (shen.pvar? V2658) (let B (shen.newpv V2867) (do (shen.bindv V2658 (cons B ()) V2867) (let Result (let V2662 (shen.lazyderef (tl V2649) V2867) (if (= () V2662) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2662) (do (shen.bindv V2662 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2662 V2867) Result))) false))) (do (shen.unbindv V2658 V2867) Result)))) false))) (do (shen.unbindv V2652 V2867) Result))) false))) (if (shen.pvar? V2651) (let B (shen.newpv V2867) (do (shen.bindv V2651 (cons * (cons B ())) V2867) (let Result (let V2663 (shen.lazyderef (tl V2649) V2867) (if (= () V2663) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2663) (do (shen.bindv V2663 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2663 V2867) Result))) false))) (do (shen.unbindv V2651 V2867) Result)))) false)))) (if (shen.pvar? V2650) (let A (shen.newpv V2867) (let B (shen.newpv V2867) (do (shen.bindv V2650 (cons A (cons * (cons B ()))) V2867) (let Result (let V2664 (shen.lazyderef (tl V2649) V2867) (if (= () V2664) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2664) (do (shen.bindv V2664 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2664 V2867) Result))) false))) (do (shen.unbindv V2650 V2867) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2665 (shen.lazyderef V2865 V2867) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2867) (if (cons? V2666) (let V2667 (shen.lazyderef (hd V2666) V2867) (if (cons? V2667) (let V2668 (shen.lazyderef (hd V2667) V2867) (if (= @v V2668) (let V2669 (shen.lazyderef (tl V2667) V2867) (if (cons? V2669) (let X (hd V2669) (let V2670 (shen.lazyderef (tl V2669) V2867) (if (cons? V2670) (let Y (hd V2670) (let V2671 (shen.lazyderef (tl V2670) V2867) (if (= () V2671) (let V2672 (shen.lazyderef (tl V2666) V2867) (if (cons? V2672) (let V2673 (shen.lazyderef (hd V2672) V2867) (if (= : V2673) (let V2674 (shen.lazyderef (tl V2672) V2867) (if (cons? V2674) (let V2675 (shen.lazyderef (hd V2674) V2867) (if (cons? V2675) (let V2676 (shen.lazyderef (hd V2675) V2867) (if (= vector V2676) (let V2677 (shen.lazyderef (tl V2675) V2867) (if (cons? V2677) (let A (hd V2677) (let V2678 (shen.lazyderef (tl V2677) V2867) (if (= () V2678) (let V2679 (shen.lazyderef (tl V2674) V2867) (if (= () V2679) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2679 V2867) Result))) false))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2867) (let Result (let V2680 (shen.lazyderef (tl V2674) V2867) (if (= () V2680) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2680) (do (shen.bindv V2680 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2680 V2867) Result))) false))) (do (shen.unbindv V2678 V2867) Result))) false)))) (if (shen.pvar? V2677) (let A (shen.newpv V2867) (do (shen.bindv V2677 (cons A ()) V2867) (let Result (let V2681 (shen.lazyderef (tl V2674) V2867) (if (= () V2681) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2681 V2867) Result))) false))) (do (shen.unbindv V2677 V2867) Result)))) false))) (if (shen.pvar? V2676) (do (shen.bindv V2676 vector V2867) (let Result (let V2682 (shen.lazyderef (tl V2675) V2867) (if (cons? V2682) (let A (hd V2682) (let V2683 (shen.lazyderef (tl V2682) V2867) (if (= () V2683) (let V2684 (shen.lazyderef (tl V2674) V2867) (if (= () V2684) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2684) (do (shen.bindv V2684 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2684 V2867) Result))) false))) (if (shen.pvar? V2683) (do (shen.bindv V2683 () V2867) (let Result (let V2685 (shen.lazyderef (tl V2674) V2867) (if (= () V2685) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2685) (do (shen.bindv V2685 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2685 V2867) Result))) false))) (do (shen.unbindv V2683 V2867) Result))) false)))) (if (shen.pvar? V2682) (let A (shen.newpv V2867) (do (shen.bindv V2682 (cons A ()) V2867) (let Result (let V2686 (shen.lazyderef (tl V2674) V2867) (if (= () V2686) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2686) (do (shen.bindv V2686 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2686 V2867) Result))) false))) (do (shen.unbindv V2682 V2867) Result)))) false))) (do (shen.unbindv V2676 V2867) Result))) false))) (if (shen.pvar? V2675) (let A (shen.newpv V2867) (do (shen.bindv V2675 (cons vector (cons A ())) V2867) (let Result (let V2687 (shen.lazyderef (tl V2674) V2867) (if (= () V2687) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2687) (do (shen.bindv V2687 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2687 V2867) Result))) false))) (do (shen.unbindv V2675 V2867) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2688 (shen.lazyderef V2865 V2867) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2867) (if (cons? V2689) (let V2690 (shen.lazyderef (hd V2689) V2867) (if (cons? V2690) (let V2691 (shen.lazyderef (hd V2690) V2867) (if (= @s V2691) (let V2692 (shen.lazyderef (tl V2690) V2867) (if (cons? V2692) (let X (hd V2692) (let V2693 (shen.lazyderef (tl V2692) V2867) (if (cons? V2693) (let Y (hd V2693) (let V2694 (shen.lazyderef (tl V2693) V2867) (if (= () V2694) (let V2695 (shen.lazyderef (tl V2689) V2867) (if (cons? V2695) (let V2696 (shen.lazyderef (hd V2695) V2867) (if (= : V2696) (let V2697 (shen.lazyderef (tl V2695) V2867) (if (cons? V2697) (let V2698 (shen.lazyderef (hd V2697) V2867) (if (= string V2698) (let V2699 (shen.lazyderef (tl V2697) V2867) (if (= () V2699) (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2699) (do (shen.bindv V2699 () V2867) (let Result (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2699 V2867) Result))) false))) (if (shen.pvar? V2698) (do (shen.bindv V2698 string V2867) (let Result (let V2700 (shen.lazyderef (tl V2697) V2867) (if (= () V2700) (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2700) (do (shen.bindv V2700 () V2867) (let Result (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2700 V2867) Result))) false))) (do (shen.unbindv V2698 V2867) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2701 (shen.lazyderef V2865 V2867) (if (cons? V2701) (let X (hd V2701) (let Hyp (tl V2701) (let NewHyps (shen.newpv V2867) (do (shen.incinfs) (bind V2866 (cons (shen.lazyderef X V2867) (shen.lazyderef NewHyps V2867)) V2867 (freeze (shen.t*-hyps Hyp NewHyps V2867 V2868))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2871 V2872 V2873 V2874) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2871 V2873)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2872 V2873) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2874))))))))) (true (thaw V2874)))) +(defun shen.show (V2881 V2882 V2883 V2884) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2881 V2883)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2882 V2883) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2884))))))))) (true (thaw V2884)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2875) (cond ((and (cons? V2875) (and (cons? (tl V2875)) (and (= : (hd (tl V2875))) (and (cons? (tl (tl V2875))) (= () (tl (tl (tl V2875)))))))) (shen.prhush (shen.app (hd V2875) (cn " : " (shen.app (hd (tl (tl V2875))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2875 "" shen.r) (stoutput))))) +(defun shen.show-p (V2885) (cond ((and (cons? V2885) (and (cons? (tl V2885)) (and (= : (hd (tl V2885))) (and (cons? (tl (tl V2885))) (= () (tl (tl (tl V2885)))))))) (shen.prhush (shen.app (hd V2885) (cn " : " (shen.app (hd (tl (tl V2885))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2885 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2878 V2879) (cond ((= () V2878) shen.skip) ((cons? V2878) (do (shen.prhush (shen.app V2879 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2878)) (do (nl 1) (shen.show-assumptions (tl V2878) (+ V2879 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2888 V2889) (cond ((= () V2888) shen.skip) ((cons? V2888) (do (shen.prhush (shen.app V2889 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2888)) (do (nl 1) (shen.show-assumptions (tl V2888) (+ V2889 1)))))) (true (shen.sys-error shen.show-assumptions)))) -(defun shen.pause-for-user () (let Byte (do (read-byte (stinput)) (read-byte (stinput))) (if (= Byte 94) (simple-error "input aborted +(defun shen.pause-for-user () (let Byte (read-byte (stinput)) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2880) (cons? (assoc V2880 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2890) (cons? (assoc V2890 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2881) (concat shen.type-signature-of- V2881)) +(defun shen.sigf (V2891) (concat shen.type-signature-of- V2891)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2882 V2883 V2884 V2885) (let Case (let V2594 (shen.lazyderef V2883 V2884) (if (= number V2594) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2594) (do (shen.bindv V2594 number V2884) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2594 V2884) Result))) false))) (if (= Case false) (let Case (let V2595 (shen.lazyderef V2883 V2884) (if (= boolean V2595) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2595) (do (shen.bindv V2595 boolean V2884) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2595 V2884) Result))) false))) (if (= Case false) (let Case (let V2596 (shen.lazyderef V2883 V2884) (if (= string V2596) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2882 V2884)) V2884 V2885)) (if (shen.pvar? V2596) (do (shen.bindv V2596 string V2884) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2882 V2884)) V2884 V2885)) (do (shen.unbindv V2596 V2884) Result))) false))) (if (= Case false) (let Case (let V2597 (shen.lazyderef V2883 V2884) (if (= symbol V2597) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2882 V2884)) V2884 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2882 V2884))) V2884 V2885)))) (if (shen.pvar? V2597) (do (shen.bindv V2597 symbol V2884) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2882 V2884)) V2884 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2882 V2884))) V2884 V2885)))) (do (shen.unbindv V2597 V2884) Result))) false))) (if (= Case false) (let V2598 (shen.lazyderef V2882 V2884) (if (= () V2598) (let V2599 (shen.lazyderef V2883 V2884) (if (cons? V2599) (let V2600 (shen.lazyderef (hd V2599) V2884) (if (= list V2600) (let V2601 (shen.lazyderef (tl V2599) V2884) (if (cons? V2601) (let A (hd V2601) (let V2602 (shen.lazyderef (tl V2601) V2884) (if (= () V2602) (do (shen.incinfs) (thaw V2885)) (if (shen.pvar? V2602) (do (shen.bindv V2602 () V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2602 V2884) Result))) false)))) (if (shen.pvar? V2601) (let A (shen.newpv V2884) (do (shen.bindv V2601 (cons A ()) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2601 V2884) Result)))) false))) (if (shen.pvar? V2600) (do (shen.bindv V2600 list V2884) (let Result (let V2603 (shen.lazyderef (tl V2599) V2884) (if (cons? V2603) (let A (hd V2603) (let V2604 (shen.lazyderef (tl V2603) V2884) (if (= () V2604) (do (shen.incinfs) (thaw V2885)) (if (shen.pvar? V2604) (do (shen.bindv V2604 () V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2604 V2884) Result))) false)))) (if (shen.pvar? V2603) (let A (shen.newpv V2884) (do (shen.bindv V2603 (cons A ()) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2603 V2884) Result)))) false))) (do (shen.unbindv V2600 V2884) Result))) false))) (if (shen.pvar? V2599) (let A (shen.newpv V2884) (do (shen.bindv V2599 (cons list (cons A ())) V2884) (let Result (do (shen.incinfs) (thaw V2885)) (do (shen.unbindv V2599 V2884) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2892 V2893 V2894 V2895) (let Case (let V2604 (shen.lazyderef V2893 V2894) (if (= number V2604) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2604) (do (shen.bindv V2604 number V2894) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2604 V2894) Result))) false))) (if (= Case false) (let Case (let V2605 (shen.lazyderef V2893 V2894) (if (= boolean V2605) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2605) (do (shen.bindv V2605 boolean V2894) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2605 V2894) Result))) false))) (if (= Case false) (let Case (let V2606 (shen.lazyderef V2893 V2894) (if (= string V2606) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2606) (do (shen.bindv V2606 string V2894) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2606 V2894) Result))) false))) (if (= Case false) (let Case (let V2607 (shen.lazyderef V2893 V2894) (if (= symbol V2607) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2892 V2894)) V2894 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2892 V2894))) V2894 V2895)))) (if (shen.pvar? V2607) (do (shen.bindv V2607 symbol V2894) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2892 V2894)) V2894 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2892 V2894))) V2894 V2895)))) (do (shen.unbindv V2607 V2894) Result))) false))) (if (= Case false) (let V2608 (shen.lazyderef V2892 V2894) (if (= () V2608) (let V2609 (shen.lazyderef V2893 V2894) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2894) (if (= list V2610) (let V2611 (shen.lazyderef (tl V2609) V2894) (if (cons? V2611) (let A (hd V2611) (let V2612 (shen.lazyderef (tl V2611) V2894) (if (= () V2612) (do (shen.incinfs) (thaw V2895)) (if (shen.pvar? V2612) (do (shen.bindv V2612 () V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2612 V2894) Result))) false)))) (if (shen.pvar? V2611) (let A (shen.newpv V2894) (do (shen.bindv V2611 (cons A ()) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2611 V2894) Result)))) false))) (if (shen.pvar? V2610) (do (shen.bindv V2610 list V2894) (let Result (let V2613 (shen.lazyderef (tl V2609) V2894) (if (cons? V2613) (let A (hd V2613) (let V2614 (shen.lazyderef (tl V2613) V2894) (if (= () V2614) (do (shen.incinfs) (thaw V2895)) (if (shen.pvar? V2614) (do (shen.bindv V2614 () V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2614 V2894) Result))) false)))) (if (shen.pvar? V2613) (let A (shen.newpv V2894) (do (shen.bindv V2613 (cons A ()) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2613 V2894) Result)))) false))) (do (shen.unbindv V2610 V2894) Result))) false))) (if (shen.pvar? V2609) (let A (shen.newpv V2894) (do (shen.bindv V2609 (cons list (cons A ())) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2609 V2894) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2886 V2887 V2888 V2889 V2890) (let Case (let V2585 (shen.lazyderef V2888 V2889) (if (cons? V2585) (let V2586 (shen.lazyderef (hd V2585) V2889) (if (cons? V2586) (let Y (hd V2586) (let V2587 (shen.lazyderef (tl V2586) V2889) (if (cons? V2587) (let V2588 (shen.lazyderef (hd V2587) V2889) (if (= : V2588) (let V2589 (shen.lazyderef (tl V2587) V2889) (if (cons? V2589) (let B (hd V2589) (let V2590 (shen.lazyderef (tl V2589) V2889) (if (= () V2590) (do (shen.incinfs) (identical V2886 Y V2889 (freeze (unify! V2887 B V2889 V2890)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2591 (shen.lazyderef V2888 V2889) (if (cons? V2591) (let Hyp (tl V2591) (do (shen.incinfs) (shen.by_hypothesis V2886 V2887 Hyp V2889 V2890))) false)) Case))) +(defun shen.by_hypothesis (V2896 V2897 V2898 V2899 V2900) (let Case (let V2595 (shen.lazyderef V2898 V2899) (if (cons? V2595) (let V2596 (shen.lazyderef (hd V2595) V2899) (if (cons? V2596) (let Y (hd V2596) (let V2597 (shen.lazyderef (tl V2596) V2899) (if (cons? V2597) (let V2598 (shen.lazyderef (hd V2597) V2899) (if (= : V2598) (let V2599 (shen.lazyderef (tl V2597) V2899) (if (cons? V2599) (let B (hd V2599) (let V2600 (shen.lazyderef (tl V2599) V2899) (if (= () V2600) (do (shen.incinfs) (identical V2896 Y V2899 (freeze (unify! V2897 B V2899 V2900)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2601 (shen.lazyderef V2898 V2899) (if (cons? V2601) (let Hyp (tl V2601) (do (shen.incinfs) (shen.by_hypothesis V2896 V2897 Hyp V2899 V2900))) false)) Case))) -(defun shen.t*-def (V2891 V2892 V2893 V2894 V2895) (let V2579 (shen.lazyderef V2891 V2894) (if (cons? V2579) (let V2580 (shen.lazyderef (hd V2579) V2894) (if (= define V2580) (let V2581 (shen.lazyderef (tl V2579) V2894) (if (cons? V2581) (let F (hd V2581) (let X (tl V2581) (let E (shen.newpv V2894) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2901 V2902 V2903 V2904 V2905) (let V2589 (shen.lazyderef V2901 V2904) (if (cons? V2589) (let V2590 (shen.lazyderef (hd V2589) V2904) (if (= define V2590) (let V2591 (shen.lazyderef (tl V2589) V2904) (if (cons? V2591) (let F (hd V2591) (let X (tl V2591) (let E (shen.newpv V2904) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2892 V2893 V2894 V2895))))) false)) false)) false))) +")))) F V2902 V2903 V2904 V2905))))) false)) false)) false))) -(defun shen.t*-defh (V2896 V2897 V2898 V2899 V2900 V2901) (let V2575 (shen.lazyderef V2896 V2900) (if (cons? V2575) (let Sig (hd V2575) (let Rules (tl V2575) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2897 V2898 V2899 Rules V2900 V2901)))) false))) +(defun shen.t*-defh (V2906 V2907 V2908 V2909 V2910 V2911) (let V2585 (shen.lazyderef V2906 V2910) (if (cons? V2585) (let Sig (hd V2585) (let Rules (tl V2585) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2907 V2908 V2909 Rules V2910 V2911)))) false))) -(defun shen.t*-defhh (V2902 V2903 V2904 V2905 V2906 V2907 V2908 V2909) (do (shen.incinfs) (shen.t*-rules V2907 V2903 1 V2904 (cons (cons V2904 (cons : (cons V2903 ()))) V2906) V2908 (freeze (shen.memo V2904 V2902 V2905 V2908 V2909))))) +(defun shen.t*-defhh (V2912 V2913 V2914 V2915 V2916 V2917 V2918 V2919) (do (shen.incinfs) (shen.t*-rules V2917 V2913 1 V2914 (cons (cons V2914 (cons : (cons V2913 ()))) V2916) V2918 (freeze (shen.memo V2914 V2912 V2915 V2918 V2919))))) -(defun shen.memo (V2910 V2911 V2912 V2913 V2914) (let Jnk (shen.newpv V2913) (do (shen.incinfs) (unify! V2912 V2911 V2913 (freeze (bind Jnk (declare (shen.lazyderef V2910 V2913) (shen.lazyderef V2912 V2913)) V2913 V2914)))))) +(defun shen.memo (V2920 V2921 V2922 V2923 V2924) (let Jnk (shen.newpv V2923) (do (shen.incinfs) (unify! V2922 V2921 V2923 (freeze (bind Jnk (declare (shen.lazyderef V2920 V2923) (shen.lazyderef V2922 V2923)) V2923 V2924)))))) -(defun shen. (V2919) (let Result (let Parse_shen. (shen. V2919) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2929) (let Result (let Parse_shen. (shen. V2929) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2920) (cond ((and (cons? V2920) (and (cons? (tl V2920)) (and (= () (tl (tl V2920))) (= (hd V2920) protect)))) V2920) ((cons? V2920) (map shen.ue V2920)) ((variable? V2920) (concat && V2920)) (true V2920))) +(defun shen.ue (V2930) (cond ((and (cons? V2930) (and (cons? (tl V2930)) (and (= () (tl (tl V2930))) (= (hd V2930) protect)))) V2930) ((cons? V2930) (map shen.ue V2930)) ((variable? V2930) (concat && V2930)) (true V2930))) -(defun shen.ue-sig (V2921) (cond ((cons? V2921) (map shen.ue-sig V2921)) ((variable? V2921) (concat &&& V2921)) (true V2921))) +(defun shen.ue-sig (V2931) (cond ((cons? V2931) (map shen.ue-sig V2931)) ((variable? V2931) (concat &&& V2931)) (true V2931))) -(defun shen.ues (V2926) (cond ((shen.ue? V2926) (cons V2926 ())) ((cons? V2926) (union (shen.ues (hd V2926)) (shen.ues (tl V2926)))) (true ()))) +(defun shen.ues (V2936) (cond ((shen.ue? V2936) (cons V2936 ())) ((cons? V2936) (union (shen.ues (hd V2936)) (shen.ues (tl V2936)))) (true ()))) -(defun shen.ue? (V2927) (and (symbol? V2927) (shen.ue-h? (str V2927)))) +(defun shen.ue? (V2937) (and (symbol? V2937) (shen.ue-h? (str V2937)))) -(defun shen.ue-h? (V2934) (cond ((and (shen.+string? V2934) (and (= "&" (pos V2934 0)) (and (shen.+string? (tlstr V2934)) (= "&" (pos (tlstr V2934) 0))))) true) (true false))) +(defun shen.ue-h? (V2944) (cond ((and (shen.+string? V2944) (and (= "&" (pos V2944 0)) (and (shen.+string? (tlstr V2944)) (= "&" (pos (tlstr V2944) 0))))) true) (true false))) -(defun shen.t*-rules (V2935 V2936 V2937 V2938 V2939 V2940 V2941) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2550 (shen.lazyderef V2935 V2940) (if (= () V2550) (do (shen.incinfs) (thaw V2941)) false)) (if (= Case false) (let Case (let V2551 (shen.lazyderef V2935 V2940) (if (cons? V2551) (let V2552 (shen.lazyderef (hd V2551) V2940) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V2940) (if (= () V2553) (let V2554 (shen.lazyderef (tl V2552) V2940) (if (cons? V2554) (let Action (hd V2554) (let V2555 (shen.lazyderef (tl V2554) V2940) (if (= () V2555) (let Rules (tl V2551) (let V2556 (shen.lazyderef V2936 V2940) (if (cons? V2556) (let V2557 (shen.lazyderef (hd V2556) V2940) (if (= --> V2557) (let V2558 (shen.lazyderef (tl V2556) V2940) (if (cons? V2558) (let A (hd V2558) (let V2559 (shen.lazyderef (tl V2558) V2940) (if (= () V2559) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2939 V2940 (freeze (cut Throwcontrol V2940 (freeze (shen.t*-rules Rules A (+ V2937 1) V2938 V2939 V2940 V2941)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2560 (shen.lazyderef V2935 V2940) (if (cons? V2560) (let Rule (hd V2560) (let Rules (tl V2560) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2936 V2939 V2940 (freeze (cut Throwcontrol V2940 (freeze (shen.t*-rules Rules V2936 (+ V2937 1) V2938 V2939 V2940 V2941)))))))) false)) (if (= Case false) (let Err (shen.newpv V2940) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2937 V2940) (cn " of " (shen.app (shen.lazyderef V2938 V2940) "" shen.a)) shen.a))) V2940 V2941))) Case)) Case)) Case))))) +(defun shen.t*-rules (V2945 V2946 V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2560 (shen.lazyderef V2945 V2950) (if (= () V2560) (do (shen.incinfs) (thaw V2951)) false)) (if (= Case false) (let Case (let V2561 (shen.lazyderef V2945 V2950) (if (cons? V2561) (let V2562 (shen.lazyderef (hd V2561) V2950) (if (cons? V2562) (let V2563 (shen.lazyderef (hd V2562) V2950) (if (= () V2563) (let V2564 (shen.lazyderef (tl V2562) V2950) (if (cons? V2564) (let Action (hd V2564) (let V2565 (shen.lazyderef (tl V2564) V2950) (if (= () V2565) (let Rules (tl V2561) (let V2566 (shen.lazyderef V2946 V2950) (if (cons? V2566) (let V2567 (shen.lazyderef (hd V2566) V2950) (if (= --> V2567) (let V2568 (shen.lazyderef (tl V2566) V2950) (if (cons? V2568) (let A (hd V2568) (let V2569 (shen.lazyderef (tl V2568) V2950) (if (= () V2569) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rules Rules A (+ V2947 1) V2948 V2949 V2950 V2951)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2570 (shen.lazyderef V2945 V2950) (if (cons? V2570) (let Rule (hd V2570) (let Rules (tl V2570) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2946 V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rules Rules V2946 (+ V2947 1) V2948 V2949 V2950 V2951)))))))) false)) (if (= Case false) (let Err (shen.newpv V2950) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2947 V2950) (cn " of " (shen.app (shen.lazyderef V2948 V2950) "" shen.a)) shen.a))) V2950 V2951))) Case)) Case)) Case))))) -(defun shen.t*-rule (V2942 V2943 V2944 V2945 V2946) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2532 (shen.lazyderef V2942 V2945) (if (cons? V2532) (let V2533 (shen.lazyderef (hd V2532) V2945) (if (= () V2533) (let V2534 (shen.lazyderef (tl V2532) V2945) (if (cons? V2534) (let Action (hd V2534) (let V2535 (shen.lazyderef (tl V2534) V2945) (if (= () V2535) (do (shen.incinfs) (cut Throwcontrol V2945 (freeze (shen.t*-action (shen.curry Action) V2943 V2944 V2945 V2946)))) false))) false)) false)) false)) (if (= Case false) (let V2536 (shen.lazyderef V2942 V2945) (if (cons? V2536) (let V2537 (shen.lazyderef (hd V2536) V2945) (if (cons? V2537) (let Pattern (hd V2537) (let Patterns (tl V2537) (let V2538 (shen.lazyderef (tl V2536) V2945) (if (cons? V2538) (let Action (hd V2538) (let V2539 (shen.lazyderef (tl V2538) V2945) (if (= () V2539) (let V2540 (shen.lazyderef V2943 V2945) (if (cons? V2540) (let A (hd V2540) (let V2541 (shen.lazyderef (tl V2540) V2945) (if (cons? V2541) (let V2542 (shen.lazyderef (hd V2541) V2945) (if (= --> V2542) (let V2543 (shen.lazyderef (tl V2541) V2945) (if (cons? V2543) (let B (hd V2543) (let V2544 (shen.lazyderef (tl V2543) V2945) (if (= () V2544) (do (shen.incinfs) (shen.t*-pattern Pattern A V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2944) V2945 V2946)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rule (V2952 V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2542 (shen.lazyderef V2952 V2955) (if (cons? V2542) (let V2543 (shen.lazyderef (hd V2542) V2955) (if (= () V2543) (let V2544 (shen.lazyderef (tl V2542) V2955) (if (cons? V2544) (let Action (hd V2544) (let V2545 (shen.lazyderef (tl V2544) V2955) (if (= () V2545) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (shen.curry Action) V2953 V2954 V2955 V2956)))) false))) false)) false)) false)) (if (= Case false) (let V2546 (shen.lazyderef V2952 V2955) (if (cons? V2546) (let V2547 (shen.lazyderef (hd V2546) V2955) (if (cons? V2547) (let Pattern (hd V2547) (let Patterns (tl V2547) (let V2548 (shen.lazyderef (tl V2546) V2955) (if (cons? V2548) (let Action (hd V2548) (let V2549 (shen.lazyderef (tl V2548) V2955) (if (= () V2549) (let V2550 (shen.lazyderef V2953 V2955) (if (cons? V2550) (let A (hd V2550) (let V2551 (shen.lazyderef (tl V2550) V2955) (if (cons? V2551) (let V2552 (shen.lazyderef (hd V2551) V2955) (if (= --> V2552) (let V2553 (shen.lazyderef (tl V2551) V2955) (if (cons? V2553) (let B (hd V2553) (let V2554 (shen.lazyderef (tl V2553) V2955) (if (= () V2554) (do (shen.incinfs) (shen.t*-pattern Pattern A V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2954) V2955 V2956)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-action (V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2509 (shen.lazyderef V2947 V2950) (if (cons? V2509) (let V2510 (shen.lazyderef (hd V2509) V2950) (if (= where V2510) (let V2511 (shen.lazyderef (tl V2509) V2950) (if (cons? V2511) (let P (hd V2511) (let V2512 (shen.lazyderef (tl V2511) V2950) (if (cons? V2512) (let Action (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2950) (if (= () V2513) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-action Action V2948 (cons (cons P (cons : (cons verified ()))) V2949) V2950 V2951)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2514 (shen.lazyderef V2947 V2950) (if (cons? V2514) (let V2515 (shen.lazyderef (hd V2514) V2950) (if (= shen.choicepoint! V2515) (let V2516 (shen.lazyderef (tl V2514) V2950) (if (cons? V2516) (let V2517 (shen.lazyderef (hd V2516) V2950) (if (cons? V2517) (let V2518 (shen.lazyderef (hd V2517) V2950) (if (cons? V2518) (let V2519 (shen.lazyderef (hd V2518) V2950) (if (= fail-if V2519) (let V2520 (shen.lazyderef (tl V2518) V2950) (if (cons? V2520) (let F (hd V2520) (let V2521 (shen.lazyderef (tl V2520) V2950) (if (= () V2521) (let V2522 (shen.lazyderef (tl V2517) V2950) (if (cons? V2522) (let Action (hd V2522) (let V2523 (shen.lazyderef (tl V2522) V2950) (if (= () V2523) (let V2524 (shen.lazyderef (tl V2516) V2950) (if (= () V2524) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2948 V2949 V2950 V2951)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2525 (shen.lazyderef V2947 V2950) (if (cons? V2525) (let V2526 (shen.lazyderef (hd V2525) V2950) (if (= shen.choicepoint! V2526) (let V2527 (shen.lazyderef (tl V2525) V2950) (if (cons? V2527) (let Action (hd V2527) (let V2528 (shen.lazyderef (tl V2527) V2950) (if (= () V2528) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2948 V2949 V2950 V2951)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2947 (cons : (cons V2948 ()))) V2949 V2950 V2951)) Case)) Case)) Case))))) +(defun shen.t*-action (V2957 V2958 V2959 V2960 V2961) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2519 (shen.lazyderef V2957 V2960) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2960) (if (= where V2520) (let V2521 (shen.lazyderef (tl V2519) V2960) (if (cons? V2521) (let P (hd V2521) (let V2522 (shen.lazyderef (tl V2521) V2960) (if (cons? V2522) (let Action (hd V2522) (let V2523 (shen.lazyderef (tl V2522) V2960) (if (= () V2523) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2959 V2960 (freeze (cut Throwcontrol V2960 (freeze (shen.t*-action Action V2958 (cons (cons P (cons : (cons verified ()))) V2959) V2960 V2961)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2524 (shen.lazyderef V2957 V2960) (if (cons? V2524) (let V2525 (shen.lazyderef (hd V2524) V2960) (if (= shen.choicepoint! V2525) (let V2526 (shen.lazyderef (tl V2524) V2960) (if (cons? V2526) (let V2527 (shen.lazyderef (hd V2526) V2960) (if (cons? V2527) (let V2528 (shen.lazyderef (hd V2527) V2960) (if (cons? V2528) (let V2529 (shen.lazyderef (hd V2528) V2960) (if (= fail-if V2529) (let V2530 (shen.lazyderef (tl V2528) V2960) (if (cons? V2530) (let F (hd V2530) (let V2531 (shen.lazyderef (tl V2530) V2960) (if (= () V2531) (let V2532 (shen.lazyderef (tl V2527) V2960) (if (cons? V2532) (let Action (hd V2532) (let V2533 (shen.lazyderef (tl V2532) V2960) (if (= () V2533) (let V2534 (shen.lazyderef (tl V2526) V2960) (if (= () V2534) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2958 V2959 V2960 V2961)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2535 (shen.lazyderef V2957 V2960) (if (cons? V2535) (let V2536 (shen.lazyderef (hd V2535) V2960) (if (= shen.choicepoint! V2536) (let V2537 (shen.lazyderef (tl V2535) V2960) (if (cons? V2537) (let Action (hd V2537) (let V2538 (shen.lazyderef (tl V2537) V2960) (if (= () V2538) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2958 V2959 V2960 V2961)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2957 (cons : (cons V2958 ()))) V2959 V2960 V2961)) Case)) Case)) Case))))) -(defun shen.t*-pattern (V2952 V2953 V2954 V2955) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2954) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2952) Hyp V2954 (freeze (cut Throwcontrol V2954 (freeze (shen.t* (cons V2952 (cons : (cons V2953 ()))) Hyp V2954 V2955)))))))))) +(defun shen.t*-pattern (V2962 V2963 V2964 V2965) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2964) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2962) Hyp V2964 (freeze (cut Throwcontrol V2964 (freeze (shen.t* (cons V2962 (cons : (cons V2963 ()))) Hyp V2964 V2965)))))))))) -(defun shen.tms->hyp (V2956 V2957 V2958 V2959) (let Case (let V2493 (shen.lazyderef V2956 V2958) (if (= () V2493) (let V2494 (shen.lazyderef V2957 V2958) (if (= () V2494) (do (shen.incinfs) (thaw V2959)) (if (shen.pvar? V2494) (do (shen.bindv V2494 () V2958) (let Result (do (shen.incinfs) (thaw V2959)) (do (shen.unbindv V2494 V2958) Result))) false))) false)) (if (= Case false) (let V2495 (shen.lazyderef V2956 V2958) (if (cons? V2495) (let Tm2490 (hd V2495) (let Tms (tl V2495) (let V2496 (shen.lazyderef V2957 V2958) (if (cons? V2496) (let V2497 (shen.lazyderef (hd V2496) V2958) (if (cons? V2497) (let Tm (hd V2497) (let V2498 (shen.lazyderef (tl V2497) V2958) (if (cons? V2498) (let V2499 (shen.lazyderef (hd V2498) V2958) (if (= : V2499) (let V2500 (shen.lazyderef (tl V2498) V2958) (if (cons? V2500) (let A (hd V2500) (let V2501 (shen.lazyderef (tl V2500) V2958) (if (= () V2501) (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (if (shen.pvar? V2501) (do (shen.bindv V2501 () V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2501 V2958) Result))) false)))) (if (shen.pvar? V2500) (let A (shen.newpv V2958) (do (shen.bindv V2500 (cons A ()) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2500 V2958) Result)))) false))) (if (shen.pvar? V2499) (do (shen.bindv V2499 : V2958) (let Result (let V2502 (shen.lazyderef (tl V2498) V2958) (if (cons? V2502) (let A (hd V2502) (let V2503 (shen.lazyderef (tl V2502) V2958) (if (= () V2503) (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (if (shen.pvar? V2503) (do (shen.bindv V2503 () V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2503 V2958) Result))) false)))) (if (shen.pvar? V2502) (let A (shen.newpv V2958) (do (shen.bindv V2502 (cons A ()) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2502 V2958) Result)))) false))) (do (shen.unbindv V2499 V2958) Result))) false))) (if (shen.pvar? V2498) (let A (shen.newpv V2958) (do (shen.bindv V2498 (cons : (cons A ())) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2498 V2958) Result)))) false)))) (if (shen.pvar? V2497) (let Tm (shen.newpv V2958) (let A (shen.newpv V2958) (do (shen.bindv V2497 (cons Tm (cons : (cons A ()))) V2958) (let Result (let Hyp (tl V2496) (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959))))) (do (shen.unbindv V2497 V2958) Result))))) false))) (if (shen.pvar? V2496) (let Tm (shen.newpv V2958) (let A (shen.newpv V2958) (let Hyp (shen.newpv V2958) (do (shen.bindv V2496 (cons (cons Tm (cons : (cons A ()))) Hyp) V2958) (let Result (do (shen.incinfs) (unify! Tm Tm2490 V2958 (freeze (shen.tms->hyp Tms Hyp V2958 V2959)))) (do (shen.unbindv V2496 V2958) Result)))))) false))))) false)) Case))) +(defun shen.tms->hyp (V2966 V2967 V2968 V2969) (let Case (let V2503 (shen.lazyderef V2966 V2968) (if (= () V2503) (let V2504 (shen.lazyderef V2967 V2968) (if (= () V2504) (do (shen.incinfs) (thaw V2969)) (if (shen.pvar? V2504) (do (shen.bindv V2504 () V2968) (let Result (do (shen.incinfs) (thaw V2969)) (do (shen.unbindv V2504 V2968) Result))) false))) false)) (if (= Case false) (let V2505 (shen.lazyderef V2966 V2968) (if (cons? V2505) (let Tm2500 (hd V2505) (let Tms (tl V2505) (let V2506 (shen.lazyderef V2967 V2968) (if (cons? V2506) (let V2507 (shen.lazyderef (hd V2506) V2968) (if (cons? V2507) (let Tm (hd V2507) (let V2508 (shen.lazyderef (tl V2507) V2968) (if (cons? V2508) (let V2509 (shen.lazyderef (hd V2508) V2968) (if (= : V2509) (let V2510 (shen.lazyderef (tl V2508) V2968) (if (cons? V2510) (let A (hd V2510) (let V2511 (shen.lazyderef (tl V2510) V2968) (if (= () V2511) (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (if (shen.pvar? V2511) (do (shen.bindv V2511 () V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2511 V2968) Result))) false)))) (if (shen.pvar? V2510) (let A (shen.newpv V2968) (do (shen.bindv V2510 (cons A ()) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2510 V2968) Result)))) false))) (if (shen.pvar? V2509) (do (shen.bindv V2509 : V2968) (let Result (let V2512 (shen.lazyderef (tl V2508) V2968) (if (cons? V2512) (let A (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2968) (if (= () V2513) (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (if (shen.pvar? V2513) (do (shen.bindv V2513 () V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2513 V2968) Result))) false)))) (if (shen.pvar? V2512) (let A (shen.newpv V2968) (do (shen.bindv V2512 (cons A ()) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2512 V2968) Result)))) false))) (do (shen.unbindv V2509 V2968) Result))) false))) (if (shen.pvar? V2508) (let A (shen.newpv V2968) (do (shen.bindv V2508 (cons : (cons A ())) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2508 V2968) Result)))) false)))) (if (shen.pvar? V2507) (let Tm (shen.newpv V2968) (let A (shen.newpv V2968) (do (shen.bindv V2507 (cons Tm (cons : (cons A ()))) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2507 V2968) Result))))) false))) (if (shen.pvar? V2506) (let Tm (shen.newpv V2968) (let A (shen.newpv V2968) (let Hyp (shen.newpv V2968) (do (shen.bindv V2506 (cons (cons Tm (cons : (cons A ()))) Hyp) V2968) (let Result (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969)))) (do (shen.unbindv V2506 V2968) Result)))))) false))))) false)) Case))) -(defun findall (V2960 V2961 V2962 V2963 V2964) (let B (shen.newpv V2963) (let A (shen.newpv V2963) (do (shen.incinfs) (bind A (gensym shen.a) V2963 (freeze (bind B (set (shen.lazyderef A V2963) ()) V2963 (freeze (shen.findallhelp V2960 V2961 V2962 A V2963 V2964))))))))) +(defun findall (V2970 V2971 V2972 V2973 V2974) (let B (shen.newpv V2973) (let A (shen.newpv V2973) (do (shen.incinfs) (bind A (gensym shen.a) V2973 (freeze (bind B (set (shen.lazyderef A V2973) ()) V2973 (freeze (shen.findallhelp V2970 V2971 V2972 A V2973 V2974))))))))) -(defun shen.findallhelp (V2965 V2966 V2967 V2968 V2969 V2970) (let Case (do (shen.incinfs) (call V2966 V2969 (freeze (shen.remember V2968 V2965 V2969 (freeze (fwhen false V2969 V2970)))))) (if (= Case false) (do (shen.incinfs) (bind V2967 (value (shen.lazyderef V2968 V2969)) V2969 V2970)) Case))) +(defun shen.findallhelp (V2975 V2976 V2977 V2978 V2979 V2980) (let Case (do (shen.incinfs) (call V2976 V2979 (freeze (shen.remember V2978 V2975 V2979 (freeze (fwhen false V2979 V2980)))))) (if (= Case false) (do (shen.incinfs) (bind V2977 (value (shen.lazyderef V2978 V2979)) V2979 V2980)) Case))) -(defun shen.remember (V2971 V2972 V2973 V2974) (let B (shen.newpv V2973) (do (shen.incinfs) (bind B (set (shen.deref V2971 V2973) (cons (shen.deref V2972 V2973) (value (shen.deref V2971 V2973)))) V2973 V2974)))) +(defun shen.remember (V2981 V2982 V2983 V2984) (let B (shen.newpv V2983) (do (shen.incinfs) (bind B (set (shen.deref V2981 V2983) (cons (shen.deref V2982 V2983) (value (shen.deref V2981 V2983)))) V2983 V2984)))) -(defun shen.t*-defcc (V2975 V2976 V2977 V2978 V2979) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2466 (shen.lazyderef V2975 V2978) (if (cons? V2466) (let V2467 (shen.lazyderef (hd V2466) V2978) (if (= defcc V2467) (let V2468 (shen.lazyderef (tl V2466) V2978) (if (cons? V2468) (let F (hd V2468) (let V2469 (shen.lazyderef (tl V2468) V2978) (if (cons? V2469) (let V2470 (shen.lazyderef (hd V2469) V2978) (if (= { V2470) (let V2471 (shen.lazyderef (tl V2469) V2978) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V2978) (if (cons? V2472) (let V2473 (shen.lazyderef (hd V2472) V2978) (if (= list V2473) (let V2474 (shen.lazyderef (tl V2472) V2978) (if (cons? V2474) (let A (hd V2474) (let V2475 (shen.lazyderef (tl V2474) V2978) (if (= () V2475) (let V2476 (shen.lazyderef (tl V2471) V2978) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2978) (if (= ==> V2477) (let V2478 (shen.lazyderef (tl V2476) V2978) (if (cons? V2478) (let B (hd V2478) (let V2479 (shen.lazyderef (tl V2478) V2978) (if (cons? V2479) (let V2480 (shen.lazyderef (hd V2479) V2978) (if (= } V2480) (let Rest (tl V2479) (let Rest& (shen.newpv V2978) (let Rest&& (shen.newpv V2978) (let Rules (shen.newpv V2978) (let ListA&& (shen.newpv V2978) (let B&& (shen.newpv V2978) (let Sig (shen.newpv V2978) (let Declare (shen.newpv V2978) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2978) ())) (cons ==> (cons (shen.lazyderef B V2978) ())))) V2978 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2978)) V2978 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2978)))) V2978 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2978)) V2978 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2978)) V2978 (freeze (shen.get-rules Rules Rest&& V2978 (freeze (cut Throwcontrol V2978 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2977) 1 V2978 (freeze (unify V2976 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2978 (freeze (bind Declare (declare (shen.lazyderef F V2978) (cons (cons list (cons (shen.lazyderef A V2978) ())) (cons ==> (cons (shen.lazyderef B V2978) ())))) V2978 V2979)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) +(defun shen.t*-defcc (V2985 V2986 V2987 V2988 V2989) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2476 (shen.lazyderef V2985 V2988) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2988) (if (= defcc V2477) (let V2478 (shen.lazyderef (tl V2476) V2988) (if (cons? V2478) (let F (hd V2478) (let V2479 (shen.lazyderef (tl V2478) V2988) (if (cons? V2479) (let V2480 (shen.lazyderef (hd V2479) V2988) (if (= { V2480) (let V2481 (shen.lazyderef (tl V2479) V2988) (if (cons? V2481) (let V2482 (shen.lazyderef (hd V2481) V2988) (if (cons? V2482) (let V2483 (shen.lazyderef (hd V2482) V2988) (if (= list V2483) (let V2484 (shen.lazyderef (tl V2482) V2988) (if (cons? V2484) (let A (hd V2484) (let V2485 (shen.lazyderef (tl V2484) V2988) (if (= () V2485) (let V2486 (shen.lazyderef (tl V2481) V2988) (if (cons? V2486) (let V2487 (shen.lazyderef (hd V2486) V2988) (if (= ==> V2487) (let V2488 (shen.lazyderef (tl V2486) V2988) (if (cons? V2488) (let B (hd V2488) (let V2489 (shen.lazyderef (tl V2488) V2988) (if (cons? V2489) (let V2490 (shen.lazyderef (hd V2489) V2988) (if (= } V2490) (let Rest (tl V2489) (let Rest& (shen.newpv V2988) (let Rest&& (shen.newpv V2988) (let Rules (shen.newpv V2988) (let ListA&& (shen.newpv V2988) (let B&& (shen.newpv V2988) (let Sig (shen.newpv V2988) (let Declare (shen.newpv V2988) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2988) ())) (cons ==> (cons (shen.lazyderef B V2988) ())))) V2988 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2988)) V2988 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2988)))) V2988 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2988)) V2988 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2988)) V2988 (freeze (shen.get-rules Rules Rest&& V2988 (freeze (cut Throwcontrol V2988 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2987) 1 V2988 (freeze (unify V2986 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2988 (freeze (bind Declare (declare (shen.lazyderef F V2988) (cons (cons list (cons (shen.lazyderef A V2988) ())) (cons ==> (cons (shen.lazyderef B V2988) ())))) V2988 V2989)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) -(defun shen.plug-wildcards (V2980) (cond ((cons? V2980) (map shen.plug-wildcards V2980)) ((= V2980 _) (gensym (intern "X"))) (true V2980))) +(defun shen.plug-wildcards (V2990) (cond ((cons? V2990) (map shen.plug-wildcards V2990)) ((= V2990 _) (gensym (intern "X"))) (true V2990))) -(defun shen.get-rules (V2981 V2982 V2983 V2984) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2459 (shen.lazyderef V2981 V2983) (if (= () V2459) (let V2460 (shen.lazyderef V2982 V2983) (if (= () V2460) (do (shen.incinfs) (cut Throwcontrol V2983 V2984)) false)) (if (shen.pvar? V2459) (do (shen.bindv V2459 () V2983) (let Result (let V2461 (shen.lazyderef V2982 V2983) (if (= () V2461) (do (shen.incinfs) (cut Throwcontrol V2983 V2984)) false)) (do (shen.unbindv V2459 V2983) Result))) false))) (if (= Case false) (let V2462 (shen.lazyderef V2981 V2983) (if (cons? V2462) (let Rule (hd V2462) (let Rules (tl V2462) (let Other (shen.newpv V2983) (do (shen.incinfs) (shen.first-rule V2982 Rule Other V2983 (freeze (cut Throwcontrol V2983 (freeze (shen.get-rules Rules Other V2983 V2984))))))))) (if (shen.pvar? V2462) (let Rule (shen.newpv V2983) (let Rules (shen.newpv V2983) (do (shen.bindv V2462 (cons Rule Rules) V2983) (let Result (let Other (shen.newpv V2983) (do (shen.incinfs) (shen.first-rule V2982 Rule Other V2983 (freeze (cut Throwcontrol V2983 (freeze (shen.get-rules Rules Other V2983 V2984))))))) (do (shen.unbindv V2462 V2983) Result))))) false))) Case))))) +(defun shen.get-rules (V2991 V2992 V2993 V2994) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2469 (shen.lazyderef V2991 V2993) (if (= () V2469) (let V2470 (shen.lazyderef V2992 V2993) (if (= () V2470) (do (shen.incinfs) (cut Throwcontrol V2993 V2994)) false)) (if (shen.pvar? V2469) (do (shen.bindv V2469 () V2993) (let Result (let V2471 (shen.lazyderef V2992 V2993) (if (= () V2471) (do (shen.incinfs) (cut Throwcontrol V2993 V2994)) false)) (do (shen.unbindv V2469 V2993) Result))) false))) (if (= Case false) (let V2472 (shen.lazyderef V2991 V2993) (if (cons? V2472) (let Rule (hd V2472) (let Rules (tl V2472) (let Other (shen.newpv V2993) (do (shen.incinfs) (shen.first-rule V2992 Rule Other V2993 (freeze (cut Throwcontrol V2993 (freeze (shen.get-rules Rules Other V2993 V2994))))))))) (if (shen.pvar? V2472) (let Rule (shen.newpv V2993) (let Rules (shen.newpv V2993) (do (shen.bindv V2472 (cons Rule Rules) V2993) (let Result (let Other (shen.newpv V2993) (do (shen.incinfs) (shen.first-rule V2992 Rule Other V2993 (freeze (cut Throwcontrol V2993 (freeze (shen.get-rules Rules Other V2993 V2994))))))) (do (shen.unbindv V2472 V2993) Result))))) false))) Case))))) -(defun shen.first-rule (V2985 V2986 V2987 V2988 V2989) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2452 (shen.lazyderef V2985 V2988) (if (cons? V2452) (let V2453 (shen.lazyderef (hd V2452) V2988) (if (= ; V2453) (let Other2447 (tl V2452) (let V2454 (shen.lazyderef V2986 V2988) (if (= () V2454) (do (shen.incinfs) (unify! V2987 Other2447 V2988 (freeze (cut Throwcontrol V2988 V2989)))) (if (shen.pvar? V2454) (do (shen.bindv V2454 () V2988) (let Result (do (shen.incinfs) (unify! V2987 Other2447 V2988 (freeze (cut Throwcontrol V2988 V2989)))) (do (shen.unbindv V2454 V2988) Result))) false)))) false)) false)) (if (= Case false) (let V2455 (shen.lazyderef V2985 V2988) (if (cons? V2455) (let X2448 (hd V2455) (let Rest (tl V2455) (let V2456 (shen.lazyderef V2986 V2988) (if (cons? V2456) (let X (hd V2456) (let Rule (tl V2456) (do (shen.incinfs) (unify! X X2448 V2988 (freeze (shen.first-rule Rest Rule V2987 V2988 V2989)))))) (if (shen.pvar? V2456) (let X (shen.newpv V2988) (let Rule (shen.newpv V2988) (do (shen.bindv V2456 (cons X Rule) V2988) (let Result (do (shen.incinfs) (unify! X X2448 V2988 (freeze (shen.first-rule Rest Rule V2987 V2988 V2989)))) (do (shen.unbindv V2456 V2988) Result))))) false))))) false)) Case))))) +(defun shen.first-rule (V2995 V2996 V2997 V2998 V2999) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2462 (shen.lazyderef V2995 V2998) (if (cons? V2462) (let V2463 (shen.lazyderef (hd V2462) V2998) (if (= ; V2463) (let Other2457 (tl V2462) (let V2464 (shen.lazyderef V2996 V2998) (if (= () V2464) (do (shen.incinfs) (unify! V2997 Other2457 V2998 (freeze (cut Throwcontrol V2998 V2999)))) (if (shen.pvar? V2464) (do (shen.bindv V2464 () V2998) (let Result (do (shen.incinfs) (unify! V2997 Other2457 V2998 (freeze (cut Throwcontrol V2998 V2999)))) (do (shen.unbindv V2464 V2998) Result))) false)))) false)) false)) (if (= Case false) (let V2465 (shen.lazyderef V2995 V2998) (if (cons? V2465) (let X2458 (hd V2465) (let Rest (tl V2465) (let V2466 (shen.lazyderef V2996 V2998) (if (cons? V2466) (let X (hd V2466) (let Rule (tl V2466) (do (shen.incinfs) (unify! X X2458 V2998 (freeze (shen.first-rule Rest Rule V2997 V2998 V2999)))))) (if (shen.pvar? V2466) (let X (shen.newpv V2998) (let Rule (shen.newpv V2998) (do (shen.bindv V2466 (cons X Rule) V2998) (let Result (do (shen.incinfs) (unify! X X2458 V2998 (freeze (shen.first-rule Rest Rule V2997 V2998 V2999)))) (do (shen.unbindv V2466 V2998) Result))))) false))))) false)) Case))))) -(defun shen.tc-rules (V2990 V2991 V2992 V2993 V2994 V2995 V2996 V2997) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2441 (shen.lazyderef V2991 V2996) (if (= () V2441) (do (shen.incinfs) (thaw V2997)) false)) (if (= Case false) (let V2442 (shen.lazyderef V2991 V2996) (if (cons? V2442) (let Rule (hd V2442) (let Rules (tl V2442) (let V2443 (shen.lazyderef V2992 V2996) (if (cons? V2443) (let V2444 (shen.lazyderef (hd V2443) V2996) (if (= list V2444) (let V2445 (shen.lazyderef (tl V2443) V2996) (if (cons? V2445) (let A (hd V2445) (let V2446 (shen.lazyderef (tl V2445) V2996) (if (= () V2446) (let M (shen.newpv V2996) (do (shen.incinfs) (shen.tc-rule V2990 Rule A V2993 V2994 V2995 V2996 (freeze (bind M (+ (shen.deref V2995 V2996) 1) V2996 (freeze (cut Throwcontrol V2996 (freeze (shen.tc-rules V2990 Rules (cons list (cons A ())) V2993 V2994 M V2996 V2997))))))))) false))) false)) false)) false)))) false)) Case))))) +(defun shen.tc-rules (V3000 V3001 V3002 V3003 V3004 V3005 V3006 V3007) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2451 (shen.lazyderef V3001 V3006) (if (= () V2451) (do (shen.incinfs) (thaw V3007)) false)) (if (= Case false) (let V2452 (shen.lazyderef V3001 V3006) (if (cons? V2452) (let Rule (hd V2452) (let Rules (tl V2452) (let V2453 (shen.lazyderef V3002 V3006) (if (cons? V2453) (let V2454 (shen.lazyderef (hd V2453) V3006) (if (= list V2454) (let V2455 (shen.lazyderef (tl V2453) V3006) (if (cons? V2455) (let A (hd V2455) (let V2456 (shen.lazyderef (tl V2455) V3006) (if (= () V2456) (let M (shen.newpv V3006) (do (shen.incinfs) (shen.tc-rule V3000 Rule A V3003 V3004 V3005 V3006 (freeze (bind M (+ (shen.deref V3005 V3006) 1) V3006 (freeze (cut Throwcontrol V3006 (freeze (shen.tc-rules V3000 Rules (cons list (cons A ())) V3003 V3004 M V3006 V3007))))))))) false))) false)) false)) false)))) false)) Case))))) -(defun shen.tc-rule (V2998 V2999 V3000 V3001 V3002 V3003 V3004 V3005) (let Case (do (shen.incinfs) (shen.check-defcc-rule V2999 V3000 V3001 V3002 V3004 V3005)) (if (= Case false) (let Err (shen.newpv V3004) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3003 V3004) (cn " of " (shen.app (shen.lazyderef V2998 V3004) "" shen.a)) shen.a))) V3004 V3005))) Case))) +(defun shen.tc-rule (V3008 V3009 V3010 V3011 V3012 V3013 V3014 V3015) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3009 V3010 V3011 V3012 V3014 V3015)) (if (= Case false) (let Err (shen.newpv V3014) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3013 V3014) (cn " of " (shen.app (shen.lazyderef V3008 V3014) "" shen.a)) shen.a))) V3014 V3015))) Case))) -(defun shen.check-defcc-rule (V3006 V3007 V3008 V3009 V3010 V3011) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3010) (let Semantics (shen.newpv V3010) (let SynHyps (shen.newpv V3010) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3006 V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.syntax-hyps Syntax V3009 SynHyps V3007 V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.syntax-check Syntax V3007 SynHyps V3010 (freeze (cut Throwcontrol V3010 (freeze (shen.semantics-check Semantics V3008 SynHyps V3010 V3011)))))))))))))))))))) +(defun shen.check-defcc-rule (V3016 V3017 V3018 V3019 V3020 V3021) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3020) (let Semantics (shen.newpv V3020) (let SynHyps (shen.newpv V3020) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3016 V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.syntax-hyps Syntax V3019 SynHyps V3017 V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.syntax-check Syntax V3017 SynHyps V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.semantics-check Semantics V3018 SynHyps V3020 V3021)))))))))))))))))))) -(defun shen.syntax-hyps (V3012 V3013 V3014 V3015 V3016 V3017) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2414 (shen.lazyderef V3012 V3016) (if (= () V2414) (do (shen.incinfs) (unify! V3014 V3013 V3016 V3017)) false)) (if (= Case false) (let Case (let V2415 (shen.lazyderef V3012 V3016) (if (cons? V2415) (let X2408 (hd V2415) (let Y (tl V2415) (let V2416 (shen.lazyderef V3014 V3016) (if (cons? V2416) (let V2417 (shen.lazyderef (hd V2416) V3016) (if (cons? V2417) (let X (hd V2417) (let V2418 (shen.lazyderef (tl V2417) V3016) (if (cons? V2418) (let V2419 (shen.lazyderef (hd V2418) V3016) (if (= : V2419) (let V2420 (shen.lazyderef (tl V2418) V3016) (if (cons? V2420) (let A2409 (hd V2420) (let V2421 (shen.lazyderef (tl V2420) V3016) (if (= () V2421) (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (if (shen.pvar? V2421) (do (shen.bindv V2421 () V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2421 V3016) Result))) false)))) (if (shen.pvar? V2420) (let A2409 (shen.newpv V3016) (do (shen.bindv V2420 (cons A2409 ()) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2420 V3016) Result)))) false))) (if (shen.pvar? V2419) (do (shen.bindv V2419 : V3016) (let Result (let V2422 (shen.lazyderef (tl V2418) V3016) (if (cons? V2422) (let A2409 (hd V2422) (let V2423 (shen.lazyderef (tl V2422) V3016) (if (= () V2423) (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (if (shen.pvar? V2423) (do (shen.bindv V2423 () V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2423 V3016) Result))) false)))) (if (shen.pvar? V2422) (let A2409 (shen.newpv V3016) (do (shen.bindv V2422 (cons A2409 ()) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2422 V3016) Result)))) false))) (do (shen.unbindv V2419 V3016) Result))) false))) (if (shen.pvar? V2418) (let A2409 (shen.newpv V3016) (do (shen.bindv V2418 (cons : (cons A2409 ())) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2418 V3016) Result)))) false)))) (if (shen.pvar? V2417) (let X (shen.newpv V3016) (let A2409 (shen.newpv V3016) (do (shen.bindv V2417 (cons X (cons : (cons A2409 ()))) V3016) (let Result (let SynHyps (tl V2416) (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017))))))))))) (do (shen.unbindv V2417 V3016) Result))))) false))) (if (shen.pvar? V2416) (let X (shen.newpv V3016) (let A2409 (shen.newpv V3016) (let SynHyps (shen.newpv V3016) (do (shen.bindv V2416 (cons (cons X (cons : (cons A2409 ()))) SynHyps) V3016) (let Result (do (shen.incinfs) (unify! V3015 A2409 V3016 (freeze (unify! X X2408 V3016 (freeze (fwhen (shen.ue? (shen.deref X V3016)) V3016 (freeze (cut Throwcontrol V3016 (freeze (shen.syntax-hyps Y V3013 SynHyps V3015 V3016 V3017)))))))))) (do (shen.unbindv V2416 V3016) Result)))))) false))))) false)) (if (= Case false) (let V2424 (shen.lazyderef V3012 V3016) (if (cons? V2424) (let Y (tl V2424) (do (shen.incinfs) (shen.syntax-hyps Y V3013 V3014 V3015 V3016 V3017))) false)) Case)) Case))))) +(defun shen.syntax-hyps (V3022 V3023 V3024 V3025 V3026 V3027) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2424 (shen.lazyderef V3022 V3026) (if (= () V2424) (do (shen.incinfs) (unify! V3024 V3023 V3026 V3027)) false)) (if (= Case false) (let Case (let V2425 (shen.lazyderef V3022 V3026) (if (cons? V2425) (let X2418 (hd V2425) (let Y (tl V2425) (let V2426 (shen.lazyderef V3024 V3026) (if (cons? V2426) (let V2427 (shen.lazyderef (hd V2426) V3026) (if (cons? V2427) (let X (hd V2427) (let V2428 (shen.lazyderef (tl V2427) V3026) (if (cons? V2428) (let V2429 (shen.lazyderef (hd V2428) V3026) (if (= : V2429) (let V2430 (shen.lazyderef (tl V2428) V3026) (if (cons? V2430) (let A2419 (hd V2430) (let V2431 (shen.lazyderef (tl V2430) V3026) (if (= () V2431) (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (if (shen.pvar? V2431) (do (shen.bindv V2431 () V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2431 V3026) Result))) false)))) (if (shen.pvar? V2430) (let A2419 (shen.newpv V3026) (do (shen.bindv V2430 (cons A2419 ()) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2430 V3026) Result)))) false))) (if (shen.pvar? V2429) (do (shen.bindv V2429 : V3026) (let Result (let V2432 (shen.lazyderef (tl V2428) V3026) (if (cons? V2432) (let A2419 (hd V2432) (let V2433 (shen.lazyderef (tl V2432) V3026) (if (= () V2433) (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (if (shen.pvar? V2433) (do (shen.bindv V2433 () V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2433 V3026) Result))) false)))) (if (shen.pvar? V2432) (let A2419 (shen.newpv V3026) (do (shen.bindv V2432 (cons A2419 ()) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2432 V3026) Result)))) false))) (do (shen.unbindv V2429 V3026) Result))) false))) (if (shen.pvar? V2428) (let A2419 (shen.newpv V3026) (do (shen.bindv V2428 (cons : (cons A2419 ())) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2428 V3026) Result)))) false)))) (if (shen.pvar? V2427) (let X (shen.newpv V3026) (let A2419 (shen.newpv V3026) (do (shen.bindv V2427 (cons X (cons : (cons A2419 ()))) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2427 V3026) Result))))) false))) (if (shen.pvar? V2426) (let X (shen.newpv V3026) (let A2419 (shen.newpv V3026) (let SynHyps (shen.newpv V3026) (do (shen.bindv V2426 (cons (cons X (cons : (cons A2419 ()))) SynHyps) V3026) (let Result (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027)))))))))) (do (shen.unbindv V2426 V3026) Result)))))) false))))) false)) (if (= Case false) (let V2434 (shen.lazyderef V3022 V3026) (if (cons? V2434) (let Y (tl V2434) (do (shen.incinfs) (shen.syntax-hyps Y V3023 V3024 V3025 V3026 V3027))) false)) Case)) Case))))) -(defun shen.get-syntax+semantics (V3018 V3019 V3020 V3021 V3022) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2380 (shen.lazyderef V3018 V3021) (if (= () V2380) (let V2381 (shen.lazyderef V3020 V3021) (if (cons? V2381) (let V2382 (shen.lazyderef (hd V2381) V3021) (if (= := V2382) (let V2383 (shen.lazyderef (tl V2381) V3021) (if (cons? V2383) (let Semantics (hd V2383) (let V2384 (shen.lazyderef (tl V2383) V3021) (if (= () V2384) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (shen.lazyderef Semantics V3021) V3021 V3022)))) false))) false)) false)) false)) (if (shen.pvar? V2380) (do (shen.bindv V2380 () V3021) (let Result (let V2385 (shen.lazyderef V3020 V3021) (if (cons? V2385) (let V2386 (shen.lazyderef (hd V2385) V3021) (if (= := V2386) (let V2387 (shen.lazyderef (tl V2385) V3021) (if (cons? V2387) (let Semantics (hd V2387) (let V2388 (shen.lazyderef (tl V2387) V3021) (if (= () V2388) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (shen.lazyderef Semantics V3021) V3021 V3022)))) false))) false)) false)) false)) (do (shen.unbindv V2380 V3021) Result))) false))) (if (= Case false) (let Case (let V2389 (shen.lazyderef V3018 V3021) (if (= () V2389) (let V2390 (shen.lazyderef V3020 V3021) (if (cons? V2390) (let V2391 (shen.lazyderef (hd V2390) V3021) (if (= := V2391) (let V2392 (shen.lazyderef (tl V2390) V3021) (if (cons? V2392) (let Semantics (hd V2392) (let V2393 (shen.lazyderef (tl V2392) V3021) (if (cons? V2393) (let V2394 (shen.lazyderef (hd V2393) V3021) (if (= where V2394) (let V2395 (shen.lazyderef (tl V2393) V3021) (if (cons? V2395) (let G (hd V2395) (let V2396 (shen.lazyderef (tl V2395) V3021) (if (= () V2396) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (cons where (cons (shen.lazyderef G V3021) (cons (shen.lazyderef Semantics V3021) ()))) V3021 V3022)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2389) (do (shen.bindv V2389 () V3021) (let Result (let V2397 (shen.lazyderef V3020 V3021) (if (cons? V2397) (let V2398 (shen.lazyderef (hd V2397) V3021) (if (= := V2398) (let V2399 (shen.lazyderef (tl V2397) V3021) (if (cons? V2399) (let Semantics (hd V2399) (let V2400 (shen.lazyderef (tl V2399) V3021) (if (cons? V2400) (let V2401 (shen.lazyderef (hd V2400) V3021) (if (= where V2401) (let V2402 (shen.lazyderef (tl V2400) V3021) (if (cons? V2402) (let G (hd V2402) (let V2403 (shen.lazyderef (tl V2402) V3021) (if (= () V2403) (do (shen.incinfs) (cut Throwcontrol V3021 (freeze (bind V3019 (cons where (cons (shen.lazyderef G V3021) (cons (shen.lazyderef Semantics V3021) ()))) V3021 V3022)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2389 V3021) Result))) false))) (if (= Case false) (let V2404 (shen.lazyderef V3018 V3021) (if (cons? V2404) (let X2376 (hd V2404) (let Syntax (tl V2404) (let V2405 (shen.lazyderef V3020 V3021) (if (cons? V2405) (let X (hd V2405) (let Rule (tl V2405) (do (shen.incinfs) (unify! X X2376 V3021 (freeze (shen.get-syntax+semantics Syntax V3019 Rule V3021 V3022)))))) false)))) (if (shen.pvar? V2404) (let X2376 (shen.newpv V3021) (let Syntax (shen.newpv V3021) (do (shen.bindv V2404 (cons X2376 Syntax) V3021) (let Result (let V2406 (shen.lazyderef V3020 V3021) (if (cons? V2406) (let X (hd V2406) (let Rule (tl V2406) (do (shen.incinfs) (unify! X X2376 V3021 (freeze (shen.get-syntax+semantics Syntax V3019 Rule V3021 V3022)))))) false)) (do (shen.unbindv V2404 V3021) Result))))) false))) Case)) Case))))) +(defun shen.get-syntax+semantics (V3028 V3029 V3030 V3031 V3032) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2390 (shen.lazyderef V3028 V3031) (if (= () V2390) (let V2391 (shen.lazyderef V3030 V3031) (if (cons? V2391) (let V2392 (shen.lazyderef (hd V2391) V3031) (if (= := V2392) (let V2393 (shen.lazyderef (tl V2391) V3031) (if (cons? V2393) (let Semantics (hd V2393) (let V2394 (shen.lazyderef (tl V2393) V3031) (if (= () V2394) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (shen.lazyderef Semantics V3031) V3031 V3032)))) false))) false)) false)) false)) (if (shen.pvar? V2390) (do (shen.bindv V2390 () V3031) (let Result (let V2395 (shen.lazyderef V3030 V3031) (if (cons? V2395) (let V2396 (shen.lazyderef (hd V2395) V3031) (if (= := V2396) (let V2397 (shen.lazyderef (tl V2395) V3031) (if (cons? V2397) (let Semantics (hd V2397) (let V2398 (shen.lazyderef (tl V2397) V3031) (if (= () V2398) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (shen.lazyderef Semantics V3031) V3031 V3032)))) false))) false)) false)) false)) (do (shen.unbindv V2390 V3031) Result))) false))) (if (= Case false) (let Case (let V2399 (shen.lazyderef V3028 V3031) (if (= () V2399) (let V2400 (shen.lazyderef V3030 V3031) (if (cons? V2400) (let V2401 (shen.lazyderef (hd V2400) V3031) (if (= := V2401) (let V2402 (shen.lazyderef (tl V2400) V3031) (if (cons? V2402) (let Semantics (hd V2402) (let V2403 (shen.lazyderef (tl V2402) V3031) (if (cons? V2403) (let V2404 (shen.lazyderef (hd V2403) V3031) (if (= where V2404) (let V2405 (shen.lazyderef (tl V2403) V3031) (if (cons? V2405) (let G (hd V2405) (let V2406 (shen.lazyderef (tl V2405) V3031) (if (= () V2406) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (cons where (cons (shen.lazyderef G V3031) (cons (shen.lazyderef Semantics V3031) ()))) V3031 V3032)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2399) (do (shen.bindv V2399 () V3031) (let Result (let V2407 (shen.lazyderef V3030 V3031) (if (cons? V2407) (let V2408 (shen.lazyderef (hd V2407) V3031) (if (= := V2408) (let V2409 (shen.lazyderef (tl V2407) V3031) (if (cons? V2409) (let Semantics (hd V2409) (let V2410 (shen.lazyderef (tl V2409) V3031) (if (cons? V2410) (let V2411 (shen.lazyderef (hd V2410) V3031) (if (= where V2411) (let V2412 (shen.lazyderef (tl V2410) V3031) (if (cons? V2412) (let G (hd V2412) (let V2413 (shen.lazyderef (tl V2412) V3031) (if (= () V2413) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (cons where (cons (shen.lazyderef G V3031) (cons (shen.lazyderef Semantics V3031) ()))) V3031 V3032)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2399 V3031) Result))) false))) (if (= Case false) (let V2414 (shen.lazyderef V3028 V3031) (if (cons? V2414) (let X2386 (hd V2414) (let Syntax (tl V2414) (let V2415 (shen.lazyderef V3030 V3031) (if (cons? V2415) (let X (hd V2415) (let Rule (tl V2415) (do (shen.incinfs) (unify! X X2386 V3031 (freeze (shen.get-syntax+semantics Syntax V3029 Rule V3031 V3032)))))) false)))) (if (shen.pvar? V2414) (let X2386 (shen.newpv V3031) (let Syntax (shen.newpv V3031) (do (shen.bindv V2414 (cons X2386 Syntax) V3031) (let Result (let V2416 (shen.lazyderef V3030 V3031) (if (cons? V2416) (let X (hd V2416) (let Rule (tl V2416) (do (shen.incinfs) (unify! X X2386 V3031 (freeze (shen.get-syntax+semantics Syntax V3029 Rule V3031 V3032)))))) false)) (do (shen.unbindv V2414 V3031) Result))))) false))) Case)) Case))))) -(defun shen.syntax-check (V3023 V3024 V3025 V3026 V3027) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2373 (shen.lazyderef V3023 V3026) (if (= () V2373) (do (shen.incinfs) (thaw V3027)) false)) (if (= Case false) (let Case (let V2374 (shen.lazyderef V3023 V3026) (if (cons? V2374) (let X (hd V2374) (let Syntax (tl V2374) (let C (shen.newpv V3026) (let X&& (shen.newpv V3026) (let B (shen.newpv V3026) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3025 V3026 (freeze (cut Throwcontrol V3026 (freeze (bind X&& (concat && (shen.lazyderef X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3024 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3025) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-check Syntax V3024 V3025 V3026 V3027))))))))))))))))))))))) false)) (if (= Case false) (let V2375 (shen.lazyderef V3023 V3026) (if (cons? V2375) (let X (hd V2375) (let Syntax (tl V2375) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3024 ()))) V3025 V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-check Syntax V3024 V3025 V3026 V3027)))))))) false)) Case)) Case))))) +(defun shen.syntax-check (V3033 V3034 V3035 V3036 V3037) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2383 (shen.lazyderef V3033 V3036) (if (= () V2383) (do (shen.incinfs) (thaw V3037)) false)) (if (= Case false) (let Case (let V2384 (shen.lazyderef V3033 V3036) (if (cons? V2384) (let X (hd V2384) (let Syntax (tl V2384) (let C (shen.newpv V3036) (let X&& (shen.newpv V3036) (let B (shen.newpv V3036) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3036)) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3035 V3036 (freeze (cut Throwcontrol V3036 (freeze (bind X&& (concat && (shen.lazyderef X V3036)) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3034 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3035) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.syntax-check Syntax V3034 V3035 V3036 V3037))))))))))))))))))))))) false)) (if (= Case false) (let V2385 (shen.lazyderef V3033 V3036) (if (cons? V2385) (let X (hd V2385) (let Syntax (tl V2385) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3034 ()))) V3035 V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.syntax-check Syntax V3034 V3035 V3036 V3037)))))))) false)) Case)) Case))))) -(defun shen.semantics-check (V3028 V3029 V3030 V3031 V3032) (let Semantics* (shen.newpv V3031) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3028 V3031))) V3031 (freeze (shen.t* (cons Semantics* (cons : (cons V3029 ()))) V3030 V3031 V3032)))))) +(defun shen.semantics-check (V3038 V3039 V3040 V3041 V3042) (let Semantics* (shen.newpv V3041) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3038 V3041))) V3041 (freeze (shen.t* (cons Semantics* (cons : (cons V3039 ()))) V3040 V3041 V3042)))))) -(defun shen.rename-semantics (V3033) (cond ((cons? V3033) (cons (shen.rename-semantics (hd V3033)) (shen.rename-semantics (tl V3033)))) ((shen.grammar_symbol? V3033) (cons shen.<-sem (cons V3033 ()))) (true V3033))) +(defun shen.rename-semantics (V3043) (cond ((cons? V3043) (cons (shen.rename-semantics (hd V3043)) (shen.rename-semantics (tl V3043)))) ((shen.grammar_symbol? V3043) (cons shen.<-sem (cons V3043 ()))) (true V3043))) diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index 1374314..564b7d2 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -61,27 +61,27 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.initialise_environment () (shen.multiple-set (cons shen.*call* (cons 0 (cons shen.*infs* (cons 0 (cons shen.*process-counter* (cons 0 (cons shen.*catch* (cons 0 ())))))))))) -(defun shen.multiple-set (V2288) (cond ((= () V2288) ()) ((and (cons? V2288) (cons? (tl V2288))) (do (set (hd V2288) (hd (tl V2288))) (shen.multiple-set (tl (tl V2288))))) (true (shen.sys-error shen.multiple-set)))) +(defun shen.multiple-set (V2298) (cond ((= () V2298) ()) ((and (cons? V2298) (cons? (tl V2298))) (do (set (hd V2298) (hd (tl V2298))) (shen.multiple-set (tl (tl V2298))))) (true (shen.sys-error shen.multiple-set)))) -(defun destroy (V2289) (declare V2289 ())) +(defun destroy (V2299) (declare V2299 symbol)) (set shen.*history* ()) (defun shen.read-evaluate-print () (let Lineread (shen.toplineread) (let History (value shen.*history*) (let NewLineread (shen.retrieve-from-history-if-needed Lineread History) (let NewHistory (shen.update_history NewLineread History) (let Parsed (fst NewLineread) (shen.toplevel Parsed))))))) -(defun shen.retrieve-from-history-if-needed (V2299 V2300) (cond ((and (tuple? V2299) (and (cons? (snd V2299)) (element? (hd (snd V2299)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2299) (tl (snd V2299))) V2300)) ((and (tuple? V2299) (and (cons? (snd V2299)) (and (cons? (tl (snd V2299))) (and (= () (tl (tl (snd V2299)))) (and (cons? V2300) (and (= (hd (snd V2299)) (shen.exclamation)) (= (hd (tl (snd V2299))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2300))) (hd V2300))) ((and (tuple? V2299) (and (cons? (snd V2299)) (= (hd (snd V2299)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2299)) V2300) (let Find (head (shen.find-past-inputs Key? V2300)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2299) (and (cons? (snd V2299)) (and (= () (tl (snd V2299))) (= (hd (snd V2299)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2300) 0) (abort))) ((and (tuple? V2299) (and (cons? (snd V2299)) (= (hd (snd V2299)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2299)) V2300) (let Pastprint (shen.print-past-inputs Key? (reverse V2300) 0) (abort)))) (true V2299))) +(defun shen.retrieve-from-history-if-needed (V2309 V2310) (cond ((and (tuple? V2309) (and (cons? (snd V2309)) (element? (hd (snd V2309)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2309) (tl (snd V2309))) V2310)) ((and (tuple? V2309) (and (cons? (snd V2309)) (and (cons? (tl (snd V2309))) (and (= () (tl (tl (snd V2309)))) (and (cons? V2310) (and (= (hd (snd V2309)) (shen.exclamation)) (= (hd (tl (snd V2309))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2310))) (hd V2310))) ((and (tuple? V2309) (and (cons? (snd V2309)) (= (hd (snd V2309)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2309)) V2310) (let Find (head (shen.find-past-inputs Key? V2310)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2309) (and (cons? (snd V2309)) (and (= () (tl (snd V2309))) (= (hd (snd V2309)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2310) 0) (abort))) ((and (tuple? V2309) (and (cons? (snd V2309)) (= (hd (snd V2309)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2309)) V2310) (let Pastprint (shen.print-past-inputs Key? (reverse V2310) 0) (abort)))) (true V2309))) (defun shen.percent () 37) (defun shen.exclamation () 33) -(defun shen.prbytes (V2301) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2301) (nl 1))) +(defun shen.prbytes (V2311) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2311) (nl 1))) -(defun shen.update_history (V2302 V2303) (set shen.*history* (cons V2302 V2303))) +(defun shen.update_history (V2312 V2313) (set shen.*history* (cons V2312 V2313))) (defun shen.toplineread () (shen.toplineread_loop (read-byte (stinput)) ())) -(defun shen.toplineread_loop (V2305 V2306) (cond ((= V2305 (shen.hat)) (simple-error "line read aborted")) ((element? V2305 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2306 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2306 (cons V2305 ()))) (@p Line V2306)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2306 (cons V2305 ())))))) +(defun shen.toplineread_loop (V2315 V2316) (cond ((= V2315 (shen.hat)) (simple-error "line read aborted")) ((element? V2315 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2316 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2316 (cons V2315 ()))) (@p Line V2316)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2316 (cons V2315 ())))))) (defun shen.hat () 94) @@ -89,7 +89,7 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.carriage-return () 13) -(defun tc (V2311) (cond ((= + V2311) (set shen.*tc* true)) ((= - V2311) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) +(defun tc (V2321) (cond ((= + V2321) (set shen.*tc* true)) ((= - V2321) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) (defun shen.prompt () (if (value shen.*tc*) (shen.prhush (cn " @@ -97,16 +97,16 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (" (shen.app (length (value shen.*history*)) "-) " shen.a)) (stoutput)))) -(defun shen.toplevel (V2312) (shen.toplevel_evaluate V2312 (value shen.*tc*))) +(defun shen.toplevel (V2322) (shen.toplevel_evaluate V2322 (value shen.*tc*))) -(defun shen.find-past-inputs (V2313 V2314) (let F (shen.find V2313 V2314) (if (empty? F) (simple-error "input not found +(defun shen.find-past-inputs (V2323 V2324) (let F (shen.find V2323 V2324) (if (empty? F) (simple-error "input not found ") F))) -(defun shen.make-key (V2315 V2316) (let Atom (hd (compile shen. V2315 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.make-key (V2325 V2326) (let Atom (hd (compile shen. V2325 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2316)))) (lambda X (shen.prefix? V2315 (shen.trim-gubbins (snd X))))))) +"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2326)))) (lambda X (shen.prefix? V2325 (shen.trim-gubbins (snd X))))))) -(defun shen.trim-gubbins (V2317) (cond ((and (cons? V2317) (= (hd V2317) (shen.space))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.newline))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.carriage-return))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.tab))) (shen.trim-gubbins (tl V2317))) ((and (cons? V2317) (= (hd V2317) (shen.left-round))) (shen.trim-gubbins (tl V2317))) (true V2317))) +(defun shen.trim-gubbins (V2327) (cond ((and (cons? V2327) (= (hd V2327) (shen.space))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.newline))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.carriage-return))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.tab))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.left-round))) (shen.trim-gubbins (tl V2327))) (true V2327))) (defun shen.space () 32) @@ -114,22 +114,22 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.left-round () 40) -(defun shen.find (V2324 V2325) (cond ((= () V2325) ()) ((and (cons? V2325) (V2324 (hd V2325))) (cons (hd V2325) (shen.find V2324 (tl V2325)))) ((cons? V2325) (shen.find V2324 (tl V2325))) (true (shen.sys-error shen.find)))) +(defun shen.find (V2334 V2335) (cond ((= () V2335) ()) ((and (cons? V2335) (V2334 (hd V2335))) (cons (hd V2335) (shen.find V2334 (tl V2335)))) ((cons? V2335) (shen.find V2334 (tl V2335))) (true (shen.sys-error shen.find)))) -(defun shen.prefix? (V2336 V2337) (cond ((= () V2336) true) ((and (cons? V2336) (and (cons? V2337) (= (hd V2337) (hd V2336)))) (shen.prefix? (tl V2336) (tl V2337))) (true false))) +(defun shen.prefix? (V2346 V2347) (cond ((= () V2346) true) ((and (cons? V2346) (and (cons? V2347) (= (hd V2347) (hd V2346)))) (shen.prefix? (tl V2346) (tl V2347))) (true false))) -(defun shen.print-past-inputs (V2347 V2348 V2349) (cond ((= () V2348) _) ((and (cons? V2348) (not (V2347 (hd V2348)))) (shen.print-past-inputs V2347 (tl V2348) (+ V2349 1))) ((and (cons? V2348) (tuple? (hd V2348))) (do (shen.prhush (shen.app V2349 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2348))) (shen.print-past-inputs V2347 (tl V2348) (+ V2349 1))))) (true (shen.sys-error shen.print-past-inputs)))) +(defun shen.print-past-inputs (V2357 V2358 V2359) (cond ((= () V2358) _) ((and (cons? V2358) (not (V2357 (hd V2358)))) (shen.print-past-inputs V2357 (tl V2358) (+ V2359 1))) ((and (cons? V2358) (tuple? (hd V2358))) (do (shen.prhush (shen.app V2359 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2358))) (shen.print-past-inputs V2357 (tl V2358) (+ V2359 1))))) (true (shen.sys-error shen.print-past-inputs)))) -(defun shen.toplevel_evaluate (V2350 V2351) (cond ((and (cons? V2350) (and (cons? (tl V2350)) (and (= : (hd (tl V2350))) (and (cons? (tl (tl V2350))) (and (= () (tl (tl (tl V2350)))) (= true V2351)))))) (shen.typecheck-and-evaluate (hd V2350) (hd (tl (tl V2350))))) ((and (cons? V2350) (cons? (tl V2350))) (do (shen.toplevel_evaluate (cons (hd V2350) ()) V2351) (do (nl 1) (shen.toplevel_evaluate (tl V2350) V2351)))) ((and (cons? V2350) (and (= () (tl V2350)) (= true V2351))) (shen.typecheck-and-evaluate (hd V2350) (gensym A))) ((and (cons? V2350) (and (= () (tl V2350)) (= false V2351))) (let Eval (shen.eval-without-macros (hd V2350)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) +(defun shen.toplevel_evaluate (V2360 V2361) (cond ((and (cons? V2360) (and (cons? (tl V2360)) (and (= : (hd (tl V2360))) (and (cons? (tl (tl V2360))) (and (= () (tl (tl (tl V2360)))) (= true V2361)))))) (shen.typecheck-and-evaluate (hd V2360) (hd (tl (tl V2360))))) ((and (cons? V2360) (cons? (tl V2360))) (do (shen.toplevel_evaluate (cons (hd V2360) ()) V2361) (do (nl 1) (shen.toplevel_evaluate (tl V2360) V2361)))) ((and (cons? V2360) (and (= () (tl V2360)) (= true V2361))) (shen.typecheck-and-evaluate (hd V2360) (gensym A))) ((and (cons? V2360) (and (= () (tl V2360)) (= false V2361))) (let Eval (shen.eval-without-macros (hd V2360)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) -(defun shen.typecheck-and-evaluate (V2352 V2353) (let Typecheck (shen.typecheck V2352 V2353) (if (= Typecheck false) (simple-error "type error -") (let Eval (shen.eval-without-macros V2352) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) +(defun shen.typecheck-and-evaluate (V2362 V2363) (let Typecheck (shen.typecheck V2362 V2363) (if (= Typecheck false) (simple-error "type error +") (let Eval (shen.eval-without-macros V2362) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) -(defun shen.pretty-type (V2354) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2354) V2354)) +(defun shen.pretty-type (V2364) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2364) V2364)) -(defun shen.extract-pvars (V2359) (cond ((shen.pvar? V2359) (cons V2359 ())) ((cons? V2359) (union (shen.extract-pvars (hd V2359)) (shen.extract-pvars (tl V2359)))) (true ()))) +(defun shen.extract-pvars (V2369) (cond ((shen.pvar? V2369) (cons V2369 ())) ((cons? V2369) (union (shen.extract-pvars (hd V2369)) (shen.extract-pvars (tl V2369)))) (true ()))) -(defun shen.mult_subst (V2364 V2365 V2366) (cond ((= () V2364) V2366) ((= () V2365) V2366) ((and (cons? V2364) (cons? V2365)) (shen.mult_subst (tl V2364) (tl V2365) (subst (hd V2364) (hd V2365) V2366))) (true (shen.sys-error shen.mult_subst)))) +(defun shen.mult_subst (V2374 V2375 V2376) (cond ((= () V2374) V2376) ((= () V2375) V2376) ((and (cons? V2374) (cons? V2375)) (shen.mult_subst (tl V2374) (tl V2375) (subst (hd V2374) (hd V2375) V2376))) (true (shen.sys-error shen.mult_subst)))) diff --git a/shen/klambda/track.kl b/shen/klambda/track.kl index 298b4b7..a98d9e1 100644 --- a/shen/klambda/track.kl +++ b/shen/klambda/track.kl @@ -47,57 +47,57 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.f_error (V2062) (do (shen.prhush (cn "partial function " (shen.app V2062 "; -" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2062)) (y-or-n? (cn "track " (shen.app V2062 "? " shen.a)))) (shen.track-function (ps V2062)) shen.ok) (simple-error "aborted")))) +"(defun shen.f_error (V2069) (do (shen.prhush (cn "partial function " (shen.app V2069 "; +" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2069)) (y-or-n? (cn "track " (shen.app V2069 "? " shen.a)))) (shen.track-function (ps V2069)) shen.ok) (simple-error "aborted")))) -(defun shen.tracked? (V2063) (element? V2063 (value shen.*tracking*))) +(defun shen.tracked? (V2070) (element? V2070 (value shen.*tracking*))) -(defun track (V2064) (let Source (ps V2064) (shen.track-function Source))) +(defun track (V2071) (let Source (ps V2071) (shen.track-function Source))) -(defun shen.track-function (V2065) (cond ((and (cons? V2065) (and (= defun (hd V2065)) (and (cons? (tl V2065)) (and (cons? (tl (tl V2065))) (and (cons? (tl (tl (tl V2065)))) (= () (tl (tl (tl (tl V2065)))))))))) (let KL (cons defun (cons (hd (tl V2065)) (cons (hd (tl (tl V2065))) (cons (shen.insert-tracking-code (hd (tl V2065)) (hd (tl (tl V2065))) (hd (tl (tl (tl V2065))))) ())))) (let Ob (eval KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) +(defun shen.track-function (V2072) (cond ((and (cons? V2072) (and (= defun (hd V2072)) (and (cons? (tl V2072)) (and (cons? (tl (tl V2072))) (and (cons? (tl (tl (tl V2072)))) (= () (tl (tl (tl (tl V2072)))))))))) (let KL (cons defun (cons (hd (tl V2072)) (cons (hd (tl (tl V2072))) (cons (shen.insert-tracking-code (hd (tl V2072)) (hd (tl (tl V2072))) (hd (tl (tl (tl V2072))))) ())))) (let Ob (eval KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) -(defun shen.insert-tracking-code (V2066 V2067 V2068) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2066 (cons (shen.cons_form V2067) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2068 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2066 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) +(defun shen.insert-tracking-code (V2073 V2074 V2075) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2073 (cons (shen.cons_form V2074) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2075 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2073 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) (set shen.*step* false) -(defun step (V2073) (cond ((= + V2073) (set shen.*step* true)) ((= - V2073) (set shen.*step* false)) (true (simple-error "step expects a + or a -. +(defun step (V2080) (cond ((= + V2080) (set shen.*step* true)) ((= - V2080) (set shen.*step* false)) (true (simple-error "step expects a + or a -. ")))) -(defun spy (V2078) (cond ((= + V2078) (set shen.*spy* true)) ((= - V2078) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. +(defun spy (V2085) (cond ((= + V2085) (set shen.*spy* true)) ((= - V2085) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. ")))) (defun shen.terpri-or-read-char () (if (value shen.*step*) (shen.check-byte (read-byte (value *stinput*))) (nl 1))) -(defun shen.check-byte (V2083) (cond ((= V2083 (shen.hat)) (simple-error "aborted")) (true true))) +(defun shen.check-byte (V2090) (cond ((= V2090 (shen.hat)) (simple-error "aborted")) (true true))) -(defun shen.input-track (V2084 V2085 V2086) (do (shen.prhush (cn " -" (shen.app (shen.spaces V2084) (cn "<" (shen.app V2084 (cn "> Inputs to " (shen.app V2085 (cn " -" (shen.app (shen.spaces V2084) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2086))) +(defun shen.input-track (V2091 V2092 V2093) (do (shen.prhush (cn " +" (shen.app (shen.spaces V2091) (cn "<" (shen.app V2091 (cn "> Inputs to " (shen.app V2092 (cn " +" (shen.app (shen.spaces V2091) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2093))) -(defun shen.recursively-print (V2087) (cond ((= () V2087) (shen.prhush " ==>" (stoutput))) ((cons? V2087) (do (print (hd V2087)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2087))))) (true (shen.sys-error shen.recursively-print)))) +(defun shen.recursively-print (V2094) (cond ((= () V2094) (shen.prhush " ==>" (stoutput))) ((cons? V2094) (do (print (hd V2094)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2094))))) (true (shen.sys-error shen.recursively-print)))) -(defun shen.spaces (V2088) (cond ((= 0 V2088) "") (true (cn " " (shen.spaces (- V2088 1)))))) +(defun shen.spaces (V2095) (cond ((= 0 V2095) "") (true (cn " " (shen.spaces (- V2095 1)))))) -(defun shen.output-track (V2089 V2090 V2091) (shen.prhush (cn " -" (shen.app (shen.spaces V2089) (cn "<" (shen.app V2089 (cn "> Output from " (shen.app V2090 (cn " -" (shen.app (shen.spaces V2089) (cn "==> " (shen.app V2091 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) +(defun shen.output-track (V2096 V2097 V2098) (shen.prhush (cn " +" (shen.app (shen.spaces V2096) (cn "<" (shen.app V2096 (cn "> Output from " (shen.app V2097 (cn " +" (shen.app (shen.spaces V2096) (cn "==> " (shen.app V2098 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) -(defun untrack (V2092) (eval (ps V2092))) +(defun untrack (V2099) (eval (ps V2099))) -(defun profile (V2093) (shen.profile-help (ps V2093))) +(defun profile (V2100) (shen.profile-help (ps V2100))) -(defun shen.profile-help (V2098) (cond ((and (cons? V2098) (and (= defun (hd V2098)) (and (cons? (tl V2098)) (and (cons? (tl (tl V2098))) (and (cons? (tl (tl (tl V2098)))) (= () (tl (tl (tl (tl V2098)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2098)) (cons (hd (tl (tl V2098))) (cons (shen.profile-func (hd (tl V2098)) (hd (tl (tl V2098))) (cons G (hd (tl (tl V2098))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2098))) (cons (subst G (hd (tl V2098)) (hd (tl (tl (tl V2098))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2098)))))))) (true (simple-error "Cannot profile. +(defun shen.profile-help (V2105) (cond ((and (cons? V2105) (and (= defun (hd V2105)) (and (cons? (tl V2105)) (and (cons? (tl (tl V2105))) (and (cons? (tl (tl (tl V2105)))) (= () (tl (tl (tl (tl V2105)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2105)) (cons (hd (tl (tl V2105))) (cons (shen.profile-func (hd (tl V2105)) (hd (tl (tl V2105))) (cons G (hd (tl (tl V2105))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2105))) (cons (subst G (hd (tl V2105)) (hd (tl (tl (tl V2105))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2105)))))))) (true (simple-error "Cannot profile. ")))) -(defun unprofile (V2099) (untrack V2099)) +(defun unprofile (V2106) (untrack V2106)) -(defun shen.profile-func (V2100 V2101 V2102) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2102 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2100 (cons (cons + (cons (cons shen.get-profile (cons V2100 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) +(defun shen.profile-func (V2107 V2108 V2109) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2109 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2107 (cons (cons + (cons (cons shen.get-profile (cons V2107 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) -(defun profile-results (V2103) (let Results (shen.get-profile V2103) (let Initialise (shen.put-profile V2103 0) (@p V2103 Results)))) +(defun profile-results (V2110) (let Results (shen.get-profile V2110) (let Initialise (shen.put-profile V2110 0) (@p V2110 Results)))) -(defun shen.get-profile (V2104) (trap-error (get V2104 profile (value *property-vector*)) (lambda E 0))) +(defun shen.get-profile (V2111) (trap-error (get V2111 profile (value *property-vector*)) (lambda E 0))) -(defun shen.put-profile (V2105 V2106) (put V2105 profile V2106 (value *property-vector*))) +(defun shen.put-profile (V2112 V2113) (put V2112 profile V2113 (value *property-vector*))) diff --git a/shen/klambda/types.kl b/shen/klambda/types.kl index 08e6c25..ef727fc 100644 --- a/shen/klambda/types.kl +++ b/shen/klambda/types.kl @@ -47,18 +47,18 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun declare (V2107 V2108) (let Record (set shen.*signedfuncs* (cons (cons V2107 V2108) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2107 V2108) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2108)) (let F* (concat shen.type-signature-of- V2107) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2107))))))))))) +"(defun declare (V2114 V2115) (let Record (set shen.*signedfuncs* (cons (cons V2114 V2115) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2114 V2115) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2115)) (let F* (concat shen.type-signature-of- V2114) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2114))))))))))) -(defun shen.demodulate (V2109) (fix shen.demodh V2109)) +(defun shen.demodulate (V2116) (fix shen.demodh V2116)) -(defun shen.demodh (V2110) (cond ((cons? V2110) (map shen.demodh V2110)) (true (shen.demod-atom V2110)))) +(defun shen.demodh (V2117) (cond ((cons? V2117) (map shen.demodh V2117)) (true (shen.demod-atom V2117)))) -(defun shen.demod-atom (V2111) (let Val (assoc V2111 (value shen.*synonyms*)) (if (empty? Val) V2111 (tl Val)))) +(defun shen.demod-atom (V2118) (let Val (assoc V2118 (value shen.*synonyms*)) (if (empty? Val) V2118 (tl Val)))) -(defun shen.variancy-test (V2112 V2113) (let TypeF (shen.typecheck V2112 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2113) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2112 " may create errors +(defun shen.variancy-test (V2119 V2120) (let TypeF (shen.typecheck V2119 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2120) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2119 " may create errors " shen.a)) (stoutput)))) shen.skip))) -(defun shen.variant? (V2122 V2123) (cond ((= V2123 V2122) true) ((and (cons? V2122) (and (cons? V2123) (= (hd V2123) (hd V2122)))) (shen.variant? (tl V2122) (tl V2123))) ((and (cons? V2122) (and (cons? V2123) (and (shen.pvar? (hd V2122)) (variable? (hd V2123))))) (shen.variant? (subst shen.a (hd V2122) (tl V2122)) (subst shen.a (hd V2123) (tl V2123)))) ((and (cons? V2122) (and (cons? (hd V2122)) (and (cons? V2123) (cons? (hd V2123))))) (shen.variant? (append (hd V2122) (tl V2122)) (append (hd V2123) (tl V2123)))) (true false))) +(defun shen.variant? (V2129 V2130) (cond ((= V2130 V2129) true) ((and (cons? V2129) (and (cons? V2130) (= (hd V2130) (hd V2129)))) (shen.variant? (tl V2129) (tl V2130))) ((and (cons? V2129) (and (cons? V2130) (and (shen.pvar? (hd V2129)) (variable? (hd V2130))))) (shen.variant? (subst shen.a (hd V2129) (tl V2129)) (subst shen.a (hd V2130) (tl V2130)))) ((and (cons? V2129) (and (cons? (hd V2129)) (and (cons? V2130) (cons? (hd V2130))))) (shen.variant? (append (hd V2129) (tl V2129)) (append (hd V2130) (tl V2130)))) (true false))) (declare absvector? (cons A (cons --> (cons boolean ())))) @@ -88,7 +88,7 @@ (declare cons? (cons A (cons --> (cons boolean ())))) -(declare destroy (cons (cons A (cons --> (cons B ()))) (cons --> (cons (cons A (cons --> (cons B ()))) ())))) +(declare destroy (cons (cons A (cons --> (cons B ()))) (cons --> (cons symbol ())))) (declare difference (cons (cons list (cons A ())) (cons --> (cons (cons (cons list (cons A ())) (cons --> (cons (cons list (cons A ())) ()))) ())))) @@ -252,7 +252,7 @@ (declare string->symbol (cons string (cons --> (cons symbol ())))) -(declare shen.sum (cons (cons list (cons number ())) (cons --> (cons number ())))) +(declare sum (cons (cons list (cons number ())) (cons --> (cons number ())))) (declare symbol? (cons A (cons --> (cons boolean ())))) diff --git a/shen/klambda/writer.kl b/shen/klambda/writer.kl index abf8cf8..a7d54f8 100644 --- a/shen/klambda/writer.kl +++ b/shen/klambda/writer.kl @@ -47,59 +47,59 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun pr (V2210 V2211) (trap-error (shen.prh V2210 V2211 0) (lambda E V2210))) +"(defun pr (V2220 V2221) (trap-error (shen.prh V2220 V2221 0) (lambda E V2220))) -(defun shen.prh (V2212 V2213 V2214) (shen.prh V2212 V2213 (shen.write-char-and-inc V2212 V2213 V2214))) +(defun shen.prh (V2222 V2223 V2224) (shen.prh V2222 V2223 (shen.write-char-and-inc V2222 V2223 V2224))) -(defun shen.write-char-and-inc (V2215 V2216 V2217) (do (write-byte (string->n (pos V2215 V2217)) V2216) (+ V2217 1))) +(defun shen.write-char-and-inc (V2225 V2226 V2227) (do (write-byte (string->n (pos V2225 V2227)) V2226) (+ V2227 1))) -(defun print (V2218) (let String (shen.insert V2218 "~S") (let Print (shen.prhush String (stoutput)) V2218))) +(defun print (V2228) (let String (shen.insert V2228 "~S") (let Print (shen.prhush String (stoutput)) V2228))) -(defun shen.prhush (V2219 V2220) (if (value *hush*) V2219 (pr V2219 V2220))) +(defun shen.prhush (V2229 V2230) (if (value *hush*) V2229 (pr V2229 V2230))) -(defun shen.mkstr (V2221 V2222) (cond ((string? V2221) (shen.mkstr-l (shen.proc-nl V2221) V2222)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2221 ())) V2222)))) +(defun shen.mkstr (V2231 V2232) (cond ((string? V2231) (shen.mkstr-l (shen.proc-nl V2231) V2232)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2231 ())) V2232)))) -(defun shen.mkstr-l (V2223 V2224) (cond ((= () V2224) V2223) ((cons? V2224) (shen.mkstr-l (shen.insert-l (hd V2224) V2223) (tl V2224))) (true (shen.sys-error shen.mkstr-l)))) +(defun shen.mkstr-l (V2233 V2234) (cond ((= () V2234) V2233) ((cons? V2234) (shen.mkstr-l (shen.insert-l (hd V2234) V2233) (tl V2234))) (true (shen.sys-error shen.mkstr-l)))) -(defun shen.insert-l (V2227 V2228) (cond ((= "" V2228) "") ((and (shen.+string? V2228) (and (= "~" (pos V2228 0)) (and (shen.+string? (tlstr V2228)) (= "A" (pos (tlstr V2228) 0))))) (cons shen.app (cons V2227 (cons (tlstr (tlstr V2228)) (cons shen.a ()))))) ((and (shen.+string? V2228) (and (= "~" (pos V2228 0)) (and (shen.+string? (tlstr V2228)) (= "R" (pos (tlstr V2228) 0))))) (cons shen.app (cons V2227 (cons (tlstr (tlstr V2228)) (cons shen.r ()))))) ((and (shen.+string? V2228) (and (= "~" (pos V2228 0)) (and (shen.+string? (tlstr V2228)) (= "S" (pos (tlstr V2228) 0))))) (cons shen.app (cons V2227 (cons (tlstr (tlstr V2228)) (cons shen.s ()))))) ((shen.+string? V2228) (shen.factor-cn (cons cn (cons (pos V2228 0) (cons (shen.insert-l V2227 (tlstr V2228)) ()))))) ((and (cons? V2228) (and (= cn (hd V2228)) (and (cons? (tl V2228)) (and (cons? (tl (tl V2228))) (= () (tl (tl (tl V2228)))))))) (cons cn (cons (hd (tl V2228)) (cons (shen.insert-l V2227 (hd (tl (tl V2228)))) ())))) ((and (cons? V2228) (and (= shen.app (hd V2228)) (and (cons? (tl V2228)) (and (cons? (tl (tl V2228))) (and (cons? (tl (tl (tl V2228)))) (= () (tl (tl (tl (tl V2228)))))))))) (cons shen.app (cons (hd (tl V2228)) (cons (shen.insert-l V2227 (hd (tl (tl V2228)))) (tl (tl (tl V2228))))))) (true (shen.sys-error shen.insert-l)))) +(defun shen.insert-l (V2237 V2238) (cond ((= "" V2238) "") ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "A" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.a ()))))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "R" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.r ()))))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "S" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.s ()))))) ((shen.+string? V2238) (shen.factor-cn (cons cn (cons (pos V2238 0) (cons (shen.insert-l V2237 (tlstr V2238)) ()))))) ((and (cons? V2238) (and (= cn (hd V2238)) (and (cons? (tl V2238)) (and (cons? (tl (tl V2238))) (= () (tl (tl (tl V2238)))))))) (cons cn (cons (hd (tl V2238)) (cons (shen.insert-l V2237 (hd (tl (tl V2238)))) ())))) ((and (cons? V2238) (and (= shen.app (hd V2238)) (and (cons? (tl V2238)) (and (cons? (tl (tl V2238))) (and (cons? (tl (tl (tl V2238)))) (= () (tl (tl (tl (tl V2238)))))))))) (cons shen.app (cons (hd (tl V2238)) (cons (shen.insert-l V2237 (hd (tl (tl V2238)))) (tl (tl (tl V2238))))))) (true (shen.sys-error shen.insert-l)))) -(defun shen.factor-cn (V2229) (cond ((and (cons? V2229) (and (= cn (hd V2229)) (and (cons? (tl V2229)) (and (cons? (tl (tl V2229))) (and (cons? (hd (tl (tl V2229)))) (and (= cn (hd (hd (tl (tl V2229))))) (and (cons? (tl (hd (tl (tl V2229))))) (and (cons? (tl (tl (hd (tl (tl V2229)))))) (and (= () (tl (tl (tl (hd (tl (tl V2229))))))) (and (= () (tl (tl (tl V2229)))) (and (string? (hd (tl V2229))) (string? (hd (tl (hd (tl (tl V2229))))))))))))))))) (cons cn (cons (cn (hd (tl V2229)) (hd (tl (hd (tl (tl V2229)))))) (tl (tl (hd (tl (tl V2229)))))))) (true V2229))) +(defun shen.factor-cn (V2239) (cond ((and (cons? V2239) (and (= cn (hd V2239)) (and (cons? (tl V2239)) (and (cons? (tl (tl V2239))) (and (cons? (hd (tl (tl V2239)))) (and (= cn (hd (hd (tl (tl V2239))))) (and (cons? (tl (hd (tl (tl V2239))))) (and (cons? (tl (tl (hd (tl (tl V2239)))))) (and (= () (tl (tl (tl (hd (tl (tl V2239))))))) (and (= () (tl (tl (tl V2239)))) (and (string? (hd (tl V2239))) (string? (hd (tl (hd (tl (tl V2239))))))))))))))))) (cons cn (cons (cn (hd (tl V2239)) (hd (tl (hd (tl (tl V2239)))))) (tl (tl (hd (tl (tl V2239)))))))) (true V2239))) -(defun shen.proc-nl (V2230) (cond ((= "" V2230) "") ((and (shen.+string? V2230) (and (= "~" (pos V2230 0)) (and (shen.+string? (tlstr V2230)) (= "%" (pos (tlstr V2230) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2230))))) ((shen.+string? V2230) (cn (pos V2230 0) (shen.proc-nl (tlstr V2230)))) (true (shen.sys-error shen.proc-nl)))) +(defun shen.proc-nl (V2240) (cond ((= "" V2240) "") ((and (shen.+string? V2240) (and (= "~" (pos V2240 0)) (and (shen.+string? (tlstr V2240)) (= "%" (pos (tlstr V2240) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2240))))) ((shen.+string? V2240) (cn (pos V2240 0) (shen.proc-nl (tlstr V2240)))) (true (shen.sys-error shen.proc-nl)))) -(defun shen.mkstr-r (V2231 V2232) (cond ((= () V2232) V2231) ((cons? V2232) (shen.mkstr-r (cons shen.insert (cons (hd V2232) (cons V2231 ()))) (tl V2232))) (true (shen.sys-error shen.mkstr-r)))) +(defun shen.mkstr-r (V2241 V2242) (cond ((= () V2242) V2241) ((cons? V2242) (shen.mkstr-r (cons shen.insert (cons (hd V2242) (cons V2241 ()))) (tl V2242))) (true (shen.sys-error shen.mkstr-r)))) -(defun shen.insert (V2233 V2234) (shen.insert-h V2233 V2234 "")) +(defun shen.insert (V2243 V2244) (shen.insert-h V2243 V2244 "")) -(defun shen.insert-h (V2237 V2238 V2239) (cond ((= "" V2238) V2239) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "A" (pos (tlstr V2238) 0))))) (cn V2239 (shen.app V2237 (tlstr (tlstr V2238)) shen.a))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "R" (pos (tlstr V2238) 0))))) (cn V2239 (shen.app V2237 (tlstr (tlstr V2238)) shen.r))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "S" (pos (tlstr V2238) 0))))) (cn V2239 (shen.app V2237 (tlstr (tlstr V2238)) shen.s))) ((shen.+string? V2238) (shen.insert-h V2237 (tlstr V2238) (cn V2239 (pos V2238 0)))) (true (shen.sys-error shen.insert-h)))) +(defun shen.insert-h (V2247 V2248 V2249) (cond ((= "" V2248) V2249) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "A" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.a))) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "R" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.r))) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "S" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.s))) ((shen.+string? V2248) (shen.insert-h V2247 (tlstr V2248) (cn V2249 (pos V2248 0)))) (true (shen.sys-error shen.insert-h)))) -(defun shen.app (V2240 V2241 V2242) (cn (shen.arg->str V2240 V2242) V2241)) +(defun shen.app (V2250 V2251 V2252) (cn (shen.arg->str V2250 V2252) V2251)) -(defun shen.arg->str (V2248 V2249) (cond ((= V2248 (fail)) "...") ((shen.list? V2248) (shen.list->str V2248 V2249)) ((string? V2248) (shen.str->str V2248 V2249)) ((absvector? V2248) (shen.vector->str V2248 V2249)) (true (shen.atom->str V2248)))) +(defun shen.arg->str (V2258 V2259) (cond ((= V2258 (fail)) "...") ((shen.list? V2258) (shen.list->str V2258 V2259)) ((string? V2258) (shen.str->str V2258 V2259)) ((absvector? V2258) (shen.vector->str V2258 V2259)) (true (shen.atom->str V2258)))) -(defun shen.list->str (V2250 V2251) (cond ((= shen.r V2251) (@s "(" (@s (shen.iter-list V2250 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2250 V2251 (shen.maxseq)) "]"))))) +(defun shen.list->str (V2260 V2261) (cond ((= shen.r V2261) (@s "(" (@s (shen.iter-list V2260 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2260 V2261 (shen.maxseq)) "]"))))) (defun shen.maxseq () (value *maximum-print-sequence-size*)) -(defun shen.iter-list (V2262 V2263 V2264) (cond ((= () V2262) "") ((= 0 V2264) "... etc") ((and (cons? V2262) (= () (tl V2262))) (shen.arg->str (hd V2262) V2263)) ((cons? V2262) (@s (shen.arg->str (hd V2262) V2263) (@s " " (shen.iter-list (tl V2262) V2263 (- V2264 1))))) (true (@s "|" (@s " " (shen.arg->str V2262 V2263)))))) +(defun shen.iter-list (V2272 V2273 V2274) (cond ((= () V2272) "") ((= 0 V2274) "... etc") ((and (cons? V2272) (= () (tl V2272))) (shen.arg->str (hd V2272) V2273)) ((cons? V2272) (@s (shen.arg->str (hd V2272) V2273) (@s " " (shen.iter-list (tl V2272) V2273 (- V2274 1))))) (true (@s "|" (@s " " (shen.arg->str V2272 V2273)))))) -(defun shen.str->str (V2269 V2270) (cond ((= shen.a V2270) V2269) (true (@s (n->string 34) (@s V2269 (n->string 34)))))) +(defun shen.str->str (V2279 V2280) (cond ((= shen.a V2280) V2279) (true (@s (n->string 34) (@s V2279 (n->string 34)))))) -(defun shen.vector->str (V2271 V2272) (if (shen.print-vector? V2271) ((<-address V2271 0) V2271) (if (vector? V2271) (@s "<" (@s (shen.iter-vector V2271 1 V2272 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2271 0 V2272 (shen.maxseq)) ">>")))))) +(defun shen.vector->str (V2281 V2282) (if (shen.print-vector? V2281) ((<-address V2281 0) V2281) (if (vector? V2281) (@s "<" (@s (shen.iter-vector V2281 1 V2282 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2281 0 V2282 (shen.maxseq)) ">>")))))) -(defun shen.print-vector? (V2273) (let Zero (<-address V2273 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) +(defun shen.print-vector? (V2283) (let Zero (<-address V2283 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) -(defun shen.fbound? (V2274) (trap-error (do (ps V2274) true) (lambda E false))) +(defun shen.fbound? (V2284) (trap-error (do (ps V2284) true) (lambda E false))) -(defun shen.tuple (V2275) (cn "(@p " (shen.app (<-address V2275 1) (cn " " (shen.app (<-address V2275 2) ")" shen.s)) shen.s))) +(defun shen.tuple (V2285) (cn "(@p " (shen.app (<-address V2285 1) (cn " " (shen.app (<-address V2285 2) ")" shen.s)) shen.s))) -(defun shen.iter-vector (V2282 V2283 V2284 V2285) (cond ((= 0 V2285) "... etc") (true (let Item (trap-error (<-address V2282 V2283) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2282 (+ V2283 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2284) (@s (shen.arg->str Item V2284) (@s " " (shen.iter-vector V2282 (+ V2283 1) V2284 (- V2285 1))))))))))) +(defun shen.iter-vector (V2292 V2293 V2294 V2295) (cond ((= 0 V2295) "... etc") (true (let Item (trap-error (<-address V2292 V2293) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2292 (+ V2293 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2294) (@s (shen.arg->str Item V2294) (@s " " (shen.iter-vector V2292 (+ V2293 1) V2294 (- V2295 1))))))))))) -(defun shen.atom->str (V2286) (trap-error (str V2286) (lambda E (shen.funexstring)))) +(defun shen.atom->str (V2296) (trap-error (str V2296) (lambda E (shen.funexstring)))) (defun shen.funexstring () (@s "" (@s "f" (@s "u" (@s "n" (@s "e" (@s (shen.arg->str (gensym (intern "x")) shen.a) ""))))))) -(defun shen.list? (V2287) (or (empty? V2287) (cons? V2287))) +(defun shen.list? (V2297) (or (empty? V2297) (cons? V2297))) diff --git a/shen/klambda/yacc.kl b/shen/klambda/yacc.kl index 4d207cf..54db64c 100644 --- a/shen/klambda/yacc.kl +++ b/shen/klambda/yacc.kl @@ -47,65 +47,59 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.yacc (V2126) (cond ((and (cons? V2126) (and (= defcc (hd V2126)) (and (cons? (tl V2126)) (and (cons? (tl (tl V2126))) (and (= { (hd (tl (tl V2126)))) (and (cons? (tl (tl (tl V2126)))) (and (cons? (tl (tl (tl (tl V2126))))) (and (= ==> (hd (tl (tl (tl (tl V2126)))))) (and (cons? (tl (tl (tl (tl (tl V2126)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2126))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2126)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2126)) (tl (tl (tl (tl (tl (tl (tl V2126))))))))))) ((and (cons? V2126) (and (= defcc (hd V2126)) (cons? (tl V2126)))) (shen.yacc->shen (hd (tl V2126)) (tl (tl V2126)))) (true (shen.sys-error shen.yacc)))) +"(defun shen.yacc (V2133) (cond ((and (cons? V2133) (and (= defcc (hd V2133)) (cons? (tl V2133)))) (shen.yacc->shen (hd (tl V2133)) (tl (tl V2133)))) (true (shen.sys-error shen.yacc)))) -(defun shen.yacc->shen (V2127 V2128) (let CCRules (shen.split_cc_rules V2128 ()) (let CCBody (map shen.cc_body CCRules) (let YaccCases (shen.yacc_cases CCBody) (let CatchKill (shen.catchkill YaccCases) (cons define (cons V2127 (cons Stream (cons -> (cons CatchKill ())))))))))) +(defun shen.yacc->shen (V2134 V2135) (let CCRules (shen.split_cc_rules V2135 ()) (let CCBody (map shen.cc_body CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2134 (cons Stream (cons -> (cons YaccCases ()))))))))) -(defun shen.split_cc_rules (V2129 V2130) (cond ((and (= () V2129) (= () V2130)) ()) ((= () V2129) (cons (shen.split_cc_rule (reverse V2130) ()) ())) ((and (cons? V2129) (= ; (hd V2129))) (cons (shen.split_cc_rule (reverse V2130) ()) (shen.split_cc_rules (tl V2129) ()))) ((cons? V2129) (shen.split_cc_rules (tl V2129) (cons (hd V2129) V2130))) (true (shen.sys-error shen.split_cc_rules)))) +(defun shen.split_cc_rules (V2136 V2137) (cond ((and (= () V2136) (= () V2137)) ()) ((= () V2136) (cons (shen.split_cc_rule (reverse V2137) ()) ())) ((and (cons? V2136) (= ; (hd V2136))) (cons (shen.split_cc_rule (reverse V2137) ()) (shen.split_cc_rules (tl V2136) ()))) ((cons? V2136) (shen.split_cc_rules (tl V2136) (cons (hd V2136) V2137))) (true (shen.sys-error shen.split_cc_rules)))) -(defun shen.split_cc_rule (V2131 V2132) (cond ((and (cons? V2131) (and (= := (hd V2131)) (and (cons? (tl V2131)) (= () (tl (tl V2131)))))) (cons (reverse V2132) (tl V2131))) ((and (cons? V2131) (and (= := (hd V2131)) (and (cons? (tl V2131)) (and (cons? (tl (tl V2131))) (and (= where (hd (tl (tl V2131)))) (and (cons? (tl (tl (tl V2131)))) (= () (tl (tl (tl (tl V2131))))))))))) (cons (reverse V2132) (cons (cons where (cons (hd (tl (tl (tl V2131)))) (cons (hd (tl V2131)) ()))) ()))) ((= () V2131) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2132)) (do (shen.prhush "has no semantics. -" (stoutput)) (shen.split_cc_rule (cons := (cons (shen.default_semantics (reverse V2132)) ())) V2132))))) ((cons? V2131) (shen.split_cc_rule (tl V2131) (cons (hd V2131) V2132))) (true (shen.sys-error shen.split_cc_rule)))) +(defun shen.split_cc_rule (V2138 V2139) (cond ((and (cons? V2138) (and (= := (hd V2138)) (and (cons? (tl V2138)) (= () (tl (tl V2138)))))) (cons (reverse V2139) (tl V2138))) ((and (cons? V2138) (and (= := (hd V2138)) (and (cons? (tl V2138)) (and (cons? (tl (tl V2138))) (and (= where (hd (tl (tl V2138)))) (and (cons? (tl (tl (tl V2138)))) (= () (tl (tl (tl (tl V2138))))))))))) (cons (reverse V2139) (cons (cons where (cons (hd (tl (tl (tl V2138)))) (cons (hd (tl V2138)) ()))) ()))) ((= () V2138) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2139)) (do (shen.prhush "has no semantics. +" (stoutput)) (shen.split_cc_rule (cons := (cons (shen.default_semantics (reverse V2139)) ())) V2139))))) ((cons? V2138) (shen.split_cc_rule (tl V2138) (cons (hd V2138) V2139))) (true (shen.sys-error shen.split_cc_rule)))) -(defun shen.default_semantics (V2133) (cond ((= () V2133) ()) ((and (cons? V2133) (shen.grammar_symbol? (hd V2133))) (cons append (cons (hd V2133) (cons (shen.default_semantics (tl V2133)) ())))) ((cons? V2133) (cons cons (cons (hd V2133) (cons (shen.default_semantics (tl V2133)) ())))) (true (shen.sys-error shen.default_semantics)))) +(defun shen.default_semantics (V2140) (cond ((= () V2140) ()) ((and (cons? V2140) (and (= () (tl V2140)) (shen.grammar_symbol? (hd V2140)))) (hd V2140)) ((and (cons? V2140) (shen.grammar_symbol? (hd V2140))) (cons append (cons (hd V2140) (cons (shen.default_semantics (tl V2140)) ())))) ((cons? V2140) (cons cons (cons (hd V2140) (cons (shen.default_semantics (tl V2140)) ())))) (true (shen.sys-error shen.default_semantics)))) -(defun shen.grammar_symbol? (V2134) (and (symbol? V2134) (let Cs (shen.strip-pathname (explode V2134)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) +(defun shen.grammar_symbol? (V2141) (and (symbol? V2141) (let Cs (shen.strip-pathname (explode V2141)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) -(defun shen.yacc_cases (V2135) (cond ((and (cons? V2135) (= () (tl V2135))) (hd V2135)) ((cons? V2135) (let P YaccParse (cons let (cons P (cons (hd V2135) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2135)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) +(defun shen.yacc_cases (V2142) (cond ((and (cons? V2142) (= () (tl V2142))) (hd V2142)) ((cons? V2142) (let P YaccParse (cons let (cons P (cons (hd V2142) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2142)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) -(defun shen.cc_body (V2136) (cond ((and (cons? V2136) (and (cons? (tl V2136)) (= () (tl (tl V2136))))) (shen.syntax (hd V2136) Stream (hd (tl V2136)))) (true (shen.sys-error shen.cc_body)))) +(defun shen.cc_body (V2143) (cond ((and (cons? V2143) (and (cons? (tl V2143)) (= () (tl (tl V2143))))) (shen.syntax (hd V2143) Stream (hd (tl V2143)))) (true (shen.sys-error shen.cc_body)))) -(defun shen.syntax (V2137 V2138 V2139) (cond ((and (= () V2137) (and (cons? V2139) (and (= where (hd V2139)) (and (cons? (tl V2139)) (and (cons? (tl (tl V2139))) (= () (tl (tl (tl V2139))))))))) (cons if (cons (shen.semantics (hd (tl V2139))) (cons (cons shen.pair (cons (cons hd (cons V2138 ())) (cons (shen.semantics (hd (tl (tl V2139)))) ()))) (cons (cons fail ()) ()))))) ((= () V2137) (cons shen.pair (cons (cons hd (cons V2138 ())) (cons (shen.semantics V2139) ())))) ((cons? V2137) (if (shen.grammar_symbol? (hd V2137)) (shen.recursive_descent V2137 V2138 V2139) (if (variable? (hd V2137)) (shen.variable-match V2137 V2138 V2139) (if (shen.jump_stream? (hd V2137)) (shen.jump_stream V2137 V2138 V2139) (if (shen.terminal? (hd V2137)) (shen.check_stream V2137 V2138 V2139) (if (shen.list_stream? (hd V2137)) (shen.list_stream (shen.decons (hd V2137)) (tl V2137) V2138 V2139) (simple-error (shen.app (hd V2137) " is not legal syntax +(defun shen.syntax (V2144 V2145 V2146) (cond ((and (= () V2144) (and (cons? V2146) (and (= where (hd V2146)) (and (cons? (tl V2146)) (and (cons? (tl (tl V2146))) (= () (tl (tl (tl V2146))))))))) (cons if (cons (shen.semantics (hd (tl V2146))) (cons (cons shen.pair (cons (cons hd (cons V2145 ())) (cons (shen.semantics (hd (tl (tl V2146)))) ()))) (cons (cons fail ()) ()))))) ((= () V2144) (cons shen.pair (cons (cons hd (cons V2145 ())) (cons (shen.semantics V2146) ())))) ((cons? V2144) (if (shen.grammar_symbol? (hd V2144)) (shen.recursive_descent V2144 V2145 V2146) (if (variable? (hd V2144)) (shen.variable-match V2144 V2145 V2146) (if (shen.jump_stream? (hd V2144)) (shen.jump_stream V2144 V2145 V2146) (if (shen.terminal? (hd V2144)) (shen.check_stream V2144 V2145 V2146) (if (cons? (hd V2144)) (shen.list-stream (shen.decons (hd V2144)) (tl V2144) V2145 V2146) (simple-error (shen.app (hd V2144) " is not legal syntax " shen.a)))))))) (true (shen.sys-error shen.syntax)))) -(defun shen.list_stream? (V2148) (cond ((cons? V2148) true) (true false))) +(defun shen.list-stream (V2147 V2148 V2149 V2150) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2149 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2149 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2148 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2149 ())) ())) (cons (cons hd (cons (cons tl (cons V2149 ())) ())) ()))) V2150) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2147 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2149 ())) ())) (cons (cons hd (cons (cons tl (cons V2149 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) -(defun shen.decons (V2149) (cond ((and (cons? V2149) (and (= cons (hd V2149)) (and (cons? (tl V2149)) (and (cons? (tl (tl V2149))) (= () (tl (tl (tl V2149)))))))) (cons (hd (tl V2149)) (shen.decons (hd (tl (tl V2149)))))) (true V2149))) +(defun shen.decons (V2151) (cond ((and (cons? V2151) (and (= cons (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (and (= () (hd (tl (tl V2151)))) (= () (tl (tl (tl V2151))))))))) (cons (hd (tl V2151)) ())) ((and (cons? V2151) (and (= cons (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (= () (tl (tl (tl V2151)))))))) (cons (hd (tl V2151)) (shen.decons (hd (tl (tl V2151)))))) (true V2151))) -(defun shen.list_stream (V2150 V2151 V2152 V2153) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2152 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2152 ())) ())) ())) ()))) (let Action (cons shen.snd-or-fail (cons (shen.syntax V2150 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2152 ())) ())) (cons (cons shen.hdtl (cons V2152 ())) ()))) (cons shen.leave! (cons (shen.syntax V2151 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2152 ())) ())) (cons (cons shen.hdtl (cons V2152 ())) ()))) V2153) ()))) ())) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) +(defun shen.insert-runon (V2162 V2163 V2164) (cond ((and (cons? V2164) (and (= shen.pair (hd V2164)) (and (cons? (tl V2164)) (and (cons? (tl (tl V2164))) (and (= () (tl (tl (tl V2164)))) (= (hd (tl (tl V2164))) V2163)))))) V2162) ((cons? V2164) (map (lambda Z (shen.insert-runon V2162 V2163 Z)) V2164)) (true V2164))) -(defun shen.snd-or-fail (V2160) (cond ((and (cons? V2160) (and (cons? (tl V2160)) (= () (tl (tl V2160))))) (hd (tl V2160))) (true (fail)))) +(defun shen.strip-pathname (V2170) (cond ((not (element? "." V2170)) V2170) ((cons? V2170) (shen.strip-pathname (tl V2170))) (true (shen.sys-error shen.strip-pathname)))) -(defun shen.strip-pathname (V2165) (cond ((not (element? "." V2165)) V2165) ((cons? V2165) (shen.strip-pathname (tl V2165))) (true (shen.sys-error shen.strip-pathname)))) +(defun shen.recursive_descent (V2171 V2172 V2173) (cond ((cons? V2171) (let Test (cons (hd V2171) (cons V2172 ())) (let Action (shen.syntax (tl V2171) (concat Parse_ (hd V2171)) V2173) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2171)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2171)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) -(defun shen.recursive_descent (V2166 V2167 V2168) (cond ((cons? V2166) (let Test (cons (hd V2166) (cons V2167 ())) (let Action (shen.syntax (tl V2166) (concat Parse_ (hd V2166)) V2168) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2166)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2166)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) +(defun shen.variable-match (V2174 V2175 V2176) (cond ((cons? V2174) (let Test (cons cons? (cons (cons hd (cons V2175 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2174)) (cons (cons hd (cons (cons hd (cons V2175 ())) ())) (cons (shen.syntax (tl V2174) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2175 ())) ())) (cons (cons shen.hdtl (cons V2175 ())) ()))) V2176) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) -(defun shen.variable-match (V2169 V2170 V2171) (cond ((cons? V2169) (let Test (cons cons? (cons (cons hd (cons V2170 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2169)) (cons (cons hd (cons (cons hd (cons V2170 ())) ())) (cons (shen.syntax (tl V2169) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2170 ())) ())) (cons (cons shen.hdtl (cons V2170 ())) ()))) V2171) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) +(defun shen.terminal? (V2185) (cond ((cons? V2185) false) ((variable? V2185) false) (true true))) -(defun shen.terminal? (V2180) (cond ((cons? V2180) false) ((variable? V2180) false) (true true))) +(defun shen.jump_stream? (V2190) (cond ((= V2190 _) true) (true false))) -(defun shen.jump_stream? (V2185) (cond ((= V2185 _) true) (true false))) +(defun shen.check_stream (V2191 V2192 V2193) (cond ((cons? V2191) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2192 ())) ())) (cons (cons = (cons (hd V2191) (cons (cons hd (cons (cons hd (cons V2192 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2191) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2192 ())) ())) (cons (cons shen.hdtl (cons V2192 ())) ()))) V2193) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) -(defun shen.check_stream (V2186 V2187 V2188) (cond ((cons? V2186) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2187 ())) ())) (cons (cons = (cons (hd V2186) (cons (cons hd (cons (cons hd (cons V2187 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2186) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2187 ())) ())) (cons (cons shen.hdtl (cons V2187 ())) ()))) V2188) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) +(defun shen.jump_stream (V2194 V2195 V2196) (cond ((cons? V2194) (let Test (cons cons? (cons (cons hd (cons V2195 ())) ())) (let Action (shen.syntax (tl V2194) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2195 ())) ())) (cons (cons shen.hdtl (cons V2195 ())) ()))) V2196) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) -(defun shen.jump_stream (V2189 V2190 V2191) (cond ((cons? V2189) (let Test (cons cons? (cons (cons hd (cons V2190 ())) ())) (let Action (shen.syntax (tl V2189) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2190 ())) ())) (cons (cons shen.hdtl (cons V2190 ())) ()))) V2191) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) +(defun shen.semantics (V2197) (cond ((= () V2197) ()) ((shen.grammar_symbol? V2197) (cons shen.hdtl (cons (concat Parse_ V2197) ()))) ((variable? V2197) (concat Parse_ V2197)) ((and (cons? V2197) (and (= function (hd V2197)) (and (cons? (tl V2197)) (= () (tl (tl V2197)))))) V2197) ((cons? V2197) (map shen.semantics V2197)) (true V2197))) -(defun shen.semantics (V2192) (cond ((and (cons? V2192) (and (= shen.leave! (hd V2192)) (and (cons? (tl V2192)) (= () (tl (tl V2192)))))) (hd (tl V2192))) ((= () V2192) ()) ((shen.grammar_symbol? V2192) (cons shen.hdtl (cons (concat Parse_ V2192) ()))) ((variable? V2192) (concat Parse_ V2192)) ((cons? V2192) (map shen.semantics V2192)) (true V2192))) +(defun shen.snd-or-fail (V2204) (cond ((and (cons? V2204) (and (cons? (tl V2204)) (= () (tl (tl V2204))))) (hd (tl V2204))) (true (fail)))) (defun fail () shen.fail!) -(defun shen.pair (V2193 V2194) (cons V2193 (cons V2194 ()))) +(defun shen.pair (V2205 V2206) (cons V2205 (cons V2206 ()))) -(defun shen.hdtl (V2195) (hd (tl V2195))) +(defun shen.hdtl (V2207) (hd (tl V2207))) -(defun (V2202) (cond ((and (cons? V2202) (and (cons? (tl V2202)) (= () (tl (tl V2202))))) (cons () (cons (hd V2202) ()))) (true (fail)))) +(defun (V2214) (cond ((and (cons? V2214) (and (cons? (tl V2214)) (= () (tl (tl V2214))))) (cons () (cons (hd V2214) ()))) (true (fail)))) -(defun (V2207) (cond ((and (cons? V2207) (and (cons? (tl V2207)) (= () (tl (tl V2207))))) (cons (hd V2207) (cons () ()))) (true (shen.sys-error )))) - -(defun shen.catchkill (V2208) (cons trap-error (cons V2208 (cons (cons lambda (cons E (cons (cons shen.analyse-kill (cons E ())) ()))) ())))) - -(defun shen.analyse-kill (V2209) (let String (error-to-string V2209) (if (= String "Shen YACC kill") (fail) (simple-error String)))) - -(defun kill () (simple-error "Shen YACC kill")) +(defun (V2219) (cond ((and (cons? V2219) (and (cons? (tl V2219)) (= () (tl (tl V2219))))) (cons (hd V2219) (cons () ()))) (true (shen.sys-error )))) diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index 0477f75..8b40038 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -85,7 +85,7 @@ (set *infs* 0) (set *hush* false) (set *optimise* false) -(set *version* "13.2.1") +(set *version* "version 14") (define initialise_arity_table [] -> [] diff --git a/shen/src/macros.shen b/shen/src/macros.shen index 375df69..56c9421 100644 --- a/shen/src/macros.shen +++ b/shen/src/macros.shen @@ -99,16 +99,27 @@ X -> X) (define prolog-macro - [prolog? | X] -> [intprolog (prolog-form X)] + [prolog? | Literals] -> (let F (gensym f) + Receive (receive-terms Literals) + PrologDef (eval (append [defprolog F] Receive [<--] (pass-literals Literals) [;])) + Query [F | (append Receive [[start-new-prolog-process] [freeze true]])] + Query) X -> X) +(define receive-terms + [] -> [] + [[receive X] | Terms] -> [X | (receive-terms Terms)] + [_ | Terms] -> (receive-terms Terms)) + +(define pass-literals + [] -> [] + [[receive _] | Literals] -> (pass-literals Literals) + [Literal | Literals] -> [Literal | (pass-literals Literals)]) + (define defprolog-macro [defprolog F | X] -> (compile (function ) [F | X] (/. Y (prolog-error F Y))) X -> X) -(define prolog-form - X -> (cons_form (map (function cons_form) X))) - (define datatype-macro [datatype F | Rules] -> [process-datatype (intern-type F) diff --git a/shen/src/t-star.shen b/shen/src/t-star.shen index aedb915..31d6428 100644 --- a/shen/src/t-star.shen +++ b/shen/src/t-star.shen @@ -180,7 +180,7 @@ \* Pauses for user *\ (define pause-for-user - -> (let Byte (do (read-byte (stinput)) (read-byte (stinput))) + -> (let Byte (read-byte (stinput)) (if (= Byte 94) (error "input aborted~%") (nl)))) diff --git a/shen/src/toplevel.shen b/shen/src/toplevel.shen index b152106..54ba6b8 100644 --- a/shen/src/toplevel.shen +++ b/shen/src/toplevel.shen @@ -78,7 +78,7 @@ [S V | M] -> (do (set S V) (multiple-set M))) (define destroy - F -> (declare F [])) + F -> (declare F symbol)) (set *history* []) diff --git a/shen/src/types.shen b/shen/src/types.shen index 31d341f..0ad7a3e 100644 --- a/shen/src/types.shen +++ b/shen/src/types.shen @@ -110,7 +110,7 @@ (declare cn [string --> [string --> string]]) (declare compile [[[list A] ==> B] --> [[list A] --> [[[list A] --> B] --> B]]]) (declare cons? [A --> boolean]) -(declare destroy [[A --> B] --> [A --> B]]) +(declare destroy [[A --> B] --> symbol]) (declare difference [[list A] --> [[list A] --> [list A]]]) (declare do [A --> [B --> B]]) (declare [[list A] ==> [list B]]) diff --git a/shen/src/yacc.shen b/shen/src/yacc.shen index 0290e66..b2e19ff 100644 --- a/shen/src/yacc.shen +++ b/shen/src/yacc.shen @@ -55,15 +55,13 @@ (package shen. [] (define yacc - [defcc S { A ==> B } | CC_Stuff] -> (yacc [defcc S | CC_Stuff]) [defcc S | CC_Stuff] -> (yacc->shen S CC_Stuff)) (define yacc->shen S CC_Stuff -> (let CCRules (split_cc_rules CC_Stuff []) CCBody (map (function cc_body) CCRules) YaccCases (yacc_cases CCBody) - CatchKill (catchkill YaccCases) - [define S (protect Stream) -> CatchKill])) + [define S (protect Stream) -> YaccCases])) (define split_cc_rules [] [] -> [] @@ -85,6 +83,7 @@ (define default_semantics [] -> [] + [S] -> S where (grammar_symbol? S) [S | Syntax] -> [append S (default_semantics Syntax)] where (grammar_symbol? S) [S | Syntax] -> [cons S (default_semantics Syntax)]) @@ -114,33 +113,32 @@ (variable? S) (variable-match [S | Syntax] Stream Semantics) (jump_stream? S) (jump_stream [S | Syntax] Stream Semantics) (terminal? S) (check_stream [S | Syntax] Stream Semantics) - (list_stream? S) (list_stream (decons S) Syntax Stream Semantics) - true (error "~A is not legal syntax~%" S))) - -(define list_stream? - [_ | _] -> true - _ -> false) + (cons? S) (list-stream (decons S) Syntax Stream Semantics) + true (error "~A is not legal syntax~%" S))) +(define list-stream + S Syntax Stream Semantics + -> (let Test [and [cons? [hd Stream]] [cons? [hd [hd Stream]]]] + Placeholder (gensym place) + RunOn (syntax Syntax [pair [tl [hd Stream]] [hd [tl Stream]]] Semantics) + Action (insert-runon RunOn Placeholder + (syntax S + [pair [hd [hd Stream]] [hd [tl Stream]]] + Placeholder)) + [if Test + Action + [fail]])) + (define decons + [cons X []] -> [X] [cons X Y] -> [X | (decons Y)] - X -> X) + X -> X) + +(define insert-runon + Runon Placeholder [pair _ Placeholder] -> Runon + Runon Placeholder [X | Y] -> (map (/. Z (insert-runon Runon Placeholder Z)) [X | Y]) + _ _ X -> X) -(define list_stream - S Syntax Stream Semantics - -> (let Test [and [cons? [hd Stream]] [cons? [hd [hd Stream]]]] - Action [snd-or-fail (syntax S - [pair [hd [hd Stream]] [hdtl Stream]] - [leave! (syntax Syntax - [pair [tl [hd Stream]] - [hdtl Stream]] - Semantics)])] - Else [fail] - [if Test Action Else])) - -(define snd-or-fail - [_ Y] -> Y - _ -> (fail)) - (define strip-pathname Cs -> Cs where (not (element? "." Cs)) [_ | Cs] -> (strip-pathname Cs)) @@ -190,12 +188,16 @@ [if Test Action Else])) (define semantics - [leave! S] -> S [] -> [] S -> [hdtl (concat (protect Parse_) S)] where (grammar_symbol? S) S -> (concat (protect Parse_) S) where (variable? S) + [function S] -> [function S] [X | Y] -> (map (function semantics) [X | Y]) - X -> X) + X -> X) + +(define snd-or-fail + [_ Y] -> Y + _ -> (fail)) (define fail -> fail!) @@ -212,17 +214,6 @@ (define [X _] -> [X []]) - -(define catchkill - Code -> [trap-error Code [lambda (protect E) [analyse-kill (protect E)]]]) - -(define analyse-kill - Exception -> (let String (error-to-string Exception) - (if (= String "Shen YACC kill") - (fail) - (simple-error String)))) - -(define kill - -> (simple-error "Shen YACC kill")) + ) \ No newline at end of file From 8adb38fc8706ee146e9d4c6d353171683c3d3fd8 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:03:25 +0000 Subject: [PATCH 11/57] updating README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ad280b1..6f5529d 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,11 @@ The main [Shen JVM port](https://www.assembla.com/code/shen-on-java/git/nodes) i This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), but has no dependency on Clojure. Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. -This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8 with Lambda support](http://jdk8.java.net/lambda/) (b98 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). +This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8](https://jdk8.java.net/download.html) (b117 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). JDK 8 with lamdba can be downloaded at the following locations : -* [Latest JDK 8 with lambda](https://jdk8.java.net/lambda/) -* [Older releases of JDK 8 with lamdba](http://download.java.net/lambda/) +* [Latest JDK 8](https://jdk8.java.net/download.html) +* [Older releases of JDK 8](https://jdk8.java.net/archive/index.html) ### To run the REPL: From c8b7d6a275036226a459777896eed82a6fcec89d Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:29:49 +0000 Subject: [PATCH 12/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f5529d..c1d7b62 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59 This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8](https://jdk8.java.net/download.html) (b117 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). -JDK 8 with lamdba can be downloaded at the following locations : +JDK 8 Early Access Release can be downloaded at the following locations : * [Latest JDK 8](https://jdk8.java.net/download.html) * [Older releases of JDK 8](https://jdk8.java.net/archive/index.html) From 5c2209cb0ad8c02b5517610f562f60a504df044b Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:31:11 +0000 Subject: [PATCH 13/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c1d7b62..79de39e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The main [Shen JVM port](https://www.assembla.com/code/shen-on-java/git/nodes) i This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), but has no dependency on Clojure. Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. -This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8](https://jdk8.java.net/download.html) (b117 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). +This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8 Early Access Release](https://jdk8.java.net/download.html) (b117 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). JDK 8 Early Access Release can be downloaded at the following locations : * [Latest JDK 8](https://jdk8.java.net/download.html) From ad1ee51b0101ed0e2a646cdd3d2686ff7432bc11 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:44:50 +0000 Subject: [PATCH 14/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 79de39e..0b80d94 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java +# 神.java | Shen for Java (Shen 14) http://shenlanguage.org/ From 4c683fd73e119332931b06549f3af94a7d1b7e31 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:46:55 +0000 Subject: [PATCH 15/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b80d94..dfbe2e2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java (Shen 14) +# 神.java | Shen for Java | Shen 14 http://shenlanguage.org/ From b420be330ced30eef90e3323335787af5d4f4295 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 06:48:36 +0000 Subject: [PATCH 16/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dfbe2e2..0b80d94 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java | Shen 14 +# 神.java | Shen for Java (Shen 14) http://shenlanguage.org/ From f3836ecaf7971add40b5dd32f37d0a9e5348b8d8 Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 13:39:53 +0000 Subject: [PATCH 17/57] updating readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 0b80d94..5964b6c 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ JDK 8 Early Access Release can be downloaded at the following locations : ### To run the REPL: +In Linux : + export JAVA_HOME=/path/to/jdk1.8.0/with/lambdas ./shen.java @@ -69,6 +71,8 @@ JDK 8 Early Access Release can be downloaded at the following locations : (/. X (integer? (/ X 3)))) [0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60... etc] +In Windows first run of **buildAndRunWindows.bat performs build. Subsequent invocations run repl. + ### The Shen Test Suite From 7aa12c4c42304bb26f561d94b2b1dd5b0ac7e93d Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 13:45:48 +0000 Subject: [PATCH 18/57] updating readme --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5964b6c..071c813 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ JDK 8 Early Access Release can be downloaded at the following locations : ### To run the REPL: -In Linux : +#### In Linux : export JAVA_HOME=/path/to/jdk1.8.0/with/lambdas ./shen.java @@ -71,7 +71,15 @@ In Linux : (/. X (integer? (/ X 3)))) [0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60... etc] -In Windows first run of **buildAndRunWindows.bat performs build. Subsequent invocations run repl. +#### In Windows : + +In **buildAndRunWindows.bat** : + +* Set **JAVA_HOME** +* Set **MAVEN_HOME** + +Then first run of **buildAndRunWindows.bat** performs build. +Subsequent runs runs repl. ### The Shen Test Suite From e6a2891a83ca9fb4cab89f3538ec7f27af25a28c Mon Sep 17 00:00:00 2001 From: abc Date: Sun, 1 Dec 2013 13:47:46 +0000 Subject: [PATCH 19/57] updating readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 071c813..53e6ea7 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ In **buildAndRunWindows.bat** : * Set **MAVEN_HOME** Then first run of **buildAndRunWindows.bat** performs build. -Subsequent runs runs repl. +Subsequent invocations runs the repl. ### The Shen Test Suite From e0c7e5bcf2dd04fc9a538c8be1f8861799d97ded Mon Sep 17 00:00:00 2001 From: abc Date: Mon, 2 Dec 2013 03:34:07 +0000 Subject: [PATCH 20/57] updating readme --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 53e6ea7..e58eacf 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,14 @@ The main [Shen JVM port](https://www.assembla.com/code/shen-on-java/git/nodes) i This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), but has no dependency on Clojure. Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. -This is pretty experimental, and this entire project acts as a playground for various JDK 8 and JVM language stuff. There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html) and [JDK 8 Early Access Release](https://jdk8.java.net/download.html) (b117 - there are often small but breaking changes). It's based on this [Maven project](https://github.com/hraberg/Shen.java/blob/master/pom.xml). +Core requirements : +* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b117. +* [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). + +Optional requirements : + +There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). -JDK 8 Early Access Release can be downloaded at the following locations : -* [Latest JDK 8](https://jdk8.java.net/download.html) -* [Older releases of JDK 8](https://jdk8.java.net/archive/index.html) ### To run the REPL: From 564d05573b357c5c3e2e40374409313d8ea0aa29 Mon Sep 17 00:00:00 2001 From: abc Date: Mon, 2 Dec 2013 03:37:15 +0000 Subject: [PATCH 21/57] updating readme --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e58eacf..bcd159a 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,7 @@ See also: [shen.clj](https://github.com/hraberg/shen.clj) ## This Java Port -**Shen.java is an [invokedynamic](http://www.slideshare.net/CharlesNutter/jax-2012-invoke-dynamic-keynote) based [K Lambda](http://www.shenlanguage.org/documentation/shendoc.htm) compiler.** I don't vouch for any of the implementation details regarding this - I'm learning as we go. All code lives in [`Shen.java`](https://github.com/hraberg/Shen.java/blob/master/src/shen/Shen.java). It passes the Shen test suite. - -The main [Shen JVM port](https://www.assembla.com/code/shen-on-java/git/nodes) is done by Joel Shellman and might be used for [Babel](http://www.shenlanguage.org/babel/babel.htm), Mark's IDE project. +**Shen.java is an [invokedynamic](http://www.slideshare.net/CharlesNutter/jax-2012-invoke-dynamic-keynote) based [K Lambda](http://www.shenlanguage.org/documentation/shendoc.htm) compiler.** All code lives in [`Shen.java`](https://github.com/hraberg/Shen.java/blob/master/src/shen/Shen.java). It passes the Shen test suite. This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), but has no dependency on Clojure. Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. @@ -28,9 +26,7 @@ Core requirements : * [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b117. * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). -Optional requirements : - -There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). +Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). ### To run the REPL: From 82ef4002482c5ebd620abd7207b9cebb63659116 Mon Sep 17 00:00:00 2001 From: abc Date: Mon, 2 Dec 2013 09:27:11 +0000 Subject: [PATCH 22/57] updating shen.java script --- shen.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/shen.java b/shen.java index 3439a16..d0d6644 100755 --- a/shen.java +++ b/shen.java @@ -2,7 +2,14 @@ rlwrap=$(which rlwrap) || "" &> /dev/null java="$rlwrap $JAVA_HOME/bin/java $JAVA_OPTS" -shen="find . -name shen.java-*.jar" -test -z `$shen` && mvn package +if [ "`which shen.java`" != "" ]; then + DIR=$(dirname `which shen.java`) +else + DIR="." +fi + +shen="find $DIR -name shen.java-*.jar" + +test -z `$shen` && mvn -f $DIR"/pom.xml" package $java -Xss1000k -jar `$shen` From 0dccebffba78e94f1ad9c734e01bbecfd43f292a Mon Sep 17 00:00:00 2001 From: abc Date: Mon, 2 Dec 2013 10:34:53 +0000 Subject: [PATCH 23/57] adding file illustrating error --- errors.shen | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 errors.shen diff --git a/errors.shen b/errors.shen new file mode 100644 index 0000000..73bdc43 --- /dev/null +++ b/errors.shen @@ -0,0 +1,3 @@ +(load "shen/test/README.shen") +(load "shen/test/prolog.shen") +(prolog? (mem 1 [X | 2]) (return X)) From 5baa8c5285ddb874d4d99b0274ed2e7f3a12f284 Mon Sep 17 00:00:00 2001 From: abc Date: Mon, 2 Dec 2013 10:46:26 +0000 Subject: [PATCH 24/57] updating errors file --- errors.shen | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/errors.shen b/errors.shen index 73bdc43..bb19d47 100644 --- a/errors.shen +++ b/errors.shen @@ -1,3 +1,3 @@ -(load "shen/test/README.shen") -(load "shen/test/prolog.shen") +(load "shen/Test Programs/README.shen") +(load "shen/Test Programs/prolog.shen") (prolog? (mem 1 [X | 2]) (return X)) From 4267bd4c2b04f29666d1522d200c83a377f19c30 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 8 Dec 2013 09:10:29 +0000 Subject: [PATCH 25/57] narrowed down error for Shen 14 --- errors.shen | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/errors.shen b/errors.shen index bb19d47..c5e8092 100644 --- a/errors.shen +++ b/errors.shen @@ -1,3 +1,9 @@ -(load "shen/Test Programs/README.shen") -(load "shen/Test Programs/prolog.shen") +(defprolog mem + X [X | _] <--; + X [Y | Z] <-- (mem X Z);) + +(defprolog mem + X (mode [X | _] -) <--; + X (mode [_ | Y] -) <-- (mem X Y);) + (prolog? (mem 1 [X | 2]) (return X)) From d382f593da17382c4f174a844930ce51ea1dd0cd Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 8 Dec 2013 09:22:15 +0000 Subject: [PATCH 26/57] labelling which function causes error --- errors.shen | 1 + 1 file changed, 1 insertion(+) diff --git a/errors.shen b/errors.shen index c5e8092..8f1cd97 100644 --- a/errors.shen +++ b/errors.shen @@ -2,6 +2,7 @@ X [X | _] <--; X [Y | Z] <-- (mem X Z);) +\\This is the culprit (defprolog mem X (mode [X | _] -) <--; X (mode [_ | Y] -) <-- (mem X Y);) From 80db4f555ea13e18f755e3cdb156031771434319 Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 10 Dec 2013 08:35:23 +0000 Subject: [PATCH 27/57] more verbose outputting for executable script shen.java --- shen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/shen.java b/shen.java index d0d6644..f6aac25 100755 --- a/shen.java +++ b/shen.java @@ -5,6 +5,7 @@ if [ "`which shen.java`" != "" ]; then DIR=$(dirname `which shen.java`) + echo "Using installation in "$DIR else DIR="." fi From a34876ee61dc85652fbfff68e9a8d8dfb578dc61 Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 10 Dec 2013 09:07:49 +0000 Subject: [PATCH 28/57] illustrating how using old prolog-macro gets rid of error --- errors.shen | 12 ++++-------- errors_illustrate.shen | 14 ++++++++++++++ errors_oldProlog.shen | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 errors_illustrate.shen create mode 100644 errors_oldProlog.shen diff --git a/errors.shen b/errors.shen index 8f1cd97..b6c186a 100644 --- a/errors.shen +++ b/errors.shen @@ -1,10 +1,6 @@ -(defprolog mem - X [X | _] <--; - X [Y | Z] <-- (mem X Z);) +\\To make errors disappear uncomment out the +\\line below -\\This is the culprit -(defprolog mem - X (mode [X | _] -) <--; - X (mode [_ | Y] -) <-- (mem X Y);) +\\(load "errors_oldProlog.shen") -(prolog? (mem 1 [X | 2]) (return X)) +(load "errors_illustrate.shen") diff --git a/errors_illustrate.shen b/errors_illustrate.shen new file mode 100644 index 0000000..3f1c647 --- /dev/null +++ b/errors_illustrate.shen @@ -0,0 +1,14 @@ +\\See errors.shen file + +(defprolog mem + X [X | _] <--; + X [Y | Z] <-- (mem X Z);) + +\\The mem function above works fine. However +\\it is this mem function which, in conjunction with +\\the new form of the prolog-macro, seems to cause problems +(defprolog mem + X (mode [X | _] -) <--; + X (mode [_ | Y] -) <-- (mem X Y);) + +(prolog? (mem 1 [X | 2]) (return X)) diff --git a/errors_oldProlog.shen b/errors_oldProlog.shen new file mode 100644 index 0000000..e1f898e --- /dev/null +++ b/errors_oldProlog.shen @@ -0,0 +1,15 @@ +\\See errors.shen file +\\overwriting prolog-macro with old +\\version seems to get rid of errors. + +(package shen [] + +\\This is the old prolog-macro +(define prolog-macro + [prolog? | X] -> [intprolog (prolog-form X)] + X -> X) + +(define prolog-form + X -> (cons_form (map (function cons_form) X))) + +) From 5c5858e4d607b7c68ac523785c886cd3033cf22d Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 10 Dec 2013 09:46:33 +0000 Subject: [PATCH 29/57] expanding on documentation of bug in Shen.java --- errors_illustrate.shen | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index 3f1c647..e36905c 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -4,11 +4,29 @@ X [X | _] <--; X [Y | Z] <-- (mem X Z);) -\\The mem function above works fine. However -\\it is this mem function which, in conjunction with -\\the new form of the prolog-macro, seems to cause problems +\* +The mem function above works fine. However +it is this mem function which, in conjunction with +the new form of the prolog-macro, and the +"(return X)" which seems to cause the error. +Tracking the mem function shows that it returns +fine. +*\ (defprolog mem X (mode [X | _] -) <--; X (mode [_ | Y] -) <-- (mem X Y);) +\* +(defun mem (V542 V543 V544 V545) + (let Case + (let V531 (shen.lazyderef V543 V544) + (if (cons? V531) + (let X (hd V531) (do (shen.incinfs) (unify! X V542 V544 V545))) + false)) + (if (= Case false) + (let V532 (shen.lazyderef V543 V544) + (if (cons? V532) (let Y (tl V532) (do (shen.incinfs) (mem V542 Y V544 V545))) false)) + Case))) +*\ + (prolog? (mem 1 [X | 2]) (return X)) From 3934ffa0b79ac828dba628ee0b88c9ea4b0ec2b0 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 26 Jan 2014 19:36:42 +0000 Subject: [PATCH 30/57] updating to Shen 14.2 --- shen/klambda/declarations.kl | 57 ++---------------- shen/klambda/macros.kl | 2 +- shen/klambda/t-star.kl | 111 +++++++++++++++++++---------------- shen/klambda/toplevel.kl | 42 ++++++------- shen/klambda/types.kl | 6 +- shen/klambda/writer.kl | 50 ++++++++-------- shen/klambda/yacc.kl | 54 +++++++++-------- shen/src/declarations.shen | 8 +-- shen/src/macros.shen | 2 +- shen/src/t-star.shen | 81 ++++++++++++------------- shen/src/types.shen | 4 +- shen/src/yacc.shen | 34 ++++++----- 12 files changed, 204 insertions(+), 247 deletions(-) diff --git a/shen/klambda/declarations.kl b/shen/klambda/declarations.kl index e39d178..f35782a 100644 --- a/shen/klambda/declarations.kl +++ b/shen/klambda/declarations.kl @@ -1,53 +1,4 @@ -"********************************************************************************** -* The License * -* * -* The user is free to produce commercial applications with the software, to * -* distribute these applications in source or binary form, and to charge monies * -* for them as he sees fit and in concordance with the laws of the land subject * -* to the following license. * -* * -* 1. The license applies to all the software and all derived software and * -* must appear on such. * -* * -* 2. It is illegal to distribute the software without this license attached * -* to it and use of the software implies agreement with the license as such. * -* It is illegal for anyone who is not the copyright holder to tamper with * -* or change the license. * -* * -* 3. Neither the names of Lambda Associates or the copyright holder may be used * -* to endorse or promote products built using the software without specific * -* prior written permission from the copyright holder. * -* * -* 4. That possession of this license does not confer on the copyright holder * -* any special contractual obligation towards the user. That in no event * -* shall the copyright holder be liable for any direct, indirect, incidental, * -* special, exemplary or consequential damages (including but not limited * -* to procurement of substitute goods or services, loss of use, data, * -* interruption), however caused and on any theory of liability, whether in * -* contract, strict liability or tort (including negligence) arising in any * -* way out of the use of the software, even if advised of the possibility of * -* such damage. * -* * -* 5. It is permitted for the user to change the software, for the purpose of * -* improving performance, correcting an error, or porting to a new platform, * -* and distribute the derived version of Shen provided the resulting program * -* conforms in all respects to the Shen standard and is issued under that * -* title. The user must make it clear with his distribution that he/she is * -* the author of the changes and what these changes are and why. * -* * -* 6. Derived versions of this software in whatever form are subject to the same * -* restrictions. In particular it is not permitted to make derived copies of * -* this software which do not conform to the Shen standard or appear under a * -* different title. * -* * -* It is permitted to distribute versions of Shen which incorporate libraries, * -* graphics or other facilities which are not part of the Shen standard. * -* * -* For an explication of this license see www.shenlanguage.org/license.htm which * -* explains this license in full. * -* * -***************************************************************************************** -"(set shen.*installing-kl* false) +"*********************************************************************************** The License ** ** The user is free to produce commercial applications with the software, to ** distribute these applications in source or binary form, and to charge monies ** for them as he sees fit and in concordance with the laws of the land subject ** to the following license. ** * * 1. The license applies to all the software and all derived software and ** must appear on such. ** ** 2. It is illegal to distribute the software without this license attached ** to it and use of the software implies agreement with the license as such. ** It is illegal for anyone who is not the copyright holder to tamper with ** or change the license. ** ** 3. Neither the names of Lambda Associates or the copyright holder may be used ** to endorse or promote products built using the software without specific ** prior written permission from the copyright holder. ** ** 4. That possession of this license does not confer on the copyright holder ** any special contractual obligation towards the user. That in no event * * shall the copyright holder be liable for any direct, indirect, incidental, * * special, exemplary or consequential damages (including but not limited ** to procurement of substitute goods or services, loss of use, data, * * interruption), however caused and on any theory of liability, whether in * * contract, strict liability or tort (including negligence) arising in any ** way out of the use of the software, even if advised of the possibility of ** such damage. * * ** 5. It is permitted for the user to change the software, for the purpose of ** improving performance, correcting an error, or porting to a new platform, ** and distribute the derived version of Shen provided the resulting program ** conforms in all respects to the Shen standard and is issued under that * * title. The user must make it clear with his distribution that he/she is ** the author of the changes and what these changes are and why. ** ** 6. Derived versions of this software in whatever form are subject to the same ** restrictions. In particular it is not permitted to make derived copies of ** this software which do not conform to the Shen standard or appear under a ** different title. ** ** It is permitted to distribute versions of Shen which incorporate libraries, ** graphics or other facilities which are not part of the Shen standard. ** ** For an explication of this license see www.shenlanguage.org/license.htm which ** explains this license in full. ** ******************************************************************************************"(set shen.*installing-kl* false) (set shen.*history* ()) @@ -109,19 +60,19 @@ (set shen.*optimise* false) -(set *version* "version 14") +(set *version* "version 14.2") (defun shen.initialise_arity_table (V820) (cond ((= () V820) ()) ((and (cons? V820) (cons? (tl V820))) (let DecArity (put (hd V820) arity (hd (tl V820)) (value *property-vector*)) (shen.initialise_arity_table (tl (tl V820))))) (true (shen.sys-error shen.initialise_arity_table)))) (defun arity (V821) (trap-error (get V821 arity (value *property-vector*)) (lambda E -1))) -(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 0 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 1 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (defun systemf (V822) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V822 External) (value *property-vector*))))) (defun adjoin (V823 V824) (if (element? V823 V824) V824 (cons V823 V824))) -(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) +(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) (defun specialise (V825) (do (set shen.*special* (cons V825 (value shen.*special*))) V825)) diff --git a/shen/klambda/macros.kl b/shen/klambda/macros.kl index bfeebc8..956ee5c 100644 --- a/shen/klambda/macros.kl +++ b/shen/klambda/macros.kl @@ -57,7 +57,7 @@ (defun shen.make-string-macro (V871) (cond ((and (cons? V871) (and (= make-string (hd V871)) (cons? (tl V871)))) (shen.mkstr (hd (tl V871)) (tl (tl V871)))) (true V871))) -(defun shen.input-macro (V872) (cond ((and (cons? V872) (and (= lineread (hd V872)) (= () (tl V872)))) (cons lineread (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input (hd V872)) (= () (tl V872)))) (cons input (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= read (hd V872)) (= () (tl V872)))) (cons read (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input+ (hd V872)) (and (cons? (tl V872)) (= () (tl (tl V872)))))) (cons input+ (cons (hd (tl V872)) (cons (cons stinput ()) ())))) ((and (cons? V872) (and (= read+ (hd V872)) (and (cons? (tl V872)) (= () (tl (tl V872)))))) (cons read+ (cons (hd (tl V872)) (cons (cons stinput ()) ())))) (true V872))) +(defun shen.input-macro (V872) (cond ((and (cons? V872) (and (= lineread (hd V872)) (= () (tl V872)))) (cons lineread (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input (hd V872)) (= () (tl V872)))) (cons input (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= read (hd V872)) (= () (tl V872)))) (cons read (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input+ (hd V872)) (and (cons? (tl V872)) (= () (tl (tl V872)))))) (cons input+ (cons (hd (tl V872)) (cons (cons stinput ()) ())))) ((and (cons? V872) (and (= read-byte (hd V872)) (= () (tl V872)))) (cons read-byte (cons (cons stinput ()) ()))) (true V872))) (defun shen.compose (V873 V874) (cond ((= () V873) V874) ((cons? V873) (shen.compose (tl V873) ((hd V873) V874))) (true (shen.sys-error shen.compose)))) diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index 4641ca6..066b269 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,117 +47,128 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2831 V2832) (let Curry (shen.curry V2831) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2832)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2826 V2827) (let Curry (shen.curry V2826) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2827)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2833) (cond ((and (cons? V2833) (shen.special? (hd V2833))) (cons (hd V2833) (map shen.curry (tl V2833)))) ((and (cons? V2833) (and (cons? (tl V2833)) (shen.extraspecial? (hd V2833)))) V2833) ((and (cons? V2833) (and (= type (hd V2833)) (and (cons? (tl V2833)) (and (cons? (tl (tl V2833))) (= () (tl (tl (tl V2833)))))))) (cons type (cons (shen.curry (hd (tl V2833))) (tl (tl V2833))))) ((and (cons? V2833) (and (cons? (tl V2833)) (cons? (tl (tl V2833))))) (shen.curry (cons (cons (hd V2833) (cons (hd (tl V2833)) ())) (tl (tl V2833))))) ((and (cons? V2833) (and (cons? (tl V2833)) (= () (tl (tl V2833))))) (cons (shen.curry (hd V2833)) (cons (shen.curry (hd (tl V2833))) ()))) (true V2833))) +(defun shen.curry (V2828) (cond ((and (cons? V2828) (shen.special? (hd V2828))) (cons (hd V2828) (map shen.curry (tl V2828)))) ((and (cons? V2828) (and (cons? (tl V2828)) (shen.extraspecial? (hd V2828)))) V2828) ((and (cons? V2828) (and (= type (hd V2828)) (and (cons? (tl V2828)) (and (cons? (tl (tl V2828))) (= () (tl (tl (tl V2828)))))))) (cons type (cons (shen.curry (hd (tl V2828))) (tl (tl V2828))))) ((and (cons? V2828) (and (cons? (tl V2828)) (cons? (tl (tl V2828))))) (shen.curry (cons (cons (hd V2828) (cons (hd (tl V2828)) ())) (tl (tl V2828))))) ((and (cons? V2828) (and (cons? (tl V2828)) (= () (tl (tl V2828))))) (cons (shen.curry (hd V2828)) (cons (shen.curry (hd (tl V2828))) ()))) (true V2828))) -(defun shen.special? (V2834) (element? V2834 (value shen.*special*))) +(defun shen.special? (V2829) (element? V2829 (value shen.*special*))) -(defun shen.extraspecial? (V2835) (element? V2835 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2830) (element? V2830 (value shen.*extraspecial*))) -(defun shen.t* (V2836 V2837 V2838 V2839) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2838) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2838 (freeze (bind Error (shen.errormaxinfs) V2838 V2839))))) (if (= Case false) (let Case (let V2825 (shen.lazyderef V2836 V2838) (if (= fail V2825) (do (shen.incinfs) (cut Throwcontrol V2838 (freeze (shen.prolog-failure V2838 V2839)))) false)) (if (= Case false) (let Case (let V2826 (shen.lazyderef V2836 V2838) (if (cons? V2826) (let X (hd V2826) (let V2827 (shen.lazyderef (tl V2826) V2838) (if (cons? V2827) (let V2828 (shen.lazyderef (hd V2827) V2838) (if (= : V2828) (let V2829 (shen.lazyderef (tl V2827) V2838) (if (cons? V2829) (let A (hd V2829) (let V2830 (shen.lazyderef (tl V2829) V2838) (if (= () V2830) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2838 (freeze (cut Throwcontrol V2838 (freeze (shen.th* X A V2837 V2838 V2839)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2838) (do (shen.incinfs) (shen.show V2836 V2837 V2838 (freeze (bind Datatypes (value shen.*datatypes*) V2838 (freeze (shen.udefs* V2836 V2837 Datatypes V2838 V2839))))))) Case)) Case)) Case))))) +(defun shen.t* (V2831 V2832 V2833 V2834) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2833) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2833 (freeze (bind Error (shen.errormaxinfs) V2833 V2834))))) (if (= Case false) (let Case (let V2820 (shen.lazyderef V2831 V2833) (if (= fail V2820) (do (shen.incinfs) (cut Throwcontrol V2833 (freeze (shen.prolog-failure V2833 V2834)))) false)) (if (= Case false) (let Case (let V2821 (shen.lazyderef V2831 V2833) (if (cons? V2821) (let X (hd V2821) (let V2822 (shen.lazyderef (tl V2821) V2833) (if (cons? V2822) (let V2823 (shen.lazyderef (hd V2822) V2833) (if (= : V2823) (let V2824 (shen.lazyderef (tl V2822) V2833) (if (cons? V2824) (let A (hd V2824) (let V2825 (shen.lazyderef (tl V2824) V2833) (if (= () V2825) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2833 (freeze (cut Throwcontrol V2833 (freeze (shen.th* X A V2832 V2833 V2834)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2833) (do (shen.incinfs) (shen.show V2831 V2832 V2833 (freeze (bind Datatypes (value shen.*datatypes*) V2833 (freeze (shen.udefs* V2831 V2832 Datatypes V2833 V2834))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2844) (cond ((= + V2844) (set shen.*shen-type-theory-enabled?* true)) ((= - V2844) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2839) (cond ((= + V2839) (set shen.*shen-type-theory-enabled?* true)) ((= - V2839) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2853 V2854) false) +(defun shen.prolog-failure (V2848 V2849) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2855 V2856 V2857 V2858 V2859) (let Case (let V2821 (shen.lazyderef V2857 V2858) (if (cons? V2821) (let D (hd V2821) (do (shen.incinfs) (call (cons D (cons V2855 (cons V2856 ()))) V2858 V2859))) false)) (if (= Case false) (let V2822 (shen.lazyderef V2857 V2858) (if (cons? V2822) (let Ds (tl V2822) (do (shen.incinfs) (shen.udefs* V2855 V2856 Ds V2858 V2859))) false)) Case))) +(defun shen.udefs* (V2850 V2851 V2852 V2853 V2854) (let Case (let V2816 (shen.lazyderef V2852 V2853) (if (cons? V2816) (let D (hd V2816) (do (shen.incinfs) (call (cons D (cons V2850 (cons V2851 ()))) V2853 V2854))) false)) (if (= Case false) (let V2817 (shen.lazyderef V2852 V2853) (if (cons? V2817) (let Ds (tl V2817) (do (shen.incinfs) (shen.udefs* V2850 V2851 Ds V2853 V2854))) false)) Case))) -(defun shen.th* (V2860 V2861 V2862 V2863 V2864) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2860 (cons : (cons V2861 ()))) V2862 V2863 (freeze (fwhen false V2863 V2864)))) (if (= Case false) (let Case (let F (shen.newpv V2863) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2860 V2863)) V2863 (freeze (bind F (shen.sigf (shen.lazyderef V2860 V2863)) V2863 (freeze (call (cons F (cons V2861 ())) V2863 V2864))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2860 V2861 V2863 V2864)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2860 V2861 V2862 V2863 V2864)) (if (= Case false) (let Case (let V2706 (shen.lazyderef V2860 V2863) (if (cons? V2706) (let F (hd V2706) (let V2707 (shen.lazyderef (tl V2706) V2863) (if (= () V2707) (do (shen.incinfs) (shen.th* F (cons --> (cons V2861 ())) V2862 V2863 V2864)) false))) false)) (if (= Case false) (let Case (let V2708 (shen.lazyderef V2860 V2863) (if (cons? V2708) (let F (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2863) (if (cons? V2709) (let X (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2863) (if (= () V2710) (let B (shen.newpv V2863) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2861 ()))) V2862 V2863 (freeze (shen.th* X B V2862 V2863 V2864))))) false))) false))) false)) (if (= Case false) (let Case (let V2711 (shen.lazyderef V2860 V2863) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2863) (if (= cons V2712) (let V2713 (shen.lazyderef (tl V2711) V2863) (if (cons? V2713) (let X (hd V2713) (let V2714 (shen.lazyderef (tl V2713) V2863) (if (cons? V2714) (let Y (hd V2714) (let V2715 (shen.lazyderef (tl V2714) V2863) (if (= () V2715) (let V2716 (shen.lazyderef V2861 V2863) (if (cons? V2716) (let V2717 (shen.lazyderef (hd V2716) V2863) (if (= list V2717) (let V2718 (shen.lazyderef (tl V2716) V2863) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2863) (if (= () V2719) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2719) (do (shen.bindv V2719 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2719 V2863) Result))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2863) (do (shen.bindv V2718 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2718 V2863) Result)))) false))) (if (shen.pvar? V2717) (do (shen.bindv V2717 list V2863) (let Result (let V2720 (shen.lazyderef (tl V2716) V2863) (if (cons? V2720) (let A (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2863) (if (= () V2721) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2721) (do (shen.bindv V2721 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2721 V2863) Result))) false)))) (if (shen.pvar? V2720) (let A (shen.newpv V2863) (do (shen.bindv V2720 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2720 V2863) Result)))) false))) (do (shen.unbindv V2717 V2863) Result))) false))) (if (shen.pvar? V2716) (let A (shen.newpv V2863) (do (shen.bindv V2716 (cons list (cons A ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons list (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2716 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2722 (shen.lazyderef V2860 V2863) (if (cons? V2722) (let V2723 (shen.lazyderef (hd V2722) V2863) (if (= @p V2723) (let V2724 (shen.lazyderef (tl V2722) V2863) (if (cons? V2724) (let X (hd V2724) (let V2725 (shen.lazyderef (tl V2724) V2863) (if (cons? V2725) (let Y (hd V2725) (let V2726 (shen.lazyderef (tl V2725) V2863) (if (= () V2726) (let V2727 (shen.lazyderef V2861 V2863) (if (cons? V2727) (let A (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2863) (if (cons? V2728) (let V2729 (shen.lazyderef (hd V2728) V2863) (if (= * V2729) (let V2730 (shen.lazyderef (tl V2728) V2863) (if (cons? V2730) (let B (hd V2730) (let V2731 (shen.lazyderef (tl V2730) V2863) (if (= () V2731) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (if (shen.pvar? V2731) (do (shen.bindv V2731 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2731 V2863) Result))) false)))) (if (shen.pvar? V2730) (let B (shen.newpv V2863) (do (shen.bindv V2730 (cons B ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2730 V2863) Result)))) false))) (if (shen.pvar? V2729) (do (shen.bindv V2729 * V2863) (let Result (let V2732 (shen.lazyderef (tl V2728) V2863) (if (cons? V2732) (let B (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2863) (if (= () V2733) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2733 V2863) Result))) false)))) (if (shen.pvar? V2732) (let B (shen.newpv V2863) (do (shen.bindv V2732 (cons B ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2732 V2863) Result)))) false))) (do (shen.unbindv V2729 V2863) Result))) false))) (if (shen.pvar? V2728) (let B (shen.newpv V2863) (do (shen.bindv V2728 (cons * (cons B ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2728 V2863) Result)))) false)))) (if (shen.pvar? V2727) (let A (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.bindv V2727 (cons A (cons * (cons B ()))) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y B V2862 V2863 V2864)))) (do (shen.unbindv V2727 V2863) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2734 (shen.lazyderef V2860 V2863) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2863) (if (= @v V2735) (let V2736 (shen.lazyderef (tl V2734) V2863) (if (cons? V2736) (let X (hd V2736) (let V2737 (shen.lazyderef (tl V2736) V2863) (if (cons? V2737) (let Y (hd V2737) (let V2738 (shen.lazyderef (tl V2737) V2863) (if (= () V2738) (let V2739 (shen.lazyderef V2861 V2863) (if (cons? V2739) (let V2740 (shen.lazyderef (hd V2739) V2863) (if (= vector V2740) (let V2741 (shen.lazyderef (tl V2739) V2863) (if (cons? V2741) (let A (hd V2741) (let V2742 (shen.lazyderef (tl V2741) V2863) (if (= () V2742) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2742) (do (shen.bindv V2742 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2742 V2863) Result))) false)))) (if (shen.pvar? V2741) (let A (shen.newpv V2863) (do (shen.bindv V2741 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2741 V2863) Result)))) false))) (if (shen.pvar? V2740) (do (shen.bindv V2740 vector V2863) (let Result (let V2743 (shen.lazyderef (tl V2739) V2863) (if (cons? V2743) (let A (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2863) (if (= () V2744) (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (if (shen.pvar? V2744) (do (shen.bindv V2744 () V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2744 V2863) Result))) false)))) (if (shen.pvar? V2743) (let A (shen.newpv V2863) (do (shen.bindv V2743 (cons A ()) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2743 V2863) Result)))) false))) (do (shen.unbindv V2740 V2863) Result))) false))) (if (shen.pvar? V2739) (let A (shen.newpv V2863) (do (shen.bindv V2739 (cons vector (cons A ())) V2863) (let Result (do (shen.incinfs) (shen.th* X A V2862 V2863 (freeze (shen.th* Y (cons vector (cons A ())) V2862 V2863 V2864)))) (do (shen.unbindv V2739 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2745 (shen.lazyderef V2860 V2863) (if (cons? V2745) (let V2746 (shen.lazyderef (hd V2745) V2863) (if (= @s V2746) (let V2747 (shen.lazyderef (tl V2745) V2863) (if (cons? V2747) (let X (hd V2747) (let V2748 (shen.lazyderef (tl V2747) V2863) (if (cons? V2748) (let Y (hd V2748) (let V2749 (shen.lazyderef (tl V2748) V2863) (if (= () V2749) (let V2750 (shen.lazyderef V2861 V2863) (if (= string V2750) (do (shen.incinfs) (shen.th* X string V2862 V2863 (freeze (shen.th* Y string V2862 V2863 V2864)))) (if (shen.pvar? V2750) (do (shen.bindv V2750 string V2863) (let Result (do (shen.incinfs) (shen.th* X string V2862 V2863 (freeze (shen.th* Y string V2862 V2863 V2864)))) (do (shen.unbindv V2750 V2863) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2751 (shen.lazyderef V2860 V2863) (if (cons? V2751) (let V2752 (shen.lazyderef (hd V2751) V2863) (if (= lambda V2752) (let V2753 (shen.lazyderef (tl V2751) V2863) (if (cons? V2753) (let X (hd V2753) (let V2754 (shen.lazyderef (tl V2753) V2863) (if (cons? V2754) (let Y (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2863) (if (= () V2755) (let V2756 (shen.lazyderef V2861 V2863) (if (cons? V2756) (let A (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2863) (if (cons? V2757) (let V2758 (shen.lazyderef (hd V2757) V2863) (if (= --> V2758) (let V2759 (shen.lazyderef (tl V2757) V2863) (if (cons? V2759) (let B (hd V2759) (let V2760 (shen.lazyderef (tl V2759) V2863) (if (= () V2760) (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (if (shen.pvar? V2760) (do (shen.bindv V2760 () V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2760 V2863) Result))) false)))) (if (shen.pvar? V2759) (let B (shen.newpv V2863) (do (shen.bindv V2759 (cons B ()) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2759 V2863) Result)))) false))) (if (shen.pvar? V2758) (do (shen.bindv V2758 --> V2863) (let Result (let V2761 (shen.lazyderef (tl V2757) V2863) (if (cons? V2761) (let B (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2863) (if (= () V2762) (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (if (shen.pvar? V2762) (do (shen.bindv V2762 () V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2762 V2863) Result))) false)))) (if (shen.pvar? V2761) (let B (shen.newpv V2863) (do (shen.bindv V2761 (cons B ()) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2761 V2863) Result)))) false))) (do (shen.unbindv V2758 V2863) Result))) false))) (if (shen.pvar? V2757) (let B (shen.newpv V2863) (do (shen.bindv V2757 (cons --> (cons B ())) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2757 V2863) Result)))) false)))) (if (shen.pvar? V2756) (let A (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.bindv V2756 (cons A (cons --> (cons B ()))) V2863) (let Result (let Z (shen.newpv V2863) (let X&& (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Y V2863)) V2863 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2862) V2863 V2864)))))))))) (do (shen.unbindv V2756 V2863) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2763 (shen.lazyderef V2860 V2863) (if (cons? V2763) (let V2764 (shen.lazyderef (hd V2763) V2863) (if (= let V2764) (let V2765 (shen.lazyderef (tl V2763) V2863) (if (cons? V2765) (let X (hd V2765) (let V2766 (shen.lazyderef (tl V2765) V2863) (if (cons? V2766) (let Y (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2863) (if (cons? V2767) (let Z (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2863) (if (= () V2768) (let W (shen.newpv V2863) (let X&& (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.incinfs) (shen.th* Y B V2862 V2863 (freeze (bind X&& (shen.placeholder) V2863 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2863) (shen.lazyderef X V2863) (shen.lazyderef Z V2863)) V2863 (freeze (shen.th* W V2861 (cons (cons X&& (cons : (cons B ()))) V2862) V2863 V2864))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2769 (shen.lazyderef V2860 V2863) (if (cons? V2769) (let V2770 (shen.lazyderef (hd V2769) V2863) (if (= open V2770) (let V2771 (shen.lazyderef (tl V2769) V2863) (if (cons? V2771) (let FileName (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2863) (if (cons? V2772) (let Direction2702 (hd V2772) (let V2773 (shen.lazyderef (tl V2772) V2863) (if (= () V2773) (let V2774 (shen.lazyderef V2861 V2863) (if (cons? V2774) (let V2775 (shen.lazyderef (hd V2774) V2863) (if (= stream V2775) (let V2776 (shen.lazyderef (tl V2774) V2863) (if (cons? V2776) (let Direction (hd V2776) (let V2777 (shen.lazyderef (tl V2776) V2863) (if (= () V2777) (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (if (shen.pvar? V2777) (do (shen.bindv V2777 () V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2777 V2863) Result))) false)))) (if (shen.pvar? V2776) (let Direction (shen.newpv V2863) (do (shen.bindv V2776 (cons Direction ()) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2776 V2863) Result)))) false))) (if (shen.pvar? V2775) (do (shen.bindv V2775 stream V2863) (let Result (let V2778 (shen.lazyderef (tl V2774) V2863) (if (cons? V2778) (let Direction (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2863) (if (= () V2779) (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (if (shen.pvar? V2779) (do (shen.bindv V2779 () V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2779 V2863) Result))) false)))) (if (shen.pvar? V2778) (let Direction (shen.newpv V2863) (do (shen.bindv V2778 (cons Direction ()) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2778 V2863) Result)))) false))) (do (shen.unbindv V2775 V2863) Result))) false))) (if (shen.pvar? V2774) (let Direction (shen.newpv V2863) (do (shen.bindv V2774 (cons stream (cons Direction ())) V2863) (let Result (do (shen.incinfs) (unify! Direction Direction2702 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* FileName string V2862 V2863 V2864)))))) (do (shen.unbindv V2774 V2863) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2860 V2863) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2863) (if (= type V2781) (let V2782 (shen.lazyderef (tl V2780) V2863) (if (cons? V2782) (let X (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2863) (if (cons? V2783) (let A (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2863) (if (= () V2784) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (unify A V2861 V2863 (freeze (shen.th* X A V2862 V2863 V2864)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2860 V2863) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2863) (if (= input+ V2786) (let V2787 (shen.lazyderef (tl V2785) V2863) (if (cons? V2787) (let A (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2863) (if (cons? V2788) (let Stream (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2863) (if (= () V2789) (let C (shen.newpv V2863) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2863)) V2863 (freeze (unify V2861 C V2863 (freeze (shen.th* Stream (cons stream (cons in ())) V2862 V2863 V2864))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2860 V2863) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2863) (if (= set V2791) (let V2792 (shen.lazyderef (tl V2790) V2863) (if (cons? V2792) (let Var (hd V2792) (let V2793 (shen.lazyderef (tl V2792) V2863) (if (cons? V2793) (let Val (hd V2793) (let V2794 (shen.lazyderef (tl V2793) V2863) (if (= () V2794) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.th* Var symbol V2862 V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* (cons value (cons Var ())) V2861 V2862 V2863 (freeze (shen.th* Val V2861 V2862 V2863 V2864)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2795 (shen.lazyderef V2860 V2863) (if (cons? V2795) (let V2796 (shen.lazyderef (hd V2795) V2863) (if (= shen.<-sem V2796) (let V2797 (shen.lazyderef (tl V2795) V2863) (if (cons? V2797) (let F (hd V2797) (let V2798 (shen.lazyderef (tl V2797) V2863) (if (= () V2798) (let A (shen.newpv V2863) (let F&& (shen.newpv V2863) (let B (shen.newpv V2863) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2862 V2863 (freeze (cut Throwcontrol V2863 (freeze (bind F&& (concat && (shen.lazyderef F V2863)) V2863 (freeze (cut Throwcontrol V2863 (freeze (shen.th* F&& V2861 (cons (cons F&& (cons : (cons B ()))) V2862) V2863 V2864))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2799 (shen.lazyderef V2860 V2863) (if (cons? V2799) (let V2800 (shen.lazyderef (hd V2799) V2863) (if (= fail V2800) (let V2801 (shen.lazyderef (tl V2799) V2863) (if (= () V2801) (let V2802 (shen.lazyderef V2861 V2863) (if (= symbol V2802) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2802) (do (shen.bindv V2802 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2802 V2863) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2863) (do (shen.incinfs) (shen.t*-hyps V2862 NewHyp V2863 (freeze (shen.th* V2860 V2861 NewHyp V2863 V2864))))) (if (= Case false) (let Case (let V2803 (shen.lazyderef V2860 V2863) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2863) (if (= define V2804) (let V2805 (shen.lazyderef (tl V2803) V2863) (if (cons? V2805) (let F (hd V2805) (let X (tl V2805) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.t*-def (cons define (cons F X)) V2861 V2862 V2863 V2864)))))) false)) false)) false)) (if (= Case false) (let Case (let V2806 (shen.lazyderef V2860 V2863) (if (cons? V2806) (let V2807 (shen.lazyderef (hd V2806) V2863) (if (= defcc V2807) (let V2808 (shen.lazyderef (tl V2806) V2863) (if (cons? V2808) (let F (hd V2808) (let X (tl V2808) (do (shen.incinfs) (cut Throwcontrol V2863 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2861 V2862 V2863 V2864)))))) false)) false)) false)) (if (= Case false) (let Case (let V2809 (shen.lazyderef V2860 V2863) (if (cons? V2809) (let V2810 (shen.lazyderef (hd V2809) V2863) (if (= defmacro V2810) (let V2811 (shen.lazyderef V2861 V2863) (if (= unit V2811) (do (shen.incinfs) (cut Throwcontrol V2863 V2864)) (if (shen.pvar? V2811) (do (shen.bindv V2811 unit V2863) (let Result (do (shen.incinfs) (cut Throwcontrol V2863 V2864)) (do (shen.unbindv V2811 V2863) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2812 (shen.lazyderef V2860 V2863) (if (cons? V2812) (let V2813 (shen.lazyderef (hd V2812) V2863) (if (= shen.process-datatype V2813) (let V2814 (shen.lazyderef V2861 V2863) (if (= symbol V2814) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2814) (do (shen.bindv V2814 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2814 V2863) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2860 V2863) (if (cons? V2815) (let V2816 (shen.lazyderef (hd V2815) V2863) (if (= shen.synonyms-help V2816) (let V2817 (shen.lazyderef V2861 V2863) (if (= symbol V2817) (do (shen.incinfs) (thaw V2864)) (if (shen.pvar? V2817) (do (shen.bindv V2817 symbol V2863) (let Result (do (shen.incinfs) (thaw V2864)) (do (shen.unbindv V2817 V2863) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2863) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2863 (freeze (shen.udefs* (cons V2860 (cons : (cons V2861 ()))) V2862 Datatypes V2863 V2864))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2855 V2856 V2857 V2858 V2859) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2855 (cons : (cons V2856 ()))) V2857 V2858 (freeze (fwhen false V2858 V2859)))) (if (= Case false) (let Case (let F (shen.newpv V2858) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2855 V2858)) V2858 (freeze (bind F (shen.sigf (shen.lazyderef V2855 V2858)) V2858 (freeze (call (cons F (cons V2856 ())) V2858 V2859))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2855 V2856 V2858 V2859)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2855 V2856 V2857 V2858 V2859)) (if (= Case false) (let Case (let V2701 (shen.lazyderef V2855 V2858) (if (cons? V2701) (let F (hd V2701) (let V2702 (shen.lazyderef (tl V2701) V2858) (if (= () V2702) (do (shen.incinfs) (shen.th* F (cons --> (cons V2856 ())) V2857 V2858 V2859)) false))) false)) (if (= Case false) (let Case (let V2703 (shen.lazyderef V2855 V2858) (if (cons? V2703) (let F (hd V2703) (let V2704 (shen.lazyderef (tl V2703) V2858) (if (cons? V2704) (let X (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2858) (if (= () V2705) (let B (shen.newpv V2858) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2856 ()))) V2857 V2858 (freeze (shen.th* X B V2857 V2858 V2859))))) false))) false))) false)) (if (= Case false) (let Case (let V2706 (shen.lazyderef V2855 V2858) (if (cons? V2706) (let V2707 (shen.lazyderef (hd V2706) V2858) (if (= cons V2707) (let V2708 (shen.lazyderef (tl V2706) V2858) (if (cons? V2708) (let X (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2858) (if (cons? V2709) (let Y (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2858) (if (= () V2710) (let V2711 (shen.lazyderef V2856 V2858) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2858) (if (= list V2712) (let V2713 (shen.lazyderef (tl V2711) V2858) (if (cons? V2713) (let A (hd V2713) (let V2714 (shen.lazyderef (tl V2713) V2858) (if (= () V2714) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2714) (do (shen.bindv V2714 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2714 V2858) Result))) false)))) (if (shen.pvar? V2713) (let A (shen.newpv V2858) (do (shen.bindv V2713 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2713 V2858) Result)))) false))) (if (shen.pvar? V2712) (do (shen.bindv V2712 list V2858) (let Result (let V2715 (shen.lazyderef (tl V2711) V2858) (if (cons? V2715) (let A (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2858) (if (= () V2716) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2716) (do (shen.bindv V2716 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2716 V2858) Result))) false)))) (if (shen.pvar? V2715) (let A (shen.newpv V2858) (do (shen.bindv V2715 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2715 V2858) Result)))) false))) (do (shen.unbindv V2712 V2858) Result))) false))) (if (shen.pvar? V2711) (let A (shen.newpv V2858) (do (shen.bindv V2711 (cons list (cons A ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2711 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2717 (shen.lazyderef V2855 V2858) (if (cons? V2717) (let V2718 (shen.lazyderef (hd V2717) V2858) (if (= @p V2718) (let V2719 (shen.lazyderef (tl V2717) V2858) (if (cons? V2719) (let X (hd V2719) (let V2720 (shen.lazyderef (tl V2719) V2858) (if (cons? V2720) (let Y (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2858) (if (= () V2721) (let V2722 (shen.lazyderef V2856 V2858) (if (cons? V2722) (let A (hd V2722) (let V2723 (shen.lazyderef (tl V2722) V2858) (if (cons? V2723) (let V2724 (shen.lazyderef (hd V2723) V2858) (if (= * V2724) (let V2725 (shen.lazyderef (tl V2723) V2858) (if (cons? V2725) (let B (hd V2725) (let V2726 (shen.lazyderef (tl V2725) V2858) (if (= () V2726) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (if (shen.pvar? V2726) (do (shen.bindv V2726 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2726 V2858) Result))) false)))) (if (shen.pvar? V2725) (let B (shen.newpv V2858) (do (shen.bindv V2725 (cons B ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2725 V2858) Result)))) false))) (if (shen.pvar? V2724) (do (shen.bindv V2724 * V2858) (let Result (let V2727 (shen.lazyderef (tl V2723) V2858) (if (cons? V2727) (let B (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2858) (if (= () V2728) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (if (shen.pvar? V2728) (do (shen.bindv V2728 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2728 V2858) Result))) false)))) (if (shen.pvar? V2727) (let B (shen.newpv V2858) (do (shen.bindv V2727 (cons B ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2727 V2858) Result)))) false))) (do (shen.unbindv V2724 V2858) Result))) false))) (if (shen.pvar? V2723) (let B (shen.newpv V2858) (do (shen.bindv V2723 (cons * (cons B ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2723 V2858) Result)))) false)))) (if (shen.pvar? V2722) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2722 (cons A (cons * (cons B ()))) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2722 V2858) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2729 (shen.lazyderef V2855 V2858) (if (cons? V2729) (let V2730 (shen.lazyderef (hd V2729) V2858) (if (= @v V2730) (let V2731 (shen.lazyderef (tl V2729) V2858) (if (cons? V2731) (let X (hd V2731) (let V2732 (shen.lazyderef (tl V2731) V2858) (if (cons? V2732) (let Y (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2858) (if (= () V2733) (let V2734 (shen.lazyderef V2856 V2858) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2858) (if (= vector V2735) (let V2736 (shen.lazyderef (tl V2734) V2858) (if (cons? V2736) (let A (hd V2736) (let V2737 (shen.lazyderef (tl V2736) V2858) (if (= () V2737) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2737) (do (shen.bindv V2737 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2737 V2858) Result))) false)))) (if (shen.pvar? V2736) (let A (shen.newpv V2858) (do (shen.bindv V2736 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2736 V2858) Result)))) false))) (if (shen.pvar? V2735) (do (shen.bindv V2735 vector V2858) (let Result (let V2738 (shen.lazyderef (tl V2734) V2858) (if (cons? V2738) (let A (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2858) (if (= () V2739) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2739) (do (shen.bindv V2739 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2739 V2858) Result))) false)))) (if (shen.pvar? V2738) (let A (shen.newpv V2858) (do (shen.bindv V2738 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2738 V2858) Result)))) false))) (do (shen.unbindv V2735 V2858) Result))) false))) (if (shen.pvar? V2734) (let A (shen.newpv V2858) (do (shen.bindv V2734 (cons vector (cons A ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2734 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2740 (shen.lazyderef V2855 V2858) (if (cons? V2740) (let V2741 (shen.lazyderef (hd V2740) V2858) (if (= @s V2741) (let V2742 (shen.lazyderef (tl V2740) V2858) (if (cons? V2742) (let X (hd V2742) (let V2743 (shen.lazyderef (tl V2742) V2858) (if (cons? V2743) (let Y (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2858) (if (= () V2744) (let V2745 (shen.lazyderef V2856 V2858) (if (= string V2745) (do (shen.incinfs) (shen.th* X string V2857 V2858 (freeze (shen.th* Y string V2857 V2858 V2859)))) (if (shen.pvar? V2745) (do (shen.bindv V2745 string V2858) (let Result (do (shen.incinfs) (shen.th* X string V2857 V2858 (freeze (shen.th* Y string V2857 V2858 V2859)))) (do (shen.unbindv V2745 V2858) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2746 (shen.lazyderef V2855 V2858) (if (cons? V2746) (let V2747 (shen.lazyderef (hd V2746) V2858) (if (= lambda V2747) (let V2748 (shen.lazyderef (tl V2746) V2858) (if (cons? V2748) (let X (hd V2748) (let V2749 (shen.lazyderef (tl V2748) V2858) (if (cons? V2749) (let Y (hd V2749) (let V2750 (shen.lazyderef (tl V2749) V2858) (if (= () V2750) (let V2751 (shen.lazyderef V2856 V2858) (if (cons? V2751) (let A (hd V2751) (let V2752 (shen.lazyderef (tl V2751) V2858) (if (cons? V2752) (let V2753 (shen.lazyderef (hd V2752) V2858) (if (= --> V2753) (let V2754 (shen.lazyderef (tl V2752) V2858) (if (cons? V2754) (let B (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2858) (if (= () V2755) (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (if (shen.pvar? V2755) (do (shen.bindv V2755 () V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2755 V2858) Result))) false)))) (if (shen.pvar? V2754) (let B (shen.newpv V2858) (do (shen.bindv V2754 (cons B ()) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2754 V2858) Result)))) false))) (if (shen.pvar? V2753) (do (shen.bindv V2753 --> V2858) (let Result (let V2756 (shen.lazyderef (tl V2752) V2858) (if (cons? V2756) (let B (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2858) (if (= () V2757) (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (if (shen.pvar? V2757) (do (shen.bindv V2757 () V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2757 V2858) Result))) false)))) (if (shen.pvar? V2756) (let B (shen.newpv V2858) (do (shen.bindv V2756 (cons B ()) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2756 V2858) Result)))) false))) (do (shen.unbindv V2753 V2858) Result))) false))) (if (shen.pvar? V2752) (let B (shen.newpv V2858) (do (shen.bindv V2752 (cons --> (cons B ())) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2752 V2858) Result)))) false)))) (if (shen.pvar? V2751) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2751 (cons A (cons --> (cons B ()))) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2751 V2858) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2758 (shen.lazyderef V2855 V2858) (if (cons? V2758) (let V2759 (shen.lazyderef (hd V2758) V2858) (if (= let V2759) (let V2760 (shen.lazyderef (tl V2758) V2858) (if (cons? V2760) (let X (hd V2760) (let V2761 (shen.lazyderef (tl V2760) V2858) (if (cons? V2761) (let Y (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2858) (if (cons? V2762) (let Z (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2858) (if (= () V2763) (let W (shen.newpv V2858) (let X&& (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.incinfs) (shen.th* Y B V2857 V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Z V2858)) V2858 (freeze (shen.th* W V2856 (cons (cons X&& (cons : (cons B ()))) V2857) V2858 V2859))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2764 (shen.lazyderef V2855 V2858) (if (cons? V2764) (let V2765 (shen.lazyderef (hd V2764) V2858) (if (= open V2765) (let V2766 (shen.lazyderef (tl V2764) V2858) (if (cons? V2766) (let FileName (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2858) (if (cons? V2767) (let Direction2697 (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2858) (if (= () V2768) (let V2769 (shen.lazyderef V2856 V2858) (if (cons? V2769) (let V2770 (shen.lazyderef (hd V2769) V2858) (if (= stream V2770) (let V2771 (shen.lazyderef (tl V2769) V2858) (if (cons? V2771) (let Direction (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2858) (if (= () V2772) (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (if (shen.pvar? V2772) (do (shen.bindv V2772 () V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2772 V2858) Result))) false)))) (if (shen.pvar? V2771) (let Direction (shen.newpv V2858) (do (shen.bindv V2771 (cons Direction ()) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2771 V2858) Result)))) false))) (if (shen.pvar? V2770) (do (shen.bindv V2770 stream V2858) (let Result (let V2773 (shen.lazyderef (tl V2769) V2858) (if (cons? V2773) (let Direction (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2858) (if (= () V2774) (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (if (shen.pvar? V2774) (do (shen.bindv V2774 () V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2774 V2858) Result))) false)))) (if (shen.pvar? V2773) (let Direction (shen.newpv V2858) (do (shen.bindv V2773 (cons Direction ()) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2773 V2858) Result)))) false))) (do (shen.unbindv V2770 V2858) Result))) false))) (if (shen.pvar? V2769) (let Direction (shen.newpv V2858) (do (shen.bindv V2769 (cons stream (cons Direction ())) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2769 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2775 (shen.lazyderef V2855 V2858) (if (cons? V2775) (let V2776 (shen.lazyderef (hd V2775) V2858) (if (= type V2776) (let V2777 (shen.lazyderef (tl V2775) V2858) (if (cons? V2777) (let X (hd V2777) (let V2778 (shen.lazyderef (tl V2777) V2858) (if (cons? V2778) (let A (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2858) (if (= () V2779) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (unify A V2856 V2858 (freeze (shen.th* X A V2857 V2858 V2859)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2855 V2858) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2858) (if (= input+ V2781) (let V2782 (shen.lazyderef (tl V2780) V2858) (if (cons? V2782) (let A (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2858) (if (cons? V2783) (let Stream (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2858) (if (= () V2784) (let C (shen.newpv V2858) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2858)) V2858 (freeze (unify V2856 C V2858 (freeze (shen.th* Stream (cons stream (cons in ())) V2857 V2858 V2859))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2855 V2858) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2858) (if (= set V2786) (let V2787 (shen.lazyderef (tl V2785) V2858) (if (cons? V2787) (let Var (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2858) (if (cons? V2788) (let Val (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2858) (if (= () V2789) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.th* Var symbol V2857 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* (cons value (cons Var ())) V2856 V2857 V2858 (freeze (shen.th* Val V2856 V2857 V2858 V2859)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2855 V2858) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2858) (if (= shen.<-sem V2791) (let V2792 (shen.lazyderef (tl V2790) V2858) (if (cons? V2792) (let F (hd V2792) (let V2793 (shen.lazyderef (tl V2792) V2858) (if (= () V2793) (let A (shen.newpv V2858) (let F&& (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2857 V2858 (freeze (cut Throwcontrol V2858 (freeze (bind F&& (concat && (shen.lazyderef F V2858)) V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* F&& V2856 (cons (cons F&& (cons : (cons B ()))) V2857) V2858 V2859))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2794 (shen.lazyderef V2855 V2858) (if (cons? V2794) (let V2795 (shen.lazyderef (hd V2794) V2858) (if (= fail V2795) (let V2796 (shen.lazyderef (tl V2794) V2858) (if (= () V2796) (let V2797 (shen.lazyderef V2856 V2858) (if (= symbol V2797) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2797) (do (shen.bindv V2797 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2797 V2858) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2858) (do (shen.incinfs) (shen.t*-hyps V2857 NewHyp V2858 (freeze (shen.th* V2855 V2856 NewHyp V2858 V2859))))) (if (= Case false) (let Case (let V2798 (shen.lazyderef V2855 V2858) (if (cons? V2798) (let V2799 (shen.lazyderef (hd V2798) V2858) (if (= define V2799) (let V2800 (shen.lazyderef (tl V2798) V2858) (if (cons? V2800) (let F (hd V2800) (let X (tl V2800) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.t*-def (cons define (cons F X)) V2856 V2857 V2858 V2859)))))) false)) false)) false)) (if (= Case false) (let Case (let V2801 (shen.lazyderef V2855 V2858) (if (cons? V2801) (let V2802 (shen.lazyderef (hd V2801) V2858) (if (= defcc V2802) (let V2803 (shen.lazyderef (tl V2801) V2858) (if (cons? V2803) (let F (hd V2803) (let X (tl V2803) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2856 V2857 V2858 V2859)))))) false)) false)) false)) (if (= Case false) (let Case (let V2804 (shen.lazyderef V2855 V2858) (if (cons? V2804) (let V2805 (shen.lazyderef (hd V2804) V2858) (if (= defmacro V2805) (let V2806 (shen.lazyderef V2856 V2858) (if (= unit V2806) (do (shen.incinfs) (cut Throwcontrol V2858 V2859)) (if (shen.pvar? V2806) (do (shen.bindv V2806 unit V2858) (let Result (do (shen.incinfs) (cut Throwcontrol V2858 V2859)) (do (shen.unbindv V2806 V2858) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2807 (shen.lazyderef V2855 V2858) (if (cons? V2807) (let V2808 (shen.lazyderef (hd V2807) V2858) (if (= shen.process-datatype V2808) (let V2809 (shen.lazyderef V2856 V2858) (if (= symbol V2809) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2809) (do (shen.bindv V2809 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2809 V2858) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2810 (shen.lazyderef V2855 V2858) (if (cons? V2810) (let V2811 (shen.lazyderef (hd V2810) V2858) (if (= shen.synonyms-help V2811) (let V2812 (shen.lazyderef V2856 V2858) (if (= symbol V2812) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2812) (do (shen.bindv V2812 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2812 V2858) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2858) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2858 (freeze (shen.udefs* (cons V2855 (cons : (cons V2856 ()))) V2857 Datatypes V2858 V2859))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2865 V2866 V2867 V2868) (let Case (let V2617 (shen.lazyderef V2865 V2867) (if (cons? V2617) (let V2618 (shen.lazyderef (hd V2617) V2867) (if (cons? V2618) (let V2619 (shen.lazyderef (hd V2618) V2867) (if (cons? V2619) (let V2620 (shen.lazyderef (hd V2619) V2867) (if (= cons V2620) (let V2621 (shen.lazyderef (tl V2619) V2867) (if (cons? V2621) (let X (hd V2621) (let V2622 (shen.lazyderef (tl V2621) V2867) (if (cons? V2622) (let Y (hd V2622) (let V2623 (shen.lazyderef (tl V2622) V2867) (if (= () V2623) (let V2624 (shen.lazyderef (tl V2618) V2867) (if (cons? V2624) (let V2625 (shen.lazyderef (hd V2624) V2867) (if (= : V2625) (let V2626 (shen.lazyderef (tl V2624) V2867) (if (cons? V2626) (let V2627 (shen.lazyderef (hd V2626) V2867) (if (cons? V2627) (let V2628 (shen.lazyderef (hd V2627) V2867) (if (= list V2628) (let V2629 (shen.lazyderef (tl V2627) V2867) (if (cons? V2629) (let A (hd V2629) (let V2630 (shen.lazyderef (tl V2629) V2867) (if (= () V2630) (let V2631 (shen.lazyderef (tl V2626) V2867) (if (= () V2631) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2631) (do (shen.bindv V2631 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2631 V2867) Result))) false))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2867) (let Result (let V2632 (shen.lazyderef (tl V2626) V2867) (if (= () V2632) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2632) (do (shen.bindv V2632 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2632 V2867) Result))) false))) (do (shen.unbindv V2630 V2867) Result))) false)))) (if (shen.pvar? V2629) (let A (shen.newpv V2867) (do (shen.bindv V2629 (cons A ()) V2867) (let Result (let V2633 (shen.lazyderef (tl V2626) V2867) (if (= () V2633) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2633) (do (shen.bindv V2633 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2633 V2867) Result))) false))) (do (shen.unbindv V2629 V2867) Result)))) false))) (if (shen.pvar? V2628) (do (shen.bindv V2628 list V2867) (let Result (let V2634 (shen.lazyderef (tl V2627) V2867) (if (cons? V2634) (let A (hd V2634) (let V2635 (shen.lazyderef (tl V2634) V2867) (if (= () V2635) (let V2636 (shen.lazyderef (tl V2626) V2867) (if (= () V2636) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2636) (do (shen.bindv V2636 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2636 V2867) Result))) false))) (if (shen.pvar? V2635) (do (shen.bindv V2635 () V2867) (let Result (let V2637 (shen.lazyderef (tl V2626) V2867) (if (= () V2637) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2637) (do (shen.bindv V2637 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2637 V2867) Result))) false))) (do (shen.unbindv V2635 V2867) Result))) false)))) (if (shen.pvar? V2634) (let A (shen.newpv V2867) (do (shen.bindv V2634 (cons A ()) V2867) (let Result (let V2638 (shen.lazyderef (tl V2626) V2867) (if (= () V2638) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2638) (do (shen.bindv V2638 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2638 V2867) Result))) false))) (do (shen.unbindv V2634 V2867) Result)))) false))) (do (shen.unbindv V2628 V2867) Result))) false))) (if (shen.pvar? V2627) (let A (shen.newpv V2867) (do (shen.bindv V2627 (cons list (cons A ())) V2867) (let Result (let V2639 (shen.lazyderef (tl V2626) V2867) (if (= () V2639) (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2639) (do (shen.bindv V2639 () V2867) (let Result (let Hyp (tl V2617) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons list (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2639 V2867) Result))) false))) (do (shen.unbindv V2627 V2867) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2640 (shen.lazyderef V2865 V2867) (if (cons? V2640) (let V2641 (shen.lazyderef (hd V2640) V2867) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2867) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2867) (if (= @p V2643) (let V2644 (shen.lazyderef (tl V2642) V2867) (if (cons? V2644) (let X (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2867) (if (cons? V2645) (let Y (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2867) (if (= () V2646) (let V2647 (shen.lazyderef (tl V2641) V2867) (if (cons? V2647) (let V2648 (shen.lazyderef (hd V2647) V2867) (if (= : V2648) (let V2649 (shen.lazyderef (tl V2647) V2867) (if (cons? V2649) (let V2650 (shen.lazyderef (hd V2649) V2867) (if (cons? V2650) (let A (hd V2650) (let V2651 (shen.lazyderef (tl V2650) V2867) (if (cons? V2651) (let V2652 (shen.lazyderef (hd V2651) V2867) (if (= * V2652) (let V2653 (shen.lazyderef (tl V2651) V2867) (if (cons? V2653) (let B (hd V2653) (let V2654 (shen.lazyderef (tl V2653) V2867) (if (= () V2654) (let V2655 (shen.lazyderef (tl V2649) V2867) (if (= () V2655) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2655 V2867) Result))) false))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2867) (let Result (let V2656 (shen.lazyderef (tl V2649) V2867) (if (= () V2656) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2656) (do (shen.bindv V2656 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2656 V2867) Result))) false))) (do (shen.unbindv V2654 V2867) Result))) false)))) (if (shen.pvar? V2653) (let B (shen.newpv V2867) (do (shen.bindv V2653 (cons B ()) V2867) (let Result (let V2657 (shen.lazyderef (tl V2649) V2867) (if (= () V2657) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2657) (do (shen.bindv V2657 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2657 V2867) Result))) false))) (do (shen.unbindv V2653 V2867) Result)))) false))) (if (shen.pvar? V2652) (do (shen.bindv V2652 * V2867) (let Result (let V2658 (shen.lazyderef (tl V2651) V2867) (if (cons? V2658) (let B (hd V2658) (let V2659 (shen.lazyderef (tl V2658) V2867) (if (= () V2659) (let V2660 (shen.lazyderef (tl V2649) V2867) (if (= () V2660) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2660) (do (shen.bindv V2660 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2660 V2867) Result))) false))) (if (shen.pvar? V2659) (do (shen.bindv V2659 () V2867) (let Result (let V2661 (shen.lazyderef (tl V2649) V2867) (if (= () V2661) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2661) (do (shen.bindv V2661 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2661 V2867) Result))) false))) (do (shen.unbindv V2659 V2867) Result))) false)))) (if (shen.pvar? V2658) (let B (shen.newpv V2867) (do (shen.bindv V2658 (cons B ()) V2867) (let Result (let V2662 (shen.lazyderef (tl V2649) V2867) (if (= () V2662) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2662) (do (shen.bindv V2662 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2662 V2867) Result))) false))) (do (shen.unbindv V2658 V2867) Result)))) false))) (do (shen.unbindv V2652 V2867) Result))) false))) (if (shen.pvar? V2651) (let B (shen.newpv V2867) (do (shen.bindv V2651 (cons * (cons B ())) V2867) (let Result (let V2663 (shen.lazyderef (tl V2649) V2867) (if (= () V2663) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2663) (do (shen.bindv V2663 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2663 V2867) Result))) false))) (do (shen.unbindv V2651 V2867) Result)))) false)))) (if (shen.pvar? V2650) (let A (shen.newpv V2867) (let B (shen.newpv V2867) (do (shen.bindv V2650 (cons A (cons * (cons B ()))) V2867) (let Result (let V2664 (shen.lazyderef (tl V2649) V2867) (if (= () V2664) (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2664) (do (shen.bindv V2664 () V2867) (let Result (let Hyp (tl V2640) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (shen.lazyderef B V2867) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2664 V2867) Result))) false))) (do (shen.unbindv V2650 V2867) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2665 (shen.lazyderef V2865 V2867) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2867) (if (cons? V2666) (let V2667 (shen.lazyderef (hd V2666) V2867) (if (cons? V2667) (let V2668 (shen.lazyderef (hd V2667) V2867) (if (= @v V2668) (let V2669 (shen.lazyderef (tl V2667) V2867) (if (cons? V2669) (let X (hd V2669) (let V2670 (shen.lazyderef (tl V2669) V2867) (if (cons? V2670) (let Y (hd V2670) (let V2671 (shen.lazyderef (tl V2670) V2867) (if (= () V2671) (let V2672 (shen.lazyderef (tl V2666) V2867) (if (cons? V2672) (let V2673 (shen.lazyderef (hd V2672) V2867) (if (= : V2673) (let V2674 (shen.lazyderef (tl V2672) V2867) (if (cons? V2674) (let V2675 (shen.lazyderef (hd V2674) V2867) (if (cons? V2675) (let V2676 (shen.lazyderef (hd V2675) V2867) (if (= vector V2676) (let V2677 (shen.lazyderef (tl V2675) V2867) (if (cons? V2677) (let A (hd V2677) (let V2678 (shen.lazyderef (tl V2677) V2867) (if (= () V2678) (let V2679 (shen.lazyderef (tl V2674) V2867) (if (= () V2679) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2679 V2867) Result))) false))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2867) (let Result (let V2680 (shen.lazyderef (tl V2674) V2867) (if (= () V2680) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2680) (do (shen.bindv V2680 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2680 V2867) Result))) false))) (do (shen.unbindv V2678 V2867) Result))) false)))) (if (shen.pvar? V2677) (let A (shen.newpv V2867) (do (shen.bindv V2677 (cons A ()) V2867) (let Result (let V2681 (shen.lazyderef (tl V2674) V2867) (if (= () V2681) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2681 V2867) Result))) false))) (do (shen.unbindv V2677 V2867) Result)))) false))) (if (shen.pvar? V2676) (do (shen.bindv V2676 vector V2867) (let Result (let V2682 (shen.lazyderef (tl V2675) V2867) (if (cons? V2682) (let A (hd V2682) (let V2683 (shen.lazyderef (tl V2682) V2867) (if (= () V2683) (let V2684 (shen.lazyderef (tl V2674) V2867) (if (= () V2684) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2684) (do (shen.bindv V2684 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2684 V2867) Result))) false))) (if (shen.pvar? V2683) (do (shen.bindv V2683 () V2867) (let Result (let V2685 (shen.lazyderef (tl V2674) V2867) (if (= () V2685) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2685) (do (shen.bindv V2685 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2685 V2867) Result))) false))) (do (shen.unbindv V2683 V2867) Result))) false)))) (if (shen.pvar? V2682) (let A (shen.newpv V2867) (do (shen.bindv V2682 (cons A ()) V2867) (let Result (let V2686 (shen.lazyderef (tl V2674) V2867) (if (= () V2686) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2686) (do (shen.bindv V2686 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2686 V2867) Result))) false))) (do (shen.unbindv V2682 V2867) Result)))) false))) (do (shen.unbindv V2676 V2867) Result))) false))) (if (shen.pvar? V2675) (let A (shen.newpv V2867) (do (shen.bindv V2675 (cons vector (cons A ())) V2867) (let Result (let V2687 (shen.lazyderef (tl V2674) V2867) (if (= () V2687) (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2687) (do (shen.bindv V2687 () V2867) (let Result (let Hyp (tl V2665) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons (shen.lazyderef A V2867) ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons (cons vector (cons (shen.lazyderef A V2867) ())) ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2687 V2867) Result))) false))) (do (shen.unbindv V2675 V2867) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2688 (shen.lazyderef V2865 V2867) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2867) (if (cons? V2689) (let V2690 (shen.lazyderef (hd V2689) V2867) (if (cons? V2690) (let V2691 (shen.lazyderef (hd V2690) V2867) (if (= @s V2691) (let V2692 (shen.lazyderef (tl V2690) V2867) (if (cons? V2692) (let X (hd V2692) (let V2693 (shen.lazyderef (tl V2692) V2867) (if (cons? V2693) (let Y (hd V2693) (let V2694 (shen.lazyderef (tl V2693) V2867) (if (= () V2694) (let V2695 (shen.lazyderef (tl V2689) V2867) (if (cons? V2695) (let V2696 (shen.lazyderef (hd V2695) V2867) (if (= : V2696) (let V2697 (shen.lazyderef (tl V2695) V2867) (if (cons? V2697) (let V2698 (shen.lazyderef (hd V2697) V2867) (if (= string V2698) (let V2699 (shen.lazyderef (tl V2697) V2867) (if (= () V2699) (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2699) (do (shen.bindv V2699 () V2867) (let Result (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2699 V2867) Result))) false))) (if (shen.pvar? V2698) (do (shen.bindv V2698 string V2867) (let Result (let V2700 (shen.lazyderef (tl V2697) V2867) (if (= () V2700) (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (if (shen.pvar? V2700) (do (shen.bindv V2700 () V2867) (let Result (let Hyp (tl V2688) (do (shen.incinfs) (bind V2866 (cons (cons (shen.lazyderef X V2867) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2867) (cons : (cons string ()))) (shen.lazyderef Hyp V2867))) V2867 V2868))) (do (shen.unbindv V2700 V2867) Result))) false))) (do (shen.unbindv V2698 V2867) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2701 (shen.lazyderef V2865 V2867) (if (cons? V2701) (let X (hd V2701) (let Hyp (tl V2701) (let NewHyps (shen.newpv V2867) (do (shen.incinfs) (bind V2866 (cons (shen.lazyderef X V2867) (shen.lazyderef NewHyps V2867)) V2867 (freeze (shen.t*-hyps Hyp NewHyps V2867 V2868))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2860 V2861 V2862 V2863) (let Case (let V2612 (shen.lazyderef V2860 V2862) (if (cons? V2612) (let V2613 (shen.lazyderef (hd V2612) V2862) (if (cons? V2613) (let V2614 (shen.lazyderef (hd V2613) V2862) (if (cons? V2614) (let V2615 (shen.lazyderef (hd V2614) V2862) (if (= cons V2615) (let V2616 (shen.lazyderef (tl V2614) V2862) (if (cons? V2616) (let X (hd V2616) (let V2617 (shen.lazyderef (tl V2616) V2862) (if (cons? V2617) (let Y (hd V2617) (let V2618 (shen.lazyderef (tl V2617) V2862) (if (= () V2618) (let V2619 (shen.lazyderef (tl V2613) V2862) (if (cons? V2619) (let V2620 (shen.lazyderef (hd V2619) V2862) (if (= : V2620) (let V2621 (shen.lazyderef (tl V2619) V2862) (if (cons? V2621) (let V2622 (shen.lazyderef (hd V2621) V2862) (if (cons? V2622) (let V2623 (shen.lazyderef (hd V2622) V2862) (if (= list V2623) (let V2624 (shen.lazyderef (tl V2622) V2862) (if (cons? V2624) (let A (hd V2624) (let V2625 (shen.lazyderef (tl V2624) V2862) (if (= () V2625) (let V2626 (shen.lazyderef (tl V2621) V2862) (if (= () V2626) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2626 V2862) Result))) false))) (if (shen.pvar? V2625) (do (shen.bindv V2625 () V2862) (let Result (let V2627 (shen.lazyderef (tl V2621) V2862) (if (= () V2627) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2627 V2862) Result))) false))) (do (shen.unbindv V2625 V2862) Result))) false)))) (if (shen.pvar? V2624) (let A (shen.newpv V2862) (do (shen.bindv V2624 (cons A ()) V2862) (let Result (let V2628 (shen.lazyderef (tl V2621) V2862) (if (= () V2628) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2628 V2862) Result))) false))) (do (shen.unbindv V2624 V2862) Result)))) false))) (if (shen.pvar? V2623) (do (shen.bindv V2623 list V2862) (let Result (let V2629 (shen.lazyderef (tl V2622) V2862) (if (cons? V2629) (let A (hd V2629) (let V2630 (shen.lazyderef (tl V2629) V2862) (if (= () V2630) (let V2631 (shen.lazyderef (tl V2621) V2862) (if (= () V2631) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2631) (do (shen.bindv V2631 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2631 V2862) Result))) false))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2862) (let Result (let V2632 (shen.lazyderef (tl V2621) V2862) (if (= () V2632) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2632) (do (shen.bindv V2632 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2632 V2862) Result))) false))) (do (shen.unbindv V2630 V2862) Result))) false)))) (if (shen.pvar? V2629) (let A (shen.newpv V2862) (do (shen.bindv V2629 (cons A ()) V2862) (let Result (let V2633 (shen.lazyderef (tl V2621) V2862) (if (= () V2633) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2633) (do (shen.bindv V2633 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2633 V2862) Result))) false))) (do (shen.unbindv V2629 V2862) Result)))) false))) (do (shen.unbindv V2623 V2862) Result))) false))) (if (shen.pvar? V2622) (let A (shen.newpv V2862) (do (shen.bindv V2622 (cons list (cons A ())) V2862) (let Result (let V2634 (shen.lazyderef (tl V2621) V2862) (if (= () V2634) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2634) (do (shen.bindv V2634 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2634 V2862) Result))) false))) (do (shen.unbindv V2622 V2862) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2635 (shen.lazyderef V2860 V2862) (if (cons? V2635) (let V2636 (shen.lazyderef (hd V2635) V2862) (if (cons? V2636) (let V2637 (shen.lazyderef (hd V2636) V2862) (if (cons? V2637) (let V2638 (shen.lazyderef (hd V2637) V2862) (if (= @p V2638) (let V2639 (shen.lazyderef (tl V2637) V2862) (if (cons? V2639) (let X (hd V2639) (let V2640 (shen.lazyderef (tl V2639) V2862) (if (cons? V2640) (let Y (hd V2640) (let V2641 (shen.lazyderef (tl V2640) V2862) (if (= () V2641) (let V2642 (shen.lazyderef (tl V2636) V2862) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2862) (if (= : V2643) (let V2644 (shen.lazyderef (tl V2642) V2862) (if (cons? V2644) (let V2645 (shen.lazyderef (hd V2644) V2862) (if (cons? V2645) (let A (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2862) (if (cons? V2646) (let V2647 (shen.lazyderef (hd V2646) V2862) (if (= * V2647) (let V2648 (shen.lazyderef (tl V2646) V2862) (if (cons? V2648) (let B (hd V2648) (let V2649 (shen.lazyderef (tl V2648) V2862) (if (= () V2649) (let V2650 (shen.lazyderef (tl V2644) V2862) (if (= () V2650) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2650 V2862) Result))) false))) (if (shen.pvar? V2649) (do (shen.bindv V2649 () V2862) (let Result (let V2651 (shen.lazyderef (tl V2644) V2862) (if (= () V2651) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2651 V2862) Result))) false))) (do (shen.unbindv V2649 V2862) Result))) false)))) (if (shen.pvar? V2648) (let B (shen.newpv V2862) (do (shen.bindv V2648 (cons B ()) V2862) (let Result (let V2652 (shen.lazyderef (tl V2644) V2862) (if (= () V2652) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2652 V2862) Result))) false))) (do (shen.unbindv V2648 V2862) Result)))) false))) (if (shen.pvar? V2647) (do (shen.bindv V2647 * V2862) (let Result (let V2653 (shen.lazyderef (tl V2646) V2862) (if (cons? V2653) (let B (hd V2653) (let V2654 (shen.lazyderef (tl V2653) V2862) (if (= () V2654) (let V2655 (shen.lazyderef (tl V2644) V2862) (if (= () V2655) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2655 V2862) Result))) false))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2862) (let Result (let V2656 (shen.lazyderef (tl V2644) V2862) (if (= () V2656) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2656) (do (shen.bindv V2656 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2656 V2862) Result))) false))) (do (shen.unbindv V2654 V2862) Result))) false)))) (if (shen.pvar? V2653) (let B (shen.newpv V2862) (do (shen.bindv V2653 (cons B ()) V2862) (let Result (let V2657 (shen.lazyderef (tl V2644) V2862) (if (= () V2657) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2657) (do (shen.bindv V2657 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2657 V2862) Result))) false))) (do (shen.unbindv V2653 V2862) Result)))) false))) (do (shen.unbindv V2647 V2862) Result))) false))) (if (shen.pvar? V2646) (let B (shen.newpv V2862) (do (shen.bindv V2646 (cons * (cons B ())) V2862) (let Result (let V2658 (shen.lazyderef (tl V2644) V2862) (if (= () V2658) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2658) (do (shen.bindv V2658 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2658 V2862) Result))) false))) (do (shen.unbindv V2646 V2862) Result)))) false)))) (if (shen.pvar? V2645) (let A (shen.newpv V2862) (let B (shen.newpv V2862) (do (shen.bindv V2645 (cons A (cons * (cons B ()))) V2862) (let Result (let V2659 (shen.lazyderef (tl V2644) V2862) (if (= () V2659) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2659) (do (shen.bindv V2659 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2659 V2862) Result))) false))) (do (shen.unbindv V2645 V2862) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2660 (shen.lazyderef V2860 V2862) (if (cons? V2660) (let V2661 (shen.lazyderef (hd V2660) V2862) (if (cons? V2661) (let V2662 (shen.lazyderef (hd V2661) V2862) (if (cons? V2662) (let V2663 (shen.lazyderef (hd V2662) V2862) (if (= @v V2663) (let V2664 (shen.lazyderef (tl V2662) V2862) (if (cons? V2664) (let X (hd V2664) (let V2665 (shen.lazyderef (tl V2664) V2862) (if (cons? V2665) (let Y (hd V2665) (let V2666 (shen.lazyderef (tl V2665) V2862) (if (= () V2666) (let V2667 (shen.lazyderef (tl V2661) V2862) (if (cons? V2667) (let V2668 (shen.lazyderef (hd V2667) V2862) (if (= : V2668) (let V2669 (shen.lazyderef (tl V2667) V2862) (if (cons? V2669) (let V2670 (shen.lazyderef (hd V2669) V2862) (if (cons? V2670) (let V2671 (shen.lazyderef (hd V2670) V2862) (if (= vector V2671) (let V2672 (shen.lazyderef (tl V2670) V2862) (if (cons? V2672) (let A (hd V2672) (let V2673 (shen.lazyderef (tl V2672) V2862) (if (= () V2673) (let V2674 (shen.lazyderef (tl V2669) V2862) (if (= () V2674) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2674 V2862) Result))) false))) (if (shen.pvar? V2673) (do (shen.bindv V2673 () V2862) (let Result (let V2675 (shen.lazyderef (tl V2669) V2862) (if (= () V2675) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2675 V2862) Result))) false))) (do (shen.unbindv V2673 V2862) Result))) false)))) (if (shen.pvar? V2672) (let A (shen.newpv V2862) (do (shen.bindv V2672 (cons A ()) V2862) (let Result (let V2676 (shen.lazyderef (tl V2669) V2862) (if (= () V2676) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2676 V2862) Result))) false))) (do (shen.unbindv V2672 V2862) Result)))) false))) (if (shen.pvar? V2671) (do (shen.bindv V2671 vector V2862) (let Result (let V2677 (shen.lazyderef (tl V2670) V2862) (if (cons? V2677) (let A (hd V2677) (let V2678 (shen.lazyderef (tl V2677) V2862) (if (= () V2678) (let V2679 (shen.lazyderef (tl V2669) V2862) (if (= () V2679) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2679 V2862) Result))) false))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2862) (let Result (let V2680 (shen.lazyderef (tl V2669) V2862) (if (= () V2680) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2680) (do (shen.bindv V2680 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2680 V2862) Result))) false))) (do (shen.unbindv V2678 V2862) Result))) false)))) (if (shen.pvar? V2677) (let A (shen.newpv V2862) (do (shen.bindv V2677 (cons A ()) V2862) (let Result (let V2681 (shen.lazyderef (tl V2669) V2862) (if (= () V2681) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2681 V2862) Result))) false))) (do (shen.unbindv V2677 V2862) Result)))) false))) (do (shen.unbindv V2671 V2862) Result))) false))) (if (shen.pvar? V2670) (let A (shen.newpv V2862) (do (shen.bindv V2670 (cons vector (cons A ())) V2862) (let Result (let V2682 (shen.lazyderef (tl V2669) V2862) (if (= () V2682) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2682) (do (shen.bindv V2682 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2682 V2862) Result))) false))) (do (shen.unbindv V2670 V2862) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2683 (shen.lazyderef V2860 V2862) (if (cons? V2683) (let V2684 (shen.lazyderef (hd V2683) V2862) (if (cons? V2684) (let V2685 (shen.lazyderef (hd V2684) V2862) (if (cons? V2685) (let V2686 (shen.lazyderef (hd V2685) V2862) (if (= @s V2686) (let V2687 (shen.lazyderef (tl V2685) V2862) (if (cons? V2687) (let X (hd V2687) (let V2688 (shen.lazyderef (tl V2687) V2862) (if (cons? V2688) (let Y (hd V2688) (let V2689 (shen.lazyderef (tl V2688) V2862) (if (= () V2689) (let V2690 (shen.lazyderef (tl V2684) V2862) (if (cons? V2690) (let V2691 (shen.lazyderef (hd V2690) V2862) (if (= : V2691) (let V2692 (shen.lazyderef (tl V2690) V2862) (if (cons? V2692) (let V2693 (shen.lazyderef (hd V2692) V2862) (if (= string V2693) (let V2694 (shen.lazyderef (tl V2692) V2862) (if (= () V2694) (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2694) (do (shen.bindv V2694 () V2862) (let Result (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2694 V2862) Result))) false))) (if (shen.pvar? V2693) (do (shen.bindv V2693 string V2862) (let Result (let V2695 (shen.lazyderef (tl V2692) V2862) (if (= () V2695) (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2695) (do (shen.bindv V2695 () V2862) (let Result (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2695 V2862) Result))) false))) (do (shen.unbindv V2693 V2862) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2696 (shen.lazyderef V2860 V2862) (if (cons? V2696) (let X (hd V2696) (let Hyp (tl V2696) (let NewHyps (shen.newpv V2862) (do (shen.incinfs) (bind V2861 (cons (shen.lazyderef X V2862) (shen.lazyderef NewHyps V2862)) V2862 (freeze (shen.t*-hyps Hyp NewHyps V2862 V2863))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2881 V2882 V2883 V2884) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2881 V2883)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2882 V2883) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2884))))))))) (true (thaw V2884)))) +(defun shen.show (V2876 V2877 V2878 V2879) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2876 V2878)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2877 V2878) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2879))))))))) (true (thaw V2879)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2885) (cond ((and (cons? V2885) (and (cons? (tl V2885)) (and (= : (hd (tl V2885))) (and (cons? (tl (tl V2885))) (= () (tl (tl (tl V2885)))))))) (shen.prhush (shen.app (hd V2885) (cn " : " (shen.app (hd (tl (tl V2885))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2885 "" shen.r) (stoutput))))) +(defun shen.show-p (V2880) (cond ((and (cons? V2880) (and (cons? (tl V2880)) (and (= : (hd (tl V2880))) (and (cons? (tl (tl V2880))) (= () (tl (tl (tl V2880)))))))) (shen.prhush (shen.app (hd V2880) (cn " : " (shen.app (hd (tl (tl V2880))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2880 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2888 V2889) (cond ((= () V2888) shen.skip) ((cons? V2888) (do (shen.prhush (shen.app V2889 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2888)) (do (nl 1) (shen.show-assumptions (tl V2888) (+ V2889 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2883 V2884) (cond ((= () V2883) shen.skip) ((cons? V2883) (do (shen.prhush (shen.app V2884 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2883)) (do (nl 1) (shen.show-assumptions (tl V2883) (+ V2884 1)))))) (true (shen.sys-error shen.show-assumptions)))) (defun shen.pause-for-user () (let Byte (read-byte (stinput)) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2890) (cons? (assoc V2890 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2885) (cons? (assoc V2885 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2891) (concat shen.type-signature-of- V2891)) +(defun shen.sigf (V2886) (concat shen.type-signature-of- V2886)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2892 V2893 V2894 V2895) (let Case (let V2604 (shen.lazyderef V2893 V2894) (if (= number V2604) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2604) (do (shen.bindv V2604 number V2894) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2604 V2894) Result))) false))) (if (= Case false) (let Case (let V2605 (shen.lazyderef V2893 V2894) (if (= boolean V2605) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2605) (do (shen.bindv V2605 boolean V2894) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2605 V2894) Result))) false))) (if (= Case false) (let Case (let V2606 (shen.lazyderef V2893 V2894) (if (= string V2606) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2892 V2894)) V2894 V2895)) (if (shen.pvar? V2606) (do (shen.bindv V2606 string V2894) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2892 V2894)) V2894 V2895)) (do (shen.unbindv V2606 V2894) Result))) false))) (if (= Case false) (let Case (let V2607 (shen.lazyderef V2893 V2894) (if (= symbol V2607) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2892 V2894)) V2894 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2892 V2894))) V2894 V2895)))) (if (shen.pvar? V2607) (do (shen.bindv V2607 symbol V2894) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2892 V2894)) V2894 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2892 V2894))) V2894 V2895)))) (do (shen.unbindv V2607 V2894) Result))) false))) (if (= Case false) (let V2608 (shen.lazyderef V2892 V2894) (if (= () V2608) (let V2609 (shen.lazyderef V2893 V2894) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2894) (if (= list V2610) (let V2611 (shen.lazyderef (tl V2609) V2894) (if (cons? V2611) (let A (hd V2611) (let V2612 (shen.lazyderef (tl V2611) V2894) (if (= () V2612) (do (shen.incinfs) (thaw V2895)) (if (shen.pvar? V2612) (do (shen.bindv V2612 () V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2612 V2894) Result))) false)))) (if (shen.pvar? V2611) (let A (shen.newpv V2894) (do (shen.bindv V2611 (cons A ()) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2611 V2894) Result)))) false))) (if (shen.pvar? V2610) (do (shen.bindv V2610 list V2894) (let Result (let V2613 (shen.lazyderef (tl V2609) V2894) (if (cons? V2613) (let A (hd V2613) (let V2614 (shen.lazyderef (tl V2613) V2894) (if (= () V2614) (do (shen.incinfs) (thaw V2895)) (if (shen.pvar? V2614) (do (shen.bindv V2614 () V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2614 V2894) Result))) false)))) (if (shen.pvar? V2613) (let A (shen.newpv V2894) (do (shen.bindv V2613 (cons A ()) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2613 V2894) Result)))) false))) (do (shen.unbindv V2610 V2894) Result))) false))) (if (shen.pvar? V2609) (let A (shen.newpv V2894) (do (shen.bindv V2609 (cons list (cons A ())) V2894) (let Result (do (shen.incinfs) (thaw V2895)) (do (shen.unbindv V2609 V2894) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2887 V2888 V2889 V2890) (let Case (let V2599 (shen.lazyderef V2888 V2889) (if (= number V2599) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2599) (do (shen.bindv V2599 number V2889) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2599 V2889) Result))) false))) (if (= Case false) (let Case (let V2600 (shen.lazyderef V2888 V2889) (if (= boolean V2600) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2600) (do (shen.bindv V2600 boolean V2889) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2600 V2889) Result))) false))) (if (= Case false) (let Case (let V2601 (shen.lazyderef V2888 V2889) (if (= string V2601) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2601) (do (shen.bindv V2601 string V2889) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2601 V2889) Result))) false))) (if (= Case false) (let Case (let V2602 (shen.lazyderef V2888 V2889) (if (= symbol V2602) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2887 V2889)) V2889 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2887 V2889))) V2889 V2890)))) (if (shen.pvar? V2602) (do (shen.bindv V2602 symbol V2889) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2887 V2889)) V2889 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2887 V2889))) V2889 V2890)))) (do (shen.unbindv V2602 V2889) Result))) false))) (if (= Case false) (let V2603 (shen.lazyderef V2887 V2889) (if (= () V2603) (let V2604 (shen.lazyderef V2888 V2889) (if (cons? V2604) (let V2605 (shen.lazyderef (hd V2604) V2889) (if (= list V2605) (let V2606 (shen.lazyderef (tl V2604) V2889) (if (cons? V2606) (let A (hd V2606) (let V2607 (shen.lazyderef (tl V2606) V2889) (if (= () V2607) (do (shen.incinfs) (thaw V2890)) (if (shen.pvar? V2607) (do (shen.bindv V2607 () V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2607 V2889) Result))) false)))) (if (shen.pvar? V2606) (let A (shen.newpv V2889) (do (shen.bindv V2606 (cons A ()) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2606 V2889) Result)))) false))) (if (shen.pvar? V2605) (do (shen.bindv V2605 list V2889) (let Result (let V2608 (shen.lazyderef (tl V2604) V2889) (if (cons? V2608) (let A (hd V2608) (let V2609 (shen.lazyderef (tl V2608) V2889) (if (= () V2609) (do (shen.incinfs) (thaw V2890)) (if (shen.pvar? V2609) (do (shen.bindv V2609 () V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2609 V2889) Result))) false)))) (if (shen.pvar? V2608) (let A (shen.newpv V2889) (do (shen.bindv V2608 (cons A ()) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2608 V2889) Result)))) false))) (do (shen.unbindv V2605 V2889) Result))) false))) (if (shen.pvar? V2604) (let A (shen.newpv V2889) (do (shen.bindv V2604 (cons list (cons A ())) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2604 V2889) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2896 V2897 V2898 V2899 V2900) (let Case (let V2595 (shen.lazyderef V2898 V2899) (if (cons? V2595) (let V2596 (shen.lazyderef (hd V2595) V2899) (if (cons? V2596) (let Y (hd V2596) (let V2597 (shen.lazyderef (tl V2596) V2899) (if (cons? V2597) (let V2598 (shen.lazyderef (hd V2597) V2899) (if (= : V2598) (let V2599 (shen.lazyderef (tl V2597) V2899) (if (cons? V2599) (let B (hd V2599) (let V2600 (shen.lazyderef (tl V2599) V2899) (if (= () V2600) (do (shen.incinfs) (identical V2896 Y V2899 (freeze (unify! V2897 B V2899 V2900)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2601 (shen.lazyderef V2898 V2899) (if (cons? V2601) (let Hyp (tl V2601) (do (shen.incinfs) (shen.by_hypothesis V2896 V2897 Hyp V2899 V2900))) false)) Case))) +(defun shen.by_hypothesis (V2891 V2892 V2893 V2894 V2895) (let Case (let V2590 (shen.lazyderef V2893 V2894) (if (cons? V2590) (let V2591 (shen.lazyderef (hd V2590) V2894) (if (cons? V2591) (let Y (hd V2591) (let V2592 (shen.lazyderef (tl V2591) V2894) (if (cons? V2592) (let V2593 (shen.lazyderef (hd V2592) V2894) (if (= : V2593) (let V2594 (shen.lazyderef (tl V2592) V2894) (if (cons? V2594) (let B (hd V2594) (let V2595 (shen.lazyderef (tl V2594) V2894) (if (= () V2595) (do (shen.incinfs) (identical V2891 Y V2894 (freeze (unify! V2892 B V2894 V2895)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2596 (shen.lazyderef V2893 V2894) (if (cons? V2596) (let Hyp (tl V2596) (do (shen.incinfs) (shen.by_hypothesis V2891 V2892 Hyp V2894 V2895))) false)) Case))) -(defun shen.t*-def (V2901 V2902 V2903 V2904 V2905) (let V2589 (shen.lazyderef V2901 V2904) (if (cons? V2589) (let V2590 (shen.lazyderef (hd V2589) V2904) (if (= define V2590) (let V2591 (shen.lazyderef (tl V2589) V2904) (if (cons? V2591) (let F (hd V2591) (let X (tl V2591) (let E (shen.newpv V2904) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2896 V2897 V2898 V2899 V2900) (let V2584 (shen.lazyderef V2896 V2899) (if (cons? V2584) (let V2585 (shen.lazyderef (hd V2584) V2899) (if (= define V2585) (let V2586 (shen.lazyderef (tl V2584) V2899) (if (cons? V2586) (let F (hd V2586) (let X (tl V2586) (let E (shen.newpv V2899) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2902 V2903 V2904 V2905))))) false)) false)) false))) +")))) F V2897 V2898 V2899 V2900))))) false)) false)) false))) -(defun shen.t*-defh (V2906 V2907 V2908 V2909 V2910 V2911) (let V2585 (shen.lazyderef V2906 V2910) (if (cons? V2585) (let Sig (hd V2585) (let Rules (tl V2585) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2907 V2908 V2909 Rules V2910 V2911)))) false))) +(defun shen.t*-defh (V2901 V2902 V2903 V2904 V2905 V2906) (let V2580 (shen.lazyderef V2901 V2905) (if (cons? V2580) (let Sig (hd V2580) (let Rules (tl V2580) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2902 V2903 V2904 Rules V2905 V2906)))) false))) -(defun shen.t*-defhh (V2912 V2913 V2914 V2915 V2916 V2917 V2918 V2919) (do (shen.incinfs) (shen.t*-rules V2917 V2913 1 V2914 (cons (cons V2914 (cons : (cons V2913 ()))) V2916) V2918 (freeze (shen.memo V2914 V2912 V2915 V2918 V2919))))) +(defun shen.t*-defhh (V2907 V2908 V2909 V2910 V2911 V2912 V2913 V2914) (do (shen.incinfs) (shen.t*-rules V2912 V2908 1 V2909 (cons (cons V2909 (cons : (cons V2908 ()))) V2911) V2913 (freeze (shen.memo V2909 V2907 V2910 V2913 V2914))))) -(defun shen.memo (V2920 V2921 V2922 V2923 V2924) (let Jnk (shen.newpv V2923) (do (shen.incinfs) (unify! V2922 V2921 V2923 (freeze (bind Jnk (declare (shen.lazyderef V2920 V2923) (shen.lazyderef V2922 V2923)) V2923 V2924)))))) +(defun shen.memo (V2915 V2916 V2917 V2918 V2919) (let Jnk (shen.newpv V2918) (do (shen.incinfs) (unify! V2917 V2916 V2918 (freeze (bind Jnk (declare (shen.lazyderef V2915 V2918) (shen.lazyderef V2917 V2918)) V2918 V2919)))))) -(defun shen. (V2929) (let Result (let Parse_shen. (shen. V2929) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2924) (let Result (let Parse_shen. (shen. V2924) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2930) (cond ((and (cons? V2930) (and (cons? (tl V2930)) (and (= () (tl (tl V2930))) (= (hd V2930) protect)))) V2930) ((cons? V2930) (map shen.ue V2930)) ((variable? V2930) (concat && V2930)) (true V2930))) +(defun shen.ue (V2925) (cond ((and (cons? V2925) (and (cons? (tl V2925)) (and (= () (tl (tl V2925))) (= (hd V2925) protect)))) V2925) ((cons? V2925) (map shen.ue V2925)) ((variable? V2925) (concat && V2925)) (true V2925))) -(defun shen.ue-sig (V2931) (cond ((cons? V2931) (map shen.ue-sig V2931)) ((variable? V2931) (concat &&& V2931)) (true V2931))) +(defun shen.ue-sig (V2926) (cond ((cons? V2926) (map shen.ue-sig V2926)) ((variable? V2926) (concat &&& V2926)) (true V2926))) -(defun shen.ues (V2936) (cond ((shen.ue? V2936) (cons V2936 ())) ((cons? V2936) (union (shen.ues (hd V2936)) (shen.ues (tl V2936)))) (true ()))) +(defun shen.ues (V2931) (cond ((shen.ue? V2931) (cons V2931 ())) ((cons? V2931) (union (shen.ues (hd V2931)) (shen.ues (tl V2931)))) (true ()))) -(defun shen.ue? (V2937) (and (symbol? V2937) (shen.ue-h? (str V2937)))) +(defun shen.ue? (V2932) (and (symbol? V2932) (shen.ue-h? (str V2932)))) -(defun shen.ue-h? (V2944) (cond ((and (shen.+string? V2944) (and (= "&" (pos V2944 0)) (and (shen.+string? (tlstr V2944)) (= "&" (pos (tlstr V2944) 0))))) true) (true false))) +(defun shen.ue-h? (V2939) (cond ((and (shen.+string? V2939) (and (= "&" (pos V2939 0)) (and (shen.+string? (tlstr V2939)) (= "&" (pos (tlstr V2939) 0))))) true) (true false))) -(defun shen.t*-rules (V2945 V2946 V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2560 (shen.lazyderef V2945 V2950) (if (= () V2560) (do (shen.incinfs) (thaw V2951)) false)) (if (= Case false) (let Case (let V2561 (shen.lazyderef V2945 V2950) (if (cons? V2561) (let V2562 (shen.lazyderef (hd V2561) V2950) (if (cons? V2562) (let V2563 (shen.lazyderef (hd V2562) V2950) (if (= () V2563) (let V2564 (shen.lazyderef (tl V2562) V2950) (if (cons? V2564) (let Action (hd V2564) (let V2565 (shen.lazyderef (tl V2564) V2950) (if (= () V2565) (let Rules (tl V2561) (let V2566 (shen.lazyderef V2946 V2950) (if (cons? V2566) (let V2567 (shen.lazyderef (hd V2566) V2950) (if (= --> V2567) (let V2568 (shen.lazyderef (tl V2566) V2950) (if (cons? V2568) (let A (hd V2568) (let V2569 (shen.lazyderef (tl V2568) V2950) (if (= () V2569) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rules Rules A (+ V2947 1) V2948 V2949 V2950 V2951)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2570 (shen.lazyderef V2945 V2950) (if (cons? V2570) (let Rule (hd V2570) (let Rules (tl V2570) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2946 V2949 V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rules Rules V2946 (+ V2947 1) V2948 V2949 V2950 V2951)))))))) false)) (if (= Case false) (let Err (shen.newpv V2950) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2947 V2950) (cn " of " (shen.app (shen.lazyderef V2948 V2950) "" shen.a)) shen.a))) V2950 V2951))) Case)) Case)) Case))))) +(defun shen.t*-rules (V2940 V2941 V2942 V2943 V2944 V2945 V2946) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2555 (shen.lazyderef V2940 V2945) (if (= () V2555) (do (shen.incinfs) (thaw V2946)) false)) (if (= Case false) (let Case (let V2556 (shen.lazyderef V2940 V2945) (if (cons? V2556) (let V2557 (shen.lazyderef (hd V2556) V2945) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2945) (if (= () V2558) (let V2559 (shen.lazyderef (tl V2557) V2945) (if (cons? V2559) (let Action (hd V2559) (let V2560 (shen.lazyderef (tl V2559) V2945) (if (= () V2560) (let Rules (tl V2556) (let V2561 (shen.lazyderef V2941 V2945) (if (cons? V2561) (let V2562 (shen.lazyderef (hd V2561) V2945) (if (= --> V2562) (let V2563 (shen.lazyderef (tl V2561) V2945) (if (cons? V2563) (let A (hd V2563) (let V2564 (shen.lazyderef (tl V2563) V2945) (if (= () V2564) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2944 V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rules Rules A (+ V2942 1) V2943 V2944 V2945 V2946)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2565 (shen.lazyderef V2940 V2945) (if (cons? V2565) (let Rule (hd V2565) (let Rules (tl V2565) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2941 V2944 V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rules Rules V2941 (+ V2942 1) V2943 V2944 V2945 V2946)))))))) false)) (if (= Case false) (let Err (shen.newpv V2945) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2942 V2945) (cn " of " (shen.app (shen.lazyderef V2943 V2945) "" shen.a)) shen.a))) V2945 V2946))) Case)) Case)) Case))))) -(defun shen.t*-rule (V2952 V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2542 (shen.lazyderef V2952 V2955) (if (cons? V2542) (let V2543 (shen.lazyderef (hd V2542) V2955) (if (= () V2543) (let V2544 (shen.lazyderef (tl V2542) V2955) (if (cons? V2544) (let Action (hd V2544) (let V2545 (shen.lazyderef (tl V2544) V2955) (if (= () V2545) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (shen.curry Action) V2953 V2954 V2955 V2956)))) false))) false)) false)) false)) (if (= Case false) (let V2546 (shen.lazyderef V2952 V2955) (if (cons? V2546) (let V2547 (shen.lazyderef (hd V2546) V2955) (if (cons? V2547) (let Pattern (hd V2547) (let Patterns (tl V2547) (let V2548 (shen.lazyderef (tl V2546) V2955) (if (cons? V2548) (let Action (hd V2548) (let V2549 (shen.lazyderef (tl V2548) V2955) (if (= () V2549) (let V2550 (shen.lazyderef V2953 V2955) (if (cons? V2550) (let A (hd V2550) (let V2551 (shen.lazyderef (tl V2550) V2955) (if (cons? V2551) (let V2552 (shen.lazyderef (hd V2551) V2955) (if (= --> V2552) (let V2553 (shen.lazyderef (tl V2551) V2955) (if (cons? V2553) (let B (hd V2553) (let V2554 (shen.lazyderef (tl V2553) V2955) (if (= () V2554) (do (shen.incinfs) (shen.t*-pattern Pattern A V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2954) V2955 V2956)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rule (V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2537 (shen.lazyderef V2947 V2950) (if (cons? V2537) (let V2538 (shen.lazyderef (hd V2537) V2950) (if (= () V2538) (let V2539 (shen.lazyderef (tl V2537) V2950) (if (cons? V2539) (let Action (hd V2539) (let V2540 (shen.lazyderef (tl V2539) V2950) (if (= () V2540) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (shen.curry Action) V2948 V2949 V2950 V2951)))) false))) false)) false)) false)) (if (= Case false) (let V2541 (shen.lazyderef V2947 V2950) (if (cons? V2541) (let V2542 (shen.lazyderef (hd V2541) V2950) (if (cons? V2542) (let Pattern (hd V2542) (let Patterns (tl V2542) (let V2543 (shen.lazyderef (tl V2541) V2950) (if (cons? V2543) (let Action (hd V2543) (let V2544 (shen.lazyderef (tl V2543) V2950) (if (= () V2544) (let V2545 (shen.lazyderef V2948 V2950) (if (cons? V2545) (let A (hd V2545) (let V2546 (shen.lazyderef (tl V2545) V2950) (if (cons? V2546) (let V2547 (shen.lazyderef (hd V2546) V2950) (if (= --> V2547) (let V2548 (shen.lazyderef (tl V2546) V2950) (if (cons? V2548) (let B (hd V2548) (let V2549 (shen.lazyderef (tl V2548) V2950) (if (= () V2549) (do (shen.incinfs) (shen.t*-pattern Pattern A V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2949) V2950 V2951)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-action (V2957 V2958 V2959 V2960 V2961) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2519 (shen.lazyderef V2957 V2960) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2960) (if (= where V2520) (let V2521 (shen.lazyderef (tl V2519) V2960) (if (cons? V2521) (let P (hd V2521) (let V2522 (shen.lazyderef (tl V2521) V2960) (if (cons? V2522) (let Action (hd V2522) (let V2523 (shen.lazyderef (tl V2522) V2960) (if (= () V2523) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2959 V2960 (freeze (cut Throwcontrol V2960 (freeze (shen.t*-action Action V2958 (cons (cons P (cons : (cons verified ()))) V2959) V2960 V2961)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2524 (shen.lazyderef V2957 V2960) (if (cons? V2524) (let V2525 (shen.lazyderef (hd V2524) V2960) (if (= shen.choicepoint! V2525) (let V2526 (shen.lazyderef (tl V2524) V2960) (if (cons? V2526) (let V2527 (shen.lazyderef (hd V2526) V2960) (if (cons? V2527) (let V2528 (shen.lazyderef (hd V2527) V2960) (if (cons? V2528) (let V2529 (shen.lazyderef (hd V2528) V2960) (if (= fail-if V2529) (let V2530 (shen.lazyderef (tl V2528) V2960) (if (cons? V2530) (let F (hd V2530) (let V2531 (shen.lazyderef (tl V2530) V2960) (if (= () V2531) (let V2532 (shen.lazyderef (tl V2527) V2960) (if (cons? V2532) (let Action (hd V2532) (let V2533 (shen.lazyderef (tl V2532) V2960) (if (= () V2533) (let V2534 (shen.lazyderef (tl V2526) V2960) (if (= () V2534) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2958 V2959 V2960 V2961)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2535 (shen.lazyderef V2957 V2960) (if (cons? V2535) (let V2536 (shen.lazyderef (hd V2535) V2960) (if (= shen.choicepoint! V2536) (let V2537 (shen.lazyderef (tl V2535) V2960) (if (cons? V2537) (let Action (hd V2537) (let V2538 (shen.lazyderef (tl V2537) V2960) (if (= () V2538) (do (shen.incinfs) (cut Throwcontrol V2960 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2958 V2959 V2960 V2961)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2957 (cons : (cons V2958 ()))) V2959 V2960 V2961)) Case)) Case)) Case))))) +(defun shen.t*-action (V2952 V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2514 (shen.lazyderef V2952 V2955) (if (cons? V2514) (let V2515 (shen.lazyderef (hd V2514) V2955) (if (= where V2515) (let V2516 (shen.lazyderef (tl V2514) V2955) (if (cons? V2516) (let P (hd V2516) (let V2517 (shen.lazyderef (tl V2516) V2955) (if (cons? V2517) (let Action (hd V2517) (let V2518 (shen.lazyderef (tl V2517) V2955) (if (= () V2518) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2954 V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t*-action Action V2953 (cons (cons P (cons : (cons verified ()))) V2954) V2955 V2956)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2519 (shen.lazyderef V2952 V2955) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2955) (if (= shen.choicepoint! V2520) (let V2521 (shen.lazyderef (tl V2519) V2955) (if (cons? V2521) (let V2522 (shen.lazyderef (hd V2521) V2955) (if (cons? V2522) (let V2523 (shen.lazyderef (hd V2522) V2955) (if (cons? V2523) (let V2524 (shen.lazyderef (hd V2523) V2955) (if (= fail-if V2524) (let V2525 (shen.lazyderef (tl V2523) V2955) (if (cons? V2525) (let F (hd V2525) (let V2526 (shen.lazyderef (tl V2525) V2955) (if (= () V2526) (let V2527 (shen.lazyderef (tl V2522) V2955) (if (cons? V2527) (let Action (hd V2527) (let V2528 (shen.lazyderef (tl V2527) V2955) (if (= () V2528) (let V2529 (shen.lazyderef (tl V2521) V2955) (if (= () V2529) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2953 V2954 V2955 V2956)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2530 (shen.lazyderef V2952 V2955) (if (cons? V2530) (let V2531 (shen.lazyderef (hd V2530) V2955) (if (= shen.choicepoint! V2531) (let V2532 (shen.lazyderef (tl V2530) V2955) (if (cons? V2532) (let Action (hd V2532) (let V2533 (shen.lazyderef (tl V2532) V2955) (if (= () V2533) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2953 V2954 V2955 V2956)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2952 (cons : (cons V2953 ()))) V2954 V2955 V2956)) Case)) Case)) Case))))) -(defun shen.t*-pattern (V2962 V2963 V2964 V2965) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2964) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2962) Hyp V2964 (freeze (cut Throwcontrol V2964 (freeze (shen.t* (cons V2962 (cons : (cons V2963 ()))) Hyp V2964 V2965)))))))))) +(defun shen.t*-pattern (V2957 V2958 V2959 V2960) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2959) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2957) Hyp V2959 (freeze (cut Throwcontrol V2959 (freeze (shen.t* (cons V2957 (cons : (cons V2958 ()))) Hyp V2959 V2960)))))))))) -(defun shen.tms->hyp (V2966 V2967 V2968 V2969) (let Case (let V2503 (shen.lazyderef V2966 V2968) (if (= () V2503) (let V2504 (shen.lazyderef V2967 V2968) (if (= () V2504) (do (shen.incinfs) (thaw V2969)) (if (shen.pvar? V2504) (do (shen.bindv V2504 () V2968) (let Result (do (shen.incinfs) (thaw V2969)) (do (shen.unbindv V2504 V2968) Result))) false))) false)) (if (= Case false) (let V2505 (shen.lazyderef V2966 V2968) (if (cons? V2505) (let Tm2500 (hd V2505) (let Tms (tl V2505) (let V2506 (shen.lazyderef V2967 V2968) (if (cons? V2506) (let V2507 (shen.lazyderef (hd V2506) V2968) (if (cons? V2507) (let Tm (hd V2507) (let V2508 (shen.lazyderef (tl V2507) V2968) (if (cons? V2508) (let V2509 (shen.lazyderef (hd V2508) V2968) (if (= : V2509) (let V2510 (shen.lazyderef (tl V2508) V2968) (if (cons? V2510) (let A (hd V2510) (let V2511 (shen.lazyderef (tl V2510) V2968) (if (= () V2511) (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (if (shen.pvar? V2511) (do (shen.bindv V2511 () V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2511 V2968) Result))) false)))) (if (shen.pvar? V2510) (let A (shen.newpv V2968) (do (shen.bindv V2510 (cons A ()) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2510 V2968) Result)))) false))) (if (shen.pvar? V2509) (do (shen.bindv V2509 : V2968) (let Result (let V2512 (shen.lazyderef (tl V2508) V2968) (if (cons? V2512) (let A (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2968) (if (= () V2513) (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (if (shen.pvar? V2513) (do (shen.bindv V2513 () V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2513 V2968) Result))) false)))) (if (shen.pvar? V2512) (let A (shen.newpv V2968) (do (shen.bindv V2512 (cons A ()) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2512 V2968) Result)))) false))) (do (shen.unbindv V2509 V2968) Result))) false))) (if (shen.pvar? V2508) (let A (shen.newpv V2968) (do (shen.bindv V2508 (cons : (cons A ())) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2508 V2968) Result)))) false)))) (if (shen.pvar? V2507) (let Tm (shen.newpv V2968) (let A (shen.newpv V2968) (do (shen.bindv V2507 (cons Tm (cons : (cons A ()))) V2968) (let Result (let Hyp (tl V2506) (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969))))) (do (shen.unbindv V2507 V2968) Result))))) false))) (if (shen.pvar? V2506) (let Tm (shen.newpv V2968) (let A (shen.newpv V2968) (let Hyp (shen.newpv V2968) (do (shen.bindv V2506 (cons (cons Tm (cons : (cons A ()))) Hyp) V2968) (let Result (do (shen.incinfs) (unify! Tm Tm2500 V2968 (freeze (shen.tms->hyp Tms Hyp V2968 V2969)))) (do (shen.unbindv V2506 V2968) Result)))))) false))))) false)) Case))) +(defun shen.tms->hyp (V2961 V2962 V2963 V2964) (let Case (let V2498 (shen.lazyderef V2961 V2963) (if (= () V2498) (let V2499 (shen.lazyderef V2962 V2963) (if (= () V2499) (do (shen.incinfs) (thaw V2964)) (if (shen.pvar? V2499) (do (shen.bindv V2499 () V2963) (let Result (do (shen.incinfs) (thaw V2964)) (do (shen.unbindv V2499 V2963) Result))) false))) false)) (if (= Case false) (let V2500 (shen.lazyderef V2961 V2963) (if (cons? V2500) (let Tm2495 (hd V2500) (let Tms (tl V2500) (let V2501 (shen.lazyderef V2962 V2963) (if (cons? V2501) (let V2502 (shen.lazyderef (hd V2501) V2963) (if (cons? V2502) (let Tm (hd V2502) (let V2503 (shen.lazyderef (tl V2502) V2963) (if (cons? V2503) (let V2504 (shen.lazyderef (hd V2503) V2963) (if (= : V2504) (let V2505 (shen.lazyderef (tl V2503) V2963) (if (cons? V2505) (let A (hd V2505) (let V2506 (shen.lazyderef (tl V2505) V2963) (if (= () V2506) (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (if (shen.pvar? V2506) (do (shen.bindv V2506 () V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2506 V2963) Result))) false)))) (if (shen.pvar? V2505) (let A (shen.newpv V2963) (do (shen.bindv V2505 (cons A ()) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2505 V2963) Result)))) false))) (if (shen.pvar? V2504) (do (shen.bindv V2504 : V2963) (let Result (let V2507 (shen.lazyderef (tl V2503) V2963) (if (cons? V2507) (let A (hd V2507) (let V2508 (shen.lazyderef (tl V2507) V2963) (if (= () V2508) (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (if (shen.pvar? V2508) (do (shen.bindv V2508 () V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2508 V2963) Result))) false)))) (if (shen.pvar? V2507) (let A (shen.newpv V2963) (do (shen.bindv V2507 (cons A ()) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2507 V2963) Result)))) false))) (do (shen.unbindv V2504 V2963) Result))) false))) (if (shen.pvar? V2503) (let A (shen.newpv V2963) (do (shen.bindv V2503 (cons : (cons A ())) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2503 V2963) Result)))) false)))) (if (shen.pvar? V2502) (let Tm (shen.newpv V2963) (let A (shen.newpv V2963) (do (shen.bindv V2502 (cons Tm (cons : (cons A ()))) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2502 V2963) Result))))) false))) (if (shen.pvar? V2501) (let Tm (shen.newpv V2963) (let A (shen.newpv V2963) (let Hyp (shen.newpv V2963) (do (shen.bindv V2501 (cons (cons Tm (cons : (cons A ()))) Hyp) V2963) (let Result (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964)))) (do (shen.unbindv V2501 V2963) Result)))))) false))))) false)) Case))) -(defun findall (V2970 V2971 V2972 V2973 V2974) (let B (shen.newpv V2973) (let A (shen.newpv V2973) (do (shen.incinfs) (bind A (gensym shen.a) V2973 (freeze (bind B (set (shen.lazyderef A V2973) ()) V2973 (freeze (shen.findallhelp V2970 V2971 V2972 A V2973 V2974))))))))) +(defun findall (V2965 V2966 V2967 V2968 V2969) (let B (shen.newpv V2968) (let A (shen.newpv V2968) (do (shen.incinfs) (bind A (gensym shen.a) V2968 (freeze (bind B (set (shen.lazyderef A V2968) ()) V2968 (freeze (shen.findallhelp V2965 V2966 V2967 A V2968 V2969))))))))) -(defun shen.findallhelp (V2975 V2976 V2977 V2978 V2979 V2980) (let Case (do (shen.incinfs) (call V2976 V2979 (freeze (shen.remember V2978 V2975 V2979 (freeze (fwhen false V2979 V2980)))))) (if (= Case false) (do (shen.incinfs) (bind V2977 (value (shen.lazyderef V2978 V2979)) V2979 V2980)) Case))) +(defun shen.findallhelp (V2970 V2971 V2972 V2973 V2974 V2975) (let Case (do (shen.incinfs) (call V2971 V2974 (freeze (shen.remember V2973 V2970 V2974 (freeze (fwhen false V2974 V2975)))))) (if (= Case false) (do (shen.incinfs) (bind V2972 (value (shen.lazyderef V2973 V2974)) V2974 V2975)) Case))) -(defun shen.remember (V2981 V2982 V2983 V2984) (let B (shen.newpv V2983) (do (shen.incinfs) (bind B (set (shen.deref V2981 V2983) (cons (shen.deref V2982 V2983) (value (shen.deref V2981 V2983)))) V2983 V2984)))) +(defun shen.remember (V2976 V2977 V2978 V2979) (let B (shen.newpv V2978) (do (shen.incinfs) (bind B (set (shen.deref V2976 V2978) (cons (shen.deref V2977 V2978) (value (shen.deref V2976 V2978)))) V2978 V2979)))) -(defun shen.t*-defcc (V2985 V2986 V2987 V2988 V2989) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2476 (shen.lazyderef V2985 V2988) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2988) (if (= defcc V2477) (let V2478 (shen.lazyderef (tl V2476) V2988) (if (cons? V2478) (let F (hd V2478) (let V2479 (shen.lazyderef (tl V2478) V2988) (if (cons? V2479) (let V2480 (shen.lazyderef (hd V2479) V2988) (if (= { V2480) (let V2481 (shen.lazyderef (tl V2479) V2988) (if (cons? V2481) (let V2482 (shen.lazyderef (hd V2481) V2988) (if (cons? V2482) (let V2483 (shen.lazyderef (hd V2482) V2988) (if (= list V2483) (let V2484 (shen.lazyderef (tl V2482) V2988) (if (cons? V2484) (let A (hd V2484) (let V2485 (shen.lazyderef (tl V2484) V2988) (if (= () V2485) (let V2486 (shen.lazyderef (tl V2481) V2988) (if (cons? V2486) (let V2487 (shen.lazyderef (hd V2486) V2988) (if (= ==> V2487) (let V2488 (shen.lazyderef (tl V2486) V2988) (if (cons? V2488) (let B (hd V2488) (let V2489 (shen.lazyderef (tl V2488) V2988) (if (cons? V2489) (let V2490 (shen.lazyderef (hd V2489) V2988) (if (= } V2490) (let Rest (tl V2489) (let Rest& (shen.newpv V2988) (let Rest&& (shen.newpv V2988) (let Rules (shen.newpv V2988) (let ListA&& (shen.newpv V2988) (let B&& (shen.newpv V2988) (let Sig (shen.newpv V2988) (let Declare (shen.newpv V2988) (do (shen.incinfs) (bind Sig (shen.ue (cons (cons list (cons (shen.lazyderef A V2988) ())) (cons ==> (cons (shen.lazyderef B V2988) ())))) V2988 (freeze (bind ListA&& (hd (shen.lazyderef Sig V2988)) V2988 (freeze (bind B&& (hd (tl (tl (shen.lazyderef Sig V2988)))) V2988 (freeze (bind Rest& (shen.plug-wildcards (shen.lazyderef Rest V2988)) V2988 (freeze (bind Rest&& (shen.ue (shen.lazyderef Rest& V2988)) V2988 (freeze (shen.get-rules Rules Rest&& V2988 (freeze (cut Throwcontrol V2988 (freeze (shen.tc-rules F Rules ListA&& B&& (cons (cons F (cons : (cons Sig ()))) V2987) 1 V2988 (freeze (unify V2986 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2988 (freeze (bind Declare (declare (shen.lazyderef F V2988) (cons (cons list (cons (shen.lazyderef A V2988) ())) (cons ==> (cons (shen.lazyderef B V2988) ())))) V2988 V2989)))))))))))))))))))))))))))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))))) +(defun shen.t*-defcc (V2980 V2981 V2982 V2983 V2984) (let V2471 (shen.lazyderef V2980 V2983) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V2983) (if (= defcc V2472) (let V2473 (shen.lazyderef (tl V2471) V2983) (if (cons? V2473) (let F (hd V2473) (let V2474 (shen.lazyderef (tl V2473) V2983) (if (cons? V2474) (let V2475 (shen.lazyderef (hd V2474) V2983) (if (= { V2475) (let V2476 (shen.lazyderef (tl V2474) V2983) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2983) (if (cons? V2477) (let V2478 (shen.lazyderef (hd V2477) V2983) (if (= list V2478) (let V2479 (shen.lazyderef (tl V2477) V2983) (if (cons? V2479) (let A (hd V2479) (let V2480 (shen.lazyderef (tl V2479) V2983) (if (= () V2480) (let V2481 (shen.lazyderef (tl V2476) V2983) (if (cons? V2481) (let V2482 (shen.lazyderef (hd V2481) V2983) (if (= ==> V2482) (let V2483 (shen.lazyderef (tl V2481) V2983) (if (cons? V2483) (let B (hd V2483) (let V2484 (shen.lazyderef (tl V2483) V2983) (if (cons? V2484) (let V2485 (shen.lazyderef (hd V2484) V2983) (if (= } V2485) (let Rest (tl V2484) (do (shen.incinfs) (shen.t*-defcc-h (cons defcc (cons F (cons (shen.ue (shen.demodulate (cons (cons list (cons A ())) (cons ==> (cons B ()))))) (shen.ue (shen.split_cc_rules false (shen.plug-wildcards Rest) ()))))) V2981 V2982 V2983 V2984))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))) -(defun shen.plug-wildcards (V2990) (cond ((cons? V2990) (map shen.plug-wildcards V2990)) ((= V2990 _) (gensym (intern "X"))) (true V2990))) +(defun shen.plug-wildcards (V2985) (cond ((cons? V2985) (map shen.plug-wildcards V2985)) ((= V2985 _) (gensym (intern "X"))) (true V2985))) -(defun shen.get-rules (V2991 V2992 V2993 V2994) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2469 (shen.lazyderef V2991 V2993) (if (= () V2469) (let V2470 (shen.lazyderef V2992 V2993) (if (= () V2470) (do (shen.incinfs) (cut Throwcontrol V2993 V2994)) false)) (if (shen.pvar? V2469) (do (shen.bindv V2469 () V2993) (let Result (let V2471 (shen.lazyderef V2992 V2993) (if (= () V2471) (do (shen.incinfs) (cut Throwcontrol V2993 V2994)) false)) (do (shen.unbindv V2469 V2993) Result))) false))) (if (= Case false) (let V2472 (shen.lazyderef V2991 V2993) (if (cons? V2472) (let Rule (hd V2472) (let Rules (tl V2472) (let Other (shen.newpv V2993) (do (shen.incinfs) (shen.first-rule V2992 Rule Other V2993 (freeze (cut Throwcontrol V2993 (freeze (shen.get-rules Rules Other V2993 V2994))))))))) (if (shen.pvar? V2472) (let Rule (shen.newpv V2993) (let Rules (shen.newpv V2993) (do (shen.bindv V2472 (cons Rule Rules) V2993) (let Result (let Other (shen.newpv V2993) (do (shen.incinfs) (shen.first-rule V2992 Rule Other V2993 (freeze (cut Throwcontrol V2993 (freeze (shen.get-rules Rules Other V2993 V2994))))))) (do (shen.unbindv V2472 V2993) Result))))) false))) Case))))) +(defun shen.t*-defcc-h (V2986 V2987 V2988 V2989 V2990) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2455 (shen.lazyderef V2986 V2989) (if (cons? V2455) (let V2456 (shen.lazyderef (hd V2455) V2989) (if (= defcc V2456) (let V2457 (shen.lazyderef (tl V2455) V2989) (if (cons? V2457) (let F (hd V2457) (let V2458 (shen.lazyderef (tl V2457) V2989) (if (cons? V2458) (let V2459 (shen.lazyderef (hd V2458) V2989) (if (cons? V2459) (let V2460 (shen.lazyderef (hd V2459) V2989) (if (cons? V2460) (let V2461 (shen.lazyderef (hd V2460) V2989) (if (= list V2461) (let V2462 (shen.lazyderef (tl V2460) V2989) (if (cons? V2462) (let A (hd V2462) (let V2463 (shen.lazyderef (tl V2462) V2989) (if (= () V2463) (let V2464 (shen.lazyderef (tl V2459) V2989) (if (cons? V2464) (let V2465 (shen.lazyderef (hd V2464) V2989) (if (= ==> V2465) (let V2466 (shen.lazyderef (tl V2464) V2989) (if (cons? V2466) (let B (hd V2466) (let V2467 (shen.lazyderef (tl V2466) V2989) (if (= () V2467) (let Rules (tl V2458) (let Declare (shen.newpv V2989) (do (shen.incinfs) (cut Throwcontrol V2989 (freeze (shen.tc-rules F Rules (cons list (cons A ())) B (cons (cons F (cons : (cons (cons (cons list (cons A ())) (cons ==> (cons B ()))) ()))) V2988) 1 V2989 (freeze (unify V2987 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2989 (freeze (bind Declare (declare (shen.lazyderef F V2989) (cons (cons list (cons (shen.lazyderef A V2989) ())) (cons ==> (cons (shen.lazyderef B V2989) ())))) V2989 V2990)))))))))) false))) false)) false)) false)) false))) false)) false)) false)) false)) false))) false)) false)) false))))) -(defun shen.first-rule (V2995 V2996 V2997 V2998 V2999) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2462 (shen.lazyderef V2995 V2998) (if (cons? V2462) (let V2463 (shen.lazyderef (hd V2462) V2998) (if (= ; V2463) (let Other2457 (tl V2462) (let V2464 (shen.lazyderef V2996 V2998) (if (= () V2464) (do (shen.incinfs) (unify! V2997 Other2457 V2998 (freeze (cut Throwcontrol V2998 V2999)))) (if (shen.pvar? V2464) (do (shen.bindv V2464 () V2998) (let Result (do (shen.incinfs) (unify! V2997 Other2457 V2998 (freeze (cut Throwcontrol V2998 V2999)))) (do (shen.unbindv V2464 V2998) Result))) false)))) false)) false)) (if (= Case false) (let V2465 (shen.lazyderef V2995 V2998) (if (cons? V2465) (let X2458 (hd V2465) (let Rest (tl V2465) (let V2466 (shen.lazyderef V2996 V2998) (if (cons? V2466) (let X (hd V2466) (let Rule (tl V2466) (do (shen.incinfs) (unify! X X2458 V2998 (freeze (shen.first-rule Rest Rule V2997 V2998 V2999)))))) (if (shen.pvar? V2466) (let X (shen.newpv V2998) (let Rule (shen.newpv V2998) (do (shen.bindv V2466 (cons X Rule) V2998) (let Result (do (shen.incinfs) (unify! X X2458 V2998 (freeze (shen.first-rule Rest Rule V2997 V2998 V2999)))) (do (shen.unbindv V2466 V2998) Result))))) false))))) false)) Case))))) +(defun shen.tc-rules (V2991 V2992 V2993 V2994 V2995 V2996 V2997 V2998) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2446 (shen.lazyderef V2992 V2997) (if (= () V2446) (do (shen.incinfs) (thaw V2998)) false)) (if (= Case false) (let V2447 (shen.lazyderef V2992 V2997) (if (cons? V2447) (let Rule (hd V2447) (let Rules (tl V2447) (let V2448 (shen.lazyderef V2993 V2997) (if (cons? V2448) (let V2449 (shen.lazyderef (hd V2448) V2997) (if (= list V2449) (let V2450 (shen.lazyderef (tl V2448) V2997) (if (cons? V2450) (let A (hd V2450) (let V2451 (shen.lazyderef (tl V2450) V2997) (if (= () V2451) (let M (shen.newpv V2997) (do (shen.incinfs) (shen.tc-rule V2991 Rule A V2994 V2995 V2996 V2997 (freeze (bind M (+ (shen.deref V2996 V2997) 1) V2997 (freeze (cut Throwcontrol V2997 (freeze (shen.tc-rules V2991 Rules (cons list (cons A ())) V2994 V2995 M V2997 V2998))))))))) false))) false)) false)) false)))) false)) Case))))) -(defun shen.tc-rules (V3000 V3001 V3002 V3003 V3004 V3005 V3006 V3007) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2451 (shen.lazyderef V3001 V3006) (if (= () V2451) (do (shen.incinfs) (thaw V3007)) false)) (if (= Case false) (let V2452 (shen.lazyderef V3001 V3006) (if (cons? V2452) (let Rule (hd V2452) (let Rules (tl V2452) (let V2453 (shen.lazyderef V3002 V3006) (if (cons? V2453) (let V2454 (shen.lazyderef (hd V2453) V3006) (if (= list V2454) (let V2455 (shen.lazyderef (tl V2453) V3006) (if (cons? V2455) (let A (hd V2455) (let V2456 (shen.lazyderef (tl V2455) V3006) (if (= () V2456) (let M (shen.newpv V3006) (do (shen.incinfs) (shen.tc-rule V3000 Rule A V3003 V3004 V3005 V3006 (freeze (bind M (+ (shen.deref V3005 V3006) 1) V3006 (freeze (cut Throwcontrol V3006 (freeze (shen.tc-rules V3000 Rules (cons list (cons A ())) V3003 V3004 M V3006 V3007))))))))) false))) false)) false)) false)))) false)) Case))))) +(defun shen.tc-rule (V2999 V3000 V3001 V3002 V3003 V3004 V3005 V3006) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3000 V3001 V3002 V3003 V3005 V3006)) (if (= Case false) (let Err (shen.newpv V3005) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3004 V3005) (cn " of " (shen.app (shen.lazyderef V2999 V3005) "" shen.a)) shen.a))) V3005 V3006))) Case))) -(defun shen.tc-rule (V3008 V3009 V3010 V3011 V3012 V3013 V3014 V3015) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3009 V3010 V3011 V3012 V3014 V3015)) (if (= Case false) (let Err (shen.newpv V3014) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3013 V3014) (cn " of " (shen.app (shen.lazyderef V3008 V3014) "" shen.a)) shen.a))) V3014 V3015))) Case))) +(defun shen.check-defcc-rule (V3007 V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2431 (shen.lazyderef V3007 V3011) (if (cons? V2431) (let Syntax (hd V2431) (let V2432 (shen.lazyderef (tl V2431) V3011) (if (cons? V2432) (let Semantics (hd V2432) (let V2433 (shen.lazyderef (tl V2432) V3011) (if (= () V2433) (let SynHyps (shen.newpv V3011) (do (shen.incinfs) (shen.syntax-hyps Syntax V3010 SynHyps V3008 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-check Syntax V3008 SynHyps V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.semantics-check Semantics V3009 SynHyps V3011 V3012))))))))))) false))) false))) false))))) -(defun shen.check-defcc-rule (V3016 V3017 V3018 V3019 V3020 V3021) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Syntax (shen.newpv V3020) (let Semantics (shen.newpv V3020) (let SynHyps (shen.newpv V3020) (do (shen.incinfs) (shen.get-syntax+semantics Syntax Semantics V3016 V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.syntax-hyps Syntax V3019 SynHyps V3017 V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.syntax-check Syntax V3017 SynHyps V3020 (freeze (cut Throwcontrol V3020 (freeze (shen.semantics-check Semantics V3018 SynHyps V3020 V3021)))))))))))))))))))) +(defun shen.syntax-hyps (V3013 V3014 V3015 V3016 V3017 V3018) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2416 (shen.lazyderef V3013 V3017) (if (= () V2416) (do (shen.incinfs) (unify! V3015 V3014 V3017 V3018)) false)) (if (= Case false) (let Case (let V2417 (shen.lazyderef V3013 V3017) (if (cons? V2417) (let X2410 (hd V2417) (let Y (tl V2417) (let V2418 (shen.lazyderef V3015 V3017) (if (cons? V2418) (let V2419 (shen.lazyderef (hd V2418) V3017) (if (cons? V2419) (let X (hd V2419) (let V2420 (shen.lazyderef (tl V2419) V3017) (if (cons? V2420) (let V2421 (shen.lazyderef (hd V2420) V3017) (if (= : V2421) (let V2422 (shen.lazyderef (tl V2420) V3017) (if (cons? V2422) (let A2411 (hd V2422) (let V2423 (shen.lazyderef (tl V2422) V3017) (if (= () V2423) (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2423) (do (shen.bindv V2423 () V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2423 V3017) Result))) false)))) (if (shen.pvar? V2422) (let A2411 (shen.newpv V3017) (do (shen.bindv V2422 (cons A2411 ()) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2422 V3017) Result)))) false))) (if (shen.pvar? V2421) (do (shen.bindv V2421 : V3017) (let Result (let V2424 (shen.lazyderef (tl V2420) V3017) (if (cons? V2424) (let A2411 (hd V2424) (let V2425 (shen.lazyderef (tl V2424) V3017) (if (= () V2425) (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2425) (do (shen.bindv V2425 () V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2425 V3017) Result))) false)))) (if (shen.pvar? V2424) (let A2411 (shen.newpv V3017) (do (shen.bindv V2424 (cons A2411 ()) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2424 V3017) Result)))) false))) (do (shen.unbindv V2421 V3017) Result))) false))) (if (shen.pvar? V2420) (let A2411 (shen.newpv V3017) (do (shen.bindv V2420 (cons : (cons A2411 ())) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2420 V3017) Result)))) false)))) (if (shen.pvar? V2419) (let X (shen.newpv V3017) (let A2411 (shen.newpv V3017) (do (shen.bindv V2419 (cons X (cons : (cons A2411 ()))) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2419 V3017) Result))))) false))) (if (shen.pvar? V2418) (let X (shen.newpv V3017) (let A2411 (shen.newpv V3017) (let SynHyps (shen.newpv V3017) (do (shen.bindv V2418 (cons (cons X (cons : (cons A2411 ()))) SynHyps) V3017) (let Result (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018)))))))))) (do (shen.unbindv V2418 V3017) Result)))))) false))))) false)) (if (= Case false) (let V2426 (shen.lazyderef V3013 V3017) (if (cons? V2426) (let Y (tl V2426) (do (shen.incinfs) (shen.syntax-hyps Y V3014 V3015 V3016 V3017 V3018))) false)) Case)) Case))))) -(defun shen.syntax-hyps (V3022 V3023 V3024 V3025 V3026 V3027) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2424 (shen.lazyderef V3022 V3026) (if (= () V2424) (do (shen.incinfs) (unify! V3024 V3023 V3026 V3027)) false)) (if (= Case false) (let Case (let V2425 (shen.lazyderef V3022 V3026) (if (cons? V2425) (let X2418 (hd V2425) (let Y (tl V2425) (let V2426 (shen.lazyderef V3024 V3026) (if (cons? V2426) (let V2427 (shen.lazyderef (hd V2426) V3026) (if (cons? V2427) (let X (hd V2427) (let V2428 (shen.lazyderef (tl V2427) V3026) (if (cons? V2428) (let V2429 (shen.lazyderef (hd V2428) V3026) (if (= : V2429) (let V2430 (shen.lazyderef (tl V2428) V3026) (if (cons? V2430) (let A2419 (hd V2430) (let V2431 (shen.lazyderef (tl V2430) V3026) (if (= () V2431) (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (if (shen.pvar? V2431) (do (shen.bindv V2431 () V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2431 V3026) Result))) false)))) (if (shen.pvar? V2430) (let A2419 (shen.newpv V3026) (do (shen.bindv V2430 (cons A2419 ()) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2430 V3026) Result)))) false))) (if (shen.pvar? V2429) (do (shen.bindv V2429 : V3026) (let Result (let V2432 (shen.lazyderef (tl V2428) V3026) (if (cons? V2432) (let A2419 (hd V2432) (let V2433 (shen.lazyderef (tl V2432) V3026) (if (= () V2433) (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (if (shen.pvar? V2433) (do (shen.bindv V2433 () V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2433 V3026) Result))) false)))) (if (shen.pvar? V2432) (let A2419 (shen.newpv V3026) (do (shen.bindv V2432 (cons A2419 ()) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2432 V3026) Result)))) false))) (do (shen.unbindv V2429 V3026) Result))) false))) (if (shen.pvar? V2428) (let A2419 (shen.newpv V3026) (do (shen.bindv V2428 (cons : (cons A2419 ())) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2428 V3026) Result)))) false)))) (if (shen.pvar? V2427) (let X (shen.newpv V3026) (let A2419 (shen.newpv V3026) (do (shen.bindv V2427 (cons X (cons : (cons A2419 ()))) V3026) (let Result (let SynHyps (tl V2426) (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027))))))))))) (do (shen.unbindv V2427 V3026) Result))))) false))) (if (shen.pvar? V2426) (let X (shen.newpv V3026) (let A2419 (shen.newpv V3026) (let SynHyps (shen.newpv V3026) (do (shen.bindv V2426 (cons (cons X (cons : (cons A2419 ()))) SynHyps) V3026) (let Result (do (shen.incinfs) (unify! V3025 A2419 V3026 (freeze (unify! X X2418 V3026 (freeze (fwhen (shen.ue? (shen.deref X V3026)) V3026 (freeze (cut Throwcontrol V3026 (freeze (shen.syntax-hyps Y V3023 SynHyps V3025 V3026 V3027)))))))))) (do (shen.unbindv V2426 V3026) Result)))))) false))))) false)) (if (= Case false) (let V2434 (shen.lazyderef V3022 V3026) (if (cons? V2434) (let Y (tl V2434) (do (shen.incinfs) (shen.syntax-hyps Y V3023 V3024 V3025 V3026 V3027))) false)) Case)) Case))))) +(defun shen.syntax-check (V3019 V3020 V3021 V3022 V3023) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2406 (shen.lazyderef V3019 V3022) (if (= () V2406) (do (shen.incinfs) (thaw V3023)) false)) (if (= Case false) (let Case (let V2407 (shen.lazyderef V3019 V3022) (if (cons? V2407) (let X (hd V2407) (let Syntax (tl V2407) (let C (shen.newpv V3022) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3022)) V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons V3020 ())) (cons ==> (cons C ()))) ()))) V3021 V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.syntax-check Syntax V3020 V3021 V3022 V3023))))))))))))) false)) (if (= Case false) (let V2408 (shen.lazyderef V3019 V3022) (if (cons? V2408) (let X (hd V2408) (let Syntax (tl V2408) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3020 ()))) V3021 V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.syntax-check Syntax V3020 V3021 V3022 V3023)))))))) false)) Case)) Case))))) -(defun shen.get-syntax+semantics (V3028 V3029 V3030 V3031 V3032) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2390 (shen.lazyderef V3028 V3031) (if (= () V2390) (let V2391 (shen.lazyderef V3030 V3031) (if (cons? V2391) (let V2392 (shen.lazyderef (hd V2391) V3031) (if (= := V2392) (let V2393 (shen.lazyderef (tl V2391) V3031) (if (cons? V2393) (let Semantics (hd V2393) (let V2394 (shen.lazyderef (tl V2393) V3031) (if (= () V2394) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (shen.lazyderef Semantics V3031) V3031 V3032)))) false))) false)) false)) false)) (if (shen.pvar? V2390) (do (shen.bindv V2390 () V3031) (let Result (let V2395 (shen.lazyderef V3030 V3031) (if (cons? V2395) (let V2396 (shen.lazyderef (hd V2395) V3031) (if (= := V2396) (let V2397 (shen.lazyderef (tl V2395) V3031) (if (cons? V2397) (let Semantics (hd V2397) (let V2398 (shen.lazyderef (tl V2397) V3031) (if (= () V2398) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (shen.lazyderef Semantics V3031) V3031 V3032)))) false))) false)) false)) false)) (do (shen.unbindv V2390 V3031) Result))) false))) (if (= Case false) (let Case (let V2399 (shen.lazyderef V3028 V3031) (if (= () V2399) (let V2400 (shen.lazyderef V3030 V3031) (if (cons? V2400) (let V2401 (shen.lazyderef (hd V2400) V3031) (if (= := V2401) (let V2402 (shen.lazyderef (tl V2400) V3031) (if (cons? V2402) (let Semantics (hd V2402) (let V2403 (shen.lazyderef (tl V2402) V3031) (if (cons? V2403) (let V2404 (shen.lazyderef (hd V2403) V3031) (if (= where V2404) (let V2405 (shen.lazyderef (tl V2403) V3031) (if (cons? V2405) (let G (hd V2405) (let V2406 (shen.lazyderef (tl V2405) V3031) (if (= () V2406) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (cons where (cons (shen.lazyderef G V3031) (cons (shen.lazyderef Semantics V3031) ()))) V3031 V3032)))) false))) false)) false)) false))) false)) false)) false)) (if (shen.pvar? V2399) (do (shen.bindv V2399 () V3031) (let Result (let V2407 (shen.lazyderef V3030 V3031) (if (cons? V2407) (let V2408 (shen.lazyderef (hd V2407) V3031) (if (= := V2408) (let V2409 (shen.lazyderef (tl V2407) V3031) (if (cons? V2409) (let Semantics (hd V2409) (let V2410 (shen.lazyderef (tl V2409) V3031) (if (cons? V2410) (let V2411 (shen.lazyderef (hd V2410) V3031) (if (= where V2411) (let V2412 (shen.lazyderef (tl V2410) V3031) (if (cons? V2412) (let G (hd V2412) (let V2413 (shen.lazyderef (tl V2412) V3031) (if (= () V2413) (do (shen.incinfs) (cut Throwcontrol V3031 (freeze (bind V3029 (cons where (cons (shen.lazyderef G V3031) (cons (shen.lazyderef Semantics V3031) ()))) V3031 V3032)))) false))) false)) false)) false))) false)) false)) false)) (do (shen.unbindv V2399 V3031) Result))) false))) (if (= Case false) (let V2414 (shen.lazyderef V3028 V3031) (if (cons? V2414) (let X2386 (hd V2414) (let Syntax (tl V2414) (let V2415 (shen.lazyderef V3030 V3031) (if (cons? V2415) (let X (hd V2415) (let Rule (tl V2415) (do (shen.incinfs) (unify! X X2386 V3031 (freeze (shen.get-syntax+semantics Syntax V3029 Rule V3031 V3032)))))) false)))) (if (shen.pvar? V2414) (let X2386 (shen.newpv V3031) (let Syntax (shen.newpv V3031) (do (shen.bindv V2414 (cons X2386 Syntax) V3031) (let Result (let V2416 (shen.lazyderef V3030 V3031) (if (cons? V2416) (let X (hd V2416) (let Rule (tl V2416) (do (shen.incinfs) (unify! X X2386 V3031 (freeze (shen.get-syntax+semantics Syntax V3029 Rule V3031 V3032)))))) false)) (do (shen.unbindv V2414 V3031) Result))))) false))) Case)) Case))))) +(defun shen.semantics-check (V3024 V3025 V3026 V3027 V3028) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2398 (shen.lazyderef V3024 V3027) (if (cons? V2398) (let V2399 (shen.lazyderef (hd V2398) V3027) (if (= where V2399) (let V2400 (shen.lazyderef (tl V2398) V3027) (if (cons? V2400) (let P (hd V2400) (let V2401 (shen.lazyderef (tl V2400) V3027) (if (cons? V2401) (let Q (hd V2401) (let V2402 (shen.lazyderef (tl V2401) V3027) (if (= () V2402) (do (shen.incinfs) (cut Throwcontrol V3027 (freeze (shen.t* (cons (shen.curry P) (cons : (cons boolean ()))) V3026 V3027 (freeze (shen.t* (cons (shen.curry Q) (cons : (cons V3025 ()))) V3026 V3027 V3028)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Semantics* (shen.newpv V3027) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3024 V3027))) V3027 (freeze (shen.t* (cons Semantics* (cons : (cons V3025 ()))) V3026 V3027 V3028))))) Case))))) -(defun shen.syntax-check (V3033 V3034 V3035 V3036 V3037) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2383 (shen.lazyderef V3033 V3036) (if (= () V2383) (do (shen.incinfs) (thaw V3037)) false)) (if (= Case false) (let Case (let V2384 (shen.lazyderef V3033 V3036) (if (cons? V2384) (let X (hd V2384) (let Syntax (tl V2384) (let C (shen.newpv V3036) (let X&& (shen.newpv V3036) (let B (shen.newpv V3036) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3036)) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons B ())) (cons ==> (cons C ()))) ()))) V3035 V3036 (freeze (cut Throwcontrol V3036 (freeze (bind X&& (concat && (shen.lazyderef X V3036)) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.t* (cons X&& (cons : (cons (cons list (cons V3034 ())) ()))) (cons (cons X&& (cons : (cons (cons list (cons B ())) ()))) V3035) V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.syntax-check Syntax V3034 V3035 V3036 V3037))))))))))))))))))))))) false)) (if (= Case false) (let V2385 (shen.lazyderef V3033 V3036) (if (cons? V2385) (let X (hd V2385) (let Syntax (tl V2385) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3034 ()))) V3035 V3036 (freeze (cut Throwcontrol V3036 (freeze (shen.syntax-check Syntax V3034 V3035 V3036 V3037)))))))) false)) Case)) Case))))) +(defun shen.rename-semantics (V3029) (cond ((cons? V3029) (cons (shen.rename-semantics (hd V3029)) (shen.rename-semantics (tl V3029)))) ((shen.grammar_symbol? V3029) (cons shen.<-sem (cons V3029 ()))) (true V3029))) -(defun shen.semantics-check (V3038 V3039 V3040 V3041 V3042) (let Semantics* (shen.newpv V3041) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3038 V3041))) V3041 (freeze (shen.t* (cons Semantics* (cons : (cons V3039 ()))) V3040 V3041 V3042)))))) - -(defun shen.rename-semantics (V3043) (cond ((cons? V3043) (cons (shen.rename-semantics (hd V3043)) (shen.rename-semantics (tl V3043)))) ((shen.grammar_symbol? V3043) (cons shen.<-sem (cons V3043 ()))) (true V3043))) +"(defprolog syntax-check + (mode [] -) _ _ <--; + (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) + ! + (t* [X : [[list B] ==> C]] Hyps) + ! + (bind X&& (concat && X)) + ! + (t* [X&& : [list A]] [[X&& : [list B]] | Hyps]) + ! + (syntax-check Syntax A Hyps); + (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) + ! + (syntax-check Syntax A Hyps);)" diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index 564b7d2..cc20c44 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -61,27 +61,27 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.initialise_environment () (shen.multiple-set (cons shen.*call* (cons 0 (cons shen.*infs* (cons 0 (cons shen.*process-counter* (cons 0 (cons shen.*catch* (cons 0 ())))))))))) -(defun shen.multiple-set (V2298) (cond ((= () V2298) ()) ((and (cons? V2298) (cons? (tl V2298))) (do (set (hd V2298) (hd (tl V2298))) (shen.multiple-set (tl (tl V2298))))) (true (shen.sys-error shen.multiple-set)))) +(defun shen.multiple-set (V2316) (cond ((= () V2316) ()) ((and (cons? V2316) (cons? (tl V2316))) (do (set (hd V2316) (hd (tl V2316))) (shen.multiple-set (tl (tl V2316))))) (true (shen.sys-error shen.multiple-set)))) -(defun destroy (V2299) (declare V2299 symbol)) +(defun destroy (V2317) (declare V2317 symbol)) (set shen.*history* ()) (defun shen.read-evaluate-print () (let Lineread (shen.toplineread) (let History (value shen.*history*) (let NewLineread (shen.retrieve-from-history-if-needed Lineread History) (let NewHistory (shen.update_history NewLineread History) (let Parsed (fst NewLineread) (shen.toplevel Parsed))))))) -(defun shen.retrieve-from-history-if-needed (V2309 V2310) (cond ((and (tuple? V2309) (and (cons? (snd V2309)) (element? (hd (snd V2309)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2309) (tl (snd V2309))) V2310)) ((and (tuple? V2309) (and (cons? (snd V2309)) (and (cons? (tl (snd V2309))) (and (= () (tl (tl (snd V2309)))) (and (cons? V2310) (and (= (hd (snd V2309)) (shen.exclamation)) (= (hd (tl (snd V2309))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2310))) (hd V2310))) ((and (tuple? V2309) (and (cons? (snd V2309)) (= (hd (snd V2309)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2309)) V2310) (let Find (head (shen.find-past-inputs Key? V2310)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2309) (and (cons? (snd V2309)) (and (= () (tl (snd V2309))) (= (hd (snd V2309)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2310) 0) (abort))) ((and (tuple? V2309) (and (cons? (snd V2309)) (= (hd (snd V2309)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2309)) V2310) (let Pastprint (shen.print-past-inputs Key? (reverse V2310) 0) (abort)))) (true V2309))) +(defun shen.retrieve-from-history-if-needed (V2327 V2328) (cond ((and (tuple? V2327) (and (cons? (snd V2327)) (element? (hd (snd V2327)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2327) (tl (snd V2327))) V2328)) ((and (tuple? V2327) (and (cons? (snd V2327)) (and (cons? (tl (snd V2327))) (and (= () (tl (tl (snd V2327)))) (and (cons? V2328) (and (= (hd (snd V2327)) (shen.exclamation)) (= (hd (tl (snd V2327))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2328))) (hd V2328))) ((and (tuple? V2327) (and (cons? (snd V2327)) (= (hd (snd V2327)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2327)) V2328) (let Find (head (shen.find-past-inputs Key? V2328)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2327) (and (cons? (snd V2327)) (and (= () (tl (snd V2327))) (= (hd (snd V2327)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2328) 0) (abort))) ((and (tuple? V2327) (and (cons? (snd V2327)) (= (hd (snd V2327)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2327)) V2328) (let Pastprint (shen.print-past-inputs Key? (reverse V2328) 0) (abort)))) (true V2327))) (defun shen.percent () 37) (defun shen.exclamation () 33) -(defun shen.prbytes (V2311) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2311) (nl 1))) +(defun shen.prbytes (V2329) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2329) (nl 1))) -(defun shen.update_history (V2312 V2313) (set shen.*history* (cons V2312 V2313))) +(defun shen.update_history (V2330 V2331) (set shen.*history* (cons V2330 V2331))) (defun shen.toplineread () (shen.toplineread_loop (read-byte (stinput)) ())) -(defun shen.toplineread_loop (V2315 V2316) (cond ((= V2315 (shen.hat)) (simple-error "line read aborted")) ((element? V2315 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2316 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2316 (cons V2315 ()))) (@p Line V2316)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2316 (cons V2315 ())))))) +(defun shen.toplineread_loop (V2333 V2334) (cond ((= V2333 (shen.hat)) (simple-error "line read aborted")) ((element? V2333 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2334 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2334 (cons V2333 ()))) (@p Line V2334)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2334 (cons V2333 ())))))) (defun shen.hat () 94) @@ -89,7 +89,7 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.carriage-return () 13) -(defun tc (V2321) (cond ((= + V2321) (set shen.*tc* true)) ((= - V2321) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) +(defun tc (V2339) (cond ((= + V2339) (set shen.*tc* true)) ((= - V2339) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) (defun shen.prompt () (if (value shen.*tc*) (shen.prhush (cn " @@ -97,16 +97,16 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (" (shen.app (length (value shen.*history*)) "-) " shen.a)) (stoutput)))) -(defun shen.toplevel (V2322) (shen.toplevel_evaluate V2322 (value shen.*tc*))) +(defun shen.toplevel (V2340) (shen.toplevel_evaluate V2340 (value shen.*tc*))) -(defun shen.find-past-inputs (V2323 V2324) (let F (shen.find V2323 V2324) (if (empty? F) (simple-error "input not found +(defun shen.find-past-inputs (V2341 V2342) (let F (shen.find V2341 V2342) (if (empty? F) (simple-error "input not found ") F))) -(defun shen.make-key (V2325 V2326) (let Atom (hd (compile shen. V2325 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.make-key (V2343 V2344) (let Atom (hd (compile shen. V2343 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2326)))) (lambda X (shen.prefix? V2325 (shen.trim-gubbins (snd X))))))) +"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2344)))) (lambda X (shen.prefix? V2343 (shen.trim-gubbins (snd X))))))) -(defun shen.trim-gubbins (V2327) (cond ((and (cons? V2327) (= (hd V2327) (shen.space))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.newline))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.carriage-return))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.tab))) (shen.trim-gubbins (tl V2327))) ((and (cons? V2327) (= (hd V2327) (shen.left-round))) (shen.trim-gubbins (tl V2327))) (true V2327))) +(defun shen.trim-gubbins (V2345) (cond ((and (cons? V2345) (= (hd V2345) (shen.space))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.newline))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.carriage-return))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.tab))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.left-round))) (shen.trim-gubbins (tl V2345))) (true V2345))) (defun shen.space () 32) @@ -114,22 +114,22 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.left-round () 40) -(defun shen.find (V2334 V2335) (cond ((= () V2335) ()) ((and (cons? V2335) (V2334 (hd V2335))) (cons (hd V2335) (shen.find V2334 (tl V2335)))) ((cons? V2335) (shen.find V2334 (tl V2335))) (true (shen.sys-error shen.find)))) +(defun shen.find (V2352 V2353) (cond ((= () V2353) ()) ((and (cons? V2353) (V2352 (hd V2353))) (cons (hd V2353) (shen.find V2352 (tl V2353)))) ((cons? V2353) (shen.find V2352 (tl V2353))) (true (shen.sys-error shen.find)))) -(defun shen.prefix? (V2346 V2347) (cond ((= () V2346) true) ((and (cons? V2346) (and (cons? V2347) (= (hd V2347) (hd V2346)))) (shen.prefix? (tl V2346) (tl V2347))) (true false))) +(defun shen.prefix? (V2364 V2365) (cond ((= () V2364) true) ((and (cons? V2364) (and (cons? V2365) (= (hd V2365) (hd V2364)))) (shen.prefix? (tl V2364) (tl V2365))) (true false))) -(defun shen.print-past-inputs (V2357 V2358 V2359) (cond ((= () V2358) _) ((and (cons? V2358) (not (V2357 (hd V2358)))) (shen.print-past-inputs V2357 (tl V2358) (+ V2359 1))) ((and (cons? V2358) (tuple? (hd V2358))) (do (shen.prhush (shen.app V2359 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2358))) (shen.print-past-inputs V2357 (tl V2358) (+ V2359 1))))) (true (shen.sys-error shen.print-past-inputs)))) +(defun shen.print-past-inputs (V2375 V2376 V2377) (cond ((= () V2376) _) ((and (cons? V2376) (not (V2375 (hd V2376)))) (shen.print-past-inputs V2375 (tl V2376) (+ V2377 1))) ((and (cons? V2376) (tuple? (hd V2376))) (do (shen.prhush (shen.app V2377 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2376))) (shen.print-past-inputs V2375 (tl V2376) (+ V2377 1))))) (true (shen.sys-error shen.print-past-inputs)))) -(defun shen.toplevel_evaluate (V2360 V2361) (cond ((and (cons? V2360) (and (cons? (tl V2360)) (and (= : (hd (tl V2360))) (and (cons? (tl (tl V2360))) (and (= () (tl (tl (tl V2360)))) (= true V2361)))))) (shen.typecheck-and-evaluate (hd V2360) (hd (tl (tl V2360))))) ((and (cons? V2360) (cons? (tl V2360))) (do (shen.toplevel_evaluate (cons (hd V2360) ()) V2361) (do (nl 1) (shen.toplevel_evaluate (tl V2360) V2361)))) ((and (cons? V2360) (and (= () (tl V2360)) (= true V2361))) (shen.typecheck-and-evaluate (hd V2360) (gensym A))) ((and (cons? V2360) (and (= () (tl V2360)) (= false V2361))) (let Eval (shen.eval-without-macros (hd V2360)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) +(defun shen.toplevel_evaluate (V2378 V2379) (cond ((and (cons? V2378) (and (cons? (tl V2378)) (and (= : (hd (tl V2378))) (and (cons? (tl (tl V2378))) (and (= () (tl (tl (tl V2378)))) (= true V2379)))))) (shen.typecheck-and-evaluate (hd V2378) (hd (tl (tl V2378))))) ((and (cons? V2378) (cons? (tl V2378))) (do (shen.toplevel_evaluate (cons (hd V2378) ()) V2379) (do (nl 1) (shen.toplevel_evaluate (tl V2378) V2379)))) ((and (cons? V2378) (and (= () (tl V2378)) (= true V2379))) (shen.typecheck-and-evaluate (hd V2378) (gensym A))) ((and (cons? V2378) (and (= () (tl V2378)) (= false V2379))) (let Eval (shen.eval-without-macros (hd V2378)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) -(defun shen.typecheck-and-evaluate (V2362 V2363) (let Typecheck (shen.typecheck V2362 V2363) (if (= Typecheck false) (simple-error "type error -") (let Eval (shen.eval-without-macros V2362) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) +(defun shen.typecheck-and-evaluate (V2380 V2381) (let Typecheck (shen.typecheck V2380 V2381) (if (= Typecheck false) (simple-error "type error +") (let Eval (shen.eval-without-macros V2380) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) -(defun shen.pretty-type (V2364) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2364) V2364)) +(defun shen.pretty-type (V2382) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2382) V2382)) -(defun shen.extract-pvars (V2369) (cond ((shen.pvar? V2369) (cons V2369 ())) ((cons? V2369) (union (shen.extract-pvars (hd V2369)) (shen.extract-pvars (tl V2369)))) (true ()))) +(defun shen.extract-pvars (V2387) (cond ((shen.pvar? V2387) (cons V2387 ())) ((cons? V2387) (union (shen.extract-pvars (hd V2387)) (shen.extract-pvars (tl V2387)))) (true ()))) -(defun shen.mult_subst (V2374 V2375 V2376) (cond ((= () V2374) V2376) ((= () V2375) V2376) ((and (cons? V2374) (cons? V2375)) (shen.mult_subst (tl V2374) (tl V2375) (subst (hd V2374) (hd V2375) V2376))) (true (shen.sys-error shen.mult_subst)))) +(defun shen.mult_subst (V2392 V2393 V2394) (cond ((= () V2392) V2394) ((= () V2393) V2394) ((and (cons? V2392) (cons? V2393)) (shen.mult_subst (tl V2392) (tl V2393) (subst (hd V2392) (hd V2393) V2394))) (true (shen.sys-error shen.mult_subst)))) diff --git a/shen/klambda/types.kl b/shen/klambda/types.kl index ef727fc..c90461f 100644 --- a/shen/klambda/types.kl +++ b/shen/klambda/types.kl @@ -152,8 +152,6 @@ (declare intersection (cons (cons list (cons A ())) (cons --> (cons (cons (cons list (cons A ())) (cons --> (cons (cons list (cons A ())) ()))) ())))) -(declare kill (cons --> (cons A ()))) - (declare language (cons --> (cons string ()))) (declare length (cons (cons list (cons A ())) (cons --> (cons number ())))) @@ -204,7 +202,7 @@ (declare shen.proc-nl (cons string (cons --> (cons string ())))) -(declare profile-results (cons A (cons --> (cons symbol ())))) +(declare profile-results (cons (cons A (cons --> (cons B ()))) (cons --> (cons (cons (cons A (cons --> (cons B ()))) (cons * (cons number ()))) ())))) (declare protect (cons symbol (cons --> (cons symbol ())))) @@ -274,8 +272,6 @@ (declare trap-error (cons A (cons --> (cons (cons (cons exception (cons --> (cons A ()))) (cons --> (cons A ()))) ())))) -(declare shen.truncate (cons string (cons --> (cons string ())))) - (declare tuple? (cons A (cons --> (cons boolean ())))) (declare undefmacro (cons symbol (cons --> (cons symbol ())))) diff --git a/shen/klambda/writer.kl b/shen/klambda/writer.kl index a7d54f8..2692038 100644 --- a/shen/klambda/writer.kl +++ b/shen/klambda/writer.kl @@ -47,59 +47,59 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun pr (V2220 V2221) (trap-error (shen.prh V2220 V2221 0) (lambda E V2220))) +"(defun pr (V2238 V2239) (trap-error (shen.prh V2238 V2239 0) (lambda E V2238))) -(defun shen.prh (V2222 V2223 V2224) (shen.prh V2222 V2223 (shen.write-char-and-inc V2222 V2223 V2224))) +(defun shen.prh (V2240 V2241 V2242) (shen.prh V2240 V2241 (shen.write-char-and-inc V2240 V2241 V2242))) -(defun shen.write-char-and-inc (V2225 V2226 V2227) (do (write-byte (string->n (pos V2225 V2227)) V2226) (+ V2227 1))) +(defun shen.write-char-and-inc (V2243 V2244 V2245) (do (write-byte (string->n (pos V2243 V2245)) V2244) (+ V2245 1))) -(defun print (V2228) (let String (shen.insert V2228 "~S") (let Print (shen.prhush String (stoutput)) V2228))) +(defun print (V2246) (let String (shen.insert V2246 "~S") (let Print (shen.prhush String (stoutput)) V2246))) -(defun shen.prhush (V2229 V2230) (if (value *hush*) V2229 (pr V2229 V2230))) +(defun shen.prhush (V2247 V2248) (if (value *hush*) V2247 (pr V2247 V2248))) -(defun shen.mkstr (V2231 V2232) (cond ((string? V2231) (shen.mkstr-l (shen.proc-nl V2231) V2232)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2231 ())) V2232)))) +(defun shen.mkstr (V2249 V2250) (cond ((string? V2249) (shen.mkstr-l (shen.proc-nl V2249) V2250)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2249 ())) V2250)))) -(defun shen.mkstr-l (V2233 V2234) (cond ((= () V2234) V2233) ((cons? V2234) (shen.mkstr-l (shen.insert-l (hd V2234) V2233) (tl V2234))) (true (shen.sys-error shen.mkstr-l)))) +(defun shen.mkstr-l (V2251 V2252) (cond ((= () V2252) V2251) ((cons? V2252) (shen.mkstr-l (shen.insert-l (hd V2252) V2251) (tl V2252))) (true (shen.sys-error shen.mkstr-l)))) -(defun shen.insert-l (V2237 V2238) (cond ((= "" V2238) "") ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "A" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.a ()))))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "R" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.r ()))))) ((and (shen.+string? V2238) (and (= "~" (pos V2238 0)) (and (shen.+string? (tlstr V2238)) (= "S" (pos (tlstr V2238) 0))))) (cons shen.app (cons V2237 (cons (tlstr (tlstr V2238)) (cons shen.s ()))))) ((shen.+string? V2238) (shen.factor-cn (cons cn (cons (pos V2238 0) (cons (shen.insert-l V2237 (tlstr V2238)) ()))))) ((and (cons? V2238) (and (= cn (hd V2238)) (and (cons? (tl V2238)) (and (cons? (tl (tl V2238))) (= () (tl (tl (tl V2238)))))))) (cons cn (cons (hd (tl V2238)) (cons (shen.insert-l V2237 (hd (tl (tl V2238)))) ())))) ((and (cons? V2238) (and (= shen.app (hd V2238)) (and (cons? (tl V2238)) (and (cons? (tl (tl V2238))) (and (cons? (tl (tl (tl V2238)))) (= () (tl (tl (tl (tl V2238)))))))))) (cons shen.app (cons (hd (tl V2238)) (cons (shen.insert-l V2237 (hd (tl (tl V2238)))) (tl (tl (tl V2238))))))) (true (shen.sys-error shen.insert-l)))) +(defun shen.insert-l (V2255 V2256) (cond ((= "" V2256) "") ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "A" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.a ()))))) ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "R" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.r ()))))) ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "S" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.s ()))))) ((shen.+string? V2256) (shen.factor-cn (cons cn (cons (pos V2256 0) (cons (shen.insert-l V2255 (tlstr V2256)) ()))))) ((and (cons? V2256) (and (= cn (hd V2256)) (and (cons? (tl V2256)) (and (cons? (tl (tl V2256))) (= () (tl (tl (tl V2256)))))))) (cons cn (cons (hd (tl V2256)) (cons (shen.insert-l V2255 (hd (tl (tl V2256)))) ())))) ((and (cons? V2256) (and (= shen.app (hd V2256)) (and (cons? (tl V2256)) (and (cons? (tl (tl V2256))) (and (cons? (tl (tl (tl V2256)))) (= () (tl (tl (tl (tl V2256)))))))))) (cons shen.app (cons (hd (tl V2256)) (cons (shen.insert-l V2255 (hd (tl (tl V2256)))) (tl (tl (tl V2256))))))) (true (shen.sys-error shen.insert-l)))) -(defun shen.factor-cn (V2239) (cond ((and (cons? V2239) (and (= cn (hd V2239)) (and (cons? (tl V2239)) (and (cons? (tl (tl V2239))) (and (cons? (hd (tl (tl V2239)))) (and (= cn (hd (hd (tl (tl V2239))))) (and (cons? (tl (hd (tl (tl V2239))))) (and (cons? (tl (tl (hd (tl (tl V2239)))))) (and (= () (tl (tl (tl (hd (tl (tl V2239))))))) (and (= () (tl (tl (tl V2239)))) (and (string? (hd (tl V2239))) (string? (hd (tl (hd (tl (tl V2239))))))))))))))))) (cons cn (cons (cn (hd (tl V2239)) (hd (tl (hd (tl (tl V2239)))))) (tl (tl (hd (tl (tl V2239)))))))) (true V2239))) +(defun shen.factor-cn (V2257) (cond ((and (cons? V2257) (and (= cn (hd V2257)) (and (cons? (tl V2257)) (and (cons? (tl (tl V2257))) (and (cons? (hd (tl (tl V2257)))) (and (= cn (hd (hd (tl (tl V2257))))) (and (cons? (tl (hd (tl (tl V2257))))) (and (cons? (tl (tl (hd (tl (tl V2257)))))) (and (= () (tl (tl (tl (hd (tl (tl V2257))))))) (and (= () (tl (tl (tl V2257)))) (and (string? (hd (tl V2257))) (string? (hd (tl (hd (tl (tl V2257))))))))))))))))) (cons cn (cons (cn (hd (tl V2257)) (hd (tl (hd (tl (tl V2257)))))) (tl (tl (hd (tl (tl V2257)))))))) (true V2257))) -(defun shen.proc-nl (V2240) (cond ((= "" V2240) "") ((and (shen.+string? V2240) (and (= "~" (pos V2240 0)) (and (shen.+string? (tlstr V2240)) (= "%" (pos (tlstr V2240) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2240))))) ((shen.+string? V2240) (cn (pos V2240 0) (shen.proc-nl (tlstr V2240)))) (true (shen.sys-error shen.proc-nl)))) +(defun shen.proc-nl (V2258) (cond ((= "" V2258) "") ((and (shen.+string? V2258) (and (= "~" (pos V2258 0)) (and (shen.+string? (tlstr V2258)) (= "%" (pos (tlstr V2258) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2258))))) ((shen.+string? V2258) (cn (pos V2258 0) (shen.proc-nl (tlstr V2258)))) (true (shen.sys-error shen.proc-nl)))) -(defun shen.mkstr-r (V2241 V2242) (cond ((= () V2242) V2241) ((cons? V2242) (shen.mkstr-r (cons shen.insert (cons (hd V2242) (cons V2241 ()))) (tl V2242))) (true (shen.sys-error shen.mkstr-r)))) +(defun shen.mkstr-r (V2259 V2260) (cond ((= () V2260) V2259) ((cons? V2260) (shen.mkstr-r (cons shen.insert (cons (hd V2260) (cons V2259 ()))) (tl V2260))) (true (shen.sys-error shen.mkstr-r)))) -(defun shen.insert (V2243 V2244) (shen.insert-h V2243 V2244 "")) +(defun shen.insert (V2261 V2262) (shen.insert-h V2261 V2262 "")) -(defun shen.insert-h (V2247 V2248 V2249) (cond ((= "" V2248) V2249) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "A" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.a))) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "R" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.r))) ((and (shen.+string? V2248) (and (= "~" (pos V2248 0)) (and (shen.+string? (tlstr V2248)) (= "S" (pos (tlstr V2248) 0))))) (cn V2249 (shen.app V2247 (tlstr (tlstr V2248)) shen.s))) ((shen.+string? V2248) (shen.insert-h V2247 (tlstr V2248) (cn V2249 (pos V2248 0)))) (true (shen.sys-error shen.insert-h)))) +(defun shen.insert-h (V2265 V2266 V2267) (cond ((= "" V2266) V2267) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "A" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.a))) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "R" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.r))) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "S" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.s))) ((shen.+string? V2266) (shen.insert-h V2265 (tlstr V2266) (cn V2267 (pos V2266 0)))) (true (shen.sys-error shen.insert-h)))) -(defun shen.app (V2250 V2251 V2252) (cn (shen.arg->str V2250 V2252) V2251)) +(defun shen.app (V2268 V2269 V2270) (cn (shen.arg->str V2268 V2270) V2269)) -(defun shen.arg->str (V2258 V2259) (cond ((= V2258 (fail)) "...") ((shen.list? V2258) (shen.list->str V2258 V2259)) ((string? V2258) (shen.str->str V2258 V2259)) ((absvector? V2258) (shen.vector->str V2258 V2259)) (true (shen.atom->str V2258)))) +(defun shen.arg->str (V2276 V2277) (cond ((= V2276 (fail)) "...") ((shen.list? V2276) (shen.list->str V2276 V2277)) ((string? V2276) (shen.str->str V2276 V2277)) ((absvector? V2276) (shen.vector->str V2276 V2277)) (true (shen.atom->str V2276)))) -(defun shen.list->str (V2260 V2261) (cond ((= shen.r V2261) (@s "(" (@s (shen.iter-list V2260 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2260 V2261 (shen.maxseq)) "]"))))) +(defun shen.list->str (V2278 V2279) (cond ((= shen.r V2279) (@s "(" (@s (shen.iter-list V2278 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2278 V2279 (shen.maxseq)) "]"))))) (defun shen.maxseq () (value *maximum-print-sequence-size*)) -(defun shen.iter-list (V2272 V2273 V2274) (cond ((= () V2272) "") ((= 0 V2274) "... etc") ((and (cons? V2272) (= () (tl V2272))) (shen.arg->str (hd V2272) V2273)) ((cons? V2272) (@s (shen.arg->str (hd V2272) V2273) (@s " " (shen.iter-list (tl V2272) V2273 (- V2274 1))))) (true (@s "|" (@s " " (shen.arg->str V2272 V2273)))))) +(defun shen.iter-list (V2290 V2291 V2292) (cond ((= () V2290) "") ((= 0 V2292) "... etc") ((and (cons? V2290) (= () (tl V2290))) (shen.arg->str (hd V2290) V2291)) ((cons? V2290) (@s (shen.arg->str (hd V2290) V2291) (@s " " (shen.iter-list (tl V2290) V2291 (- V2292 1))))) (true (@s "|" (@s " " (shen.arg->str V2290 V2291)))))) -(defun shen.str->str (V2279 V2280) (cond ((= shen.a V2280) V2279) (true (@s (n->string 34) (@s V2279 (n->string 34)))))) +(defun shen.str->str (V2297 V2298) (cond ((= shen.a V2298) V2297) (true (@s (n->string 34) (@s V2297 (n->string 34)))))) -(defun shen.vector->str (V2281 V2282) (if (shen.print-vector? V2281) ((<-address V2281 0) V2281) (if (vector? V2281) (@s "<" (@s (shen.iter-vector V2281 1 V2282 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2281 0 V2282 (shen.maxseq)) ">>")))))) +(defun shen.vector->str (V2299 V2300) (if (shen.print-vector? V2299) ((<-address V2299 0) V2299) (if (vector? V2299) (@s "<" (@s (shen.iter-vector V2299 1 V2300 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2299 0 V2300 (shen.maxseq)) ">>")))))) -(defun shen.print-vector? (V2283) (let Zero (<-address V2283 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) +(defun shen.print-vector? (V2301) (let Zero (<-address V2301 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) -(defun shen.fbound? (V2284) (trap-error (do (ps V2284) true) (lambda E false))) +(defun shen.fbound? (V2302) (trap-error (do (ps V2302) true) (lambda E false))) -(defun shen.tuple (V2285) (cn "(@p " (shen.app (<-address V2285 1) (cn " " (shen.app (<-address V2285 2) ")" shen.s)) shen.s))) +(defun shen.tuple (V2303) (cn "(@p " (shen.app (<-address V2303 1) (cn " " (shen.app (<-address V2303 2) ")" shen.s)) shen.s))) -(defun shen.iter-vector (V2292 V2293 V2294 V2295) (cond ((= 0 V2295) "... etc") (true (let Item (trap-error (<-address V2292 V2293) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2292 (+ V2293 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2294) (@s (shen.arg->str Item V2294) (@s " " (shen.iter-vector V2292 (+ V2293 1) V2294 (- V2295 1))))))))))) +(defun shen.iter-vector (V2310 V2311 V2312 V2313) (cond ((= 0 V2313) "... etc") (true (let Item (trap-error (<-address V2310 V2311) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2310 (+ V2311 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2312) (@s (shen.arg->str Item V2312) (@s " " (shen.iter-vector V2310 (+ V2311 1) V2312 (- V2313 1))))))))))) -(defun shen.atom->str (V2296) (trap-error (str V2296) (lambda E (shen.funexstring)))) +(defun shen.atom->str (V2314) (trap-error (str V2314) (lambda E (shen.funexstring)))) (defun shen.funexstring () (@s "" (@s "f" (@s "u" (@s "n" (@s "e" (@s (shen.arg->str (gensym (intern "x")) shen.a) ""))))))) -(defun shen.list? (V2297) (or (empty? V2297) (cons? V2297))) +(defun shen.list? (V2315) (or (empty? V2315) (cons? V2315))) diff --git a/shen/klambda/yacc.kl b/shen/klambda/yacc.kl index 54db64c..8cd65aa 100644 --- a/shen/klambda/yacc.kl +++ b/shen/klambda/yacc.kl @@ -47,59 +47,61 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.yacc (V2133) (cond ((and (cons? V2133) (and (= defcc (hd V2133)) (cons? (tl V2133)))) (shen.yacc->shen (hd (tl V2133)) (tl (tl V2133)))) (true (shen.sys-error shen.yacc)))) +"(defun shen.yacc (V2133) (cond ((and (cons? V2133) (and (= defcc (hd V2133)) (and (cons? (tl V2133)) (and (cons? (tl (tl V2133))) (and (= { (hd (tl (tl V2133)))) (and (cons? (tl (tl (tl V2133)))) (and (cons? (tl (tl (tl (tl V2133))))) (and (= ==> (hd (tl (tl (tl (tl V2133)))))) (and (cons? (tl (tl (tl (tl (tl V2133)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2133))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2133)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2133)) (tl (tl (tl (tl (tl (tl (tl V2133))))))))))) ((and (cons? V2133) (and (= defcc (hd V2133)) (cons? (tl V2133)))) (shen.yacc->shen (hd (tl V2133)) (tl (tl V2133)))) (true (shen.sys-error shen.yacc)))) -(defun shen.yacc->shen (V2134 V2135) (let CCRules (shen.split_cc_rules V2135 ()) (let CCBody (map shen.cc_body CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2134 (cons Stream (cons -> (cons YaccCases ()))))))))) +(defun shen.yacc->shen (V2134 V2135) (let CCRules (shen.split_cc_rules true V2135 ()) (let CCBody (map shen.cc_body CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2134 (cons Stream (cons -> (cons YaccCases ()))))))))) -(defun shen.split_cc_rules (V2136 V2137) (cond ((and (= () V2136) (= () V2137)) ()) ((= () V2136) (cons (shen.split_cc_rule (reverse V2137) ()) ())) ((and (cons? V2136) (= ; (hd V2136))) (cons (shen.split_cc_rule (reverse V2137) ()) (shen.split_cc_rules (tl V2136) ()))) ((cons? V2136) (shen.split_cc_rules (tl V2136) (cons (hd V2136) V2137))) (true (shen.sys-error shen.split_cc_rules)))) +(defun shen.split_cc_rules (V2138 V2139 V2140) (cond ((and (= () V2139) (= () V2140)) ()) ((= () V2139) (cons (shen.split_cc_rule V2138 (reverse V2140) ()) ())) ((and (cons? V2139) (= ; (hd V2139))) (cons (shen.split_cc_rule V2138 (reverse V2140) ()) (shen.split_cc_rules V2138 (tl V2139) ()))) ((cons? V2139) (shen.split_cc_rules V2138 (tl V2139) (cons (hd V2139) V2140))) (true (shen.sys-error shen.split_cc_rules)))) -(defun shen.split_cc_rule (V2138 V2139) (cond ((and (cons? V2138) (and (= := (hd V2138)) (and (cons? (tl V2138)) (= () (tl (tl V2138)))))) (cons (reverse V2139) (tl V2138))) ((and (cons? V2138) (and (= := (hd V2138)) (and (cons? (tl V2138)) (and (cons? (tl (tl V2138))) (and (= where (hd (tl (tl V2138)))) (and (cons? (tl (tl (tl V2138)))) (= () (tl (tl (tl (tl V2138))))))))))) (cons (reverse V2139) (cons (cons where (cons (hd (tl (tl (tl V2138)))) (cons (hd (tl V2138)) ()))) ()))) ((= () V2138) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2139)) (do (shen.prhush "has no semantics. -" (stoutput)) (shen.split_cc_rule (cons := (cons (shen.default_semantics (reverse V2139)) ())) V2139))))) ((cons? V2138) (shen.split_cc_rule (tl V2138) (cons (hd V2138) V2139))) (true (shen.sys-error shen.split_cc_rule)))) +(defun shen.split_cc_rule (V2145 V2146 V2147) (cond ((and (cons? V2146) (and (= := (hd V2146)) (and (cons? (tl V2146)) (= () (tl (tl V2146)))))) (cons (reverse V2147) (tl V2146))) ((and (cons? V2146) (and (= := (hd V2146)) (and (cons? (tl V2146)) (and (cons? (tl (tl V2146))) (and (= where (hd (tl (tl V2146)))) (and (cons? (tl (tl (tl V2146)))) (= () (tl (tl (tl (tl V2146))))))))))) (cons (reverse V2147) (cons (cons where (cons (hd (tl (tl (tl V2146)))) (cons (hd (tl V2146)) ()))) ()))) ((= () V2146) (do (shen.semantic-completion-warning V2145 V2147) (shen.split_cc_rule V2145 (cons := (cons (shen.default_semantics (reverse V2147)) ())) V2147))) ((cons? V2146) (shen.split_cc_rule V2145 (tl V2146) (cons (hd V2146) V2147))) (true (shen.sys-error shen.split_cc_rule)))) -(defun shen.default_semantics (V2140) (cond ((= () V2140) ()) ((and (cons? V2140) (and (= () (tl V2140)) (shen.grammar_symbol? (hd V2140)))) (hd V2140)) ((and (cons? V2140) (shen.grammar_symbol? (hd V2140))) (cons append (cons (hd V2140) (cons (shen.default_semantics (tl V2140)) ())))) ((cons? V2140) (cons cons (cons (hd V2140) (cons (shen.default_semantics (tl V2140)) ())))) (true (shen.sys-error shen.default_semantics)))) +(defun shen.semantic-completion-warning (V2156 V2157) (cond ((= true V2156) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2157)) (shen.prhush "has no semantics. +" (stoutput))))) (true shen.skip))) -(defun shen.grammar_symbol? (V2141) (and (symbol? V2141) (let Cs (shen.strip-pathname (explode V2141)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) +(defun shen.default_semantics (V2158) (cond ((= () V2158) ()) ((and (cons? V2158) (and (= () (tl V2158)) (shen.grammar_symbol? (hd V2158)))) (hd V2158)) ((and (cons? V2158) (shen.grammar_symbol? (hd V2158))) (cons append (cons (hd V2158) (cons (shen.default_semantics (tl V2158)) ())))) ((cons? V2158) (cons cons (cons (hd V2158) (cons (shen.default_semantics (tl V2158)) ())))) (true (shen.sys-error shen.default_semantics)))) -(defun shen.yacc_cases (V2142) (cond ((and (cons? V2142) (= () (tl V2142))) (hd V2142)) ((cons? V2142) (let P YaccParse (cons let (cons P (cons (hd V2142) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2142)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) +(defun shen.grammar_symbol? (V2159) (and (symbol? V2159) (let Cs (shen.strip-pathname (explode V2159)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) -(defun shen.cc_body (V2143) (cond ((and (cons? V2143) (and (cons? (tl V2143)) (= () (tl (tl V2143))))) (shen.syntax (hd V2143) Stream (hd (tl V2143)))) (true (shen.sys-error shen.cc_body)))) +(defun shen.yacc_cases (V2160) (cond ((and (cons? V2160) (= () (tl V2160))) (hd V2160)) ((cons? V2160) (let P YaccParse (cons let (cons P (cons (hd V2160) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2160)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) -(defun shen.syntax (V2144 V2145 V2146) (cond ((and (= () V2144) (and (cons? V2146) (and (= where (hd V2146)) (and (cons? (tl V2146)) (and (cons? (tl (tl V2146))) (= () (tl (tl (tl V2146))))))))) (cons if (cons (shen.semantics (hd (tl V2146))) (cons (cons shen.pair (cons (cons hd (cons V2145 ())) (cons (shen.semantics (hd (tl (tl V2146)))) ()))) (cons (cons fail ()) ()))))) ((= () V2144) (cons shen.pair (cons (cons hd (cons V2145 ())) (cons (shen.semantics V2146) ())))) ((cons? V2144) (if (shen.grammar_symbol? (hd V2144)) (shen.recursive_descent V2144 V2145 V2146) (if (variable? (hd V2144)) (shen.variable-match V2144 V2145 V2146) (if (shen.jump_stream? (hd V2144)) (shen.jump_stream V2144 V2145 V2146) (if (shen.terminal? (hd V2144)) (shen.check_stream V2144 V2145 V2146) (if (cons? (hd V2144)) (shen.list-stream (shen.decons (hd V2144)) (tl V2144) V2145 V2146) (simple-error (shen.app (hd V2144) " is not legal syntax +(defun shen.cc_body (V2161) (cond ((and (cons? V2161) (and (cons? (tl V2161)) (= () (tl (tl V2161))))) (shen.syntax (hd V2161) Stream (hd (tl V2161)))) (true (shen.sys-error shen.cc_body)))) + +(defun shen.syntax (V2162 V2163 V2164) (cond ((and (= () V2162) (and (cons? V2164) (and (= where (hd V2164)) (and (cons? (tl V2164)) (and (cons? (tl (tl V2164))) (= () (tl (tl (tl V2164))))))))) (cons if (cons (shen.semantics (hd (tl V2164))) (cons (cons shen.pair (cons (cons hd (cons V2163 ())) (cons (shen.semantics (hd (tl (tl V2164)))) ()))) (cons (cons fail ()) ()))))) ((= () V2162) (cons shen.pair (cons (cons hd (cons V2163 ())) (cons (shen.semantics V2164) ())))) ((cons? V2162) (if (shen.grammar_symbol? (hd V2162)) (shen.recursive_descent V2162 V2163 V2164) (if (variable? (hd V2162)) (shen.variable-match V2162 V2163 V2164) (if (shen.jump_stream? (hd V2162)) (shen.jump_stream V2162 V2163 V2164) (if (shen.terminal? (hd V2162)) (shen.check_stream V2162 V2163 V2164) (if (cons? (hd V2162)) (shen.list-stream (shen.decons (hd V2162)) (tl V2162) V2163 V2164) (simple-error (shen.app (hd V2162) " is not legal syntax " shen.a)))))))) (true (shen.sys-error shen.syntax)))) -(defun shen.list-stream (V2147 V2148 V2149 V2150) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2149 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2149 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2148 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2149 ())) ())) (cons (cons hd (cons (cons tl (cons V2149 ())) ())) ()))) V2150) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2147 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2149 ())) ())) (cons (cons hd (cons (cons tl (cons V2149 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) +(defun shen.list-stream (V2165 V2166 V2167 V2168) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2167 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2167 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2166 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2167 ())) ())) (cons (cons hd (cons (cons tl (cons V2167 ())) ())) ()))) V2168) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2165 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2167 ())) ())) (cons (cons hd (cons (cons tl (cons V2167 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) -(defun shen.decons (V2151) (cond ((and (cons? V2151) (and (= cons (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (and (= () (hd (tl (tl V2151)))) (= () (tl (tl (tl V2151))))))))) (cons (hd (tl V2151)) ())) ((and (cons? V2151) (and (= cons (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (= () (tl (tl (tl V2151)))))))) (cons (hd (tl V2151)) (shen.decons (hd (tl (tl V2151)))))) (true V2151))) +(defun shen.decons (V2169) (cond ((and (cons? V2169) (and (= cons (hd V2169)) (and (cons? (tl V2169)) (and (cons? (tl (tl V2169))) (and (= () (hd (tl (tl V2169)))) (= () (tl (tl (tl V2169))))))))) (cons (hd (tl V2169)) ())) ((and (cons? V2169) (and (= cons (hd V2169)) (and (cons? (tl V2169)) (and (cons? (tl (tl V2169))) (= () (tl (tl (tl V2169)))))))) (cons (hd (tl V2169)) (shen.decons (hd (tl (tl V2169)))))) (true V2169))) -(defun shen.insert-runon (V2162 V2163 V2164) (cond ((and (cons? V2164) (and (= shen.pair (hd V2164)) (and (cons? (tl V2164)) (and (cons? (tl (tl V2164))) (and (= () (tl (tl (tl V2164)))) (= (hd (tl (tl V2164))) V2163)))))) V2162) ((cons? V2164) (map (lambda Z (shen.insert-runon V2162 V2163 Z)) V2164)) (true V2164))) +(defun shen.insert-runon (V2180 V2181 V2182) (cond ((and (cons? V2182) (and (= shen.pair (hd V2182)) (and (cons? (tl V2182)) (and (cons? (tl (tl V2182))) (and (= () (tl (tl (tl V2182)))) (= (hd (tl (tl V2182))) V2181)))))) V2180) ((cons? V2182) (map (lambda Z (shen.insert-runon V2180 V2181 Z)) V2182)) (true V2182))) -(defun shen.strip-pathname (V2170) (cond ((not (element? "." V2170)) V2170) ((cons? V2170) (shen.strip-pathname (tl V2170))) (true (shen.sys-error shen.strip-pathname)))) +(defun shen.strip-pathname (V2188) (cond ((not (element? "." V2188)) V2188) ((cons? V2188) (shen.strip-pathname (tl V2188))) (true (shen.sys-error shen.strip-pathname)))) -(defun shen.recursive_descent (V2171 V2172 V2173) (cond ((cons? V2171) (let Test (cons (hd V2171) (cons V2172 ())) (let Action (shen.syntax (tl V2171) (concat Parse_ (hd V2171)) V2173) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2171)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2171)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) +(defun shen.recursive_descent (V2189 V2190 V2191) (cond ((cons? V2189) (let Test (cons (hd V2189) (cons V2190 ())) (let Action (shen.syntax (tl V2189) (concat Parse_ (hd V2189)) V2191) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2189)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2189)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) -(defun shen.variable-match (V2174 V2175 V2176) (cond ((cons? V2174) (let Test (cons cons? (cons (cons hd (cons V2175 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2174)) (cons (cons hd (cons (cons hd (cons V2175 ())) ())) (cons (shen.syntax (tl V2174) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2175 ())) ())) (cons (cons shen.hdtl (cons V2175 ())) ()))) V2176) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) +(defun shen.variable-match (V2192 V2193 V2194) (cond ((cons? V2192) (let Test (cons cons? (cons (cons hd (cons V2193 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2192)) (cons (cons hd (cons (cons hd (cons V2193 ())) ())) (cons (shen.syntax (tl V2192) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2193 ())) ())) (cons (cons shen.hdtl (cons V2193 ())) ()))) V2194) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) -(defun shen.terminal? (V2185) (cond ((cons? V2185) false) ((variable? V2185) false) (true true))) +(defun shen.terminal? (V2203) (cond ((cons? V2203) false) ((variable? V2203) false) (true true))) -(defun shen.jump_stream? (V2190) (cond ((= V2190 _) true) (true false))) +(defun shen.jump_stream? (V2208) (cond ((= V2208 _) true) (true false))) -(defun shen.check_stream (V2191 V2192 V2193) (cond ((cons? V2191) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2192 ())) ())) (cons (cons = (cons (hd V2191) (cons (cons hd (cons (cons hd (cons V2192 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2191) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2192 ())) ())) (cons (cons shen.hdtl (cons V2192 ())) ()))) V2193) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) +(defun shen.check_stream (V2209 V2210 V2211) (cond ((cons? V2209) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2210 ())) ())) (cons (cons = (cons (hd V2209) (cons (cons hd (cons (cons hd (cons V2210 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2209) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2210 ())) ())) (cons (cons shen.hdtl (cons V2210 ())) ()))) V2211) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) -(defun shen.jump_stream (V2194 V2195 V2196) (cond ((cons? V2194) (let Test (cons cons? (cons (cons hd (cons V2195 ())) ())) (let Action (shen.syntax (tl V2194) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2195 ())) ())) (cons (cons shen.hdtl (cons V2195 ())) ()))) V2196) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) +(defun shen.jump_stream (V2212 V2213 V2214) (cond ((cons? V2212) (let Test (cons cons? (cons (cons hd (cons V2213 ())) ())) (let Action (shen.syntax (tl V2212) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2213 ())) ())) (cons (cons shen.hdtl (cons V2213 ())) ()))) V2214) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) -(defun shen.semantics (V2197) (cond ((= () V2197) ()) ((shen.grammar_symbol? V2197) (cons shen.hdtl (cons (concat Parse_ V2197) ()))) ((variable? V2197) (concat Parse_ V2197)) ((and (cons? V2197) (and (= function (hd V2197)) (and (cons? (tl V2197)) (= () (tl (tl V2197)))))) V2197) ((cons? V2197) (map shen.semantics V2197)) (true V2197))) +(defun shen.semantics (V2215) (cond ((= () V2215) ()) ((shen.grammar_symbol? V2215) (cons shen.hdtl (cons (concat Parse_ V2215) ()))) ((variable? V2215) (concat Parse_ V2215)) ((cons? V2215) (map shen.semantics V2215)) (true V2215))) -(defun shen.snd-or-fail (V2204) (cond ((and (cons? V2204) (and (cons? (tl V2204)) (= () (tl (tl V2204))))) (hd (tl V2204))) (true (fail)))) +(defun shen.snd-or-fail (V2222) (cond ((and (cons? V2222) (and (cons? (tl V2222)) (= () (tl (tl V2222))))) (hd (tl V2222))) (true (fail)))) (defun fail () shen.fail!) -(defun shen.pair (V2205 V2206) (cons V2205 (cons V2206 ()))) +(defun shen.pair (V2223 V2224) (cons V2223 (cons V2224 ()))) -(defun shen.hdtl (V2207) (hd (tl V2207))) +(defun shen.hdtl (V2225) (hd (tl V2225))) -(defun (V2214) (cond ((and (cons? V2214) (and (cons? (tl V2214)) (= () (tl (tl V2214))))) (cons () (cons (hd V2214) ()))) (true (fail)))) +(defun (V2232) (cond ((and (cons? V2232) (and (cons? (tl V2232)) (= () (tl (tl V2232))))) (cons () (cons (hd V2232) ()))) (true (fail)))) -(defun (V2219) (cond ((and (cons? V2219) (and (cons? (tl V2219)) (= () (tl (tl V2219))))) (cons (hd V2219) (cons () ()))) (true (shen.sys-error )))) +(defun (V2237) (cond ((and (cons? V2237) (and (cons? (tl V2237)) (= () (tl (tl V2237))))) (cons (hd V2237) (cons () ()))) (true (shen.sys-error )))) diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index 8b40038..e3e26e7 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -85,7 +85,7 @@ (set *infs* 0) (set *hush* false) (set *optimise* false) -(set *version* "version 14") +(set *version* "version 14.2") (define initialise_arity_table [] -> [] @@ -101,10 +101,10 @@ cn 2 declare 2 destroy 1 difference 2 do 2 element? 2 empty? 1 enable-type-theory 1 interror 2 eval 1 eval-kl 1 explode 1 external 1 fail-if 2 fail 0 fix 2 findall 5 freeze 1 fst 1 gensym 1 get 3 get-time 1 address-> 3 <-address 2 <-vector 2 > 2 >= 2 = 2 hd 1 hdv 1 hdstr 1 head 1 if 3 integer? 1 - intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 kill 0 language 0 + intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 language 0 length 1 lineread 1 load 1 < 2 <= 2 vector 1 macroexpand 1 map 2 mapcan 2 maxinferences 1 not 1 nth 2 n->string 1 number? 1 occurs-check 1 occurrences 2 occurs-check 1 optimise 1 or 2 os 0 package 3 port 0 - porters 0 pos 2 print 1 profile 1 profile-results 0 pr 2 ps 1 preclude 1 preclude-all-but 1 protect 1 + porters 0 pos 2 print 1 profile 1 profile-results 1 pr 2 ps 1 preclude 1 preclude-all-but 1 protect 1 address-> 3 put 4 reassemble 2 read-file-as-string 1 read-file 1 read 1 read-byte 1 read-from-string 1 release 0 remove 2 reverse 1 set 2 simple-error 1 snd 1 specialise 1 spy 1 step 1 stinput 0 stoutput 0 string->n 1 string->symbol 1 string? 1 strong-warning 1 subst 3 sum 1 symbol? 1 tail 1 tl 1 tc 1 tc? 0 @@ -131,7 +131,7 @@ read-file-as-bytelist read-file-as-string read-byte read-from-string quit put preclude preclude-all-but ps prolog? protect profile-results profile print pr pos porters port package output out os or open occurrences occurs-check n->string number? number null nth not nl mode macro macroexpand - maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language kill is + maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language is intersection inferences intern integer? input input+ include include-all-but in implementation if identical head hd hdv hdstr hash get get-time gensym function fst freeze fix file fail fail-if fwhen findall false enable-type-theory explode external exception eval-kl eval error-to-string error empty? diff --git a/shen/src/macros.shen b/shen/src/macros.shen index 56c9421..d8f6cb5 100644 --- a/shen/src/macros.shen +++ b/shen/src/macros.shen @@ -85,7 +85,7 @@ [input] -> [input [stinput]] [read] -> [read [stinput]] [input+ Type] -> [input+ Type [stinput]] - [read+ Type] -> [read+ Type [stinput]] + [read-byte] -> [read-byte [stinput]] X -> X) (define compose diff --git a/shen/src/t-star.shen b/shen/src/t-star.shen index 31d6428..13a3c50 100644 --- a/shen/src/t-star.shen +++ b/shen/src/t-star.shen @@ -295,32 +295,23 @@ (defprolog t*-defcc (mode [defcc F { [list A] ==> B } | Rest] -) C Hyp - <-- (bind Sig (ue [[list A] ==> B])) - (bind ListA&& (hd Sig)) - (bind B&& (hd (tl (tl Sig)))) - (bind Rest& (plug-wildcards Rest)) - (bind Rest&& (ue Rest&)) - (get-rules Rules Rest&&) - ! - (tc-rules F Rules ListA&& B&& [[F : Sig] | Hyp] 1) - (unify C [[list A] ==> B]) - (bind Declare (declare F [[list A] ==> B]));) + <-- (t*-defcc-h [defcc F (ue (demodulate [[list A] ==> B])) + | (ue (split_cc_rules false (plug-wildcards Rest) []))] + C + Hyp);) (define plug-wildcards [X | Y] -> (map (function plug-wildcards) [X | Y]) X -> (gensym (intern "X")) where (= X _) X -> X) - -(defprolog get-rules - [] (mode [] -) <-- !; - [Rule | Rules] Rest <-- (first-rule Rest Rule Other) - ! - (get-rules Rules Other);) - -(defprolog first-rule - (mode [; | Other] -) [] Other <-- !; - (mode [X | Rest] -) [X | Rule] Other <-- (first-rule Rest Rule Other);) - + +(defprolog t*-defcc-h + (mode [defcc F [[list A] ==> B] | Rules] -) C Hyp + <-- ! + (tc-rules F Rules [list A] B [[F : [[list A] ==> B]] | Hyp] 1) + (unify C [[list A] ==> B]) + (bind Declare (declare F [[list A] ==> B]));) + (defprolog tc-rules _ (mode [] -) _ _ _ _ <--; F (mode [Rule | Rules] -) (mode [list A] -) B Hyps N @@ -334,14 +325,11 @@ F _ _ _ _ N <-- (bind Err (error "type error in rule ~A of ~A" N F));) (defprolog check-defcc-rule - Rule A B Hyps <-- - (get-syntax+semantics Syntax Semantics Rule) - ! - (syntax-hyps Syntax Hyps SynHyps A) - ! - (syntax-check Syntax A SynHyps) - ! - (semantics-check Semantics B SynHyps);) + (mode [Syntax Semantics] -) A B Hyps <-- (syntax-hyps Syntax Hyps SynHyps A) + ! + (syntax-check Syntax A SynHyps) + ! + (semantics-check Semantics B SynHyps);) (defprolog syntax-hyps (mode [] -) SynHyps SynHyps A <--; @@ -350,21 +338,12 @@ (syntax-hyps Y Hyps SynHyps A); (mode [_ | Y] -) Hyps SynHyps A <-- (syntax-hyps Y Hyps SynHyps A);) -(defprolog get-syntax+semantics - [] S (mode [:= Semantics] -) <-- ! (bind S Semantics); - [] S (mode [:= Semantics where G] -) <-- ! (bind S [where G Semantics]); - [X | Syntax] Semantics (mode [X | Rule] -) - <-- (get-syntax+semantics Syntax Semantics Rule);) - + (defprolog syntax-check (mode [] -) _ _ <--; (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) ! - (t* [X : [[list B] ==> C]] Hyps) - ! - (bind X&& (concat && X)) - ! - (t* [X&& : [list A]] [[X&& : [list B]] | Hyps]) + (t* [X : [[list A] ==> C]] Hyps) ! (syntax-check Syntax A Hyps); (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) @@ -372,6 +351,9 @@ (syntax-check Syntax A Hyps);) (defprolog semantics-check + (mode [where P Q] -) B Hyps <-- ! + (t* [(curry P) : boolean] Hyps) + (t* [(curry Q) : B] Hyps); Semantics B Hyps <-- (is Semantics* (curry (rename-semantics Semantics))) (t* [Semantics* : B] Hyps);) @@ -379,6 +361,19 @@ [X | Y] -> [(rename-semantics X) | (rename-semantics Y)] X -> [<-sem X] where (grammar_symbol? X) X -> X) - ) - - \ No newline at end of file + ) + +"(defprolog syntax-check + (mode [] -) _ _ <--; + (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) + ! + (t* [X : [[list B] ==> C]] Hyps) + ! + (bind X&& (concat && X)) + ! + (t* [X&& : [list A]] [[X&& : [list B]] | Hyps]) + ! + (syntax-check Syntax A Hyps); + (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) + ! + (syntax-check Syntax A Hyps);)" \ No newline at end of file diff --git a/shen/src/types.shen b/shen/src/types.shen index 0ad7a3e..c840e2a 100644 --- a/shen/src/types.shen +++ b/shen/src/types.shen @@ -142,7 +142,6 @@ (declare insert [A --> [string --> string]]) (declare integer? [A --> boolean]) (declare intersection [[list A] --> [[list A] --> [list A]]]) -(declare kill [--> A]) (declare language [--> string]) (declare length [[list A] --> number]) (declare limit [[vector A] --> number]) @@ -168,7 +167,7 @@ (declare profile [[A --> B] --> [A --> B]]) (declare preclude [[list symbol] --> [list symbol]]) (declare proc-nl [string --> string]) -(declare profile-results [A --> symbol]) +(declare profile-results [[A --> B] --> [[A --> B] * number]]) (declare protect [symbol --> symbol]) (declare preclude-all-but [[list symbol] --> [list symbol]]) (declare prhush [string --> [[stream out] --> string]]) @@ -203,7 +202,6 @@ (declare thaw [[lazy A] --> A]) (declare track [symbol --> symbol]) (declare trap-error [A --> [[exception --> A] --> A]]) -(declare truncate [string --> string]) (declare tuple? [A --> boolean]) (declare undefmacro [symbol --> symbol]) (declare union [[list A] --> [[list A] --> [list A]]]) diff --git a/shen/src/yacc.shen b/shen/src/yacc.shen index b2e19ff..edd9959 100644 --- a/shen/src/yacc.shen +++ b/shen/src/yacc.shen @@ -55,31 +55,36 @@ (package shen. [] (define yacc + [defcc S { A ==> B } | CC_Stuff] -> (yacc [defcc S | CC_Stuff]) [defcc S | CC_Stuff] -> (yacc->shen S CC_Stuff)) (define yacc->shen - S CC_Stuff -> (let CCRules (split_cc_rules CC_Stuff []) + S CC_Stuff -> (let CCRules (split_cc_rules true CC_Stuff []) CCBody (map (function cc_body) CCRules) YaccCases (yacc_cases CCBody) [define S (protect Stream) -> YaccCases])) (define split_cc_rules - [] [] -> [] - [] RevRule -> [(split_cc_rule (reverse RevRule) [])] - [; | CC_Stuff] RevRule - -> [(split_cc_rule (reverse RevRule) []) | (split_cc_rules CC_Stuff [])] - [X | CC_Stuff] RevRule -> (split_cc_rules CC_Stuff [X | RevRule])) + _ [] [] -> [] + Flag [] RevRule -> [(split_cc_rule Flag (reverse RevRule) [])] + Flag [; | CC_Stuff] RevRule + -> [(split_cc_rule Flag (reverse RevRule) []) | (split_cc_rules Flag CC_Stuff [])] + Flag [X | CC_Stuff] RevRule -> (split_cc_rules Flag CC_Stuff [X | RevRule])) (define split_cc_rule - [:= Semantics] RevSyntax -> [(reverse RevSyntax) Semantics] - [:= Semantics where Guard] RevSyntax + _ [:= Semantics] RevSyntax -> [(reverse RevSyntax) Semantics] + _ [:= Semantics where Guard] RevSyntax -> [(reverse RevSyntax) [where Guard Semantics]] - [] RevSyntax - -> (do (output "warning: ") - (map (/. X (output "~A " X)) (reverse RevSyntax)) - (output "has no semantics.~%") - (split_cc_rule [:= (default_semantics (reverse RevSyntax))] RevSyntax)) - [Syntax | Rule] RevSyntax -> (split_cc_rule Rule [Syntax | RevSyntax])) + Flag [] RevSyntax + -> (do (semantic-completion-warning Flag RevSyntax) + (split_cc_rule Flag [:= (default_semantics (reverse RevSyntax))] RevSyntax)) + Flag [Syntax | Rule] RevSyntax -> (split_cc_rule Flag Rule [Syntax | RevSyntax])) + +(define semantic-completion-warning + true RevSyntax -> (do (output "warning: ") + (map (/. X (output "~A " X)) (reverse RevSyntax)) + (output "has no semantics.~%")) + _ _ -> skip) (define default_semantics [] -> [] @@ -191,7 +196,6 @@ [] -> [] S -> [hdtl (concat (protect Parse_) S)] where (grammar_symbol? S) S -> (concat (protect Parse_) S) where (variable? S) - [function S] -> [function S] [X | Y] -> (map (function semantics) [X | Y]) X -> X) From e40b7f172eba39dba83fdd6e929552627060acfb Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 26 Jan 2014 19:43:41 +0000 Subject: [PATCH 31/57] updating README --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bcd159a..ed48534 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java (Shen 14) +# 神.java | Shen for Java (Shen 14.2) http://shenlanguage.org/ @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b117. +* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b124. * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). @@ -83,19 +83,19 @@ Subsequent invocations runs the repl. ### The Shen Test Suite -Now passes. It is run at the end of the build: +Passes all but one. It is run at the end of the build: ./build # or ./tests if the jar already exists. [... loads of output ...] - passed ... 146 - failed ...0 - pass rate ...100.0% + passed ... 127 + failed ...1 + pass rate ...99.21875% ok 0 - run time: 9.882 secs + run time: 37.771 secs It's close to 2x faster than [`shen.clj`](https://github.com/hraberg/shen.clj). From 3ee946f2a431ec628e52dccd1ed991e875742dc9 Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 11 Feb 2014 20:25:16 +0000 Subject: [PATCH 32/57] updating to Shen 15 --- shen/klambda/core.kl | 126 +++++++++++----------- shen/klambda/declarations.kl | 69 ++++++++++-- shen/klambda/load.kl | 30 +++--- shen/klambda/macros.kl | 60 +++++------ shen/klambda/prolog.kl | 194 +++++++++++++++++----------------- shen/klambda/reader.kl | 158 ++++++++++++++-------------- shen/klambda/sequent.kl | 114 ++++++++++---------- shen/klambda/sys.kl | 196 +++++++++++++++++------------------ shen/klambda/t-star.kl | 94 ++++++++--------- shen/klambda/toplevel.kl | 42 ++++---- shen/klambda/track.kl | 50 ++++----- shen/klambda/types.kl | 12 +-- shen/klambda/writer.kl | 50 ++++----- shen/klambda/yacc.kl | 58 ++++++----- shen/src/declarations.shen | 6 +- shen/src/macros.shen | 5 +- shen/src/sequent.shen | 26 +++-- shen/src/types.shen | 17 +-- shen/src/yacc.shen | 15 ++- 19 files changed, 702 insertions(+), 620 deletions(-) diff --git a/shen/klambda/core.kl b/shen/klambda/core.kl index 362209b..479db1c 100644 --- a/shen/klambda/core.kl +++ b/shen/klambda/core.kl @@ -47,134 +47,134 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.shen->kl (V607 V608) (compile shen. (cons V607 V608) (lambda X (shen.shen-syntax-error V607 X)))) +"(defun shen.shen->kl (V614 V615) (compile (lambda X608 (shen. X608)) (cons V614 V615) (lambda X (shen.shen-syntax-error V614 X)))) -(defun shen.shen-syntax-error (V609 V610) (simple-error (cn "syntax error in " (shen.app V609 (cn " here: +(defun shen.shen-syntax-error (V616 V617) (simple-error (cn "syntax error in " (shen.app V616 (cn " here: - " (shen.app (shen.next-50 50 V610) " + " (shen.app (shen.next-50 50 V617) " " shen.a)) shen.a)))) -(defun shen. (V615) (let Result (let Parse_shen. (shen. V615) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.compile_to_machine_code (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V615) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.compile_to_machine_code (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V622) (let Result (let Parse_shen. (shen. V622) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.compile_to_machine_code (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V622) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.compile_to_machine_code (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V620) (let Result (if (cons? (hd V620)) (let Parse_X (hd (hd V620)) (shen.pair (hd (shen.pair (tl (hd V620)) (shen.hdtl V620))) (if (and (symbol? Parse_X) (not (shen.sysfunc? Parse_X))) Parse_X (simple-error (shen.app Parse_X " is not a legitimate function name. +(defun shen. (V627) (let Result (if (cons? (hd V627)) (let Parse_X (hd (hd V627)) (shen.pair (hd (shen.pair (tl (hd V627)) (shen.hdtl V627))) (if (and (symbol? Parse_X) (not (shen.sysfunc? Parse_X))) Parse_X (simple-error (shen.app Parse_X " is not a legitimate function name. " shen.a))))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.sysfunc? (V621) (element? V621 (get (intern "shen") shen.external-symbols (value *property-vector*)))) +(defun shen.sysfunc? (V628) (element? V628 (get (intern "shen") shen.external-symbols (value *property-vector*)))) -(defun shen. (V626) (let Result (if (and (cons? (hd V626)) (= { (hd (hd V626)))) (let Parse_shen. (shen. (shen.pair (tl (hd V626)) (shen.hdtl V626))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= } (hd (hd Parse_shen.)))) (shen.pair (hd (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (shen.demodulate (shen.curry-type (shen.hdtl Parse_shen.)))) (fail)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V633) (let Result (if (and (cons? (hd V633)) (= { (hd (hd V633)))) (let Parse_shen. (shen. (shen.pair (tl (hd V633)) (shen.hdtl V633))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= } (hd (hd Parse_shen.)))) (shen.pair (hd (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (shen.demodulate (shen.curry-type (shen.hdtl Parse_shen.)))) (fail)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.curry-type (V627) (cond ((and (cons? V627) (and (cons? (tl V627)) (and (= --> (hd (tl V627))) (and (cons? (tl (tl V627))) (and (cons? (tl (tl (tl V627)))) (= --> (hd (tl (tl (tl V627)))))))))) (shen.curry-type (cons (hd V627) (cons --> (cons (tl (tl V627)) ()))))) ((and (cons? V627) (and (cons? (tl V627)) (and (= * (hd (tl V627))) (and (cons? (tl (tl V627))) (and (cons? (tl (tl (tl V627)))) (= * (hd (tl (tl (tl V627)))))))))) (shen.curry-type (cons (hd V627) (cons * (cons (tl (tl V627)) ()))))) ((cons? V627) (map shen.curry-type V627)) (true V627))) +(defun shen.curry-type (V634) (cond ((and (cons? V634) (and (cons? (tl V634)) (and (= --> (hd (tl V634))) (and (cons? (tl (tl V634))) (and (cons? (tl (tl (tl V634)))) (= --> (hd (tl (tl (tl V634)))))))))) (shen.curry-type (cons (hd V634) (cons --> (cons (tl (tl V634)) ()))))) ((and (cons? V634) (and (cons? (tl V634)) (and (= * (hd (tl V634))) (and (cons? (tl (tl V634))) (and (cons? (tl (tl (tl V634)))) (= * (hd (tl (tl (tl V634)))))))))) (shen.curry-type (cons (hd V634) (cons * (cons (tl (tl V634)) ()))))) ((cons? V634) (map (lambda X609 (shen.curry-type X609)) V634)) (true V634))) -(defun shen. (V632) (let Result (if (cons? (hd V632)) (let Parse_X (hd (hd V632)) (let Parse_shen. (shen. (shen.pair (tl (hd V632)) (shen.hdtl V632))) (if (not (= (fail) Parse_shen.)) (if (not (element? Parse_X (cons { (cons } ())))) (shen.pair (hd Parse_shen.) (cons Parse_X (shen.hdtl Parse_shen.))) (fail)) (fail)))) (fail)) (if (= Result (fail)) (let Result (let Parse_ ( V632) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V639) (let Result (if (cons? (hd V639)) (let Parse_X (hd (hd V639)) (let Parse_shen. (shen. (shen.pair (tl (hd V639)) (shen.hdtl V639))) (if (not (= (fail) Parse_shen.)) (if (not (element? Parse_X (cons { (cons } ())))) (shen.pair (hd Parse_shen.) (cons Parse_X (shen.hdtl Parse_shen.))) (fail)) (fail)))) (fail)) (if (= Result (fail)) (let Result (let Parse_ ( V639) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V637) (let Result (let Parse_shen. (shen. V637) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.linearise (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V637) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.linearise (shen.hdtl Parse_shen.)) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V644) (let Result (let Parse_shen. (shen. V644) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.linearise (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V644) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.linearise (shen.hdtl Parse_shen.)) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V642) (let Result (let Parse_shen. (shen. V642) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= -> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= where (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons where (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) ()))) (fail))) (fail)) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V642) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= -> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V642) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= where (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons where (cons (shen.hdtl Parse_shen.) (cons (cons shen.choicepoint! (cons (shen.hdtl Parse_shen.) ())) ()))) ()))) (fail))) (fail)) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V642) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons shen.choicepoint! (cons (shen.hdtl Parse_shen.) ())) ()))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result))) +(defun shen. (V649) (let Result (let Parse_shen. (shen. V649) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= -> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= where (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons where (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) ()))) (fail))) (fail)) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V649) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= -> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V649) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= where (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons where (cons (shen.hdtl Parse_shen.) (cons (cons shen.choicepoint! (cons (shen.hdtl Parse_shen.) ())) ()))) ()))) (fail))) (fail)) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V649) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (cons shen.choicepoint! (cons (shen.hdtl Parse_shen.) ())) ()))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result))) -(defun shen.fail_if (V643 V644) (if (V643 V644) (fail) V644)) +(defun shen.fail_if (V650 V651) (if (V650 V651) (fail) V651)) -(defun shen.succeeds? (V649) (cond ((= V649 (fail)) false) (true true))) +(defun shen.succeeds? (V656) (cond ((= V656 (fail)) false) (true true))) -(defun shen. (V654) (let Result (let Parse_shen. (shen. V654) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V654) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V661) (let Result (let Parse_shen. (shen. V661) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V661) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V659) (let Result (if (and (cons? (hd V659)) (cons? (hd (hd V659)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (= @p (hd (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (cons @p (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V659)) (cons? (hd (hd V659)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (= cons (hd (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (cons cons (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V659)) (cons? (hd (hd V659)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (= @v (hd (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (cons @v (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V659)) (cons? (hd (hd V659)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (= @s (hd (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (cons @s (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V659)) (cons? (hd (hd V659)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (= vector (hd (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (if (and (cons? (hd (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (= 0 (hd (hd (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659)))))))) (shen.pair (hd (shen.pair (tl (hd (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659)))))) (shen.hdtl (shen.pair (tl (hd (shen.pair (hd (hd V659)) (shen.hdtl V659)))) (shen.hdtl (shen.pair (hd (hd V659)) (shen.hdtl V659))))))) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (cons vector (cons 0 ())))) (fail)) (fail))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V659)) (let Parse_X (hd (hd V659)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V659)) (shen.hdtl V659))) (shen.constructor-error Parse_X)) (fail))) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V659) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V666) (let Result (if (and (cons? (hd V666)) (cons? (hd (hd V666)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (= @p (hd (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (cons @p (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V666)) (cons? (hd (hd V666)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (= cons (hd (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (cons cons (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V666)) (cons? (hd (hd V666)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (= @v (hd (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (cons @v (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V666)) (cons? (hd (hd V666)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (= @s (hd (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (let Parse_shen. (shen. (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666))))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (cons @s (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V666)) (cons? (hd (hd V666)))) (shen.snd-or-fail (if (and (cons? (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (= vector (hd (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (if (and (cons? (hd (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (= 0 (hd (hd (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666)))))))) (shen.pair (hd (shen.pair (tl (hd (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666)))))) (shen.hdtl (shen.pair (tl (hd (shen.pair (hd (hd V666)) (shen.hdtl V666)))) (shen.hdtl (shen.pair (hd (hd V666)) (shen.hdtl V666))))))) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (cons vector (cons 0 ())))) (fail)) (fail))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V666)) (let Parse_X (hd (hd V666)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V666)) (shen.hdtl V666))) (shen.constructor-error Parse_X)) (fail))) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V666) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen.constructor-error (V660) (simple-error (shen.app V660 " is not a legitimate constructor +(defun shen.constructor-error (V667) (simple-error (shen.app V667 " is not a legitimate constructor " shen.a))) -(defun shen. (V665) (let Result (if (cons? (hd V665)) (let Parse_X (hd (hd V665)) (if (= Parse_X _) (shen.pair (hd (shen.pair (tl (hd V665)) (shen.hdtl V665))) (gensym Parse_Y)) (fail))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V665)) (let Parse_X (hd (hd V665)) (if (not (element? Parse_X (cons -> (cons <- ())))) (shen.pair (hd (shen.pair (tl (hd V665)) (shen.hdtl V665))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V672) (let Result (if (cons? (hd V672)) (let Parse_X (hd (hd V672)) (if (= Parse_X _) (shen.pair (hd (shen.pair (tl (hd V672)) (shen.hdtl V672))) (gensym Parse_Y)) (fail))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V672)) (let Parse_X (hd (hd V672)) (if (not (element? Parse_X (cons -> (cons <- ())))) (shen.pair (hd (shen.pair (tl (hd V672)) (shen.hdtl V672))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V670) (let Result (let Parse_shen. (shen. V670) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V677) (let Result (let Parse_shen. (shen. V677) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V675) (let Result (let Parse_shen. (shen. V675) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V682) (let Result (let Parse_shen. (shen. V682) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V680) (let Result (if (cons? (hd V680)) (let Parse_X (hd (hd V680)) (shen.pair (hd (shen.pair (tl (hd V680)) (shen.hdtl V680))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V687) (let Result (if (cons? (hd V687)) (let Parse_X (hd (hd V687)) (shen.pair (hd (shen.pair (tl (hd V687)) (shen.hdtl V687))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V685) (let Result (if (cons? (hd V685)) (let Parse_X (hd (hd V685)) (shen.pair (hd (shen.pair (tl (hd V685)) (shen.hdtl V685))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V692) (let Result (if (cons? (hd V692)) (let Parse_X (hd (hd V692)) (shen.pair (hd (shen.pair (tl (hd V692)) (shen.hdtl V692))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.compile_to_machine_code (V686 V687) (let Lambda+ (shen.compile_to_lambda+ V686 V687) (let KL (shen.compile_to_kl V686 Lambda+) (let Record (shen.record-source V686 KL) KL)))) +(defun shen.compile_to_machine_code (V693 V694) (let Lambda+ (shen.compile_to_lambda+ V693 V694) (let KL (shen.compile_to_kl V693 Lambda+) (let Record (shen.record-source V693 KL) KL)))) -(defun shen.record-source (V690 V691) (cond ((value shen.*installing-kl*) shen.skip) (true (put V690 shen.source V691 (value *property-vector*))))) +(defun shen.record-source (V697 V698) (cond ((value shen.*installing-kl*) shen.skip) (true (put V697 shen.source V698 (value *property-vector*))))) -(defun shen.compile_to_lambda+ (V692 V693) (let Arity (shen.aritycheck V692 V693) (let Free (map (lambda Rule (shen.free_variable_check V692 Rule)) V693) (let Variables (shen.parameters Arity) (let Strip (map shen.strip-protect V693) (let Abstractions (map shen.abstract_rule Strip) (let Applications (map (lambda X (shen.application_build Variables X)) Abstractions) (cons Variables (cons Applications ()))))))))) +(defun shen.compile_to_lambda+ (V699 V700) (let Arity (shen.aritycheck V699 V700) (let Free (map (lambda Rule (shen.free_variable_check V699 Rule)) V700) (let Variables (shen.parameters Arity) (let Strip (map (lambda X610 (shen.strip-protect X610)) V700) (let Abstractions (map (lambda X611 (shen.abstract_rule X611)) Strip) (let Applications (map (lambda X (shen.application_build Variables X)) Abstractions) (cons Variables (cons Applications ()))))))))) -(defun shen.free_variable_check (V694 V695) (cond ((and (cons? V695) (and (cons? (tl V695)) (= () (tl (tl V695))))) (let Bound (shen.extract_vars (hd V695)) (let Free (shen.extract_free_vars Bound (hd (tl V695))) (shen.free_variable_warnings V694 Free)))) (true (shen.sys-error shen.free_variable_check)))) +(defun shen.free_variable_check (V701 V702) (cond ((and (cons? V702) (and (cons? (tl V702)) (= () (tl (tl V702))))) (let Bound (shen.extract_vars (hd V702)) (let Free (shen.extract_free_vars Bound (hd (tl V702))) (shen.free_variable_warnings V701 Free)))) (true (shen.sys-error shen.free_variable_check)))) -(defun shen.extract_vars (V696) (cond ((variable? V696) (cons V696 ())) ((cons? V696) (union (shen.extract_vars (hd V696)) (shen.extract_vars (tl V696)))) (true ()))) +(defun shen.extract_vars (V703) (cond ((variable? V703) (cons V703 ())) ((cons? V703) (union (shen.extract_vars (hd V703)) (shen.extract_vars (tl V703)))) (true ()))) -(defun shen.extract_free_vars (V706 V707) (cond ((and (cons? V707) (and (cons? (tl V707)) (and (= () (tl (tl V707))) (= (hd V707) protect)))) ()) ((and (variable? V707) (not (element? V707 V706))) (cons V707 ())) ((and (cons? V707) (and (= lambda (hd V707)) (and (cons? (tl V707)) (and (cons? (tl (tl V707))) (= () (tl (tl (tl V707)))))))) (shen.extract_free_vars (cons (hd (tl V707)) V706) (hd (tl (tl V707))))) ((and (cons? V707) (and (= let (hd V707)) (and (cons? (tl V707)) (and (cons? (tl (tl V707))) (and (cons? (tl (tl (tl V707)))) (= () (tl (tl (tl (tl V707)))))))))) (union (shen.extract_free_vars V706 (hd (tl (tl V707)))) (shen.extract_free_vars (cons (hd (tl V707)) V706) (hd (tl (tl (tl V707))))))) ((cons? V707) (union (shen.extract_free_vars V706 (hd V707)) (shen.extract_free_vars V706 (tl V707)))) (true ()))) +(defun shen.extract_free_vars (V713 V714) (cond ((and (cons? V714) (and (cons? (tl V714)) (and (= () (tl (tl V714))) (= (hd V714) protect)))) ()) ((and (variable? V714) (not (element? V714 V713))) (cons V714 ())) ((and (cons? V714) (and (= lambda (hd V714)) (and (cons? (tl V714)) (and (cons? (tl (tl V714))) (= () (tl (tl (tl V714)))))))) (shen.extract_free_vars (cons (hd (tl V714)) V713) (hd (tl (tl V714))))) ((and (cons? V714) (and (= let (hd V714)) (and (cons? (tl V714)) (and (cons? (tl (tl V714))) (and (cons? (tl (tl (tl V714)))) (= () (tl (tl (tl (tl V714)))))))))) (union (shen.extract_free_vars V713 (hd (tl (tl V714)))) (shen.extract_free_vars (cons (hd (tl V714)) V713) (hd (tl (tl (tl V714))))))) ((cons? V714) (union (shen.extract_free_vars V713 (hd V714)) (shen.extract_free_vars V713 (tl V714)))) (true ()))) -(defun shen.free_variable_warnings (V710 V711) (cond ((= () V711) _) (true (simple-error (cn "error: the following variables are free in " (shen.app V710 (cn ": " (shen.app (shen.list_variables V711) "" shen.a)) shen.a)))))) +(defun shen.free_variable_warnings (V717 V718) (cond ((= () V718) _) (true (simple-error (cn "error: the following variables are free in " (shen.app V717 (cn ": " (shen.app (shen.list_variables V718) "" shen.a)) shen.a)))))) -(defun shen.list_variables (V712) (cond ((and (cons? V712) (= () (tl V712))) (cn (str (hd V712)) ".")) ((cons? V712) (cn (str (hd V712)) (cn ", " (shen.list_variables (tl V712))))) (true (shen.sys-error shen.list_variables)))) +(defun shen.list_variables (V719) (cond ((and (cons? V719) (= () (tl V719))) (cn (str (hd V719)) ".")) ((cons? V719) (cn (str (hd V719)) (cn ", " (shen.list_variables (tl V719))))) (true (shen.sys-error shen.list_variables)))) -(defun shen.strip-protect (V713) (cond ((and (cons? V713) (and (cons? (tl V713)) (and (= () (tl (tl V713))) (= (hd V713) protect)))) (hd (tl V713))) ((cons? V713) (cons (shen.strip-protect (hd V713)) (shen.strip-protect (tl V713)))) (true V713))) +(defun shen.strip-protect (V720) (cond ((and (cons? V720) (and (cons? (tl V720)) (and (= () (tl (tl V720))) (= (hd V720) protect)))) (hd (tl V720))) ((cons? V720) (cons (shen.strip-protect (hd V720)) (shen.strip-protect (tl V720)))) (true V720))) -(defun shen.linearise (V714) (cond ((and (cons? V714) (and (cons? (tl V714)) (= () (tl (tl V714))))) (shen.linearise_help (shen.flatten (hd V714)) (hd V714) (hd (tl V714)))) (true (shen.sys-error shen.linearise)))) +(defun shen.linearise (V721) (cond ((and (cons? V721) (and (cons? (tl V721)) (= () (tl (tl V721))))) (shen.linearise_help (shen.flatten (hd V721)) (hd V721) (hd (tl V721)))) (true (shen.sys-error shen.linearise)))) -(defun shen.flatten (V715) (cond ((= () V715) ()) ((cons? V715) (append (shen.flatten (hd V715)) (shen.flatten (tl V715)))) (true (cons V715 ())))) +(defun shen.flatten (V722) (cond ((= () V722) ()) ((cons? V722) (append (shen.flatten (hd V722)) (shen.flatten (tl V722)))) (true (cons V722 ())))) -(defun shen.linearise_help (V716 V717 V718) (cond ((= () V716) (cons V717 (cons V718 ()))) ((cons? V716) (if (and (variable? (hd V716)) (element? (hd V716) (tl V716))) (let Var (gensym (hd V716)) (let NewAction (cons where (cons (cons = (cons (hd V716) (cons Var ()))) (cons V718 ()))) (let NewPatts (shen.linearise_X (hd V716) Var V717) (shen.linearise_help (tl V716) NewPatts NewAction)))) (shen.linearise_help (tl V716) V717 V718))) (true (shen.sys-error shen.linearise_help)))) +(defun shen.linearise_help (V723 V724 V725) (cond ((= () V723) (cons V724 (cons V725 ()))) ((cons? V723) (if (and (variable? (hd V723)) (element? (hd V723) (tl V723))) (let Var (gensym (hd V723)) (let NewAction (cons where (cons (cons = (cons (hd V723) (cons Var ()))) (cons V725 ()))) (let NewPatts (shen.linearise_X (hd V723) Var V724) (shen.linearise_help (tl V723) NewPatts NewAction)))) (shen.linearise_help (tl V723) V724 V725))) (true (shen.sys-error shen.linearise_help)))) -(defun shen.linearise_X (V727 V728 V729) (cond ((= V729 V727) V728) ((cons? V729) (let L (shen.linearise_X V727 V728 (hd V729)) (if (= L (hd V729)) (cons (hd V729) (shen.linearise_X V727 V728 (tl V729))) (cons L (tl V729))))) (true V729))) +(defun shen.linearise_X (V734 V735 V736) (cond ((= V736 V734) V735) ((cons? V736) (let L (shen.linearise_X V734 V735 (hd V736)) (if (= L (hd V736)) (cons (hd V736) (shen.linearise_X V734 V735 (tl V736))) (cons L (tl V736))))) (true V736))) -(defun shen.aritycheck (V731 V732) (cond ((and (cons? V732) (and (cons? (hd V732)) (and (cons? (tl (hd V732))) (and (= () (tl (tl (hd V732)))) (= () (tl V732)))))) (do (shen.aritycheck-action (hd (tl (hd V732)))) (shen.aritycheck-name V731 (arity V731) (length (hd (hd V732)))))) ((and (cons? V732) (and (cons? (hd V732)) (and (cons? (tl (hd V732))) (and (= () (tl (tl (hd V732)))) (and (cons? (tl V732)) (and (cons? (hd (tl V732))) (and (cons? (tl (hd (tl V732)))) (= () (tl (tl (hd (tl V732)))))))))))) (if (= (length (hd (hd V732))) (length (hd (hd (tl V732))))) (do (shen.aritycheck-action (hd (tl (hd V732)))) (shen.aritycheck V731 (tl V732))) (simple-error (cn "arity error in " (shen.app V731 " +(defun shen.aritycheck (V738 V739) (cond ((and (cons? V739) (and (cons? (hd V739)) (and (cons? (tl (hd V739))) (and (= () (tl (tl (hd V739)))) (= () (tl V739)))))) (do (shen.aritycheck-action (hd (tl (hd V739)))) (shen.aritycheck-name V738 (arity V738) (length (hd (hd V739)))))) ((and (cons? V739) (and (cons? (hd V739)) (and (cons? (tl (hd V739))) (and (= () (tl (tl (hd V739)))) (and (cons? (tl V739)) (and (cons? (hd (tl V739))) (and (cons? (tl (hd (tl V739)))) (= () (tl (tl (hd (tl V739)))))))))))) (if (= (length (hd (hd V739))) (length (hd (hd (tl V739))))) (do (shen.aritycheck-action (hd (tl (hd V739)))) (shen.aritycheck V738 (tl V739))) (simple-error (cn "arity error in " (shen.app V738 " " shen.a))))) (true (shen.sys-error shen.aritycheck)))) -(defun shen.aritycheck-name (V741 V742 V743) (cond ((= -1 V742) V743) ((= V743 V742) V743) (true (do (shen.prhush (cn " -warning: changing the arity of " (shen.app V741 " can cause errors. -" shen.a)) (stoutput)) V743)))) +(defun shen.aritycheck-name (V748 V749 V750) (cond ((= -1 V749) V750) ((= V750 V749) V750) (true (do (shen.prhush (cn " +warning: changing the arity of " (shen.app V748 " can cause errors. +" shen.a)) (stoutput)) V750)))) -(defun shen.aritycheck-action (V749) (cond ((cons? V749) (do (shen.aah (hd V749) (tl V749)) (map shen.aritycheck-action V749))) (true shen.skip))) +(defun shen.aritycheck-action (V756) (cond ((cons? V756) (do (shen.aah (hd V756) (tl V756)) (map (lambda X612 (shen.aritycheck-action X612)) V756))) (true shen.skip))) -(defun shen.aah (V750 V751) (let Arity (arity V750) (let Len (length V751) (if (and (> Arity -1) (> Len Arity)) (shen.prhush (cn "warning: " (shen.app V750 (cn " might not like " (shen.app Len (cn " argument" (shen.app (if (> Len 1) "s" "") ". +(defun shen.aah (V757 V758) (let Arity (arity V757) (let Len (length V758) (if (and (> Arity -1) (> Len Arity)) (shen.prhush (cn "warning: " (shen.app V757 (cn " might not like " (shen.app Len (cn " argument" (shen.app (if (> Len 1) "s" "") ". " shen.a)) shen.a)) shen.a)) (stoutput)) shen.skip)))) -(defun shen.abstract_rule (V752) (cond ((and (cons? V752) (and (cons? (tl V752)) (= () (tl (tl V752))))) (shen.abstraction_build (hd V752) (hd (tl V752)))) (true (shen.sys-error shen.abstract_rule)))) +(defun shen.abstract_rule (V759) (cond ((and (cons? V759) (and (cons? (tl V759)) (= () (tl (tl V759))))) (shen.abstraction_build (hd V759) (hd (tl V759)))) (true (shen.sys-error shen.abstract_rule)))) -(defun shen.abstraction_build (V753 V754) (cond ((= () V753) V754) ((cons? V753) (cons /. (cons (hd V753) (cons (shen.abstraction_build (tl V753) V754) ())))) (true (shen.sys-error shen.abstraction_build)))) +(defun shen.abstraction_build (V760 V761) (cond ((= () V760) V761) ((cons? V760) (cons /. (cons (hd V760) (cons (shen.abstraction_build (tl V760) V761) ())))) (true (shen.sys-error shen.abstraction_build)))) -(defun shen.parameters (V755) (cond ((= 0 V755) ()) (true (cons (gensym V) (shen.parameters (- V755 1)))))) +(defun shen.parameters (V762) (cond ((= 0 V762) ()) (true (cons (gensym V) (shen.parameters (- V762 1)))))) -(defun shen.application_build (V756 V757) (cond ((= () V756) V757) ((cons? V756) (shen.application_build (tl V756) (cons V757 (cons (hd V756) ())))) (true (shen.sys-error shen.application_build)))) +(defun shen.application_build (V763 V764) (cond ((= () V763) V764) ((cons? V763) (shen.application_build (tl V763) (cons V764 (cons (hd V763) ())))) (true (shen.sys-error shen.application_build)))) -(defun shen.compile_to_kl (V758 V759) (cond ((and (cons? V759) (and (cons? (tl V759)) (= () (tl (tl V759))))) (let Arity (shen.store-arity V758 (length (hd V759))) (let Reduce (map shen.reduce (hd (tl V759))) (let CondExpression (shen.cond-expression V758 (hd V759) Reduce) (let TypeTable (if (value shen.*optimise*) (shen.typextable (shen.get-type V758) (hd V759)) shen.skip) (let TypedCondExpression (if (value shen.*optimise*) (shen.assign-types (hd V759) TypeTable CondExpression) CondExpression) (let KL (cons defun (cons V758 (cons (hd V759) (cons TypedCondExpression ())))) KL))))))) (true (shen.sys-error shen.compile_to_kl)))) +(defun shen.compile_to_kl (V765 V766) (cond ((and (cons? V766) (and (cons? (tl V766)) (= () (tl (tl V766))))) (let Arity (shen.store-arity V765 (length (hd V766))) (let Reduce (map (lambda X613 (shen.reduce X613)) (hd (tl V766))) (let CondExpression (shen.cond-expression V765 (hd V766) Reduce) (let TypeTable (if (value shen.*optimise*) (shen.typextable (shen.get-type V765) (hd V766)) shen.skip) (let TypedCondExpression (if (value shen.*optimise*) (shen.assign-types (hd V766) TypeTable CondExpression) CondExpression) (let KL (cons defun (cons V765 (cons (hd V766) (cons TypedCondExpression ())))) KL))))))) (true (shen.sys-error shen.compile_to_kl)))) -(defun shen.get-type (V764) (cond ((cons? V764) shen.skip) (true (let FType (assoc V764 (value shen.*signedfuncs*)) (if (empty? FType) shen.skip (tl FType)))))) +(defun shen.get-type (V771) (cond ((cons? V771) shen.skip) (true (let FType (assoc V771 (value shen.*signedfuncs*)) (if (empty? FType) shen.skip (tl FType)))))) -(defun shen.typextable (V773 V774) (cond ((and (cons? V773) (and (cons? (tl V773)) (and (= --> (hd (tl V773))) (and (cons? (tl (tl V773))) (and (= () (tl (tl (tl V773)))) (cons? V774)))))) (if (variable? (hd V773)) (shen.typextable (hd (tl (tl V773))) (tl V774)) (cons (cons (hd V774) (hd V773)) (shen.typextable (hd (tl (tl V773))) (tl V774))))) (true ()))) +(defun shen.typextable (V780 V781) (cond ((and (cons? V780) (and (cons? (tl V780)) (and (= --> (hd (tl V780))) (and (cons? (tl (tl V780))) (and (= () (tl (tl (tl V780)))) (cons? V781)))))) (if (variable? (hd V780)) (shen.typextable (hd (tl (tl V780))) (tl V781)) (cons (cons (hd V781) (hd V780)) (shen.typextable (hd (tl (tl V780))) (tl V781))))) (true ()))) -(defun shen.assign-types (V775 V776 V777) (cond ((and (cons? V777) (and (= let (hd V777)) (and (cons? (tl V777)) (and (cons? (tl (tl V777))) (and (cons? (tl (tl (tl V777)))) (= () (tl (tl (tl (tl V777)))))))))) (cons let (cons (hd (tl V777)) (cons (shen.assign-types V775 V776 (hd (tl (tl V777)))) (cons (shen.assign-types (cons (hd (tl V777)) V775) V776 (hd (tl (tl (tl V777))))) ()))))) ((and (cons? V777) (and (= lambda (hd V777)) (and (cons? (tl V777)) (and (cons? (tl (tl V777))) (= () (tl (tl (tl V777)))))))) (cons lambda (cons (hd (tl V777)) (cons (shen.assign-types (cons (hd (tl V777)) V775) V776 (hd (tl (tl V777)))) ())))) ((and (cons? V777) (= cond (hd V777))) (cons cond (map (lambda Y (cons (shen.assign-types V775 V776 (hd Y)) (cons (shen.assign-types V775 V776 (hd (tl Y))) ()))) (tl V777)))) ((cons? V777) (let NewTable (shen.typextable (shen.get-type (hd V777)) (tl V777)) (cons (hd V777) (map (lambda Y (shen.assign-types V775 (append V776 NewTable) Y)) (tl V777))))) (true (let AtomType (assoc V777 V776) (if (cons? AtomType) (cons type (cons V777 (cons (tl AtomType) ()))) (if (element? V777 V775) V777 (shen.atom-type V777))))))) +(defun shen.assign-types (V782 V783 V784) (cond ((and (cons? V784) (and (= let (hd V784)) (and (cons? (tl V784)) (and (cons? (tl (tl V784))) (and (cons? (tl (tl (tl V784)))) (= () (tl (tl (tl (tl V784)))))))))) (cons let (cons (hd (tl V784)) (cons (shen.assign-types V782 V783 (hd (tl (tl V784)))) (cons (shen.assign-types (cons (hd (tl V784)) V782) V783 (hd (tl (tl (tl V784))))) ()))))) ((and (cons? V784) (and (= lambda (hd V784)) (and (cons? (tl V784)) (and (cons? (tl (tl V784))) (= () (tl (tl (tl V784)))))))) (cons lambda (cons (hd (tl V784)) (cons (shen.assign-types (cons (hd (tl V784)) V782) V783 (hd (tl (tl V784)))) ())))) ((and (cons? V784) (= cond (hd V784))) (cons cond (map (lambda Y (cons (shen.assign-types V782 V783 (hd Y)) (cons (shen.assign-types V782 V783 (hd (tl Y))) ()))) (tl V784)))) ((cons? V784) (let NewTable (shen.typextable (shen.get-type (hd V784)) (tl V784)) (cons (hd V784) (map (lambda Y (shen.assign-types V782 (append V783 NewTable) Y)) (tl V784))))) (true (let AtomType (assoc V784 V783) (if (cons? AtomType) (cons type (cons V784 (cons (tl AtomType) ()))) (if (element? V784 V782) V784 (shen.atom-type V784))))))) -(defun shen.atom-type (V778) (if (string? V778) (cons type (cons V778 (cons string ()))) (if (number? V778) (cons type (cons V778 (cons number ()))) (if (boolean? V778) (cons type (cons V778 (cons boolean ()))) (if (symbol? V778) (cons type (cons V778 (cons symbol ()))) V778))))) +(defun shen.atom-type (V785) (if (string? V785) (cons type (cons V785 (cons string ()))) (if (number? V785) (cons type (cons V785 (cons number ()))) (if (boolean? V785) (cons type (cons V785 (cons boolean ()))) (if (symbol? V785) (cons type (cons V785 (cons symbol ()))) V785))))) -(defun shen.store-arity (V781 V782) (cond ((value shen.*installing-kl*) shen.skip) (true (put V781 arity V782 (value *property-vector*))))) +(defun shen.store-arity (V788 V789) (cond ((value shen.*installing-kl*) shen.skip) (true (put V788 arity V789 (value *property-vector*))))) -(defun shen.reduce (V783) (do (set shen.*teststack* ()) (let Result (shen.reduce_help V783) (cons (cons : (cons shen.tests (reverse (value shen.*teststack*)))) (cons Result ()))))) +(defun shen.reduce (V790) (do (set shen.*teststack* ()) (let Result (shen.reduce_help V790) (cons (cons : (cons shen.tests (reverse (value shen.*teststack*)))) (cons Result ()))))) -(defun shen.reduce_help (V784) (cond ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (hd (tl (hd V784)))) (and (= cons (hd (hd (tl (hd V784))))) (and (cons? (tl (hd (tl (hd V784))))) (and (cons? (tl (tl (hd (tl (hd V784)))))) (and (= () (tl (tl (tl (hd (tl (hd V784))))))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (= () (tl (tl V784))))))))))))))) (do (shen.add_test (cons cons? (tl V784))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V784))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V784)))))) (cons (shen.ebr (hd (tl V784)) (hd (tl (hd V784))) (hd (tl (tl (hd V784))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons hd (tl V784)) ())) (cons (cons tl (tl V784)) ())) (shen.reduce_help Application))))) ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (hd (tl (hd V784)))) (and (= @p (hd (hd (tl (hd V784))))) (and (cons? (tl (hd (tl (hd V784))))) (and (cons? (tl (tl (hd (tl (hd V784)))))) (and (= () (tl (tl (tl (hd (tl (hd V784))))))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (= () (tl (tl V784))))))))))))))) (do (shen.add_test (cons tuple? (tl V784))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V784))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V784)))))) (cons (shen.ebr (hd (tl V784)) (hd (tl (hd V784))) (hd (tl (tl (hd V784))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons fst (tl V784)) ())) (cons (cons snd (tl V784)) ())) (shen.reduce_help Application))))) ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (hd (tl (hd V784)))) (and (= @v (hd (hd (tl (hd V784))))) (and (cons? (tl (hd (tl (hd V784))))) (and (cons? (tl (tl (hd (tl (hd V784)))))) (and (= () (tl (tl (tl (hd (tl (hd V784))))))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (= () (tl (tl V784))))))))))))))) (do (shen.add_test (cons shen.+vector? (tl V784))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V784))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V784)))))) (cons (shen.ebr (hd (tl V784)) (hd (tl (hd V784))) (hd (tl (tl (hd V784))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons hdv (tl V784)) ())) (cons (cons tlv (tl V784)) ())) (shen.reduce_help Application))))) ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (hd (tl (hd V784)))) (and (= @s (hd (hd (tl (hd V784))))) (and (cons? (tl (hd (tl (hd V784))))) (and (cons? (tl (tl (hd (tl (hd V784)))))) (and (= () (tl (tl (tl (hd (tl (hd V784))))))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (= () (tl (tl V784))))))))))))))) (do (shen.add_test (cons shen.+string? (tl V784))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V784))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V784)))))) (cons (shen.ebr (hd (tl V784)) (hd (tl (hd V784))) (hd (tl (tl (hd V784))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons pos (cons (hd (tl V784)) (cons 0 ()))) ())) (cons (cons tlstr (tl V784)) ())) (shen.reduce_help Application))))) ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (and (= () (tl (tl V784))) (not (variable? (hd (tl (hd V784))))))))))))) (do (shen.add_test (cons = (cons (hd (tl (hd V784))) (tl V784)))) (shen.reduce_help (hd (tl (tl (hd V784))))))) ((and (cons? V784) (and (cons? (hd V784)) (and (= /. (hd (hd V784))) (and (cons? (tl (hd V784))) (and (cons? (tl (tl (hd V784)))) (and (= () (tl (tl (tl (hd V784))))) (and (cons? (tl V784)) (= () (tl (tl V784)))))))))) (shen.reduce_help (shen.ebr (hd (tl V784)) (hd (tl (hd V784))) (hd (tl (tl (hd V784))))))) ((and (cons? V784) (and (= where (hd V784)) (and (cons? (tl V784)) (and (cons? (tl (tl V784))) (= () (tl (tl (tl V784)))))))) (do (shen.add_test (hd (tl V784))) (shen.reduce_help (hd (tl (tl V784)))))) ((and (cons? V784) (and (cons? (tl V784)) (= () (tl (tl V784))))) (let Z (shen.reduce_help (hd V784)) (if (= (hd V784) Z) V784 (shen.reduce_help (cons Z (tl V784)))))) (true V784))) +(defun shen.reduce_help (V791) (cond ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (hd (tl (hd V791)))) (and (= cons (hd (hd (tl (hd V791))))) (and (cons? (tl (hd (tl (hd V791))))) (and (cons? (tl (tl (hd (tl (hd V791)))))) (and (= () (tl (tl (tl (hd (tl (hd V791))))))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (= () (tl (tl V791))))))))))))))) (do (shen.add_test (cons cons? (tl V791))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V791))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V791)))))) (cons (shen.ebr (hd (tl V791)) (hd (tl (hd V791))) (hd (tl (tl (hd V791))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons hd (tl V791)) ())) (cons (cons tl (tl V791)) ())) (shen.reduce_help Application))))) ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (hd (tl (hd V791)))) (and (= @p (hd (hd (tl (hd V791))))) (and (cons? (tl (hd (tl (hd V791))))) (and (cons? (tl (tl (hd (tl (hd V791)))))) (and (= () (tl (tl (tl (hd (tl (hd V791))))))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (= () (tl (tl V791))))))))))))))) (do (shen.add_test (cons tuple? (tl V791))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V791))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V791)))))) (cons (shen.ebr (hd (tl V791)) (hd (tl (hd V791))) (hd (tl (tl (hd V791))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons fst (tl V791)) ())) (cons (cons snd (tl V791)) ())) (shen.reduce_help Application))))) ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (hd (tl (hd V791)))) (and (= @v (hd (hd (tl (hd V791))))) (and (cons? (tl (hd (tl (hd V791))))) (and (cons? (tl (tl (hd (tl (hd V791)))))) (and (= () (tl (tl (tl (hd (tl (hd V791))))))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (= () (tl (tl V791))))))))))))))) (do (shen.add_test (cons shen.+vector? (tl V791))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V791))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V791)))))) (cons (shen.ebr (hd (tl V791)) (hd (tl (hd V791))) (hd (tl (tl (hd V791))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons hdv (tl V791)) ())) (cons (cons tlv (tl V791)) ())) (shen.reduce_help Application))))) ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (hd (tl (hd V791)))) (and (= @s (hd (hd (tl (hd V791))))) (and (cons? (tl (hd (tl (hd V791))))) (and (cons? (tl (tl (hd (tl (hd V791)))))) (and (= () (tl (tl (tl (hd (tl (hd V791))))))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (= () (tl (tl V791))))))))))))))) (do (shen.add_test (cons shen.+string? (tl V791))) (let Abstraction (cons /. (cons (hd (tl (hd (tl (hd V791))))) (cons (cons /. (cons (hd (tl (tl (hd (tl (hd V791)))))) (cons (shen.ebr (hd (tl V791)) (hd (tl (hd V791))) (hd (tl (tl (hd V791))))) ()))) ()))) (let Application (cons (cons Abstraction (cons (cons pos (cons (hd (tl V791)) (cons 0 ()))) ())) (cons (cons tlstr (tl V791)) ())) (shen.reduce_help Application))))) ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (and (= () (tl (tl V791))) (not (variable? (hd (tl (hd V791))))))))))))) (do (shen.add_test (cons = (cons (hd (tl (hd V791))) (tl V791)))) (shen.reduce_help (hd (tl (tl (hd V791))))))) ((and (cons? V791) (and (cons? (hd V791)) (and (= /. (hd (hd V791))) (and (cons? (tl (hd V791))) (and (cons? (tl (tl (hd V791)))) (and (= () (tl (tl (tl (hd V791))))) (and (cons? (tl V791)) (= () (tl (tl V791)))))))))) (shen.reduce_help (shen.ebr (hd (tl V791)) (hd (tl (hd V791))) (hd (tl (tl (hd V791))))))) ((and (cons? V791) (and (= where (hd V791)) (and (cons? (tl V791)) (and (cons? (tl (tl V791))) (= () (tl (tl (tl V791)))))))) (do (shen.add_test (hd (tl V791))) (shen.reduce_help (hd (tl (tl V791)))))) ((and (cons? V791) (and (cons? (tl V791)) (= () (tl (tl V791))))) (let Z (shen.reduce_help (hd V791)) (if (= (hd V791) Z) V791 (shen.reduce_help (cons Z (tl V791)))))) (true V791))) -(defun shen.+string? (V785) (cond ((= "" V785) false) (true (string? V785)))) +(defun shen.+string? (V792) (cond ((= "" V792) false) (true (string? V792)))) -(defun shen.+vector (V786) (cond ((= V786 (vector 0)) false) (true (vector? V786)))) +(defun shen.+vector (V793) (cond ((= V793 (vector 0)) false) (true (vector? V793)))) -(defun shen.ebr (V795 V796 V797) (cond ((= V797 V796) V795) ((and (cons? V797) (and (= /. (hd V797)) (and (cons? (tl V797)) (and (cons? (tl (tl V797))) (and (= () (tl (tl (tl V797)))) (> (occurrences V796 (hd (tl V797))) 0)))))) V797) ((and (cons? V797) (and (= let (hd V797)) (and (cons? (tl V797)) (and (cons? (tl (tl V797))) (and (cons? (tl (tl (tl V797)))) (and (= () (tl (tl (tl (tl V797))))) (= (hd (tl V797)) V796))))))) (cons let (cons (hd (tl V797)) (cons (shen.ebr V795 (hd (tl V797)) (hd (tl (tl V797)))) (tl (tl (tl V797))))))) ((cons? V797) (cons (shen.ebr V795 V796 (hd V797)) (shen.ebr V795 V796 (tl V797)))) (true V797))) +(defun shen.ebr (V802 V803 V804) (cond ((= V804 V803) V802) ((and (cons? V804) (and (= /. (hd V804)) (and (cons? (tl V804)) (and (cons? (tl (tl V804))) (and (= () (tl (tl (tl V804)))) (> (occurrences V803 (hd (tl V804))) 0)))))) V804) ((and (cons? V804) (and (= let (hd V804)) (and (cons? (tl V804)) (and (cons? (tl (tl V804))) (and (cons? (tl (tl (tl V804)))) (and (= () (tl (tl (tl (tl V804))))) (= (hd (tl V804)) V803))))))) (cons let (cons (hd (tl V804)) (cons (shen.ebr V802 (hd (tl V804)) (hd (tl (tl V804)))) (tl (tl (tl V804))))))) ((cons? V804) (cons (shen.ebr V802 V803 (hd V804)) (shen.ebr V802 V803 (tl V804)))) (true V804))) -(defun shen.add_test (V800) (set shen.*teststack* (cons V800 (value shen.*teststack*)))) +(defun shen.add_test (V807) (set shen.*teststack* (cons V807 (value shen.*teststack*)))) -(defun shen.cond-expression (V801 V802 V803) (let Err (shen.err-condition V801) (let Cases (shen.case-form V803 Err) (let EncodeChoices (shen.encode-choices Cases V801) (shen.cond-form EncodeChoices))))) +(defun shen.cond-expression (V808 V809 V810) (let Err (shen.err-condition V808) (let Cases (shen.case-form V810 Err) (let EncodeChoices (shen.encode-choices Cases V808) (shen.cond-form EncodeChoices))))) -(defun shen.cond-form (V806) (cond ((and (cons? V806) (and (cons? (hd V806)) (and (= true (hd (hd V806))) (and (cons? (tl (hd V806))) (= () (tl (tl (hd V806)))))))) (hd (tl (hd V806)))) (true (cons cond V806)))) +(defun shen.cond-form (V813) (cond ((and (cons? V813) (and (cons? (hd V813)) (and (= true (hd (hd V813))) (and (cons? (tl (hd V813))) (= () (tl (tl (hd V813)))))))) (hd (tl (hd V813)))) (true (cons cond V813)))) -(defun shen.encode-choices (V809 V810) (cond ((= () V809) ()) ((and (cons? V809) (and (cons? (hd V809)) (and (= true (hd (hd V809))) (and (cons? (tl (hd V809))) (and (cons? (hd (tl (hd V809)))) (and (= shen.choicepoint! (hd (hd (tl (hd V809))))) (and (cons? (tl (hd (tl (hd V809))))) (and (= () (tl (tl (hd (tl (hd V809)))))) (and (= () (tl (tl (hd V809)))) (= () (tl V809))))))))))) (cons (cons true (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V809))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (if (value shen.*installing-kl*) (cons shen.sys-error (cons V810 ())) (cons shen.f_error (cons V810 ()))) (cons Result ())))) ())))) ())) ())) ((and (cons? V809) (and (cons? (hd V809)) (and (= true (hd (hd V809))) (and (cons? (tl (hd V809))) (and (cons? (hd (tl (hd V809)))) (and (= shen.choicepoint! (hd (hd (tl (hd V809))))) (and (cons? (tl (hd (tl (hd V809))))) (and (= () (tl (tl (hd (tl (hd V809)))))) (= () (tl (tl (hd V809)))))))))))) (cons (cons true (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V809))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (shen.cond-form (shen.encode-choices (tl V809) V810)) (cons Result ())))) ())))) ())) ())) ((and (cons? V809) (and (cons? (hd V809)) (and (cons? (tl (hd V809))) (and (cons? (hd (tl (hd V809)))) (and (= shen.choicepoint! (hd (hd (tl (hd V809))))) (and (cons? (tl (hd (tl (hd V809))))) (and (= () (tl (tl (hd (tl (hd V809)))))) (= () (tl (tl (hd V809))))))))))) (cons (cons true (cons (cons let (cons Freeze (cons (cons freeze (cons (shen.cond-form (shen.encode-choices (tl V809) V810)) ())) (cons (cons if (cons (hd (hd V809)) (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V809))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (cons thaw (cons Freeze ())) (cons Result ())))) ())))) (cons (cons thaw (cons Freeze ())) ())))) ())))) ())) ())) ((and (cons? V809) (and (cons? (hd V809)) (and (cons? (tl (hd V809))) (= () (tl (tl (hd V809))))))) (cons (hd V809) (shen.encode-choices (tl V809) V810))) (true (shen.sys-error shen.encode-choices)))) +(defun shen.encode-choices (V816 V817) (cond ((= () V816) ()) ((and (cons? V816) (and (cons? (hd V816)) (and (= true (hd (hd V816))) (and (cons? (tl (hd V816))) (and (cons? (hd (tl (hd V816)))) (and (= shen.choicepoint! (hd (hd (tl (hd V816))))) (and (cons? (tl (hd (tl (hd V816))))) (and (= () (tl (tl (hd (tl (hd V816)))))) (and (= () (tl (tl (hd V816)))) (= () (tl V816))))))))))) (cons (cons true (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V816))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (if (value shen.*installing-kl*) (cons shen.sys-error (cons V817 ())) (cons shen.f_error (cons V817 ()))) (cons Result ())))) ())))) ())) ())) ((and (cons? V816) (and (cons? (hd V816)) (and (= true (hd (hd V816))) (and (cons? (tl (hd V816))) (and (cons? (hd (tl (hd V816)))) (and (= shen.choicepoint! (hd (hd (tl (hd V816))))) (and (cons? (tl (hd (tl (hd V816))))) (and (= () (tl (tl (hd (tl (hd V816)))))) (= () (tl (tl (hd V816)))))))))))) (cons (cons true (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V816))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (shen.cond-form (shen.encode-choices (tl V816) V817)) (cons Result ())))) ())))) ())) ())) ((and (cons? V816) (and (cons? (hd V816)) (and (cons? (tl (hd V816))) (and (cons? (hd (tl (hd V816)))) (and (= shen.choicepoint! (hd (hd (tl (hd V816))))) (and (cons? (tl (hd (tl (hd V816))))) (and (= () (tl (tl (hd (tl (hd V816)))))) (= () (tl (tl (hd V816))))))))))) (cons (cons true (cons (cons let (cons Freeze (cons (cons freeze (cons (shen.cond-form (shen.encode-choices (tl V816) V817)) ())) (cons (cons if (cons (hd (hd V816)) (cons (cons let (cons Result (cons (hd (tl (hd (tl (hd V816))))) (cons (cons if (cons (cons = (cons Result (cons (cons fail ()) ()))) (cons (cons thaw (cons Freeze ())) (cons Result ())))) ())))) (cons (cons thaw (cons Freeze ())) ())))) ())))) ())) ())) ((and (cons? V816) (and (cons? (hd V816)) (and (cons? (tl (hd V816))) (= () (tl (tl (hd V816))))))) (cons (hd V816) (shen.encode-choices (tl V816) V817))) (true (shen.sys-error shen.encode-choices)))) -(defun shen.case-form (V815 V816) (cond ((= () V815) (cons V816 ())) ((and (cons? V815) (and (cons? (hd V815)) (and (cons? (hd (hd V815))) (and (= : (hd (hd (hd V815)))) (and (cons? (tl (hd (hd V815)))) (and (= shen.tests (hd (tl (hd (hd V815))))) (and (= () (tl (tl (hd (hd V815))))) (and (cons? (tl (hd V815))) (and (cons? (hd (tl (hd V815)))) (and (= shen.choicepoint! (hd (hd (tl (hd V815))))) (and (cons? (tl (hd (tl (hd V815))))) (and (= () (tl (tl (hd (tl (hd V815)))))) (= () (tl (tl (hd V815)))))))))))))))) (cons (cons true (tl (hd V815))) (shen.case-form (tl V815) V816))) ((and (cons? V815) (and (cons? (hd V815)) (and (cons? (hd (hd V815))) (and (= : (hd (hd (hd V815)))) (and (cons? (tl (hd (hd V815)))) (and (= shen.tests (hd (tl (hd (hd V815))))) (and (= () (tl (tl (hd (hd V815))))) (and (cons? (tl (hd V815))) (= () (tl (tl (hd V815)))))))))))) (cons (cons true (tl (hd V815))) ())) ((and (cons? V815) (and (cons? (hd V815)) (and (cons? (hd (hd V815))) (and (= : (hd (hd (hd V815)))) (and (cons? (tl (hd (hd V815)))) (and (= shen.tests (hd (tl (hd (hd V815))))) (and (cons? (tl (hd V815))) (= () (tl (tl (hd V815))))))))))) (cons (cons (shen.embed-and (tl (tl (hd (hd V815))))) (tl (hd V815))) (shen.case-form (tl V815) V816))) (true (shen.sys-error shen.case-form)))) +(defun shen.case-form (V822 V823) (cond ((= () V822) (cons V823 ())) ((and (cons? V822) (and (cons? (hd V822)) (and (cons? (hd (hd V822))) (and (= : (hd (hd (hd V822)))) (and (cons? (tl (hd (hd V822)))) (and (= shen.tests (hd (tl (hd (hd V822))))) (and (= () (tl (tl (hd (hd V822))))) (and (cons? (tl (hd V822))) (and (cons? (hd (tl (hd V822)))) (and (= shen.choicepoint! (hd (hd (tl (hd V822))))) (and (cons? (tl (hd (tl (hd V822))))) (and (= () (tl (tl (hd (tl (hd V822)))))) (= () (tl (tl (hd V822)))))))))))))))) (cons (cons true (tl (hd V822))) (shen.case-form (tl V822) V823))) ((and (cons? V822) (and (cons? (hd V822)) (and (cons? (hd (hd V822))) (and (= : (hd (hd (hd V822)))) (and (cons? (tl (hd (hd V822)))) (and (= shen.tests (hd (tl (hd (hd V822))))) (and (= () (tl (tl (hd (hd V822))))) (and (cons? (tl (hd V822))) (= () (tl (tl (hd V822)))))))))))) (cons (cons true (tl (hd V822))) ())) ((and (cons? V822) (and (cons? (hd V822)) (and (cons? (hd (hd V822))) (and (= : (hd (hd (hd V822)))) (and (cons? (tl (hd (hd V822)))) (and (= shen.tests (hd (tl (hd (hd V822))))) (and (cons? (tl (hd V822))) (= () (tl (tl (hd V822))))))))))) (cons (cons (shen.embed-and (tl (tl (hd (hd V822))))) (tl (hd V822))) (shen.case-form (tl V822) V823))) (true (shen.sys-error shen.case-form)))) -(defun shen.embed-and (V817) (cond ((and (cons? V817) (= () (tl V817))) (hd V817)) ((cons? V817) (cons and (cons (hd V817) (cons (shen.embed-and (tl V817)) ())))) (true (shen.sys-error shen.embed-and)))) +(defun shen.embed-and (V824) (cond ((and (cons? V824) (= () (tl V824))) (hd V824)) ((cons? V824) (cons and (cons (hd V824) (cons (shen.embed-and (tl V824)) ())))) (true (shen.sys-error shen.embed-and)))) -(defun shen.err-condition (V818) (cons true (cons (cons shen.f_error (cons V818 ())) ()))) +(defun shen.err-condition (V825) (cons true (cons (cons shen.f_error (cons V825 ())) ()))) -(defun shen.sys-error (V819) (simple-error (cn "system function " (shen.app V819 ": unexpected argument +(defun shen.sys-error (V826) (simple-error (cn "system function " (shen.app V826 ": unexpected argument " shen.a)))) diff --git a/shen/klambda/declarations.kl b/shen/klambda/declarations.kl index f35782a..6479d56 100644 --- a/shen/klambda/declarations.kl +++ b/shen/klambda/declarations.kl @@ -1,4 +1,53 @@ -"*********************************************************************************** The License ** ** The user is free to produce commercial applications with the software, to ** distribute these applications in source or binary form, and to charge monies ** for them as he sees fit and in concordance with the laws of the land subject ** to the following license. ** * * 1. The license applies to all the software and all derived software and ** must appear on such. ** ** 2. It is illegal to distribute the software without this license attached ** to it and use of the software implies agreement with the license as such. ** It is illegal for anyone who is not the copyright holder to tamper with ** or change the license. ** ** 3. Neither the names of Lambda Associates or the copyright holder may be used ** to endorse or promote products built using the software without specific ** prior written permission from the copyright holder. ** ** 4. That possession of this license does not confer on the copyright holder ** any special contractual obligation towards the user. That in no event * * shall the copyright holder be liable for any direct, indirect, incidental, * * special, exemplary or consequential damages (including but not limited ** to procurement of substitute goods or services, loss of use, data, * * interruption), however caused and on any theory of liability, whether in * * contract, strict liability or tort (including negligence) arising in any ** way out of the use of the software, even if advised of the possibility of ** such damage. * * ** 5. It is permitted for the user to change the software, for the purpose of ** improving performance, correcting an error, or porting to a new platform, ** and distribute the derived version of Shen provided the resulting program ** conforms in all respects to the Shen standard and is issued under that * * title. The user must make it clear with his distribution that he/she is ** the author of the changes and what these changes are and why. ** ** 6. Derived versions of this software in whatever form are subject to the same ** restrictions. In particular it is not permitted to make derived copies of ** this software which do not conform to the Shen standard or appear under a ** different title. ** ** It is permitted to distribute versions of Shen which incorporate libraries, ** graphics or other facilities which are not part of the Shen standard. ** ** For an explication of this license see www.shenlanguage.org/license.htm which ** explains this license in full. ** ******************************************************************************************"(set shen.*installing-kl* false) +"********************************************************************************** +* The License * +* * +* The user is free to produce commercial applications with the software, to * +* distribute these applications in source or binary form, and to charge monies * +* for them as he sees fit and in concordance with the laws of the land subject * +* to the following license. * +* * +* 1. The license applies to all the software and all derived software and * +* must appear on such. * +* * +* 2. It is illegal to distribute the software without this license attached * +* to it and use of the software implies agreement with the license as such. * +* It is illegal for anyone who is not the copyright holder to tamper with * +* or change the license. * +* * +* 3. Neither the names of Lambda Associates or the copyright holder may be used * +* to endorse or promote products built using the software without specific * +* prior written permission from the copyright holder. * +* * +* 4. That possession of this license does not confer on the copyright holder * +* any special contractual obligation towards the user. That in no event * +* shall the copyright holder be liable for any direct, indirect, incidental, * +* special, exemplary or consequential damages (including but not limited * +* to procurement of substitute goods or services, loss of use, data, * +* interruption), however caused and on any theory of liability, whether in * +* contract, strict liability or tort (including negligence) arising in any * +* way out of the use of the software, even if advised of the possibility of * +* such damage. * +* * +* 5. It is permitted for the user to change the software, for the purpose of * +* improving performance, correcting an error, or porting to a new platform, * +* and distribute the derived version of Shen provided the resulting program * +* conforms in all respects to the Shen standard and is issued under that * +* title. The user must make it clear with his distribution that he/she is * +* the author of the changes and what these changes are and why. * +* * +* 6. Derived versions of this software in whatever form are subject to the same * +* restrictions. In particular it is not permitted to make derived copies of * +* this software which do not conform to the Shen standard or appear under a * +* different title. * +* * +* It is permitted to distribute versions of Shen which incorporate libraries, * +* graphics or other facilities which are not part of the Shen standard. * +* * +* For an explication of this license see www.shenlanguage.org/license.htm which * +* explains this license in full. * +* * +***************************************************************************************** +"(set shen.*installing-kl* false) (set shen.*history* ()) @@ -60,23 +109,23 @@ (set shen.*optimise* false) -(set *version* "version 14.2") +(set *version* "version 15") -(defun shen.initialise_arity_table (V820) (cond ((= () V820) ()) ((and (cons? V820) (cons? (tl V820))) (let DecArity (put (hd V820) arity (hd (tl V820)) (value *property-vector*)) (shen.initialise_arity_table (tl (tl V820))))) (true (shen.sys-error shen.initialise_arity_table)))) +(defun shen.initialise_arity_table (V827) (cond ((= () V827) ()) ((and (cons? V827) (cons? (tl V827))) (let DecArity (put (hd V827) arity (hd (tl V827)) (value *property-vector*)) (shen.initialise_arity_table (tl (tl V827))))) (true (shen.sys-error shen.initialise_arity_table)))) -(defun arity (V821) (trap-error (get V821 arity (value *property-vector*)) (lambda E -1))) +(defun arity (V828) (trap-error (get V828 arity (value *property-vector*)) (lambda E -1))) -(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 1 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 1 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -(defun systemf (V822) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V822 External) (value *property-vector*))))) +(defun systemf (V829) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V829 External) (value *property-vector*))))) -(defun adjoin (V823 V824) (if (element? V823 V824) V824 (cons V823 V824))) +(defun adjoin (V830 V831) (if (element? V830 V831) V831 (cons V830 V831))) -(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) +(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) -(defun specialise (V825) (do (set shen.*special* (cons V825 (value shen.*special*))) V825)) +(defun specialise (V832) (do (set shen.*special* (cons V832 (value shen.*special*))) V832)) -(defun unspecialise (V826) (do (set shen.*special* (remove V826 (value shen.*special*))) V826)) +(defun unspecialise (V833) (do (set shen.*special* (remove V833 (value shen.*special*))) V833)) diff --git a/shen/klambda/load.kl b/shen/klambda/load.kl index 28f3718..e85c44b 100644 --- a/shen/klambda/load.kl +++ b/shen/klambda/load.kl @@ -47,38 +47,38 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun load (V827) (let Load (let Start (get-time run) (let Result (shen.load-help (value shen.*tc*) (read-file V827)) (let Finish (get-time run) (let Time (- Finish Start) (let Message (shen.prhush (cn " +"(defun load (V839) (let Load (let Start (get-time run) (let Result (shen.load-help (value shen.*tc*) (read-file V839)) (let Finish (get-time run) (let Time (- Finish Start) (let Message (shen.prhush (cn " run time: " (cn (str Time) " secs ")) (stoutput)) Result))))) (let Infs (if (value shen.*tc*) (shen.prhush (cn " typechecked in " (shen.app (inferences) " inferences " shen.a)) (stoutput)) shen.skip) loaded))) -(defun shen.load-help (V832 V833) (cond ((= false V832) (map (lambda X (shen.prhush (shen.app (shen.eval-without-macros X) " -" shen.s) (stoutput))) V833)) (true (let RemoveSynonyms (mapcan shen.remove-synonyms V833) (let Table (mapcan shen.typetable RemoveSynonyms) (let Assume (map shen.assumetype Table) (trap-error (map shen.typecheck-and-load RemoveSynonyms) (lambda E (shen.unwind-types E Table))))))))) +(defun shen.load-help (V844 V845) (cond ((= false V844) (map (lambda X (shen.prhush (shen.app (shen.eval-without-macros X) " +" shen.s) (stoutput))) V845)) (true (let RemoveSynonyms (mapcan (lambda X834 (shen.remove-synonyms X834)) V845) (let Table (mapcan (lambda X835 (shen.typetable X835)) RemoveSynonyms) (let Assume (map (lambda X836 (shen.assumetype X836)) Table) (trap-error (map (lambda X837 (shen.typecheck-and-load X837)) RemoveSynonyms) (lambda E (shen.unwind-types E Table))))))))) -(defun shen.remove-synonyms (V834) (cond ((and (cons? V834) (= shen.synonyms-help (hd V834))) (do (eval V834) ())) (true (cons V834 ())))) +(defun shen.remove-synonyms (V846) (cond ((and (cons? V846) (= shen.synonyms-help (hd V846))) (do (eval V846) ())) (true (cons V846 ())))) -(defun shen.typecheck-and-load (V835) (do (nl 1) (shen.typecheck-and-evaluate V835 (gensym A)))) +(defun shen.typecheck-and-load (V847) (do (nl 1) (shen.typecheck-and-evaluate V847 (gensym A)))) -(defun shen.typetable (V844) (cond ((and (cons? V844) (and (= define (hd V844)) (cons? (tl V844)))) (let Sig (compile shen. (tl (tl V844)) ()) (if (= Sig (fail)) (simple-error (shen.app (hd (tl V844)) " lacks a proper signature. -" shen.a)) (cons (cons (hd (tl V844)) Sig) ())))) ((and (cons? V844) (and (= defcc (hd V844)) (and (cons? (tl V844)) (and (cons? (tl (tl V844))) (and (= { (hd (tl (tl V844)))) (and (cons? (tl (tl (tl V844)))) (and (cons? (hd (tl (tl (tl V844))))) (and (= list (hd (hd (tl (tl (tl V844)))))) (and (cons? (tl (hd (tl (tl (tl V844)))))) (and (= () (tl (tl (hd (tl (tl (tl V844))))))) (and (cons? (tl (tl (tl (tl V844))))) (and (= ==> (hd (tl (tl (tl (tl V844)))))) (and (cons? (tl (tl (tl (tl (tl V844)))))) (and (cons? (tl (tl (tl (tl (tl (tl V844))))))) (= } (hd (tl (tl (tl (tl (tl (tl V844)))))))))))))))))))))) (cons (cons (hd (tl V844)) (cons (hd (tl (tl (tl V844)))) (cons ==> (cons (hd (tl (tl (tl (tl (tl V844)))))) ())))) ())) ((and (cons? V844) (and (= defcc (hd V844)) (cons? (tl V844)))) (simple-error (shen.app (hd (tl V844)) " lacks a proper signature. +(defun shen.typetable (V856) (cond ((and (cons? V856) (and (= define (hd V856)) (cons? (tl V856)))) (let Sig (compile (lambda X838 (shen. X838)) (tl (tl V856)) ()) (if (= Sig (fail)) (simple-error (shen.app (hd (tl V856)) " lacks a proper signature. +" shen.a)) (cons (cons (hd (tl V856)) Sig) ())))) ((and (cons? V856) (and (= defcc (hd V856)) (and (cons? (tl V856)) (and (cons? (tl (tl V856))) (and (= { (hd (tl (tl V856)))) (and (cons? (tl (tl (tl V856)))) (and (cons? (hd (tl (tl (tl V856))))) (and (= list (hd (hd (tl (tl (tl V856)))))) (and (cons? (tl (hd (tl (tl (tl V856)))))) (and (= () (tl (tl (hd (tl (tl (tl V856))))))) (and (cons? (tl (tl (tl (tl V856))))) (and (= ==> (hd (tl (tl (tl (tl V856)))))) (and (cons? (tl (tl (tl (tl (tl V856)))))) (and (cons? (tl (tl (tl (tl (tl (tl V856))))))) (= } (hd (tl (tl (tl (tl (tl (tl V856)))))))))))))))))))))) (cons (cons (hd (tl V856)) (cons (hd (tl (tl (tl V856)))) (cons ==> (cons (hd (tl (tl (tl (tl (tl V856)))))) ())))) ())) ((and (cons? V856) (and (= defcc (hd V856)) (cons? (tl V856)))) (simple-error (shen.app (hd (tl V856)) " lacks a proper signature. " shen.a))) (true ()))) -(defun shen.assumetype (V845) (cond ((cons? V845) (declare (hd V845) (tl V845))) (true (shen.sys-error shen.assumetype)))) +(defun shen.assumetype (V857) (cond ((cons? V857) (declare (hd V857) (tl V857))) (true (shen.sys-error shen.assumetype)))) -(defun shen.unwind-types (V850 V851) (cond ((= () V851) (simple-error (error-to-string V850))) ((and (cons? V851) (cons? (hd V851))) (do (shen.remtype (hd (hd V851))) (shen.unwind-types V850 (tl V851)))) (true (shen.sys-error shen.unwind-types)))) +(defun shen.unwind-types (V862 V863) (cond ((= () V863) (simple-error (error-to-string V862))) ((and (cons? V863) (cons? (hd V863))) (do (shen.remtype (hd (hd V863))) (shen.unwind-types V862 (tl V863)))) (true (shen.sys-error shen.unwind-types)))) -(defun shen.remtype (V852) (set shen.*signedfuncs* (shen.removetype V852 (value shen.*signedfuncs*)))) +(defun shen.remtype (V864) (set shen.*signedfuncs* (shen.removetype V864 (value shen.*signedfuncs*)))) -(defun shen.removetype (V857 V858) (cond ((= () V858) ()) ((and (cons? V858) (and (cons? (hd V858)) (= (hd (hd V858)) V857))) (shen.removetype (hd (hd V858)) (tl V858))) ((cons? V858) (cons (hd V858) (shen.removetype V857 (tl V858)))) (true (shen.sys-error shen.removetype)))) +(defun shen.removetype (V869 V870) (cond ((= () V870) ()) ((and (cons? V870) (and (cons? (hd V870)) (= (hd (hd V870)) V869))) (shen.removetype (hd (hd V870)) (tl V870))) ((cons? V870) (cons (hd V870) (shen.removetype V869 (tl V870)))) (true (shen.sys-error shen.removetype)))) -(defun shen. (V864) (let Result (let Parse_shen. (shen. V864) (if (not (= (fail) Parse_shen.)) (let Parse_ ( Parse_shen.) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V876) (let Result (let Parse_shen. (shen. V876) (if (not (= (fail) Parse_shen.)) (let Parse_ ( Parse_shen.) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun write-to-file (V865 V866) (let Stream (open V865 out) (let String (if (string? V866) (shen.app V866 " +(defun write-to-file (V877 V878) (let Stream (open V877 out) (let String (if (string? V878) (shen.app V878 " -" shen.a) (shen.app V866 " +" shen.a) (shen.app V878 " -" shen.s)) (let Write (pr String Stream) (let Close (close Stream) V866))))) +" shen.s)) (let Write (pr String Stream) (let Close (close Stream) V878))))) diff --git a/shen/klambda/macros.kl b/shen/klambda/macros.kl index 956ee5c..c6a8f24 100644 --- a/shen/klambda/macros.kl +++ b/shen/klambda/macros.kl @@ -47,33 +47,33 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun macroexpand (V868) (let Y (shen.compose (value *macros*) V868) (if (= V868 Y) V868 (shen.walk (lambda V867 (macroexpand V867)) Y)))) +"(defun macroexpand (V882) (let Y (shen.compose (value *macros*) V882) (if (= V882 Y) V882 (shen.walk (lambda X879 (macroexpand X879)) Y)))) (set *macros* (cons shen.timer-macro (cons shen.cases-macro (cons shen.abs-macro (cons shen.put/get-macro (cons shen.compile-macro (cons shen.datatype-macro (cons shen.let-macro (cons shen.assoc-macro (cons shen.make-string-macro (cons shen.output-macro (cons shen.input-macro (cons shen.error-macro (cons shen.prolog-macro (cons shen.synonyms-macro (cons shen.nl-macro (cons shen.@s-macro (cons shen.defprolog-macro (cons shen.function-macro ()))))))))))))))))))) -(defun shen.error-macro (V869) (cond ((and (cons? V869) (and (= error (hd V869)) (cons? (tl V869)))) (cons simple-error (cons (shen.mkstr (hd (tl V869)) (tl (tl V869))) ()))) (true V869))) +(defun shen.error-macro (V883) (cond ((and (cons? V883) (and (= error (hd V883)) (cons? (tl V883)))) (cons simple-error (cons (shen.mkstr (hd (tl V883)) (tl (tl V883))) ()))) (true V883))) -(defun shen.output-macro (V870) (cond ((and (cons? V870) (and (= output (hd V870)) (cons? (tl V870)))) (cons shen.prhush (cons (shen.mkstr (hd (tl V870)) (tl (tl V870))) (cons (cons stoutput ()) ())))) ((and (cons? V870) (and (= pr (hd V870)) (and (cons? (tl V870)) (= () (tl (tl V870)))))) (cons pr (cons (hd (tl V870)) (cons (cons stoutput ()) ())))) (true V870))) +(defun shen.output-macro (V884) (cond ((and (cons? V884) (and (= output (hd V884)) (cons? (tl V884)))) (cons shen.prhush (cons (shen.mkstr (hd (tl V884)) (tl (tl V884))) (cons (cons stoutput ()) ())))) ((and (cons? V884) (and (= pr (hd V884)) (and (cons? (tl V884)) (= () (tl (tl V884)))))) (cons pr (cons (hd (tl V884)) (cons (cons stoutput ()) ())))) (true V884))) -(defun shen.make-string-macro (V871) (cond ((and (cons? V871) (and (= make-string (hd V871)) (cons? (tl V871)))) (shen.mkstr (hd (tl V871)) (tl (tl V871)))) (true V871))) +(defun shen.make-string-macro (V885) (cond ((and (cons? V885) (and (= make-string (hd V885)) (cons? (tl V885)))) (shen.mkstr (hd (tl V885)) (tl (tl V885)))) (true V885))) -(defun shen.input-macro (V872) (cond ((and (cons? V872) (and (= lineread (hd V872)) (= () (tl V872)))) (cons lineread (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input (hd V872)) (= () (tl V872)))) (cons input (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= read (hd V872)) (= () (tl V872)))) (cons read (cons (cons stinput ()) ()))) ((and (cons? V872) (and (= input+ (hd V872)) (and (cons? (tl V872)) (= () (tl (tl V872)))))) (cons input+ (cons (hd (tl V872)) (cons (cons stinput ()) ())))) ((and (cons? V872) (and (= read-byte (hd V872)) (= () (tl V872)))) (cons read-byte (cons (cons stinput ()) ()))) (true V872))) +(defun shen.input-macro (V886) (cond ((and (cons? V886) (and (= lineread (hd V886)) (= () (tl V886)))) (cons lineread (cons (cons stinput ()) ()))) ((and (cons? V886) (and (= input (hd V886)) (= () (tl V886)))) (cons input (cons (cons stinput ()) ()))) ((and (cons? V886) (and (= read (hd V886)) (= () (tl V886)))) (cons read (cons (cons stinput ()) ()))) ((and (cons? V886) (and (= input+ (hd V886)) (and (cons? (tl V886)) (= () (tl (tl V886)))))) (cons input+ (cons (hd (tl V886)) (cons (cons stinput ()) ())))) ((and (cons? V886) (and (= read-byte (hd V886)) (= () (tl V886)))) (cons read-byte (cons (cons stinput ()) ()))) (true V886))) -(defun shen.compose (V873 V874) (cond ((= () V873) V874) ((cons? V873) (shen.compose (tl V873) ((hd V873) V874))) (true (shen.sys-error shen.compose)))) +(defun shen.compose (V887 V888) (cond ((= () V887) V888) ((cons? V887) (shen.compose (tl V887) ((hd V887) V888))) (true (shen.sys-error shen.compose)))) -(defun shen.compile-macro (V875) (cond ((and (cons? V875) (and (= compile (hd V875)) (and (cons? (tl V875)) (and (cons? (tl (tl V875))) (= () (tl (tl (tl V875)))))))) (cons compile (cons (hd (tl V875)) (cons (hd (tl (tl V875))) (cons (cons lambda (cons E (cons (cons if (cons (cons cons? (cons E ())) (cons (cons error (cons "parse error here: ~S~%" (cons E ()))) (cons (cons error (cons "parse error~%" ())) ())))) ()))) ()))))) (true V875))) +(defun shen.compile-macro (V889) (cond ((and (cons? V889) (and (= compile (hd V889)) (and (cons? (tl V889)) (and (cons? (tl (tl V889))) (= () (tl (tl (tl V889)))))))) (cons compile (cons (hd (tl V889)) (cons (hd (tl (tl V889))) (cons (cons lambda (cons E (cons (cons if (cons (cons cons? (cons E ())) (cons (cons error (cons "parse error here: ~S~%" (cons E ()))) (cons (cons error (cons "parse error~%" ())) ())))) ()))) ()))))) (true V889))) -(defun shen.prolog-macro (V876) (cond ((and (cons? V876) (= prolog? (hd V876))) (let F (gensym shen.f) (let Receive (shen.receive-terms (tl V876)) (let PrologDef (eval (append (cons defprolog (cons F ())) (append Receive (append (cons <-- ()) (append (shen.pass-literals (tl V876)) (cons ; ())))))) (let Query (cons F (append Receive (cons (cons shen.start-new-prolog-process ()) (cons (cons freeze (cons true ())) ())))) Query))))) (true V876))) +(defun shen.prolog-macro (V890) (cond ((and (cons? V890) (= prolog? (hd V890))) (let F (gensym shen.f) (let Receive (shen.receive-terms (tl V890)) (let PrologDef (eval (append (cons defprolog (cons F ())) (append Receive (append (cons <-- ()) (append (shen.pass-literals (tl V890)) (cons ; ())))))) (let Query (cons F (append Receive (cons (cons shen.start-new-prolog-process ()) (cons (cons freeze (cons true ())) ())))) Query))))) (true V890))) -(defun shen.receive-terms (V881) (cond ((= () V881) ()) ((and (cons? V881) (and (cons? (hd V881)) (and (= receive (hd (hd V881))) (and (cons? (tl (hd V881))) (= () (tl (tl (hd V881)))))))) (cons (hd (tl (hd V881))) (shen.receive-terms (tl V881)))) ((cons? V881) (shen.receive-terms (tl V881))) (true (shen.sys-error shen.receive-terms)))) +(defun shen.receive-terms (V895) (cond ((= () V895) ()) ((and (cons? V895) (and (cons? (hd V895)) (and (= receive (hd (hd V895))) (and (cons? (tl (hd V895))) (= () (tl (tl (hd V895)))))))) (cons (hd (tl (hd V895))) (shen.receive-terms (tl V895)))) ((cons? V895) (shen.receive-terms (tl V895))) (true (shen.sys-error shen.receive-terms)))) -(defun shen.pass-literals (V884) (cond ((= () V884) ()) ((and (cons? V884) (and (cons? (hd V884)) (and (= receive (hd (hd V884))) (and (cons? (tl (hd V884))) (= () (tl (tl (hd V884)))))))) (shen.pass-literals (tl V884))) ((cons? V884) (cons (hd V884) (shen.pass-literals (tl V884)))) (true (shen.sys-error shen.pass-literals)))) +(defun shen.pass-literals (V898) (cond ((= () V898) ()) ((and (cons? V898) (and (cons? (hd V898)) (and (= receive (hd (hd V898))) (and (cons? (tl (hd V898))) (= () (tl (tl (hd V898)))))))) (shen.pass-literals (tl V898))) ((cons? V898) (cons (hd V898) (shen.pass-literals (tl V898)))) (true (shen.sys-error shen.pass-literals)))) -(defun shen.defprolog-macro (V885) (cond ((and (cons? V885) (and (= defprolog (hd V885)) (cons? (tl V885)))) (compile shen. (tl V885) (lambda Y (shen.prolog-error (hd (tl V885)) Y)))) (true V885))) +(defun shen.defprolog-macro (V899) (cond ((and (cons? V899) (and (= defprolog (hd V899)) (cons? (tl V899)))) (compile (lambda X880 (shen. X880)) (tl V899) (lambda Y (shen.prolog-error (hd (tl V899)) Y)))) (true V899))) -(defun shen.datatype-macro (V886) (cond ((and (cons? V886) (and (= datatype (hd V886)) (cons? (tl V886)))) (cons shen.process-datatype (cons (shen.intern-type (hd (tl V886))) (cons (cons compile (cons (cons function (cons shen. ())) (cons (shen.rcons_form (tl (tl V886))) (cons (cons function (cons shen.datatype-error ())) ())))) ())))) (true V886))) +(defun shen.datatype-macro (V900) (cond ((and (cons? V900) (and (= datatype (hd V900)) (cons? (tl V900)))) (cons shen.process-datatype (cons (shen.intern-type (hd (tl V900))) (cons (cons compile (cons (cons function (cons shen. ())) (cons (shen.rcons_form (tl (tl V900))) (cons (cons function (cons shen.datatype-error ())) ())))) ())))) (true V900))) -(defun shen.intern-type (V887) (intern (cn "type#" (str V887)))) +(defun shen.intern-type (V901) (intern (cn "type#" (str V901)))) "(defcc := [define | ];) @@ -91,36 +91,38 @@ (defcc := [[walk [function macroexpand] ]];)" -(defun shen.@s-macro (V888) (cond ((and (cons? V888) (and (= @s (hd V888)) (and (cons? (tl V888)) (and (cons? (tl (tl V888))) (cons? (tl (tl (tl V888)))))))) (cons @s (cons (hd (tl V888)) (cons (shen.@s-macro (cons @s (tl (tl V888)))) ())))) ((and (cons? V888) (and (= @s (hd V888)) (and (cons? (tl V888)) (and (cons? (tl (tl V888))) (and (= () (tl (tl (tl V888)))) (string? (hd (tl V888)))))))) (let E (explode (hd (tl V888))) (if (> (length E) 1) (shen.@s-macro (cons @s (append E (tl (tl V888))))) V888))) (true V888))) +(defun shen.@s-macro (V902) (cond ((and (cons? V902) (and (= @s (hd V902)) (and (cons? (tl V902)) (and (cons? (tl (tl V902))) (cons? (tl (tl (tl V902)))))))) (cons @s (cons (hd (tl V902)) (cons (shen.@s-macro (cons @s (tl (tl V902)))) ())))) ((and (cons? V902) (and (= @s (hd V902)) (and (cons? (tl V902)) (and (cons? (tl (tl V902))) (and (= () (tl (tl (tl V902)))) (string? (hd (tl V902)))))))) (let E (explode (hd (tl V902))) (if (> (length E) 1) (shen.@s-macro (cons @s (append E (tl (tl V902))))) V902))) (true V902))) -(defun shen.synonyms-macro (V889) (cond ((and (cons? V889) (= synonyms (hd V889))) (cons shen.synonyms-help (cons (shen.rcons_form (tl V889)) ()))) (true V889))) +(defun shen.synonyms-macro (V903) (cond ((and (cons? V903) (= synonyms (hd V903))) (cons shen.synonyms-help (cons (shen.rcons_form (shen.curry-synonyms (tl V903))) ()))) (true V903))) -(defun shen.nl-macro (V890) (cond ((and (cons? V890) (and (= nl (hd V890)) (= () (tl V890)))) (cons nl (cons 1 ()))) (true V890))) +(defun shen.curry-synonyms (V904) (map (lambda X881 (shen.curry-type X881)) V904)) -(defun shen.assoc-macro (V891) (cond ((and (cons? V891) (and (cons? (tl V891)) (and (cons? (tl (tl V891))) (and (cons? (tl (tl (tl V891)))) (element? (hd V891) (cons @p (cons @v (cons append (cons and (cons or (cons + (cons * (cons do ()))))))))))))) (cons (hd V891) (cons (hd (tl V891)) (cons (shen.assoc-macro (cons (hd V891) (tl (tl V891)))) ())))) (true V891))) +(defun shen.nl-macro (V905) (cond ((and (cons? V905) (and (= nl (hd V905)) (= () (tl V905)))) (cons nl (cons 1 ()))) (true V905))) -(defun shen.let-macro (V892) (cond ((and (cons? V892) (and (= let (hd V892)) (and (cons? (tl V892)) (and (cons? (tl (tl V892))) (and (cons? (tl (tl (tl V892)))) (cons? (tl (tl (tl (tl V892)))))))))) (cons let (cons (hd (tl V892)) (cons (hd (tl (tl V892))) (cons (shen.let-macro (cons let (tl (tl (tl V892))))) ()))))) (true V892))) +(defun shen.assoc-macro (V906) (cond ((and (cons? V906) (and (cons? (tl V906)) (and (cons? (tl (tl V906))) (and (cons? (tl (tl (tl V906)))) (element? (hd V906) (cons @p (cons @v (cons append (cons and (cons or (cons + (cons * (cons do ()))))))))))))) (cons (hd V906) (cons (hd (tl V906)) (cons (shen.assoc-macro (cons (hd V906) (tl (tl V906)))) ())))) (true V906))) -(defun shen.abs-macro (V893) (cond ((and (cons? V893) (and (= /. (hd V893)) (and (cons? (tl V893)) (and (cons? (tl (tl V893))) (cons? (tl (tl (tl V893)))))))) (cons lambda (cons (hd (tl V893)) (cons (shen.abs-macro (cons /. (tl (tl V893)))) ())))) ((and (cons? V893) (and (= /. (hd V893)) (and (cons? (tl V893)) (and (cons? (tl (tl V893))) (= () (tl (tl (tl V893)))))))) (cons lambda (tl V893))) (true V893))) +(defun shen.let-macro (V907) (cond ((and (cons? V907) (and (= let (hd V907)) (and (cons? (tl V907)) (and (cons? (tl (tl V907))) (and (cons? (tl (tl (tl V907)))) (cons? (tl (tl (tl (tl V907)))))))))) (cons let (cons (hd (tl V907)) (cons (hd (tl (tl V907))) (cons (shen.let-macro (cons let (tl (tl (tl V907))))) ()))))) (true V907))) -(defun shen.cases-macro (V896) (cond ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (and (= true (hd (tl V896))) (cons? (tl (tl V896))))))) (hd (tl (tl V896)))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (and (cons? (tl (tl V896))) (= () (tl (tl (tl V896)))))))) (cons if (cons (hd (tl V896)) (cons (hd (tl (tl V896))) (cons (cons simple-error (cons "error: cases exhausted" ())) ()))))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (cons? (tl (tl V896)))))) (cons if (cons (hd (tl V896)) (cons (hd (tl (tl V896))) (cons (shen.cases-macro (cons cases (tl (tl (tl V896))))) ()))))) ((and (cons? V896) (and (= cases (hd V896)) (and (cons? (tl V896)) (= () (tl (tl V896)))))) (simple-error "error: odd number of case elements -")) (true V896))) +(defun shen.abs-macro (V908) (cond ((and (cons? V908) (and (= /. (hd V908)) (and (cons? (tl V908)) (and (cons? (tl (tl V908))) (cons? (tl (tl (tl V908)))))))) (cons lambda (cons (hd (tl V908)) (cons (shen.abs-macro (cons /. (tl (tl V908)))) ())))) ((and (cons? V908) (and (= /. (hd V908)) (and (cons? (tl V908)) (and (cons? (tl (tl V908))) (= () (tl (tl (tl V908)))))))) (cons lambda (tl V908))) (true V908))) -(defun shen.timer-macro (V897) (cond ((and (cons? V897) (and (= time (hd V897)) (and (cons? (tl V897)) (= () (tl (tl V897)))))) (shen.let-macro (cons let (cons Start (cons (cons get-time (cons run ())) (cons Result (cons (hd (tl V897)) (cons Finish (cons (cons get-time (cons run ())) (cons Time (cons (cons - (cons Finish (cons Start ()))) (cons Message (cons (cons shen.prhush (cons (cons cn (cons " +(defun shen.cases-macro (V911) (cond ((and (cons? V911) (and (= cases (hd V911)) (and (cons? (tl V911)) (and (= true (hd (tl V911))) (cons? (tl (tl V911))))))) (hd (tl (tl V911)))) ((and (cons? V911) (and (= cases (hd V911)) (and (cons? (tl V911)) (and (cons? (tl (tl V911))) (= () (tl (tl (tl V911)))))))) (cons if (cons (hd (tl V911)) (cons (hd (tl (tl V911))) (cons (cons simple-error (cons "error: cases exhausted" ())) ()))))) ((and (cons? V911) (and (= cases (hd V911)) (and (cons? (tl V911)) (cons? (tl (tl V911)))))) (cons if (cons (hd (tl V911)) (cons (hd (tl (tl V911))) (cons (shen.cases-macro (cons cases (tl (tl (tl V911))))) ()))))) ((and (cons? V911) (and (= cases (hd V911)) (and (cons? (tl V911)) (= () (tl (tl V911)))))) (simple-error "error: odd number of case elements +")) (true V911))) + +(defun shen.timer-macro (V912) (cond ((and (cons? V912) (and (= time (hd V912)) (and (cons? (tl V912)) (= () (tl (tl V912)))))) (shen.let-macro (cons let (cons Start (cons (cons get-time (cons run ())) (cons Result (cons (hd (tl V912)) (cons Finish (cons (cons get-time (cons run ())) (cons Time (cons (cons - (cons Finish (cons Start ()))) (cons Message (cons (cons shen.prhush (cons (cons cn (cons " run time: " (cons (cons cn (cons (cons str (cons Time ())) (cons " secs -" ()))) ()))) (cons (cons stoutput ()) ()))) (cons Result ())))))))))))))) (true V897))) +" ()))) ()))) (cons (cons stoutput ()) ()))) (cons Result ())))))))))))))) (true V912))) -(defun shen.tuple-up (V898) (cond ((cons? V898) (cons @p (cons (hd V898) (cons (shen.tuple-up (tl V898)) ())))) (true V898))) +(defun shen.tuple-up (V913) (cond ((cons? V913) (cons @p (cons (hd V913) (cons (shen.tuple-up (tl V913)) ())))) (true V913))) -(defun shen.put/get-macro (V899) (cond ((and (cons? V899) (and (= put (hd V899)) (and (cons? (tl V899)) (and (cons? (tl (tl V899))) (and (cons? (tl (tl (tl V899)))) (= () (tl (tl (tl (tl V899)))))))))) (cons put (cons (hd (tl V899)) (cons (hd (tl (tl V899))) (cons (hd (tl (tl (tl V899)))) (cons (cons value (cons *property-vector* ())) ())))))) ((and (cons? V899) (and (= get (hd V899)) (and (cons? (tl V899)) (and (cons? (tl (tl V899))) (= () (tl (tl (tl V899)))))))) (cons get (cons (hd (tl V899)) (cons (hd (tl (tl V899))) (cons (cons value (cons *property-vector* ())) ()))))) (true V899))) +(defun shen.put/get-macro (V914) (cond ((and (cons? V914) (and (= put (hd V914)) (and (cons? (tl V914)) (and (cons? (tl (tl V914))) (and (cons? (tl (tl (tl V914)))) (= () (tl (tl (tl (tl V914)))))))))) (cons put (cons (hd (tl V914)) (cons (hd (tl (tl V914))) (cons (hd (tl (tl (tl V914)))) (cons (cons value (cons *property-vector* ())) ())))))) ((and (cons? V914) (and (= get (hd V914)) (and (cons? (tl V914)) (and (cons? (tl (tl V914))) (= () (tl (tl (tl V914)))))))) (cons get (cons (hd (tl V914)) (cons (hd (tl (tl V914))) (cons (cons value (cons *property-vector* ())) ()))))) (true V914))) -(defun shen.function-macro (V900) (cond ((and (cons? V900) (and (= function (hd V900)) (and (cons? (tl V900)) (= () (tl (tl V900)))))) (shen.function-abstraction (hd (tl V900)) (arity (hd (tl V900))))) (true V900))) +(defun shen.function-macro (V915) (cond ((and (cons? V915) (and (= function (hd V915)) (and (cons? (tl V915)) (= () (tl (tl V915)))))) (shen.function-abstraction (hd (tl V915)) (arity (hd (tl V915))))) (true V915))) -(defun shen.function-abstraction (V901 V902) (cond ((= 0 V902) (cons freeze (cons V901 ()))) ((= -1 V902) V901) (true (shen.function-abstraction-help V901 V902 ())))) +(defun shen.function-abstraction (V916 V917) (cond ((= 0 V917) (cons freeze (cons V916 ()))) ((= -1 V917) V916) (true (shen.function-abstraction-help V916 V917 ())))) -(defun shen.function-abstraction-help (V903 V904 V905) (cond ((= 0 V904) (cons V903 V905)) (true (let X (gensym V) (cons /. (cons X (cons (shen.function-abstraction-help V903 (- V904 1) (append V905 (cons X ()))) ()))))))) +(defun shen.function-abstraction-help (V918 V919 V920) (cond ((= 0 V919) (cons V918 V920)) (true (let X (gensym V) (cons /. (cons X (cons (shen.function-abstraction-help V918 (- V919 1) (append V920 (cons X ()))) ()))))))) -(defun undefmacro (V906) (do (set *macros* (remove V906 (value *macros*))) V906)) +(defun undefmacro (V921) (do (set *macros* (remove V921 (value *macros*))) V921)) diff --git a/shen/klambda/prolog.kl b/shen/klambda/prolog.kl index b934969..57be073 100644 --- a/shen/klambda/prolog.kl +++ b/shen/klambda/prolog.kl @@ -47,206 +47,206 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen. (V913) (let Result (let Parse_shen. (shen. V913) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (hd (shen.prolog->shen (map (lambda Parse_X (shen.insert-predicate (shen.hdtl Parse_shen.) Parse_X)) (shen.hdtl Parse_shen.))))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +"(defun shen. (V937) (let Result (let Parse_shen. (shen. V937) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (hd (shen.prolog->shen (map (lambda Parse_X (shen.insert-predicate (shen.hdtl Parse_shen.) Parse_X)) (shen.hdtl Parse_shen.))))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.prolog-error (V920 V921) (cond ((and (cons? V921) (and (cons? (tl V921)) (= () (tl (tl V921))))) (simple-error (cn "prolog syntax error in " (shen.app V920 (cn " here: +(defun shen.prolog-error (V944 V945) (cond ((and (cons? V945) (and (cons? (tl V945)) (= () (tl (tl V945))))) (simple-error (cn "prolog syntax error in " (shen.app V944 (cn " here: - " (shen.app (shen.next-50 50 (hd V921)) " -" shen.a)) shen.a)))) (true (simple-error (cn "prolog syntax error in " (shen.app V920 " + " (shen.app (shen.next-50 50 (hd V945)) " +" shen.a)) shen.a)))) (true (simple-error (cn "prolog syntax error in " (shen.app V944 " " shen.a)))))) -(defun shen.next-50 (V926 V927) (cond ((= () V927) "") ((= 0 V926) "") ((cons? V927) (cn (shen.decons-string (hd V927)) (shen.next-50 (- V926 1) (tl V927)))) (true (shen.sys-error shen.next-50)))) +(defun shen.next-50 (V950 V951) (cond ((= () V951) "") ((= 0 V950) "") ((cons? V951) (cn (shen.decons-string (hd V951)) (shen.next-50 (- V950 1) (tl V951)))) (true (shen.sys-error shen.next-50)))) -(defun shen.decons-string (V928) (cond ((and (cons? V928) (and (= cons (hd V928)) (and (cons? (tl V928)) (and (cons? (tl (tl V928))) (= () (tl (tl (tl V928)))))))) (shen.app (shen.eval-cons V928) " " shen.s)) (true (shen.app V928 " " shen.r)))) +(defun shen.decons-string (V952) (cond ((and (cons? V952) (and (= cons (hd V952)) (and (cons? (tl V952)) (and (cons? (tl (tl V952))) (= () (tl (tl (tl V952)))))))) (shen.app (shen.eval-cons V952) " " shen.s)) (true (shen.app V952 " " shen.r)))) -(defun shen.insert-predicate (V929 V930) (cond ((and (cons? V930) (and (cons? (tl V930)) (= () (tl (tl V930))))) (cons (cons V929 (hd V930)) (cons :- (tl V930)))) (true (shen.sys-error shen.insert-predicate)))) +(defun shen.insert-predicate (V953 V954) (cond ((and (cons? V954) (and (cons? (tl V954)) (= () (tl (tl V954))))) (cons (cons V953 (hd V954)) (cons :- (tl V954)))) (true (shen.sys-error shen.insert-predicate)))) -(defun shen. (V935) (let Result (if (cons? (hd V935)) (let Parse_X (hd (hd V935)) (shen.pair (hd (shen.pair (tl (hd V935)) (shen.hdtl V935))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V959) (let Result (if (cons? (hd V959)) (let Parse_X (hd (hd V959)) (shen.pair (hd (shen.pair (tl (hd V959)) (shen.hdtl V959))) Parse_X)) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V940) (let Result (let Parse_shen. (shen. V940) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V940) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V964) (let Result (let Parse_shen. (shen. V964) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V964) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V945) (let Result (let Parse_shen. (shen. V945) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <-- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V969) (let Result (let Parse_shen. (shen. V969) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= <-- (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V950) (let Result (let Parse_shen. (shen. V950) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V950) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V974) (let Result (let Parse_shen. (shen. V974) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V974) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V955) (let Result (if (cons? (hd V955)) (let Parse_X (hd (hd V955)) (if (and (not (= <-- Parse_X)) (shen.legitimate-term? Parse_X)) (shen.pair (hd (shen.pair (tl (hd V955)) (shen.hdtl V955))) (shen.eval-cons Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V979) (let Result (if (cons? (hd V979)) (let Parse_X (hd (hd V979)) (if (and (not (= <-- Parse_X)) (shen.legitimate-term? Parse_X)) (shen.pair (hd (shen.pair (tl (hd V979)) (shen.hdtl V979))) (shen.eval-cons Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.legitimate-term? (V960) (cond ((and (cons? V960) (and (= cons (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (= () (tl (tl (tl V960)))))))) (and (shen.legitimate-term? (hd (tl V960))) (shen.legitimate-term? (hd (tl (tl V960)))))) ((and (cons? V960) (and (= mode (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (and (= + (hd (tl (tl V960)))) (= () (tl (tl (tl V960))))))))) (shen.legitimate-term? (hd (tl V960)))) ((and (cons? V960) (and (= mode (hd V960)) (and (cons? (tl V960)) (and (cons? (tl (tl V960))) (and (= - (hd (tl (tl V960)))) (= () (tl (tl (tl V960))))))))) (shen.legitimate-term? (hd (tl V960)))) ((cons? V960) false) (true true))) +(defun shen.legitimate-term? (V984) (cond ((and (cons? V984) (and (= cons (hd V984)) (and (cons? (tl V984)) (and (cons? (tl (tl V984))) (= () (tl (tl (tl V984)))))))) (and (shen.legitimate-term? (hd (tl V984))) (shen.legitimate-term? (hd (tl (tl V984)))))) ((and (cons? V984) (and (= mode (hd V984)) (and (cons? (tl V984)) (and (cons? (tl (tl V984))) (and (= + (hd (tl (tl V984)))) (= () (tl (tl (tl V984))))))))) (shen.legitimate-term? (hd (tl V984)))) ((and (cons? V984) (and (= mode (hd V984)) (and (cons? (tl V984)) (and (cons? (tl (tl V984))) (and (= - (hd (tl (tl V984)))) (= () (tl (tl (tl V984))))))))) (shen.legitimate-term? (hd (tl V984)))) ((cons? V984) false) (true true))) -(defun shen.eval-cons (V961) (cond ((and (cons? V961) (and (= cons (hd V961)) (and (cons? (tl V961)) (and (cons? (tl (tl V961))) (= () (tl (tl (tl V961)))))))) (cons (shen.eval-cons (hd (tl V961))) (shen.eval-cons (hd (tl (tl V961)))))) ((and (cons? V961) (and (= mode (hd V961)) (and (cons? (tl V961)) (and (cons? (tl (tl V961))) (= () (tl (tl (tl V961)))))))) (cons mode (cons (shen.eval-cons (hd (tl V961))) (tl (tl V961))))) (true V961))) +(defun shen.eval-cons (V985) (cond ((and (cons? V985) (and (= cons (hd V985)) (and (cons? (tl V985)) (and (cons? (tl (tl V985))) (= () (tl (tl (tl V985)))))))) (cons (shen.eval-cons (hd (tl V985))) (shen.eval-cons (hd (tl (tl V985)))))) ((and (cons? V985) (and (= mode (hd V985)) (and (cons? (tl V985)) (and (cons? (tl (tl V985))) (= () (tl (tl (tl V985)))))))) (cons mode (cons (shen.eval-cons (hd (tl V985))) (tl (tl V985))))) (true V985))) -(defun shen. (V966) (let Result (let Parse_shen. (shen. V966) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V966) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V990) (let Result (let Parse_shen. (shen. V990) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V990) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) (append (shen.hdtl Parse_) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V971) (let Result (if (and (cons? (hd V971)) (= ! (hd (hd V971)))) (shen.pair (hd (shen.pair (tl (hd V971)) (shen.hdtl V971))) (cons cut (cons (intern "Throwcontrol") ()))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V971)) (let Parse_X (hd (hd V971)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V971)) (shen.hdtl V971))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V995) (let Result (if (and (cons? (hd V995)) (= ! (hd (hd V995)))) (shen.pair (hd (shen.pair (tl (hd V995)) (shen.hdtl V995))) (cons cut (cons (intern "Throwcontrol") ()))) (fail)) (if (= Result (fail)) (let Result (if (cons? (hd V995)) (let Parse_X (hd (hd V995)) (if (cons? Parse_X) (shen.pair (hd (shen.pair (tl (hd V995)) (shen.hdtl V995))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V976) (let Result (if (cons? (hd V976)) (let Parse_X (hd (hd V976)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V976)) (shen.hdtl V976))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1000) (let Result (if (cons? (hd V1000)) (let Parse_X (hd (hd V1000)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1000)) (shen.hdtl V1000))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun cut (V977 V978 V979) (let Result (thaw V979) (if (= Result false) V977 Result))) +(defun cut (V1001 V1002 V1003) (let Result (thaw V1003) (if (= Result false) V1001 Result))) -(defun shen.insert_modes (V980) (cond ((and (cons? V980) (and (= mode (hd V980)) (and (cons? (tl V980)) (and (cons? (tl (tl V980))) (= () (tl (tl (tl V980)))))))) V980) ((= () V980) ()) ((cons? V980) (cons (cons mode (cons (hd V980) (cons + ()))) (cons mode (cons (shen.insert_modes (tl V980)) (cons - ()))))) (true V980))) +(defun shen.insert_modes (V1004) (cond ((and (cons? V1004) (and (= mode (hd V1004)) (and (cons? (tl V1004)) (and (cons? (tl (tl V1004))) (= () (tl (tl (tl V1004)))))))) V1004) ((= () V1004) ()) ((cons? V1004) (cons (cons mode (cons (hd V1004) (cons + ()))) (cons mode (cons (shen.insert_modes (tl V1004)) (cons - ()))))) (true V1004))) -(defun shen.s-prolog (V981) (map (lambda V907 (eval V907)) (shen.prolog->shen V981))) +(defun shen.s-prolog (V1005) (map (lambda X922 (eval X922)) (shen.prolog->shen V1005))) -(defun shen.prolog->shen (V982) (map shen.compile_prolog_procedure (shen.group_clauses (map shen.s-prolog_clause (mapcan shen.head_abstraction V982))))) +(defun shen.prolog->shen (V1006) (map (lambda X923 (shen.compile_prolog_procedure X923)) (shen.group_clauses (map (lambda X924 (shen.s-prolog_clause X924)) (mapcan (lambda X925 (shen.head_abstraction X925)) V1006))))) -(defun shen.s-prolog_clause (V983) (cond ((and (cons? V983) (and (cons? (tl V983)) (and (= :- (hd (tl V983))) (and (cons? (tl (tl V983))) (= () (tl (tl (tl V983)))))))) (cons (hd V983) (cons :- (cons (map shen.s-prolog_literal (hd (tl (tl V983)))) ())))) (true (shen.sys-error shen.s-prolog_clause)))) +(defun shen.s-prolog_clause (V1007) (cond ((and (cons? V1007) (and (cons? (tl V1007)) (and (= :- (hd (tl V1007))) (and (cons? (tl (tl V1007))) (= () (tl (tl (tl V1007)))))))) (cons (hd V1007) (cons :- (cons (map (lambda X926 (shen.s-prolog_literal X926)) (hd (tl (tl V1007)))) ())))) (true (shen.sys-error shen.s-prolog_clause)))) -(defun shen.head_abstraction (V984) (cond ((and (cons? V984) (and (cons? (tl V984)) (and (= :- (hd (tl V984))) (and (cons? (tl (tl V984))) (and (= () (tl (tl (tl V984)))) (< (shen.complexity_head (hd V984)) (value shen.*maxcomplexity*))))))) (cons V984 ())) ((and (cons? V984) (and (cons? (hd V984)) (and (cons? (tl V984)) (and (= :- (hd (tl V984))) (and (cons? (tl (tl V984))) (= () (tl (tl (tl V984))))))))) (let Terms (map (lambda Y (gensym V)) (tl (hd V984))) (let XTerms (shen.rcons_form (shen.remove_modes (tl (hd V984)))) (let Literal (cons unify (cons (shen.cons_form Terms) (cons XTerms ()))) (let Clause (cons (cons (hd (hd V984)) Terms) (cons :- (cons (cons Literal (hd (tl (tl V984)))) ()))) (cons Clause ())))))) (true (shen.sys-error shen.head_abstraction)))) +(defun shen.head_abstraction (V1008) (cond ((and (cons? V1008) (and (cons? (tl V1008)) (and (= :- (hd (tl V1008))) (and (cons? (tl (tl V1008))) (and (= () (tl (tl (tl V1008)))) (< (shen.complexity_head (hd V1008)) (value shen.*maxcomplexity*))))))) (cons V1008 ())) ((and (cons? V1008) (and (cons? (hd V1008)) (and (cons? (tl V1008)) (and (= :- (hd (tl V1008))) (and (cons? (tl (tl V1008))) (= () (tl (tl (tl V1008))))))))) (let Terms (map (lambda Y (gensym V)) (tl (hd V1008))) (let XTerms (shen.rcons_form (shen.remove_modes (tl (hd V1008)))) (let Literal (cons unify (cons (shen.cons_form Terms) (cons XTerms ()))) (let Clause (cons (cons (hd (hd V1008)) Terms) (cons :- (cons (cons Literal (hd (tl (tl V1008)))) ()))) (cons Clause ())))))) (true (shen.sys-error shen.head_abstraction)))) -(defun shen.complexity_head (V989) (cond ((cons? V989) (shen.product (map shen.complexity (tl V989)))) (true (shen.sys-error shen.complexity_head)))) +(defun shen.complexity_head (V1013) (cond ((cons? V1013) (shen.product (map (lambda X927 (shen.complexity X927)) (tl V1013)))) (true (shen.sys-error shen.complexity_head)))) -(defun shen.complexity (V997) (cond ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (= mode (hd (hd (tl V997)))) (and (cons? (tl (hd (tl V997)))) (and (cons? (tl (tl (hd (tl V997))))) (and (= () (tl (tl (tl (hd (tl V997)))))) (and (cons? (tl (tl V997))) (= () (tl (tl (tl V997))))))))))))) (shen.complexity (hd (tl V997)))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (cons? (tl (tl V997))) (and (= + (hd (tl (tl V997)))) (= () (tl (tl (tl V997)))))))))) (* 2 (* (shen.complexity (cons mode (cons (hd (hd (tl V997))) (tl (tl V997))))) (shen.complexity (cons mode (cons (tl (hd (tl V997))) (tl (tl V997)))))))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (hd (tl V997))) (and (cons? (tl (tl V997))) (and (= - (hd (tl (tl V997)))) (= () (tl (tl (tl V997)))))))))) (* (shen.complexity (cons mode (cons (hd (hd (tl V997))) (tl (tl V997))))) (shen.complexity (cons mode (cons (tl (hd (tl V997))) (tl (tl V997))))))) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= () (tl (tl (tl V997)))) (variable? (hd (tl V997)))))))) 1) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= + (hd (tl (tl V997)))) (= () (tl (tl (tl V997))))))))) 2) ((and (cons? V997) (and (= mode (hd V997)) (and (cons? (tl V997)) (and (cons? (tl (tl V997))) (and (= - (hd (tl (tl V997)))) (= () (tl (tl (tl V997))))))))) 1) (true (shen.complexity (cons mode (cons V997 (cons + ()))))))) +(defun shen.complexity (V1021) (cond ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (hd (tl V1021))) (and (= mode (hd (hd (tl V1021)))) (and (cons? (tl (hd (tl V1021)))) (and (cons? (tl (tl (hd (tl V1021))))) (and (= () (tl (tl (tl (hd (tl V1021)))))) (and (cons? (tl (tl V1021))) (= () (tl (tl (tl V1021))))))))))))) (shen.complexity (hd (tl V1021)))) ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (hd (tl V1021))) (and (cons? (tl (tl V1021))) (and (= + (hd (tl (tl V1021)))) (= () (tl (tl (tl V1021)))))))))) (* 2 (* (shen.complexity (cons mode (cons (hd (hd (tl V1021))) (tl (tl V1021))))) (shen.complexity (cons mode (cons (tl (hd (tl V1021))) (tl (tl V1021)))))))) ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (hd (tl V1021))) (and (cons? (tl (tl V1021))) (and (= - (hd (tl (tl V1021)))) (= () (tl (tl (tl V1021)))))))))) (* (shen.complexity (cons mode (cons (hd (hd (tl V1021))) (tl (tl V1021))))) (shen.complexity (cons mode (cons (tl (hd (tl V1021))) (tl (tl V1021))))))) ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (tl (tl V1021))) (and (= () (tl (tl (tl V1021)))) (variable? (hd (tl V1021)))))))) 1) ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (tl (tl V1021))) (and (= + (hd (tl (tl V1021)))) (= () (tl (tl (tl V1021))))))))) 2) ((and (cons? V1021) (and (= mode (hd V1021)) (and (cons? (tl V1021)) (and (cons? (tl (tl V1021))) (and (= - (hd (tl (tl V1021)))) (= () (tl (tl (tl V1021))))))))) 1) (true (shen.complexity (cons mode (cons V1021 (cons + ()))))))) -(defun shen.product (V998) (cond ((= () V998) 1) ((cons? V998) (* (hd V998) (shen.product (tl V998)))) (true (shen.sys-error shen.product)))) +(defun shen.product (V1022) (cond ((= () V1022) 1) ((cons? V1022) (* (hd V1022) (shen.product (tl V1022)))) (true (shen.sys-error shen.product)))) -(defun shen.s-prolog_literal (V999) (cond ((and (cons? V999) (and (= is (hd V999)) (and (cons? (tl V999)) (and (cons? (tl (tl V999))) (= () (tl (tl (tl V999)))))))) (cons bind (cons (hd (tl V999)) (cons (shen.insert_deref (hd (tl (tl V999)))) ())))) ((and (cons? V999) (and (= when (hd V999)) (and (cons? (tl V999)) (= () (tl (tl V999)))))) (cons fwhen (cons (shen.insert_deref (hd (tl V999))) ()))) ((and (cons? V999) (and (= bind (hd V999)) (and (cons? (tl V999)) (and (cons? (tl (tl V999))) (= () (tl (tl (tl V999)))))))) (cons bind (cons (hd (tl V999)) (cons (shen.insert_lazyderef (hd (tl (tl V999)))) ())))) ((and (cons? V999) (and (= fwhen (hd V999)) (and (cons? (tl V999)) (= () (tl (tl V999)))))) (cons fwhen (cons (shen.insert_lazyderef (hd (tl V999))) ()))) ((cons? V999) (cons (shen.m_prolog_to_s-prolog_predicate (hd V999)) (tl V999))) (true (shen.sys-error shen.s-prolog_literal)))) +(defun shen.s-prolog_literal (V1023) (cond ((and (cons? V1023) (and (= is (hd V1023)) (and (cons? (tl V1023)) (and (cons? (tl (tl V1023))) (= () (tl (tl (tl V1023)))))))) (cons bind (cons (hd (tl V1023)) (cons (shen.insert_deref (hd (tl (tl V1023)))) ())))) ((and (cons? V1023) (and (= when (hd V1023)) (and (cons? (tl V1023)) (= () (tl (tl V1023)))))) (cons fwhen (cons (shen.insert_deref (hd (tl V1023))) ()))) ((and (cons? V1023) (and (= bind (hd V1023)) (and (cons? (tl V1023)) (and (cons? (tl (tl V1023))) (= () (tl (tl (tl V1023)))))))) (cons bind (cons (hd (tl V1023)) (cons (shen.insert_lazyderef (hd (tl (tl V1023)))) ())))) ((and (cons? V1023) (and (= fwhen (hd V1023)) (and (cons? (tl V1023)) (= () (tl (tl V1023)))))) (cons fwhen (cons (shen.insert_lazyderef (hd (tl V1023))) ()))) ((cons? V1023) (cons (shen.m_prolog_to_s-prolog_predicate (hd V1023)) (tl V1023))) (true (shen.sys-error shen.s-prolog_literal)))) -(defun shen.insert_deref (V1000) (cond ((variable? V1000) (cons shen.deref (cons V1000 (cons ProcessN ())))) ((cons? V1000) (cons (shen.insert_deref (hd V1000)) (shen.insert_deref (tl V1000)))) (true V1000))) +(defun shen.insert_deref (V1024) (cond ((variable? V1024) (cons shen.deref (cons V1024 (cons ProcessN ())))) ((cons? V1024) (cons (shen.insert_deref (hd V1024)) (shen.insert_deref (tl V1024)))) (true V1024))) -(defun shen.insert_lazyderef (V1001) (cond ((variable? V1001) (cons shen.lazyderef (cons V1001 (cons ProcessN ())))) ((cons? V1001) (cons (shen.insert_lazyderef (hd V1001)) (shen.insert_lazyderef (tl V1001)))) (true V1001))) +(defun shen.insert_lazyderef (V1025) (cond ((variable? V1025) (cons shen.lazyderef (cons V1025 (cons ProcessN ())))) ((cons? V1025) (cons (shen.insert_lazyderef (hd V1025)) (shen.insert_lazyderef (tl V1025)))) (true V1025))) -(defun shen.m_prolog_to_s-prolog_predicate (V1002) (cond ((= = V1002) unify) ((= =! V1002) unify!) ((= == V1002) identical) (true V1002))) +(defun shen.m_prolog_to_s-prolog_predicate (V1026) (cond ((= = V1026) unify) ((= =! V1026) unify!) ((= == V1026) identical) (true V1026))) -(defun shen.group_clauses (V1003) (cond ((= () V1003) ()) ((cons? V1003) (let Group (shen.collect (lambda X (shen.same_predicate? (hd V1003) X)) V1003) (let Rest (difference V1003 Group) (cons Group (shen.group_clauses Rest))))) (true (shen.sys-error shen.group_clauses)))) +(defun shen.group_clauses (V1027) (cond ((= () V1027) ()) ((cons? V1027) (let Group (shen.collect (lambda X (shen.same_predicate? (hd V1027) X)) V1027) (let Rest (difference V1027 Group) (cons Group (shen.group_clauses Rest))))) (true (shen.sys-error shen.group_clauses)))) -(defun shen.collect (V1006 V1007) (cond ((= () V1007) ()) ((cons? V1007) (if (V1006 (hd V1007)) (cons (hd V1007) (shen.collect V1006 (tl V1007))) (shen.collect V1006 (tl V1007)))) (true (shen.sys-error shen.collect)))) +(defun shen.collect (V1030 V1031) (cond ((= () V1031) ()) ((cons? V1031) (if (V1030 (hd V1031)) (cons (hd V1031) (shen.collect V1030 (tl V1031))) (shen.collect V1030 (tl V1031)))) (true (shen.sys-error shen.collect)))) -(defun shen.same_predicate? (V1024 V1025) (cond ((and (cons? V1024) (and (cons? (hd V1024)) (and (cons? V1025) (cons? (hd V1025))))) (= (hd (hd V1024)) (hd (hd V1025)))) (true (shen.sys-error shen.same_predicate?)))) +(defun shen.same_predicate? (V1048 V1049) (cond ((and (cons? V1048) (and (cons? (hd V1048)) (and (cons? V1049) (cons? (hd V1049))))) (= (hd (hd V1048)) (hd (hd V1049)))) (true (shen.sys-error shen.same_predicate?)))) -(defun shen.compile_prolog_procedure (V1026) (let F (shen.procedure_name V1026) (let Shen (shen.clauses-to-shen F V1026) Shen))) +(defun shen.compile_prolog_procedure (V1050) (let F (shen.procedure_name V1050) (let Shen (shen.clauses-to-shen F V1050) Shen))) -(defun shen.procedure_name (V1039) (cond ((and (cons? V1039) (and (cons? (hd V1039)) (cons? (hd (hd V1039))))) (hd (hd (hd V1039)))) (true (shen.sys-error shen.procedure_name)))) +(defun shen.procedure_name (V1063) (cond ((and (cons? V1063) (and (cons? (hd V1063)) (cons? (hd (hd V1063))))) (hd (hd (hd V1063)))) (true (shen.sys-error shen.procedure_name)))) -(defun shen.clauses-to-shen (V1040 V1041) (let Linear (map shen.linearise-clause V1041) (let Arity (shen.prolog-aritycheck V1040 (map (lambda V908 (head V908)) V1041)) (let Parameters (shen.parameters Arity) (let AUM_instructions (map (lambda X (shen.aum X Parameters)) Linear) (let Code (shen.catch-cut (shen.nest-disjunct (map shen.aum_to_shen AUM_instructions))) (let ShenDef (cons define (cons V1040 (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) ShenDef))))))) +(defun shen.clauses-to-shen (V1064 V1065) (let Linear (map (lambda X928 (shen.linearise-clause X928)) V1065) (let Arity (shen.prolog-aritycheck V1064 (map (lambda X929 (head X929)) V1065)) (let Parameters (shen.parameters Arity) (let AUM_instructions (map (lambda X (shen.aum X Parameters)) Linear) (let Code (shen.catch-cut (shen.nest-disjunct (map (lambda X930 (shen.aum_to_shen X930)) AUM_instructions))) (let ShenDef (cons define (cons V1064 (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) ShenDef))))))) -(defun shen.catch-cut (V1042) (cond ((not (shen.occurs? cut V1042)) V1042) (true (cons let (cons Throwcontrol (cons (cons shen.catchpoint ()) (cons (cons shen.cutpoint (cons Throwcontrol (cons V1042 ()))) ()))))))) +(defun shen.catch-cut (V1066) (cond ((not (shen.occurs? cut V1066)) V1066) (true (cons let (cons Throwcontrol (cons (cons shen.catchpoint ()) (cons (cons shen.cutpoint (cons Throwcontrol (cons V1066 ()))) ()))))))) (defun shen.catchpoint () (set shen.*catch* (+ 1 (value shen.*catch*)))) -(defun shen.cutpoint (V1047 V1048) (cond ((= V1048 V1047) false) (true V1048))) +(defun shen.cutpoint (V1071 V1072) (cond ((= V1072 V1071) false) (true V1072))) -(defun shen.nest-disjunct (V1050) (cond ((and (cons? V1050) (= () (tl V1050))) (hd V1050)) ((cons? V1050) (shen.lisp-or (hd V1050) (shen.nest-disjunct (tl V1050)))) (true (shen.sys-error shen.nest-disjunct)))) +(defun shen.nest-disjunct (V1074) (cond ((and (cons? V1074) (= () (tl V1074))) (hd V1074)) ((cons? V1074) (shen.lisp-or (hd V1074) (shen.nest-disjunct (tl V1074)))) (true (shen.sys-error shen.nest-disjunct)))) -(defun shen.lisp-or (V1051 V1052) (cons let (cons Case (cons V1051 (cons (cons if (cons (cons = (cons Case (cons false ()))) (cons V1052 (cons Case ())))) ()))))) +(defun shen.lisp-or (V1075 V1076) (cons let (cons Case (cons V1075 (cons (cons if (cons (cons = (cons Case (cons false ()))) (cons V1076 (cons Case ())))) ()))))) -(defun shen.prolog-aritycheck (V1055 V1056) (cond ((and (cons? V1056) (= () (tl V1056))) (- (length (hd V1056)) 1)) ((and (cons? V1056) (cons? (tl V1056))) (if (= (length (hd V1056)) (length (hd (tl V1056)))) (shen.prolog-aritycheck V1055 (tl V1056)) (simple-error (cn "arity error in prolog procedure " (shen.app (cons V1055 ()) " +(defun shen.prolog-aritycheck (V1079 V1080) (cond ((and (cons? V1080) (= () (tl V1080))) (- (length (hd V1080)) 1)) ((and (cons? V1080) (cons? (tl V1080))) (if (= (length (hd V1080)) (length (hd (tl V1080)))) (shen.prolog-aritycheck V1079 (tl V1080)) (simple-error (cn "arity error in prolog procedure " (shen.app (cons V1079 ()) " " shen.a))))) (true (shen.sys-error shen.prolog-aritycheck)))) -(defun shen.linearise-clause (V1057) (cond ((and (cons? V1057) (and (cons? (tl V1057)) (and (= :- (hd (tl V1057))) (and (cons? (tl (tl V1057))) (= () (tl (tl (tl V1057)))))))) (let Linear (shen.linearise (cons (hd V1057) (tl (tl V1057)))) (shen.clause_form Linear))) (true (shen.sys-error shen.linearise-clause)))) +(defun shen.linearise-clause (V1081) (cond ((and (cons? V1081) (and (cons? (tl V1081)) (and (= :- (hd (tl V1081))) (and (cons? (tl (tl V1081))) (= () (tl (tl (tl V1081)))))))) (let Linear (shen.linearise (cons (hd V1081) (tl (tl V1081)))) (shen.clause_form Linear))) (true (shen.sys-error shen.linearise-clause)))) -(defun shen.clause_form (V1058) (cond ((and (cons? V1058) (and (cons? (tl V1058)) (= () (tl (tl V1058))))) (cons (shen.explicit_modes (hd V1058)) (cons :- (cons (shen.cf_help (hd (tl V1058))) ())))) (true (shen.sys-error shen.clause_form)))) +(defun shen.clause_form (V1082) (cond ((and (cons? V1082) (and (cons? (tl V1082)) (= () (tl (tl V1082))))) (cons (shen.explicit_modes (hd V1082)) (cons :- (cons (shen.cf_help (hd (tl V1082))) ())))) (true (shen.sys-error shen.clause_form)))) -(defun shen.explicit_modes (V1059) (cond ((cons? V1059) (cons (hd V1059) (map shen.em_help (tl V1059)))) (true (shen.sys-error shen.explicit_modes)))) +(defun shen.explicit_modes (V1083) (cond ((cons? V1083) (cons (hd V1083) (map (lambda X931 (shen.em_help X931)) (tl V1083)))) (true (shen.sys-error shen.explicit_modes)))) -(defun shen.em_help (V1060) (cond ((and (cons? V1060) (and (= mode (hd V1060)) (and (cons? (tl V1060)) (and (cons? (tl (tl V1060))) (= () (tl (tl (tl V1060)))))))) V1060) (true (cons mode (cons V1060 (cons + ())))))) +(defun shen.em_help (V1084) (cond ((and (cons? V1084) (and (= mode (hd V1084)) (and (cons? (tl V1084)) (and (cons? (tl (tl V1084))) (= () (tl (tl (tl V1084)))))))) V1084) (true (cons mode (cons V1084 (cons + ())))))) -(defun shen.cf_help (V1061) (cond ((and (cons? V1061) (and (= where (hd V1061)) (and (cons? (tl V1061)) (and (cons? (hd (tl V1061))) (and (= = (hd (hd (tl V1061)))) (and (cons? (tl (hd (tl V1061)))) (and (cons? (tl (tl (hd (tl V1061))))) (and (= () (tl (tl (tl (hd (tl V1061)))))) (and (cons? (tl (tl V1061))) (= () (tl (tl (tl V1061))))))))))))) (cons (cons (if (value shen.*occurs*) unify! unify) (tl (hd (tl V1061)))) (shen.cf_help (hd (tl (tl V1061)))))) (true V1061))) +(defun shen.cf_help (V1085) (cond ((and (cons? V1085) (and (= where (hd V1085)) (and (cons? (tl V1085)) (and (cons? (hd (tl V1085))) (and (= = (hd (hd (tl V1085)))) (and (cons? (tl (hd (tl V1085)))) (and (cons? (tl (tl (hd (tl V1085))))) (and (= () (tl (tl (tl (hd (tl V1085)))))) (and (cons? (tl (tl V1085))) (= () (tl (tl (tl V1085))))))))))))) (cons (cons (if (value shen.*occurs*) unify! unify) (tl (hd (tl V1085)))) (shen.cf_help (hd (tl (tl V1085)))))) (true V1085))) -(defun occurs-check (V1066) (cond ((= + V1066) (set shen.*occurs* true)) ((= - V1066) (set shen.*occurs* false)) (true (simple-error "occurs-check expects + or - +(defun occurs-check (V1090) (cond ((= + V1090) (set shen.*occurs* true)) ((= - V1090) (set shen.*occurs* false)) (true (simple-error "occurs-check expects + or - ")))) -(defun shen.aum (V1067 V1068) (cond ((and (cons? V1067) (and (cons? (hd V1067)) (and (cons? (tl V1067)) (and (= :- (hd (tl V1067))) (and (cons? (tl (tl V1067))) (= () (tl (tl (tl V1067))))))))) (let MuApplication (shen.make_mu_application (cons shen.mu (cons (tl (hd V1067)) (cons (shen.continuation_call (tl (hd V1067)) (hd (tl (tl V1067)))) ()))) V1068) (shen.mu_reduction MuApplication +))) (true (shen.sys-error shen.aum)))) +(defun shen.aum (V1091 V1092) (cond ((and (cons? V1091) (and (cons? (hd V1091)) (and (cons? (tl V1091)) (and (= :- (hd (tl V1091))) (and (cons? (tl (tl V1091))) (= () (tl (tl (tl V1091))))))))) (let MuApplication (shen.make_mu_application (cons shen.mu (cons (tl (hd V1091)) (cons (shen.continuation_call (tl (hd V1091)) (hd (tl (tl V1091)))) ()))) V1092) (shen.mu_reduction MuApplication +))) (true (shen.sys-error shen.aum)))) -(defun shen.continuation_call (V1069 V1070) (let VTerms (cons ProcessN (shen.extract_vars V1069)) (let VBody (shen.extract_vars V1070) (let Free (remove Throwcontrol (difference VBody VTerms)) (shen.cc_help Free V1070))))) +(defun shen.continuation_call (V1093 V1094) (let VTerms (cons ProcessN (shen.extract_vars V1093)) (let VBody (shen.extract_vars V1094) (let Free (remove Throwcontrol (difference VBody VTerms)) (shen.cc_help Free V1094))))) -(defun remove (V1071 V1072) (shen.remove-h V1071 V1072 ())) +(defun remove (V1095 V1096) (shen.remove-h V1095 V1096 ())) -(defun shen.remove-h (V1075 V1076 V1077) (cond ((= () V1076) (reverse V1077)) ((and (cons? V1076) (= (hd V1076) V1075)) (shen.remove-h (hd V1076) (tl V1076) V1077)) ((cons? V1076) (shen.remove-h V1075 (tl V1076) (cons (hd V1076) V1077))) (true (shen.sys-error shen.remove-h)))) +(defun shen.remove-h (V1099 V1100 V1101) (cond ((= () V1100) (reverse V1101)) ((and (cons? V1100) (= (hd V1100) V1099)) (shen.remove-h (hd V1100) (tl V1100) V1101)) ((cons? V1100) (shen.remove-h V1099 (tl V1100) (cons (hd V1100) V1101))) (true (shen.sys-error shen.remove-h)))) -(defun shen.cc_help (V1079 V1080) (cond ((and (= () V1079) (= () V1080)) (cons shen.pop (cons shen.the (cons shen.stack ())))) ((= () V1080) (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1079 (cons and (cons shen.then (cons (cons shen.pop (cons shen.the (cons shen.stack ()))) ()))))))))) ((= () V1079) (cons call (cons shen.the (cons shen.continuation (cons V1080 ()))))) (true (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1079 (cons and (cons shen.then (cons (cons call (cons shen.the (cons shen.continuation (cons V1080 ())))) ()))))))))))) +(defun shen.cc_help (V1103 V1104) (cond ((and (= () V1103) (= () V1104)) (cons shen.pop (cons shen.the (cons shen.stack ())))) ((= () V1104) (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1103 (cons and (cons shen.then (cons (cons shen.pop (cons shen.the (cons shen.stack ()))) ()))))))))) ((= () V1103) (cons call (cons shen.the (cons shen.continuation (cons V1104 ()))))) (true (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons V1103 (cons and (cons shen.then (cons (cons call (cons shen.the (cons shen.continuation (cons V1104 ())))) ()))))))))))) -(defun shen.make_mu_application (V1081 V1082) (cond ((and (cons? V1081) (and (= shen.mu (hd V1081)) (and (cons? (tl V1081)) (and (= () (hd (tl V1081))) (and (cons? (tl (tl V1081))) (and (= () (tl (tl (tl V1081)))) (= () V1082))))))) (hd (tl (tl V1081)))) ((and (cons? V1081) (and (= shen.mu (hd V1081)) (and (cons? (tl V1081)) (and (cons? (hd (tl V1081))) (and (cons? (tl (tl V1081))) (and (= () (tl (tl (tl V1081)))) (cons? V1082))))))) (cons (cons shen.mu (cons (hd (hd (tl V1081))) (cons (shen.make_mu_application (cons shen.mu (cons (tl (hd (tl V1081))) (tl (tl V1081)))) (tl V1082)) ()))) (cons (hd V1082) ()))) (true (shen.sys-error shen.make_mu_application)))) +(defun shen.make_mu_application (V1105 V1106) (cond ((and (cons? V1105) (and (= shen.mu (hd V1105)) (and (cons? (tl V1105)) (and (= () (hd (tl V1105))) (and (cons? (tl (tl V1105))) (and (= () (tl (tl (tl V1105)))) (= () V1106))))))) (hd (tl (tl V1105)))) ((and (cons? V1105) (and (= shen.mu (hd V1105)) (and (cons? (tl V1105)) (and (cons? (hd (tl V1105))) (and (cons? (tl (tl V1105))) (and (= () (tl (tl (tl V1105)))) (cons? V1106))))))) (cons (cons shen.mu (cons (hd (hd (tl V1105))) (cons (shen.make_mu_application (cons shen.mu (cons (tl (hd (tl V1105))) (tl (tl V1105)))) (tl V1106)) ()))) (cons (hd V1106) ()))) (true (shen.sys-error shen.make_mu_application)))) -(defun shen.mu_reduction (V1089 V1090) (cond ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (= mode (hd (hd (tl (hd V1089))))) (and (cons? (tl (hd (tl (hd V1089))))) (and (cons? (tl (tl (hd (tl (hd V1089)))))) (and (= () (tl (tl (tl (hd (tl (hd V1089))))))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (= () (tl (tl V1089))))))))))))))) (shen.mu_reduction (cons (cons shen.mu (cons (hd (tl (hd (tl (hd V1089))))) (tl (tl (hd V1089))))) (tl V1089)) (hd (tl (tl (hd (tl (hd V1089)))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= _ (hd (tl (hd V1089)))))))))))) (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090)) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (shen.ephemeral_variable? (hd (tl (hd V1089))) (hd (tl V1089))))))))))) (subst (hd (tl V1089)) (hd (tl (hd V1089))) (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (variable? (hd (tl (hd V1089)))))))))))) (cons let (cons (hd (tl (hd V1089))) (cons shen.be (cons (hd (tl V1089)) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) V1090) ()))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (and (= - V1090) (shen.prolog_constant? (hd (tl (hd V1089))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1089))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (and (= + V1090) (shen.prolog_constant? (hd (tl (hd V1089))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1089))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (hd (tl (hd V1089))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) ())))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= - V1090)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1089)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1089)))) (tl (tl (hd V1089))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1089) (and (cons? (hd V1089)) (and (= shen.mu (hd (hd V1089))) (and (cons? (tl (hd V1089))) (and (cons? (hd (tl (hd V1089)))) (and (cons? (tl (tl (hd V1089)))) (and (= () (tl (tl (tl (hd V1089))))) (and (cons? (tl V1089)) (and (= () (tl (tl V1089))) (= + V1090)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1089))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1089)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1089)))) (tl (tl (hd V1089))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (shen.extract_vars (hd (tl (hd V1089)))) (cons and (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (shen.rcons_form (shen.remove_modes (hd (tl (hd V1089))))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1089)))) +) ())))))) ())))))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) (true V1089))) +(defun shen.mu_reduction (V1113 V1114) (cond ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (hd (tl (hd V1113)))) (and (= mode (hd (hd (tl (hd V1113))))) (and (cons? (tl (hd (tl (hd V1113))))) (and (cons? (tl (tl (hd (tl (hd V1113)))))) (and (= () (tl (tl (tl (hd (tl (hd V1113))))))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (= () (tl (tl V1113))))))))))))))) (shen.mu_reduction (cons (cons shen.mu (cons (hd (tl (hd (tl (hd V1113))))) (tl (tl (hd V1113))))) (tl V1113)) (hd (tl (tl (hd (tl (hd V1113)))))))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (= _ (hd (tl (hd V1113)))))))))))) (shen.mu_reduction (hd (tl (tl (hd V1113)))) V1114)) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (shen.ephemeral_variable? (hd (tl (hd V1113))) (hd (tl V1113))))))))))) (subst (hd (tl V1113)) (hd (tl (hd V1113))) (shen.mu_reduction (hd (tl (tl (hd V1113)))) V1114))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (variable? (hd (tl (hd V1113)))))))))))) (cons let (cons (hd (tl (hd V1113))) (cons shen.be (cons (hd (tl V1113)) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1113)))) V1114) ()))))))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (and (= - V1114) (shen.prolog_constant? (hd (tl (hd V1113))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1113))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1113))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1113)))) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (and (= + V1114) (shen.prolog_constant? (hd (tl (hd V1113))))))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1113))))) (cons in (cons (cons if (cons (cons Z (cons is (cons identical (cons shen.to (cons (hd (tl (hd V1113))) ()))))) (cons shen.then (cons (shen.mu_reduction (hd (tl (tl (hd V1113)))) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (hd (tl (hd V1113))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1113)))) +) ())))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (hd (tl (hd V1113)))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (= - V1114)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1113))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1113)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1113)))) (tl (tl (hd V1113))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) -) (cons shen.else (cons shen.failed! ())))))) ())))))))) ((and (cons? V1113) (and (cons? (hd V1113)) (and (= shen.mu (hd (hd V1113))) (and (cons? (tl (hd V1113))) (and (cons? (hd (tl (hd V1113)))) (and (cons? (tl (tl (hd V1113)))) (and (= () (tl (tl (tl (hd V1113))))) (and (cons? (tl V1113)) (and (= () (tl (tl V1113))) (= + V1114)))))))))) (let Z (gensym V) (cons let (cons Z (cons shen.be (cons (cons shen.the (cons shen.result (cons shen.of (cons shen.dereferencing (tl V1113))))) (cons in (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.non-empty (cons list ()))))) (cons shen.then (cons (shen.mu_reduction (cons (cons shen.mu (cons (hd (hd (tl (hd V1113)))) (cons (cons (cons shen.mu (cons (tl (hd (tl (hd V1113)))) (tl (tl (hd V1113))))) (cons (cons shen.the (cons tail (cons shen.of (cons Z ())))) ())) ()))) (cons (cons shen.the (cons head (cons shen.of (cons Z ())))) ())) +) (cons shen.else (cons (cons if (cons (cons Z (cons is (cons shen.a (cons shen.variable ())))) (cons shen.then (cons (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (shen.extract_vars (hd (tl (hd V1113)))) (cons and (cons shen.then (cons (cons bind (cons Z (cons shen.to (cons (shen.rcons_form (shen.remove_modes (hd (tl (hd V1113))))) (cons in (cons (shen.mu_reduction (hd (tl (tl (hd V1113)))) +) ())))))) ())))))))) (cons shen.else (cons shen.failed! ())))))) ())))))) ())))))))) (true V1113))) -(defun shen.rcons_form (V1091) (cond ((cons? V1091) (cons cons (cons (shen.rcons_form (hd V1091)) (cons (shen.rcons_form (tl V1091)) ())))) (true V1091))) +(defun shen.rcons_form (V1115) (cond ((cons? V1115) (cons cons (cons (shen.rcons_form (hd V1115)) (cons (shen.rcons_form (tl V1115)) ())))) (true V1115))) -(defun shen.remove_modes (V1092) (cond ((and (cons? V1092) (and (= mode (hd V1092)) (and (cons? (tl V1092)) (and (cons? (tl (tl V1092))) (and (= + (hd (tl (tl V1092)))) (= () (tl (tl (tl V1092))))))))) (shen.remove_modes (hd (tl V1092)))) ((and (cons? V1092) (and (= mode (hd V1092)) (and (cons? (tl V1092)) (and (cons? (tl (tl V1092))) (and (= - (hd (tl (tl V1092)))) (= () (tl (tl (tl V1092))))))))) (shen.remove_modes (hd (tl V1092)))) ((cons? V1092) (cons (shen.remove_modes (hd V1092)) (shen.remove_modes (tl V1092)))) (true V1092))) +(defun shen.remove_modes (V1116) (cond ((and (cons? V1116) (and (= mode (hd V1116)) (and (cons? (tl V1116)) (and (cons? (tl (tl V1116))) (and (= + (hd (tl (tl V1116)))) (= () (tl (tl (tl V1116))))))))) (shen.remove_modes (hd (tl V1116)))) ((and (cons? V1116) (and (= mode (hd V1116)) (and (cons? (tl V1116)) (and (cons? (tl (tl V1116))) (and (= - (hd (tl (tl V1116)))) (= () (tl (tl (tl V1116))))))))) (shen.remove_modes (hd (tl V1116)))) ((cons? V1116) (cons (shen.remove_modes (hd V1116)) (shen.remove_modes (tl V1116)))) (true V1116))) -(defun shen.ephemeral_variable? (V1093 V1094) (and (variable? V1093) (variable? V1094))) +(defun shen.ephemeral_variable? (V1117 V1118) (and (variable? V1117) (variable? V1118))) -(defun shen.prolog_constant? (V1103) (cond ((cons? V1103) false) (true true))) +(defun shen.prolog_constant? (V1127) (cond ((cons? V1127) false) (true true))) -(defun shen.aum_to_shen (V1104) (cond ((and (cons? V1104) (and (= let (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.be (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= in (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons let (cons (hd (tl V1104)) (cons (shen.aum_to_shen (hd (tl (tl (tl V1104))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) ()))))) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= shen.result (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.dereferencing (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl (tl V1104))))))))))))))) (cons shen.lazyderef (cons (shen.aum_to_shen (hd (tl (tl (tl (tl V1104)))))) (cons ProcessN ())))) ((and (cons? V1104) (and (= if (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.then (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= shen.else (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons if (cons (shen.aum_to_shen (hd (tl V1104))) (cons (shen.aum_to_shen (hd (tl (tl (tl V1104))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) ()))))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.a (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.variable (hd (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons shen.pvar? (cons (hd V1104) ()))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.a (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.non-empty (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= list (hd (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl V1104))))))))))))))) (cons cons? (cons (hd V1104) ()))) ((and (cons? V1104) (and (= shen.rename (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.variables (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= in (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= () (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (and (= and (hd (tl (tl (tl (tl (tl V1104))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1104))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1104)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1104)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1104)))))))))))))))))))))))) (shen.aum_to_shen (hd (tl (tl (tl (tl (tl (tl (tl V1104)))))))))) ((and (cons? V1104) (and (= shen.rename (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.variables (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= in (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (and (cons? (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (and (= and (hd (tl (tl (tl (tl (tl V1104))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1104))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1104)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1104)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1104)))))))))))))))))))))))) (cons let (cons (hd (hd (tl (tl (tl (tl V1104)))))) (cons (cons shen.newpv (cons ProcessN ())) (cons (shen.aum_to_shen (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (tl (hd (tl (tl (tl (tl V1104)))))) (tl (tl (tl (tl (tl V1104))))))))))) ()))))) ((and (cons? V1104) (and (= bind (hd V1104)) (and (cons? (tl V1104)) (and (cons? (tl (tl V1104))) (and (= shen.to (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (cons? (tl (tl (tl (tl V1104))))) (and (= in (hd (tl (tl (tl (tl V1104)))))) (and (cons? (tl (tl (tl (tl (tl V1104)))))) (= () (tl (tl (tl (tl (tl (tl V1104)))))))))))))))) (cons do (cons (cons shen.bindv (cons (hd (tl V1104)) (cons (shen.chwild (hd (tl (tl (tl V1104))))) (cons ProcessN ())))) (cons (cons let (cons Result (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1104))))))) (cons (cons do (cons (cons shen.unbindv (cons (hd (tl V1104)) (cons ProcessN ()))) (cons Result ()))) ())))) ())))) ((and (cons? V1104) (and (cons? (tl V1104)) (and (= is (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= identical (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (and (= shen.to (hd (tl (tl (tl V1104))))) (and (cons? (tl (tl (tl (tl V1104))))) (= () (tl (tl (tl (tl (tl V1104)))))))))))))) (cons = (cons (hd (tl (tl (tl (tl V1104))))) (cons (hd V1104) ())))) ((= shen.failed! V1104) false) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= head (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons hd (tl (tl (tl V1104))))) ((and (cons? V1104) (and (= shen.the (hd V1104)) (and (cons? (tl V1104)) (and (= tail (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.of (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons tl (tl (tl (tl V1104))))) ((and (cons? V1104) (and (= shen.pop (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.stack (hd (tl (tl V1104)))) (= () (tl (tl (tl V1104)))))))))) (cons do (cons (cons shen.incinfs ()) (cons (cons thaw (cons Continuation ())) ())))) ((and (cons? V1104) (and (= call (hd V1104)) (and (cons? (tl V1104)) (and (= shen.the (hd (tl V1104))) (and (cons? (tl (tl V1104))) (and (= shen.continuation (hd (tl (tl V1104)))) (and (cons? (tl (tl (tl V1104)))) (= () (tl (tl (tl (tl V1104)))))))))))) (cons do (cons (cons shen.incinfs ()) (cons (shen.call_the_continuation (shen.chwild (hd (tl (tl (tl V1104))))) ProcessN Continuation) ())))) (true V1104))) +(defun shen.aum_to_shen (V1128) (cond ((and (cons? V1128) (and (= let (hd V1128)) (and (cons? (tl V1128)) (and (cons? (tl (tl V1128))) (and (= shen.be (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (cons? (tl (tl (tl (tl V1128))))) (and (= in (hd (tl (tl (tl (tl V1128)))))) (and (cons? (tl (tl (tl (tl (tl V1128)))))) (= () (tl (tl (tl (tl (tl (tl V1128)))))))))))))))) (cons let (cons (hd (tl V1128)) (cons (shen.aum_to_shen (hd (tl (tl (tl V1128))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1128))))))) ()))))) ((and (cons? V1128) (and (= shen.the (hd V1128)) (and (cons? (tl V1128)) (and (= shen.result (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.of (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= shen.dereferencing (hd (tl (tl (tl V1128))))) (and (cons? (tl (tl (tl (tl V1128))))) (= () (tl (tl (tl (tl (tl V1128))))))))))))))) (cons shen.lazyderef (cons (shen.aum_to_shen (hd (tl (tl (tl (tl V1128)))))) (cons ProcessN ())))) ((and (cons? V1128) (and (= if (hd V1128)) (and (cons? (tl V1128)) (and (cons? (tl (tl V1128))) (and (= shen.then (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (cons? (tl (tl (tl (tl V1128))))) (and (= shen.else (hd (tl (tl (tl (tl V1128)))))) (and (cons? (tl (tl (tl (tl (tl V1128)))))) (= () (tl (tl (tl (tl (tl (tl V1128)))))))))))))))) (cons if (cons (shen.aum_to_shen (hd (tl V1128))) (cons (shen.aum_to_shen (hd (tl (tl (tl V1128))))) (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1128))))))) ()))))) ((and (cons? V1128) (and (cons? (tl V1128)) (and (= is (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.a (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= shen.variable (hd (tl (tl (tl V1128))))) (= () (tl (tl (tl (tl V1128)))))))))))) (cons shen.pvar? (cons (hd V1128) ()))) ((and (cons? V1128) (and (cons? (tl V1128)) (and (= is (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.a (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= shen.non-empty (hd (tl (tl (tl V1128))))) (and (cons? (tl (tl (tl (tl V1128))))) (and (= list (hd (tl (tl (tl (tl V1128)))))) (= () (tl (tl (tl (tl (tl V1128))))))))))))))) (cons cons? (cons (hd V1128) ()))) ((and (cons? V1128) (and (= shen.rename (hd V1128)) (and (cons? (tl V1128)) (and (= shen.the (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.variables (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= in (hd (tl (tl (tl V1128))))) (and (cons? (tl (tl (tl (tl V1128))))) (and (= () (hd (tl (tl (tl (tl V1128)))))) (and (cons? (tl (tl (tl (tl (tl V1128)))))) (and (= and (hd (tl (tl (tl (tl (tl V1128))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1128))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1128)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1128)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1128)))))))))))))))))))))))) (shen.aum_to_shen (hd (tl (tl (tl (tl (tl (tl (tl V1128)))))))))) ((and (cons? V1128) (and (= shen.rename (hd V1128)) (and (cons? (tl V1128)) (and (= shen.the (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.variables (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= in (hd (tl (tl (tl V1128))))) (and (cons? (tl (tl (tl (tl V1128))))) (and (cons? (hd (tl (tl (tl (tl V1128)))))) (and (cons? (tl (tl (tl (tl (tl V1128)))))) (and (= and (hd (tl (tl (tl (tl (tl V1128))))))) (and (cons? (tl (tl (tl (tl (tl (tl V1128))))))) (and (= shen.then (hd (tl (tl (tl (tl (tl (tl V1128)))))))) (and (cons? (tl (tl (tl (tl (tl (tl (tl V1128)))))))) (= () (tl (tl (tl (tl (tl (tl (tl (tl V1128)))))))))))))))))))))))) (cons let (cons (hd (hd (tl (tl (tl (tl V1128)))))) (cons (cons shen.newpv (cons ProcessN ())) (cons (shen.aum_to_shen (cons shen.rename (cons shen.the (cons shen.variables (cons in (cons (tl (hd (tl (tl (tl (tl V1128)))))) (tl (tl (tl (tl (tl V1128))))))))))) ()))))) ((and (cons? V1128) (and (= bind (hd V1128)) (and (cons? (tl V1128)) (and (cons? (tl (tl V1128))) (and (= shen.to (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (cons? (tl (tl (tl (tl V1128))))) (and (= in (hd (tl (tl (tl (tl V1128)))))) (and (cons? (tl (tl (tl (tl (tl V1128)))))) (= () (tl (tl (tl (tl (tl (tl V1128)))))))))))))))) (cons do (cons (cons shen.bindv (cons (hd (tl V1128)) (cons (shen.chwild (hd (tl (tl (tl V1128))))) (cons ProcessN ())))) (cons (cons let (cons Result (cons (shen.aum_to_shen (hd (tl (tl (tl (tl (tl V1128))))))) (cons (cons do (cons (cons shen.unbindv (cons (hd (tl V1128)) (cons ProcessN ()))) (cons Result ()))) ())))) ())))) ((and (cons? V1128) (and (cons? (tl V1128)) (and (= is (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= identical (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (and (= shen.to (hd (tl (tl (tl V1128))))) (and (cons? (tl (tl (tl (tl V1128))))) (= () (tl (tl (tl (tl (tl V1128)))))))))))))) (cons = (cons (hd (tl (tl (tl (tl V1128))))) (cons (hd V1128) ())))) ((= shen.failed! V1128) false) ((and (cons? V1128) (and (= shen.the (hd V1128)) (and (cons? (tl V1128)) (and (= head (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.of (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (= () (tl (tl (tl (tl V1128)))))))))))) (cons hd (tl (tl (tl V1128))))) ((and (cons? V1128) (and (= shen.the (hd V1128)) (and (cons? (tl V1128)) (and (= tail (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.of (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (= () (tl (tl (tl (tl V1128)))))))))))) (cons tl (tl (tl (tl V1128))))) ((and (cons? V1128) (and (= shen.pop (hd V1128)) (and (cons? (tl V1128)) (and (= shen.the (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.stack (hd (tl (tl V1128)))) (= () (tl (tl (tl V1128)))))))))) (cons do (cons (cons shen.incinfs ()) (cons (cons thaw (cons Continuation ())) ())))) ((and (cons? V1128) (and (= call (hd V1128)) (and (cons? (tl V1128)) (and (= shen.the (hd (tl V1128))) (and (cons? (tl (tl V1128))) (and (= shen.continuation (hd (tl (tl V1128)))) (and (cons? (tl (tl (tl V1128)))) (= () (tl (tl (tl (tl V1128)))))))))))) (cons do (cons (cons shen.incinfs ()) (cons (shen.call_the_continuation (shen.chwild (hd (tl (tl (tl V1128))))) ProcessN Continuation) ())))) (true V1128))) -(defun shen.chwild (V1105) (cond ((= V1105 _) (cons shen.newpv (cons ProcessN ()))) ((cons? V1105) (map shen.chwild V1105)) (true V1105))) +(defun shen.chwild (V1129) (cond ((= V1129 _) (cons shen.newpv (cons ProcessN ()))) ((cons? V1129) (map (lambda X932 (shen.chwild X932)) V1129)) (true V1129))) -(defun shen.newpv (V1106) (let Count+1 (+ (<-address (value shen.*varcounter*) V1106) 1) (let IncVar (address-> (value shen.*varcounter*) V1106 Count+1) (let Vector (<-address (value shen.*prologvectors*) V1106) (let ResizeVectorIfNeeded (if (= Count+1 (limit Vector)) (shen.resizeprocessvector V1106 Count+1) shen.skip) (shen.mk-pvar Count+1)))))) +(defun shen.newpv (V1130) (let Count+1 (+ (<-address (value shen.*varcounter*) V1130) 1) (let IncVar (address-> (value shen.*varcounter*) V1130 Count+1) (let Vector (<-address (value shen.*prologvectors*) V1130) (let ResizeVectorIfNeeded (if (= Count+1 (limit Vector)) (shen.resizeprocessvector V1130 Count+1) shen.skip) (shen.mk-pvar Count+1)))))) -(defun shen.resizeprocessvector (V1107 V1108) (let Vector (<-address (value shen.*prologvectors*) V1107) (let BigVector (shen.resize-vector Vector (+ V1108 V1108) shen.-null-) (address-> (value shen.*prologvectors*) V1107 BigVector)))) +(defun shen.resizeprocessvector (V1131 V1132) (let Vector (<-address (value shen.*prologvectors*) V1131) (let BigVector (shen.resize-vector Vector (+ V1132 V1132) shen.-null-) (address-> (value shen.*prologvectors*) V1131 BigVector)))) -(defun shen.resize-vector (V1109 V1110 V1111) (let BigVector (address-> (absvector (+ 1 V1110)) 0 V1110) (shen.copy-vector V1109 BigVector (limit V1109) V1110 V1111))) +(defun shen.resize-vector (V1133 V1134 V1135) (let BigVector (address-> (absvector (+ 1 V1134)) 0 V1134) (shen.copy-vector V1133 BigVector (limit V1133) V1134 V1135))) -(defun shen.copy-vector (V1112 V1113 V1114 V1115 V1116) (shen.copy-vector-stage-2 (+ 1 V1114) (+ V1115 1) V1116 (shen.copy-vector-stage-1 1 V1112 V1113 (+ 1 V1114)))) +(defun shen.copy-vector (V1136 V1137 V1138 V1139 V1140) (shen.copy-vector-stage-2 (+ 1 V1138) (+ V1139 1) V1140 (shen.copy-vector-stage-1 1 V1136 V1137 (+ 1 V1138)))) -(defun shen.copy-vector-stage-1 (V1119 V1120 V1121 V1122) (cond ((= V1122 V1119) V1121) (true (shen.copy-vector-stage-1 (+ 1 V1119) V1120 (address-> V1121 V1119 (<-address V1120 V1119)) V1122)))) +(defun shen.copy-vector-stage-1 (V1143 V1144 V1145 V1146) (cond ((= V1146 V1143) V1145) (true (shen.copy-vector-stage-1 (+ 1 V1143) V1144 (address-> V1145 V1143 (<-address V1144 V1143)) V1146)))) -(defun shen.copy-vector-stage-2 (V1126 V1127 V1128 V1129) (cond ((= V1127 V1126) V1129) (true (shen.copy-vector-stage-2 (+ V1126 1) V1127 V1128 (address-> V1129 V1126 V1128))))) +(defun shen.copy-vector-stage-2 (V1150 V1151 V1152 V1153) (cond ((= V1151 V1150) V1153) (true (shen.copy-vector-stage-2 (+ V1150 1) V1151 V1152 (address-> V1153 V1150 V1152))))) -(defun shen.mk-pvar (V1131) (address-> (address-> (absvector 2) 0 shen.pvar) 1 V1131)) +(defun shen.mk-pvar (V1155) (address-> (address-> (absvector 2) 0 shen.pvar) 1 V1155)) -(defun shen.pvar? (V1132) (and (absvector? V1132) (= (<-address V1132 0) shen.pvar))) +(defun shen.pvar? (V1156) (and (absvector? V1156) (= (<-address V1156 0) shen.pvar))) -(defun shen.bindv (V1133 V1134 V1135) (let Vector (<-address (value shen.*prologvectors*) V1135) (address-> Vector (<-address V1133 1) V1134))) +(defun shen.bindv (V1157 V1158 V1159) (let Vector (<-address (value shen.*prologvectors*) V1159) (address-> Vector (<-address V1157 1) V1158))) -(defun shen.unbindv (V1136 V1137) (let Vector (<-address (value shen.*prologvectors*) V1137) (address-> Vector (<-address V1136 1) shen.-null-))) +(defun shen.unbindv (V1160 V1161) (let Vector (<-address (value shen.*prologvectors*) V1161) (address-> Vector (<-address V1160 1) shen.-null-))) (defun shen.incinfs () (set shen.*infs* (+ 1 (value shen.*infs*)))) -(defun shen.call_the_continuation (V1138 V1139 V1140) (cond ((and (cons? V1138) (and (cons? (hd V1138)) (= () (tl V1138)))) (cons (hd (hd V1138)) (append (tl (hd V1138)) (cons V1139 (cons V1140 ()))))) ((and (cons? V1138) (cons? (hd V1138))) (let NewContinuation (shen.newcontinuation (tl V1138) V1139 V1140) (cons (hd (hd V1138)) (append (tl (hd V1138)) (cons V1139 (cons NewContinuation ())))))) (true (shen.sys-error shen.call_the_continuation)))) +(defun shen.call_the_continuation (V1162 V1163 V1164) (cond ((and (cons? V1162) (and (cons? (hd V1162)) (= () (tl V1162)))) (cons (hd (hd V1162)) (append (tl (hd V1162)) (cons V1163 (cons V1164 ()))))) ((and (cons? V1162) (cons? (hd V1162))) (let NewContinuation (shen.newcontinuation (tl V1162) V1163 V1164) (cons (hd (hd V1162)) (append (tl (hd V1162)) (cons V1163 (cons NewContinuation ())))))) (true (shen.sys-error shen.call_the_continuation)))) -(defun shen.newcontinuation (V1141 V1142 V1143) (cond ((= () V1141) V1143) ((and (cons? V1141) (cons? (hd V1141))) (cons freeze (cons (cons (hd (hd V1141)) (append (tl (hd V1141)) (cons V1142 (cons (shen.newcontinuation (tl V1141) V1142 V1143) ())))) ()))) (true (shen.sys-error shen.newcontinuation)))) +(defun shen.newcontinuation (V1165 V1166 V1167) (cond ((= () V1165) V1167) ((and (cons? V1165) (cons? (hd V1165))) (cons freeze (cons (cons (hd (hd V1165)) (append (tl (hd V1165)) (cons V1166 (cons (shen.newcontinuation (tl V1165) V1166 V1167) ())))) ()))) (true (shen.sys-error shen.newcontinuation)))) -(defun return (V1148 V1149 V1150) (shen.deref V1148 V1149)) +(defun return (V1172 V1173 V1174) (shen.deref V1172 V1173)) -(defun shen.measure&return (V1155 V1156 V1157) (do (shen.prhush (shen.app (value shen.*infs*) " inferences -" shen.a) (stoutput)) (shen.deref V1155 V1156))) +(defun shen.measure&return (V1179 V1180 V1181) (do (shen.prhush (shen.app (value shen.*infs*) " inferences +" shen.a) (stoutput)) (shen.deref V1179 V1180))) -(defun unify (V1158 V1159 V1160 V1161) (shen.lzy= (shen.lazyderef V1158 V1160) (shen.lazyderef V1159 V1160) V1160 V1161)) +(defun unify (V1182 V1183 V1184 V1185) (shen.lzy= (shen.lazyderef V1182 V1184) (shen.lazyderef V1183 V1184) V1184 V1185)) -(defun shen.lzy= (V1178 V1179 V1180 V1181) (cond ((= V1179 V1178) (thaw V1181)) ((shen.pvar? V1178) (bind V1178 V1179 V1180 V1181)) ((shen.pvar? V1179) (bind V1179 V1178 V1180 V1181)) ((and (cons? V1178) (cons? V1179)) (shen.lzy= (shen.lazyderef (hd V1178) V1180) (shen.lazyderef (hd V1179) V1180) V1180 (freeze (shen.lzy= (shen.lazyderef (tl V1178) V1180) (shen.lazyderef (tl V1179) V1180) V1180 V1181)))) (true false))) +(defun shen.lzy= (V1202 V1203 V1204 V1205) (cond ((= V1203 V1202) (thaw V1205)) ((shen.pvar? V1202) (bind V1202 V1203 V1204 V1205)) ((shen.pvar? V1203) (bind V1203 V1202 V1204 V1205)) ((and (cons? V1202) (cons? V1203)) (shen.lzy= (shen.lazyderef (hd V1202) V1204) (shen.lazyderef (hd V1203) V1204) V1204 (freeze (shen.lzy= (shen.lazyderef (tl V1202) V1204) (shen.lazyderef (tl V1203) V1204) V1204 V1205)))) (true false))) -(defun shen.deref (V1183 V1184) (cond ((cons? V1183) (cons (shen.deref (hd V1183) V1184) (shen.deref (tl V1183) V1184))) (true (if (shen.pvar? V1183) (let Value (shen.valvector V1183 V1184) (if (= Value shen.-null-) V1183 (shen.deref Value V1184))) V1183)))) +(defun shen.deref (V1207 V1208) (cond ((cons? V1207) (cons (shen.deref (hd V1207) V1208) (shen.deref (tl V1207) V1208))) (true (if (shen.pvar? V1207) (let Value (shen.valvector V1207 V1208) (if (= Value shen.-null-) V1207 (shen.deref Value V1208))) V1207)))) -(defun shen.lazyderef (V1185 V1186) (if (shen.pvar? V1185) (let Value (shen.valvector V1185 V1186) (if (= Value shen.-null-) V1185 (shen.lazyderef Value V1186))) V1185)) +(defun shen.lazyderef (V1209 V1210) (if (shen.pvar? V1209) (let Value (shen.valvector V1209 V1210) (if (= Value shen.-null-) V1209 (shen.lazyderef Value V1210))) V1209)) -(defun shen.valvector (V1187 V1188) (<-address (<-address (value shen.*prologvectors*) V1188) (<-address V1187 1))) +(defun shen.valvector (V1211 V1212) (<-address (<-address (value shen.*prologvectors*) V1212) (<-address V1211 1))) -(defun unify! (V1189 V1190 V1191 V1192) (shen.lzy=! (shen.lazyderef V1189 V1191) (shen.lazyderef V1190 V1191) V1191 V1192)) +(defun unify! (V1213 V1214 V1215 V1216) (shen.lzy=! (shen.lazyderef V1213 V1215) (shen.lazyderef V1214 V1215) V1215 V1216)) -(defun shen.lzy=! (V1209 V1210 V1211 V1212) (cond ((= V1210 V1209) (thaw V1212)) ((and (shen.pvar? V1209) (not (shen.occurs? V1209 (shen.deref V1210 V1211)))) (bind V1209 V1210 V1211 V1212)) ((and (shen.pvar? V1210) (not (shen.occurs? V1210 (shen.deref V1209 V1211)))) (bind V1210 V1209 V1211 V1212)) ((and (cons? V1209) (cons? V1210)) (shen.lzy=! (shen.lazyderef (hd V1209) V1211) (shen.lazyderef (hd V1210) V1211) V1211 (freeze (shen.lzy=! (shen.lazyderef (tl V1209) V1211) (shen.lazyderef (tl V1210) V1211) V1211 V1212)))) (true false))) +(defun shen.lzy=! (V1233 V1234 V1235 V1236) (cond ((= V1234 V1233) (thaw V1236)) ((and (shen.pvar? V1233) (not (shen.occurs? V1233 (shen.deref V1234 V1235)))) (bind V1233 V1234 V1235 V1236)) ((and (shen.pvar? V1234) (not (shen.occurs? V1234 (shen.deref V1233 V1235)))) (bind V1234 V1233 V1235 V1236)) ((and (cons? V1233) (cons? V1234)) (shen.lzy=! (shen.lazyderef (hd V1233) V1235) (shen.lazyderef (hd V1234) V1235) V1235 (freeze (shen.lzy=! (shen.lazyderef (tl V1233) V1235) (shen.lazyderef (tl V1234) V1235) V1235 V1236)))) (true false))) -(defun shen.occurs? (V1222 V1223) (cond ((= V1223 V1222) true) ((cons? V1223) (or (shen.occurs? V1222 (hd V1223)) (shen.occurs? V1222 (tl V1223)))) (true false))) +(defun shen.occurs? (V1246 V1247) (cond ((= V1247 V1246) true) ((cons? V1247) (or (shen.occurs? V1246 (hd V1247)) (shen.occurs? V1246 (tl V1247)))) (true false))) -(defun identical (V1225 V1226 V1227 V1228) (shen.lzy== (shen.lazyderef V1225 V1227) (shen.lazyderef V1226 V1227) V1227 V1228)) +(defun identical (V1249 V1250 V1251 V1252) (shen.lzy== (shen.lazyderef V1249 V1251) (shen.lazyderef V1250 V1251) V1251 V1252)) -(defun shen.lzy== (V1245 V1246 V1247 V1248) (cond ((= V1246 V1245) (thaw V1248)) ((and (cons? V1245) (cons? V1246)) (shen.lzy== (shen.lazyderef (hd V1245) V1247) (shen.lazyderef (hd V1246) V1247) V1247 (freeze (shen.lzy== (tl V1245) (tl V1246) V1247 V1248)))) (true false))) +(defun shen.lzy== (V1269 V1270 V1271 V1272) (cond ((= V1270 V1269) (thaw V1272)) ((and (cons? V1269) (cons? V1270)) (shen.lzy== (shen.lazyderef (hd V1269) V1271) (shen.lazyderef (hd V1270) V1271) V1271 (freeze (shen.lzy== (tl V1269) (tl V1270) V1271 V1272)))) (true false))) -(defun shen.pvar (V1250) (cn "Var" (shen.app (<-address V1250 1) "" shen.a))) +(defun shen.pvar (V1274) (cn "Var" (shen.app (<-address V1274 1) "" shen.a))) -(defun bind (V1251 V1252 V1253 V1254) (do (shen.bindv V1251 V1252 V1253) (let Result (thaw V1254) (do (shen.unbindv V1251 V1253) Result)))) +(defun bind (V1275 V1276 V1277 V1278) (do (shen.bindv V1275 V1276 V1277) (let Result (thaw V1278) (do (shen.unbindv V1275 V1277) Result)))) -(defun fwhen (V1269 V1270 V1271) (cond ((= true V1269) (thaw V1271)) ((= false V1269) false) (true (simple-error (cn "fwhen expects a boolean: not " (shen.app V1269 "%" shen.s)))))) +(defun fwhen (V1293 V1294 V1295) (cond ((= true V1293) (thaw V1295)) ((= false V1293) false) (true (simple-error (cn "fwhen expects a boolean: not " (shen.app V1293 "%" shen.s)))))) -(defun call (V1284 V1285 V1286) (cond ((cons? V1284) (shen.call-help (shen.m_prolog_to_s-prolog_predicate (shen.lazyderef (hd V1284) V1285)) (tl V1284) V1285 V1286)) (true false))) +(defun call (V1308 V1309 V1310) (cond ((cons? V1308) (shen.call-help (shen.m_prolog_to_s-prolog_predicate (shen.lazyderef (hd V1308) V1309)) (tl V1308) V1309 V1310)) (true false))) -(defun shen.call-help (V1287 V1288 V1289 V1290) (cond ((= () V1288) (V1287 V1289 V1290)) ((cons? V1288) (shen.call-help (V1287 (hd V1288)) (tl V1288) V1289 V1290)) (true (shen.sys-error shen.call-help)))) +(defun shen.call-help (V1311 V1312 V1313 V1314) (cond ((= () V1312) (V1311 V1313 V1314)) ((cons? V1312) (shen.call-help (V1311 (hd V1312)) (tl V1312) V1313 V1314)) (true (shen.sys-error shen.call-help)))) -(defun shen.intprolog (V1291) (cond ((and (cons? V1291) (cons? (hd V1291))) (let ProcessN (shen.start-new-prolog-process) (shen.intprolog-help (hd (hd V1291)) (shen.insert-prolog-variables (cons (tl (hd V1291)) (cons (tl V1291) ())) ProcessN) ProcessN))) (true (shen.sys-error shen.intprolog)))) +(defun shen.intprolog (V1315) (cond ((and (cons? V1315) (cons? (hd V1315))) (let ProcessN (shen.start-new-prolog-process) (shen.intprolog-help (hd (hd V1315)) (shen.insert-prolog-variables (cons (tl (hd V1315)) (cons (tl V1315) ())) ProcessN) ProcessN))) (true (shen.sys-error shen.intprolog)))) -(defun shen.intprolog-help (V1292 V1293 V1294) (cond ((and (cons? V1293) (and (cons? (tl V1293)) (= () (tl (tl V1293))))) (shen.intprolog-help-help V1292 (hd V1293) (hd (tl V1293)) V1294)) (true (shen.sys-error shen.intprolog-help)))) +(defun shen.intprolog-help (V1316 V1317 V1318) (cond ((and (cons? V1317) (and (cons? (tl V1317)) (= () (tl (tl V1317))))) (shen.intprolog-help-help V1316 (hd V1317) (hd (tl V1317)) V1318)) (true (shen.sys-error shen.intprolog-help)))) -(defun shen.intprolog-help-help (V1295 V1296 V1297 V1298) (cond ((= () V1296) (V1295 V1298 (freeze (shen.call-rest V1297 V1298)))) ((cons? V1296) (shen.intprolog-help-help (V1295 (hd V1296)) (tl V1296) V1297 V1298)) (true (shen.sys-error shen.intprolog-help-help)))) +(defun shen.intprolog-help-help (V1319 V1320 V1321 V1322) (cond ((= () V1320) (V1319 V1322 (freeze (shen.call-rest V1321 V1322)))) ((cons? V1320) (shen.intprolog-help-help (V1319 (hd V1320)) (tl V1320) V1321 V1322)) (true (shen.sys-error shen.intprolog-help-help)))) -(defun shen.call-rest (V1301 V1302) (cond ((= () V1301) true) ((and (cons? V1301) (and (cons? (hd V1301)) (cons? (tl (hd V1301))))) (shen.call-rest (cons (cons ((hd (hd V1301)) (hd (tl (hd V1301)))) (tl (tl (hd V1301)))) (tl V1301)) V1302)) ((and (cons? V1301) (and (cons? (hd V1301)) (= () (tl (hd V1301))))) ((hd (hd V1301)) V1302 (freeze (shen.call-rest (tl V1301) V1302)))) (true (shen.sys-error shen.call-rest)))) +(defun shen.call-rest (V1325 V1326) (cond ((= () V1325) true) ((and (cons? V1325) (and (cons? (hd V1325)) (cons? (tl (hd V1325))))) (shen.call-rest (cons (cons ((hd (hd V1325)) (hd (tl (hd V1325)))) (tl (tl (hd V1325)))) (tl V1325)) V1326)) ((and (cons? V1325) (and (cons? (hd V1325)) (= () (tl (hd V1325))))) ((hd (hd V1325)) V1326 (freeze (shen.call-rest (tl V1325) V1326)))) (true (shen.sys-error shen.call-rest)))) (defun shen.start-new-prolog-process () (let IncrementProcessCounter (set shen.*process-counter* (+ 1 (value shen.*process-counter*))) (shen.initialise-prolog IncrementProcessCounter))) -(defun shen.insert-prolog-variables (V1303 V1304) (shen.insert-prolog-variables-help V1303 (shen.flatten V1303) V1304)) +(defun shen.insert-prolog-variables (V1327 V1328) (shen.insert-prolog-variables-help V1327 (shen.flatten V1327) V1328)) -(defun shen.insert-prolog-variables-help (V1309 V1310 V1311) (cond ((= () V1310) V1309) ((and (cons? V1310) (variable? (hd V1310))) (let V (shen.newpv V1311) (let XV/Y (subst V (hd V1310) V1309) (let Z-Y (remove (hd V1310) (tl V1310)) (shen.insert-prolog-variables-help XV/Y Z-Y V1311))))) ((cons? V1310) (shen.insert-prolog-variables-help V1309 (tl V1310) V1311)) (true (shen.sys-error shen.insert-prolog-variables-help)))) +(defun shen.insert-prolog-variables-help (V1333 V1334 V1335) (cond ((= () V1334) V1333) ((and (cons? V1334) (variable? (hd V1334))) (let V (shen.newpv V1335) (let XV/Y (subst V (hd V1334) V1333) (let Z-Y (remove (hd V1334) (tl V1334)) (shen.insert-prolog-variables-help XV/Y Z-Y V1335))))) ((cons? V1334) (shen.insert-prolog-variables-help V1333 (tl V1334) V1335)) (true (shen.sys-error shen.insert-prolog-variables-help)))) -(defun shen.initialise-prolog (V1312) (let Vector (address-> (value shen.*prologvectors*) V1312 (shen.fillvector (vector 10) 1 10 shen.-null-)) (let Counter (address-> (value shen.*varcounter*) V1312 1) V1312))) +(defun shen.initialise-prolog (V1336) (let Vector (address-> (value shen.*prologvectors*) V1336 (shen.fillvector (vector 10) 1 10 shen.-null-)) (let Counter (address-> (value shen.*varcounter*) V1336 1) V1336))) diff --git a/shen/klambda/reader.kl b/shen/klambda/reader.kl index f1a3dae..d904197 100644 --- a/shen/klambda/reader.kl +++ b/shen/klambda/reader.kl @@ -47,166 +47,166 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun read-file-as-bytelist (V1314) (let Stream (open V1314 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) +"(defun read-file-as-bytelist (V1347) (let Stream (open V1347 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) -(defun shen.read-file-as-bytelist-help (V1315 V1316 V1317) (cond ((= -1 V1316) V1317) (true (shen.read-file-as-bytelist-help V1315 (read-byte V1315) (cons V1316 V1317))))) +(defun shen.read-file-as-bytelist-help (V1348 V1349 V1350) (cond ((= -1 V1349) V1350) (true (shen.read-file-as-bytelist-help V1348 (read-byte V1348) (cons V1349 V1350))))) -(defun read-file-as-string (V1318) (let Stream (open V1318 in) (shen.rfas-h Stream (read-byte Stream) ""))) +(defun read-file-as-string (V1351) (let Stream (open V1351 in) (shen.rfas-h Stream (read-byte Stream) ""))) -(defun shen.rfas-h (V1319 V1320 V1321) (cond ((= -1 V1320) (do (close V1319) V1321)) (true (shen.rfas-h V1319 (read-byte V1319) (cn V1321 (n->string V1320)))))) +(defun shen.rfas-h (V1352 V1353 V1354) (cond ((= -1 V1353) (do (close V1352) V1354)) (true (shen.rfas-h V1352 (read-byte V1352) (cn V1354 (n->string V1353)))))) -(defun input (V1322) (eval-kl (read V1322))) +(defun input (V1355) (eval-kl (read V1355))) -(defun input+ (V1323 V1324) (let Mono? (shen.monotype V1323) (let Input (read V1324) (if (= false (shen.typecheck Input V1323)) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1323 " +(defun input+ (V1356 V1357) (let Mono? (shen.monotype V1356) (let Input (read V1357) (if (= false (shen.typecheck Input V1356)) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1356 " " shen.r)) shen.r))) (eval-kl Input))))) -(defun shen.monotype (V1325) (cond ((cons? V1325) (map shen.monotype V1325)) (true (if (variable? V1325) (simple-error (cn "input+ expects a monotype: not " (shen.app V1325 " -" shen.a))) V1325)))) +(defun shen.monotype (V1358) (cond ((cons? V1358) (map (lambda X1337 (shen.monotype X1337)) V1358)) (true (if (variable? V1358) (simple-error (cn "input+ expects a monotype: not " (shen.app V1358 " +" shen.a))) V1358)))) -(defun read (V1326) (hd (shen.read-loop V1326 (read-byte V1326) ()))) +(defun read (V1359) (hd (shen.read-loop V1359 (read-byte V1359) ()))) -(defun shen.read-loop (V1329 V1330 V1331) (cond ((= -1 V1330) (if (empty? V1331) (simple-error "error: empty stream") (compile shen. V1331 (lambda E E)))) ((shen.terminator? V1330) (let AllBytes (append V1331 (cons V1330 ())) (let Read (compile shen. AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1329 (read-byte V1329) AllBytes) Read)))) (true (shen.read-loop V1329 (read-byte V1329) (append V1331 (cons V1330 ())))))) +(defun shen.read-loop (V1362 V1363 V1364) (cond ((= -1 V1363) (if (empty? V1364) (simple-error "error: empty stream") (compile (lambda X1338 (shen. X1338)) V1364 (lambda E E)))) ((shen.terminator? V1363) (let AllBytes (append V1364 (cons V1363 ())) (let Read (compile (lambda X1339 (shen. X1339)) AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1362 (read-byte V1362) AllBytes) Read)))) (true (shen.read-loop V1362 (read-byte V1362) (append V1364 (cons V1363 ())))))) -(defun shen.terminator? (V1332) (element? V1332 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) +(defun shen.terminator? (V1365) (element? V1365 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) -(defun lineread (V1333) (shen.lineread-loop (read-byte V1333) () V1333)) +(defun lineread (V1366) (shen.lineread-loop (read-byte V1366) () V1366)) -(defun shen.lineread-loop (V1335 V1336 V1337) (cond ((= -1 V1335) (if (empty? V1336) (simple-error "empty stream") (compile shen. V1336 (lambda E E)))) ((= V1335 (shen.hat)) (simple-error "line read aborted")) ((element? V1335 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V1336 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1337) (append V1336 (cons V1335 ())) V1337) Line))) (true (shen.lineread-loop (read-byte V1337) (append V1336 (cons V1335 ())) V1337)))) +(defun shen.lineread-loop (V1368 V1369 V1370) (cond ((= -1 V1368) (if (empty? V1369) (simple-error "empty stream") (compile (lambda X1340 (shen. X1340)) V1369 (lambda E E)))) ((= V1368 (shen.hat)) (simple-error "line read aborted")) ((element? V1368 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X1341 (shen. X1341)) V1369 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1370) (append V1369 (cons V1368 ())) V1370) Line))) (true (shen.lineread-loop (read-byte V1370) (append V1369 (cons V1368 ())) V1370)))) -(defun read-file (V1338) (let Bytelist (read-file-as-bytelist V1338) (compile shen. Bytelist shen.read-error))) +(defun read-file (V1371) (let Bytelist (read-file-as-bytelist V1371) (compile (lambda X1342 (shen. X1342)) Bytelist (lambda X1343 (shen.read-error X1343))))) -(defun read-from-string (V1339) (let Ns (map (lambda V1313 (string->n V1313)) (explode V1339)) (compile shen. Ns shen.read-error))) +(defun read-from-string (V1372) (let Ns (map (lambda X1344 (string->n X1344)) (explode V1372)) (compile (lambda X1345 (shen. X1345)) Ns (lambda X1346 (shen.read-error X1346))))) -(defun shen.read-error (V1346) (cond ((and (cons? V1346) (and (cons? (hd V1346)) (and (cons? (tl V1346)) (= () (tl (tl V1346)))))) (simple-error (cn "read error here: +(defun shen.read-error (V1379) (cond ((and (cons? V1379) (and (cons? (hd V1379)) (and (cons? (tl V1379)) (= () (tl (tl V1379)))))) (simple-error (cn "read error here: - " (shen.app (shen.compress-50 50 (hd V1346)) " + " (shen.app (shen.compress-50 50 (hd V1379)) " " shen.a)))) (true (simple-error "read error ")))) -(defun shen.compress-50 (V1351 V1352) (cond ((= () V1352) "") ((= 0 V1351) "") ((cons? V1352) (cn (n->string (hd V1352)) (shen.compress-50 (- V1351 1) (tl V1352)))) (true (shen.sys-error shen.compress-50)))) +(defun shen.compress-50 (V1384 V1385) (cond ((= () V1385) "") ((= 0 V1384) "") ((cons? V1385) (cn (n->string (hd V1385)) (shen.compress-50 (- V1384 1) (tl V1385)))) (true (shen.sys-error shen.compress-50)))) -(defun shen. (V1357) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1357) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1357) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1390) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1390) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1362) (let Result (if (and (cons? (hd V1362)) (= 91 (hd (hd V1362)))) (shen.pair (hd (shen.pair (tl (hd V1362)) (shen.hdtl V1362))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1395) (let Result (if (and (cons? (hd V1395)) (= 91 (hd (hd V1395)))) (shen.pair (hd (shen.pair (tl (hd V1395)) (shen.hdtl V1395))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1367) (let Result (if (and (cons? (hd V1367)) (= 93 (hd (hd V1367)))) (shen.pair (hd (shen.pair (tl (hd V1367)) (shen.hdtl V1367))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1400) (let Result (if (and (cons? (hd V1400)) (= 93 (hd (hd V1400)))) (shen.pair (hd (shen.pair (tl (hd V1400)) (shen.hdtl V1400))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1372) (let Result (if (and (cons? (hd V1372)) (= 123 (hd (hd V1372)))) (shen.pair (hd (shen.pair (tl (hd V1372)) (shen.hdtl V1372))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1405) (let Result (if (and (cons? (hd V1405)) (= 123 (hd (hd V1405)))) (shen.pair (hd (shen.pair (tl (hd V1405)) (shen.hdtl V1405))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1377) (let Result (if (and (cons? (hd V1377)) (= 125 (hd (hd V1377)))) (shen.pair (hd (shen.pair (tl (hd V1377)) (shen.hdtl V1377))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1410) (let Result (if (and (cons? (hd V1410)) (= 125 (hd (hd V1410)))) (shen.pair (hd (shen.pair (tl (hd V1410)) (shen.hdtl V1410))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1382) (let Result (if (and (cons? (hd V1382)) (= 124 (hd (hd V1382)))) (shen.pair (hd (shen.pair (tl (hd V1382)) (shen.hdtl V1382))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1415) (let Result (if (and (cons? (hd V1415)) (= 124 (hd (hd V1415)))) (shen.pair (hd (shen.pair (tl (hd V1415)) (shen.hdtl V1415))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1387) (let Result (if (and (cons? (hd V1387)) (= 59 (hd (hd V1387)))) (shen.pair (hd (shen.pair (tl (hd V1387)) (shen.hdtl V1387))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1420) (let Result (if (and (cons? (hd V1420)) (= 59 (hd (hd V1420)))) (shen.pair (hd (shen.pair (tl (hd V1420)) (shen.hdtl V1420))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1392) (let Result (if (and (cons? (hd V1392)) (= 58 (hd (hd V1392)))) (shen.pair (hd (shen.pair (tl (hd V1392)) (shen.hdtl V1392))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1425) (let Result (if (and (cons? (hd V1425)) (= 58 (hd (hd V1425)))) (shen.pair (hd (shen.pair (tl (hd V1425)) (shen.hdtl V1425))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1397) (let Result (if (and (cons? (hd V1397)) (= 44 (hd (hd V1397)))) (shen.pair (hd (shen.pair (tl (hd V1397)) (shen.hdtl V1397))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1430) (let Result (if (and (cons? (hd V1430)) (= 44 (hd (hd V1430)))) (shen.pair (hd (shen.pair (tl (hd V1430)) (shen.hdtl V1430))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1402) (let Result (if (and (cons? (hd V1402)) (= 61 (hd (hd V1402)))) (shen.pair (hd (shen.pair (tl (hd V1402)) (shen.hdtl V1402))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1435) (let Result (if (and (cons? (hd V1435)) (= 61 (hd (hd V1435)))) (shen.pair (hd (shen.pair (tl (hd V1435)) (shen.hdtl V1435))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1407) (let Result (if (and (cons? (hd V1407)) (= 45 (hd (hd V1407)))) (shen.pair (hd (shen.pair (tl (hd V1407)) (shen.hdtl V1407))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1440) (let Result (if (and (cons? (hd V1440)) (= 45 (hd (hd V1440)))) (shen.pair (hd (shen.pair (tl (hd V1440)) (shen.hdtl V1440))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1412) (let Result (if (and (cons? (hd V1412)) (= 40 (hd (hd V1412)))) (shen.pair (hd (shen.pair (tl (hd V1412)) (shen.hdtl V1412))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1445) (let Result (if (and (cons? (hd V1445)) (= 40 (hd (hd V1445)))) (shen.pair (hd (shen.pair (tl (hd V1445)) (shen.hdtl V1445))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1417) (let Result (if (and (cons? (hd V1417)) (= 41 (hd (hd V1417)))) (shen.pair (hd (shen.pair (tl (hd V1417)) (shen.hdtl V1417))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1450) (let Result (if (and (cons? (hd V1450)) (= 41 (hd (hd V1450)))) (shen.pair (hd (shen.pair (tl (hd V1450)) (shen.hdtl V1450))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1422) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1422) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1455) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen.control-chars (V1423) (cond ((= () V1423) "") ((and (cons? V1423) (and (= "c" (hd V1423)) (and (cons? (tl V1423)) (= "#" (hd (tl V1423)))))) (let CodePoint (shen.code-point (tl (tl V1423))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1423))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1423) (@s (hd V1423) (shen.control-chars (tl V1423)))) (true (shen.sys-error shen.control-chars)))) +(defun shen.control-chars (V1456) (cond ((= () V1456) "") ((and (cons? V1456) (and (= "c" (hd V1456)) (and (cons? (tl V1456)) (= "#" (hd (tl V1456)))))) (let CodePoint (shen.code-point (tl (tl V1456))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1456))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1456) (@s (hd V1456) (shen.control-chars (tl V1456)))) (true (shen.sys-error shen.control-chars)))) -(defun shen.code-point (V1426) (cond ((and (cons? V1426) (= ";" (hd V1426))) "") ((and (cons? V1426) (element? (hd V1426) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1426) (shen.code-point (tl V1426)))) (true (simple-error (cn "code point parse error " (shen.app V1426 " +(defun shen.code-point (V1459) (cond ((and (cons? V1459) (= ";" (hd V1459))) "") ((and (cons? V1459) (element? (hd V1459) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1459) (shen.code-point (tl V1459)))) (true (simple-error (cn "code point parse error " (shen.app V1459 " " shen.a)))))) -(defun shen.after-codepoint (V1431) (cond ((= () V1431) ()) ((and (cons? V1431) (= ";" (hd V1431))) (tl V1431)) ((cons? V1431) (shen.after-codepoint (tl V1431))) (true (shen.sys-error shen.after-codepoint)))) +(defun shen.after-codepoint (V1464) (cond ((= () V1464) ()) ((and (cons? V1464) (= ";" (hd V1464))) (tl V1464)) ((cons? V1464) (shen.after-codepoint (tl V1464))) (true (shen.sys-error shen.after-codepoint)))) -(defun shen.decimalise (V1432) (shen.pre (reverse (shen.digits->integers V1432)) 0)) +(defun shen.decimalise (V1465) (shen.pre (reverse (shen.digits->integers V1465)) 0)) -(defun shen.digits->integers (V1437) (cond ((and (cons? V1437) (= "0" (hd V1437))) (cons 0 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "1" (hd V1437))) (cons 1 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "2" (hd V1437))) (cons 2 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "3" (hd V1437))) (cons 3 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "4" (hd V1437))) (cons 4 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "5" (hd V1437))) (cons 5 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "6" (hd V1437))) (cons 6 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "7" (hd V1437))) (cons 7 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "8" (hd V1437))) (cons 8 (shen.digits->integers (tl V1437)))) ((and (cons? V1437) (= "9" (hd V1437))) (cons 9 (shen.digits->integers (tl V1437)))) (true ()))) +(defun shen.digits->integers (V1470) (cond ((and (cons? V1470) (= "0" (hd V1470))) (cons 0 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "1" (hd V1470))) (cons 1 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "2" (hd V1470))) (cons 2 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "3" (hd V1470))) (cons 3 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "4" (hd V1470))) (cons 4 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "5" (hd V1470))) (cons 5 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "6" (hd V1470))) (cons 6 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "7" (hd V1470))) (cons 7 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "8" (hd V1470))) (cons 8 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "9" (hd V1470))) (cons 9 (shen.digits->integers (tl V1470)))) (true ()))) -(defun shen. (V1442) (let Result (let Parse_shen. (shen. V1442) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1475) (let Result (let Parse_shen. (shen. V1475) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1447) (let Result (let Parse_shen. (shen. V1447) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1447) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1480) (let Result (let Parse_shen. (shen. V1480) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1480) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1452) (let Result (let Parse_shen. (shen. V1452) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1452) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1485) (let Result (let Parse_shen. (shen. V1485) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1485) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1457) (let Result (if (cons? (hd V1457)) (let Parse_Byte (hd (hd V1457)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1457)) (shen.hdtl V1457))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1490) (let Result (if (cons? (hd V1490)) (let Parse_Byte (hd (hd V1490)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1490)) (shen.hdtl V1490))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.numbyte? (V1462) (cond ((= 48 V1462) true) ((= 49 V1462) true) ((= 50 V1462) true) ((= 51 V1462) true) ((= 52 V1462) true) ((= 53 V1462) true) ((= 54 V1462) true) ((= 55 V1462) true) ((= 56 V1462) true) ((= 57 V1462) true) (true false))) +(defun shen.numbyte? (V1495) (cond ((= 48 V1495) true) ((= 49 V1495) true) ((= 50 V1495) true) ((= 51 V1495) true) ((= 52 V1495) true) ((= 53 V1495) true) ((= 54 V1495) true) ((= 55 V1495) true) ((= 56 V1495) true) ((= 57 V1495) true) (true false))) -(defun shen. (V1467) (let Result (if (cons? (hd V1467)) (let Parse_Byte (hd (hd V1467)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1467)) (shen.hdtl V1467))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1500) (let Result (if (cons? (hd V1500)) (let Parse_Byte (hd (hd V1500)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1500)) (shen.hdtl V1500))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.symbol-code? (V1468) (or (= V1468 126) (or (and (> V1468 94) (< V1468 123)) (or (and (> V1468 59) (< V1468 91)) (or (and (> V1468 41) (and (< V1468 58) (not (= V1468 44)))) (or (and (> V1468 34) (< V1468 40)) (= V1468 33))))))) +(defun shen.symbol-code? (V1501) (or (= V1501 126) (or (and (> V1501 94) (< V1501 123)) (or (and (> V1501 59) (< V1501 91)) (or (and (> V1501 41) (and (< V1501 58) (not (= V1501 44)))) (or (and (> V1501 34) (< V1501 40)) (= V1501 33))))))) -(defun shen. (V1473) (let Result (let Parse_shen. (shen. V1473) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1506) (let Result (let Parse_shen. (shen. V1506) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1478) (let Result (if (cons? (hd V1478)) (let Parse_Byte (hd (hd V1478)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1478)) (shen.hdtl V1478))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1511) (let Result (if (cons? (hd V1511)) (let Parse_Byte (hd (hd V1511)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1511)) (shen.hdtl V1511))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1483) (let Result (let Parse_shen. (shen. V1483) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1483) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1516) (let Result (let Parse_shen. (shen. V1516) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1516) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1488) (let Result (if (cons? (hd V1488)) (let Parse_Byte (hd (hd V1488)) (shen.pair (hd (shen.pair (tl (hd V1488)) (shen.hdtl V1488))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1521) (let Result (if (cons? (hd V1521)) (let Parse_Byte (hd (hd V1521)) (shen.pair (hd (shen.pair (tl (hd V1521)) (shen.hdtl V1521))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1493) (let Result (if (cons? (hd V1493)) (let Parse_Byte (hd (hd V1493)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1493)) (shen.hdtl V1493))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1526) (let Result (if (cons? (hd V1526)) (let Parse_Byte (hd (hd V1526)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1526)) (shen.hdtl V1526))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1498) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1498) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1531) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1503) (let Result (if (and (cons? (hd V1503)) (= 101 (hd (hd V1503)))) (shen.pair (hd (shen.pair (tl (hd V1503)) (shen.hdtl V1503))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1536) (let Result (if (and (cons? (hd V1536)) (= 101 (hd (hd V1536)))) (shen.pair (hd (shen.pair (tl (hd V1536)) (shen.hdtl V1536))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1508) (let Result (let Parse_shen. (shen. V1508) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1508) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1541) (let Result (let Parse_shen. (shen. V1541) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1541) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1513) (let Result (if (cons? (hd V1513)) (let Parse_Byte (hd (hd V1513)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1513)) (shen.hdtl V1513))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1546) (let Result (if (cons? (hd V1546)) (let Parse_Byte (hd (hd V1546)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1546)) (shen.hdtl V1546))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1518) (let Result (if (cons? (hd V1518)) (let Parse_Byte (hd (hd V1518)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1518)) (shen.hdtl V1518))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1551) (let Result (if (cons? (hd V1551)) (let Parse_Byte (hd (hd V1551)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1551)) (shen.hdtl V1551))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1523) (let Result (let Parse_shen. (shen. V1523) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1523) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1556) (let Result (let Parse_shen. (shen. V1556) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1556) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1528) (let Result (let Parse_shen. (shen. V1528) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1561) (let Result (let Parse_shen. (shen. V1561) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1533) (let Result (let Parse_shen. (shen. V1533) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1533) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1566) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1538) (let Result (if (cons? (hd V1538)) (let Parse_X (hd (hd V1538)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1538)) (shen.hdtl V1538))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1571) (let Result (if (cons? (hd V1571)) (let Parse_X (hd (hd V1571)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1571)) (shen.hdtl V1571))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.byte->digit (V1539) (cond ((= 48 V1539) 0) ((= 49 V1539) 1) ((= 50 V1539) 2) ((= 51 V1539) 3) ((= 52 V1539) 4) ((= 53 V1539) 5) ((= 54 V1539) 6) ((= 55 V1539) 7) ((= 56 V1539) 8) ((= 57 V1539) 9) (true (shen.sys-error shen.byte->digit)))) +(defun shen.byte->digit (V1572) (cond ((= 48 V1572) 0) ((= 49 V1572) 1) ((= 50 V1572) 2) ((= 51 V1572) 3) ((= 52 V1572) 4) ((= 53 V1572) 5) ((= 54 V1572) 6) ((= 55 V1572) 7) ((= 56 V1572) 8) ((= 57 V1572) 9) (true (shen.sys-error shen.byte->digit)))) -(defun shen.pre (V1542 V1543) (cond ((= () V1542) 0) ((cons? V1542) (+ (* (shen.expt 10 V1543) (hd V1542)) (shen.pre (tl V1542) (+ V1543 1)))) (true (shen.sys-error shen.pre)))) +(defun shen.pre (V1575 V1576) (cond ((= () V1575) 0) ((cons? V1575) (+ (* (shen.expt 10 V1576) (hd V1575)) (shen.pre (tl V1575) (+ V1576 1)))) (true (shen.sys-error shen.pre)))) -(defun shen.post (V1546 V1547) (cond ((= () V1546) 0) ((cons? V1546) (+ (* (shen.expt 10 (- 0 V1547)) (hd V1546)) (shen.post (tl V1546) (+ V1547 1)))) (true (shen.sys-error shen.post)))) +(defun shen.post (V1579 V1580) (cond ((= () V1579) 0) ((cons? V1579) (+ (* (shen.expt 10 (- 0 V1580)) (hd V1579)) (shen.post (tl V1579) (+ V1580 1)))) (true (shen.sys-error shen.post)))) -(defun shen.expt (V1550 V1551) (cond ((= 0 V1551) 1) ((> V1551 0) (* V1550 (shen.expt V1550 (- V1551 1)))) (true (* 1 (/ (shen.expt V1550 (+ V1551 1)) V1550))))) +(defun shen.expt (V1583 V1584) (cond ((= 0 V1584) 1) ((> V1584 0) (* V1583 (shen.expt V1583 (- V1584 1)))) (true (* 1 (/ (shen.expt V1583 (+ V1584 1)) V1583))))) -(defun shen. (V1556) (let Result (let Parse_shen. (shen. V1556) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1589) (let Result (let Parse_shen. (shen. V1589) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1561) (let Result (let Parse_shen. (shen. V1561) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1594) (let Result (let Parse_shen. (shen. V1594) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1566) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1599) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1571) (let Result (let Parse_shen. (shen. V1571) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1604) (let Result (let Parse_shen. (shen. V1604) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1576) (let Result (if (and (cons? (hd V1576)) (= 92 (hd (hd V1576)))) (shen.pair (hd (shen.pair (tl (hd V1576)) (shen.hdtl V1576))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1609) (let Result (if (and (cons? (hd V1609)) (= 92 (hd (hd V1609)))) (shen.pair (hd (shen.pair (tl (hd V1609)) (shen.hdtl V1609))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1581) (let Result (let Parse_shen. (shen. V1581) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1581) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1614) (let Result (let Parse_shen. (shen. V1614) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1614) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1586) (let Result (if (cons? (hd V1586)) (let Parse_X (hd (hd V1586)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1586)) (shen.hdtl V1586))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1619) (let Result (if (cons? (hd V1619)) (let Parse_X (hd (hd V1619)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1619)) (shen.hdtl V1619))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1591) (let Result (if (cons? (hd V1591)) (let Parse_X (hd (hd V1591)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1591)) (shen.hdtl V1591))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1624) (let Result (if (cons? (hd V1624)) (let Parse_X (hd (hd V1624)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1624)) (shen.hdtl V1624))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1596) (let Result (let Parse_shen. (shen. V1596) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1629) (let Result (let Parse_shen. (shen. V1629) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1601) (let Result (if (and (cons? (hd V1601)) (= 42 (hd (hd V1601)))) (shen.pair (hd (shen.pair (tl (hd V1601)) (shen.hdtl V1601))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1634) (let Result (if (and (cons? (hd V1634)) (= 42 (hd (hd V1634)))) (shen.pair (hd (shen.pair (tl (hd V1634)) (shen.hdtl V1634))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1606) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1606)) (let Parse_X (hd (hd V1606)) (let Parse_shen. (shen. (shen.pair (tl (hd V1606)) (shen.hdtl V1606))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1639) (let Result (let Parse_shen. (shen. V1639) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1639) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1639)) (let Parse_X (hd (hd V1639)) (let Parse_shen. (shen. (shen.pair (tl (hd V1639)) (shen.hdtl V1639))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1611) (let Result (let Parse_shen. (shen. V1611) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1611) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1644) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1616) (let Result (if (cons? (hd V1616)) (let Parse_X (hd (hd V1616)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1616)) (shen.hdtl V1616))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1649) (let Result (if (cons? (hd V1649)) (let Parse_X (hd (hd V1649)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1649)) (shen.hdtl V1649))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.cons_form (V1617) (cond ((= () V1617) ()) ((and (cons? V1617) (and (cons? (tl V1617)) (and (cons? (tl (tl V1617))) (and (= () (tl (tl (tl V1617)))) (= (hd (tl V1617)) bar!))))) (cons cons (cons (hd V1617) (tl (tl V1617))))) ((cons? V1617) (cons cons (cons (hd V1617) (cons (shen.cons_form (tl V1617)) ())))) (true (shen.sys-error shen.cons_form)))) +(defun shen.cons_form (V1650) (cond ((= () V1650) ()) ((and (cons? V1650) (and (cons? (tl V1650)) (and (cons? (tl (tl V1650))) (and (= () (tl (tl (tl V1650)))) (= (hd (tl V1650)) bar!))))) (cons cons (cons (hd V1650) (tl (tl V1650))))) ((cons? V1650) (cons cons (cons (hd V1650) (cons (shen.cons_form (tl V1650)) ())))) (true (shen.sys-error shen.cons_form)))) -(defun shen.package-macro (V1620 V1621) (cond ((and (cons? V1620) (and (= $ (hd V1620)) (and (cons? (tl V1620)) (= () (tl (tl V1620)))))) (append (explode (hd (tl V1620))) V1621)) ((and (cons? V1620) (and (= package (hd V1620)) (and (cons? (tl V1620)) (and (= null (hd (tl V1620))) (cons? (tl (tl V1620))))))) (append (tl (tl (tl V1620))) V1621)) ((and (cons? V1620) (and (= package (hd V1620)) (and (cons? (tl V1620)) (cons? (tl (tl V1620)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1620)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1620))) (let PackageNameDot (intern (cn (str (hd (tl V1620))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1620)))) V1621))))) (true (cons V1620 V1621)))) +(defun shen.package-macro (V1653 V1654) (cond ((and (cons? V1653) (and (= $ (hd V1653)) (and (cons? (tl V1653)) (= () (tl (tl V1653)))))) (append (explode (hd (tl V1653))) V1654)) ((and (cons? V1653) (and (= package (hd V1653)) (and (cons? (tl V1653)) (and (= null (hd (tl V1653))) (cons? (tl (tl V1653))))))) (append (tl (tl (tl V1653))) V1654)) ((and (cons? V1653) (and (= package (hd V1653)) (and (cons? (tl V1653)) (cons? (tl (tl V1653)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1653)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1653))) (let PackageNameDot (intern (cn (str (hd (tl V1653))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1653)))) V1654))))) (true (cons V1653 V1654)))) -(defun shen.record-exceptions (V1622 V1623) (let CurrExceptions (trap-error (get V1623 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1622 CurrExceptions) (put V1623 shen.external-symbols AllExceptions (value *property-vector*))))) +(defun shen.record-exceptions (V1655 V1656) (let CurrExceptions (trap-error (get V1656 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1655 CurrExceptions) (put V1656 shen.external-symbols AllExceptions (value *property-vector*))))) -(defun shen.packageh (V1632 V1633 V1634) (cond ((cons? V1634) (cons (shen.packageh V1632 V1633 (hd V1634)) (shen.packageh V1632 V1633 (tl V1634)))) ((or (shen.sysfunc? V1634) (or (variable? V1634) (or (element? V1634 V1633) (or (shen.doubleunderline? V1634) (shen.singleunderline? V1634))))) V1634) ((and (symbol? V1634) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1634)))) (concat V1632 V1634)) (true V1634))) +(defun shen.packageh (V1665 V1666 V1667) (cond ((cons? V1667) (cons (shen.packageh V1665 V1666 (hd V1667)) (shen.packageh V1665 V1666 (tl V1667)))) ((or (shen.sysfunc? V1667) (or (variable? V1667) (or (element? V1667 V1666) (or (shen.doubleunderline? V1667) (shen.singleunderline? V1667))))) V1667) ((and (symbol? V1667) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1667)))) (concat V1665 V1667)) (true V1667))) diff --git a/shen/klambda/sequent.kl b/shen/klambda/sequent.kl index 6a35123..2698c7c 100644 --- a/shen/klambda/sequent.kl +++ b/shen/klambda/sequent.kl @@ -47,114 +47,120 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.datatype-error (V1639) (cond ((and (cons? V1639) (and (cons? (tl V1639)) (= () (tl (tl V1639))))) (simple-error (cn "datatype syntax error here: +"(defun shen.datatype-error (V1679) (cond ((and (cons? V1679) (and (cons? (tl V1679)) (= () (tl (tl V1679))))) (simple-error (cn "datatype syntax error here: - " (shen.app (shen.next-50 50 (hd V1639)) " + " (shen.app (shen.next-50 50 (hd V1679)) " " shen.a)))) (true (shen.sys-error shen.datatype-error)))) -(defun shen. (V1644) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1644) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1684) (let Result (let Parse_shen. (shen. V1684) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1684) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1649) (let Result (let Parse_shen. (shen. V1649) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1649) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1689) (let Result (let Parse_shen. (shen. V1689) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1689) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1654) (let Result (let Parse_shen. (shen. V1654) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1654) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1694) (let Result (let Parse_shen. (shen. V1694) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1694) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1659) (let Result (if (and (cons? (hd V1659)) (= if (hd (hd V1659)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1659)) (shen.hdtl V1659))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1659)) (= let (hd (hd V1659)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1659)) (shen.hdtl V1659))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1699) (let Result (if (and (cons? (hd V1699)) (= if (hd (hd V1699)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1699)) (shen.hdtl V1699))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1699)) (= let (hd (hd V1699)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1699)) (shen.hdtl V1699))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1664) (let Result (if (cons? (hd V1664)) (let Parse_X (hd (hd V1664)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1664)) (shen.hdtl V1664))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1704) (let Result (if (cons? (hd V1704)) (let Parse_X (hd (hd V1704)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1704)) (shen.hdtl V1704))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1669) (let Result (if (cons? (hd V1669)) (let Parse_X (hd (hd V1669)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1669)) (shen.hdtl V1669))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1709) (let Result (if (cons? (hd V1709)) (let Parse_X (hd (hd V1709)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1709)) (shen.hdtl V1709))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.remove-bar (V1670) (cond ((and (cons? V1670) (and (cons? (tl V1670)) (and (cons? (tl (tl V1670))) (and (= () (tl (tl (tl V1670)))) (= (hd (tl V1670)) bar!))))) (cons (hd V1670) (hd (tl (tl V1670))))) ((cons? V1670) (cons (shen.remove-bar (hd V1670)) (shen.remove-bar (tl V1670)))) (true V1670))) +(defun shen.remove-bar (V1710) (cond ((and (cons? V1710) (and (cons? (tl V1710)) (and (cons? (tl (tl V1710))) (and (= () (tl (tl (tl V1710)))) (= (hd (tl V1710)) bar!))))) (cons (hd V1710) (hd (tl (tl V1710))))) ((cons? V1710) (cons (shen.remove-bar (hd V1710)) (shen.remove-bar (tl V1710)))) (true V1710))) -(defun shen. (V1675) (let Result (let Parse_shen. (shen. V1675) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1675) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1715) (let Result (let Parse_shen. (shen. V1715) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1715) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1680) (let Result (if (cons? (hd V1680)) (let Parse_X (hd (hd V1680)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1680)) (shen.hdtl V1680))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1720) (let Result (if (cons? (hd V1720)) (let Parse_X (hd (hd V1720)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1720)) (shen.hdtl V1720))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1685) (let Result (if (and (cons? (hd V1685)) (= ! (hd (hd V1685)))) (shen.pair (hd (shen.pair (tl (hd V1685)) (shen.hdtl V1685))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1685) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1685) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1725) (let Result (if (and (cons? (hd V1725)) (= ! (hd (hd V1725)))) (shen.pair (hd (shen.pair (tl (hd V1725)) (shen.hdtl V1725))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1725) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1725) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1690) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1690) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1730) (let Result (let Parse_shen. (shen. V1730) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1730) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen.sequent (V1691 V1692) (@p V1691 V1692)) +(defun shen.sequent (V1731 V1732) (@p V1731 V1732)) -(defun shen. (V1697) (let Result (let Parse_shen. (shen. V1697) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1697) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1697) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1737) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1737) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1702) (let Result (if (cons? (hd V1702)) (let Parse_X (hd (hd V1702)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1702)) (shen.hdtl V1702))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1742) (let Result (if (cons? (hd V1742)) (let Parse_X (hd (hd V1742)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1742)) (shen.hdtl V1742))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1707) (let Result (let Parse_shen. (shen. V1707) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1707) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1747) (let Result (let Parse_shen. (shen. V1747) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1747) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1712) (let Result (let Parse_shen. (shen. V1712) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1752) (let Result (let Parse_shen. (shen. V1752) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1717) (let Result (if (cons? (hd V1717)) (let Parse_X (hd (hd V1717)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1717)) (shen.hdtl V1717))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1757) (let Result (if (cons? (hd V1757)) (let Parse_X (hd (hd V1757)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1757)) (shen.hdtl V1757))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1722) (let Result (if (cons? (hd V1722)) (let Parse_X (hd (hd V1722)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1722)) (shen.hdtl V1722))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1762) (let Result (if (cons? (hd V1762)) (let Parse_X (hd (hd V1762)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1762)) (shen.hdtl V1762))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.singleunderline? (V1723) (and (symbol? V1723) (shen.sh? (str V1723)))) +(defun shen.singleunderline? (V1763) (and (symbol? V1763) (shen.sh? (str V1763)))) -(defun shen.sh? (V1724) (cond ((= "_" V1724) true) (true (and (= (pos V1724 0) "_") (shen.sh? (tlstr V1724)))))) +(defun shen.sh? (V1764) (cond ((= "_" V1764) true) (true (and (= (pos V1764 0) "_") (shen.sh? (tlstr V1764)))))) -(defun shen.doubleunderline? (V1725) (and (symbol? V1725) (shen.dh? (str V1725)))) +(defun shen.doubleunderline? (V1765) (and (symbol? V1765) (shen.dh? (str V1765)))) -(defun shen.dh? (V1726) (cond ((= "=" V1726) true) (true (and (= (pos V1726 0) "=") (shen.dh? (tlstr V1726)))))) +(defun shen.dh? (V1766) (cond ((= "=" V1766) true) (true (and (= (pos V1766 0) "=") (shen.dh? (tlstr V1766)))))) -(defun shen.process-datatype (V1727 V1728) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1727 V1728)))) +(defun shen.process-datatype (V1767 V1768) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1767 V1768)))) -(defun shen.remember-datatype (V1733) (cond ((cons? V1733) (do (set shen.*datatypes* (adjoin (hd V1733) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1733) (value shen.*alldatatypes*))) (hd V1733)))) (true (shen.sys-error shen.remember-datatype)))) +(defun shen.remember-datatype (V1773) (cond ((cons? V1773) (do (set shen.*datatypes* (adjoin (hd V1773) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1773) (value shen.*alldatatypes*))) (hd V1773)))) (true (shen.sys-error shen.remember-datatype)))) -(defun shen.rules->horn-clauses (V1736 V1737) (cond ((= () V1737) ()) ((and (cons? V1737) (and (tuple? (hd V1737)) (= shen.single (fst (hd V1737))))) (cons (shen.rule->horn-clause V1736 (snd (hd V1737))) (shen.rules->horn-clauses V1736 (tl V1737)))) ((and (cons? V1737) (and (tuple? (hd V1737)) (= shen.double (fst (hd V1737))))) (shen.rules->horn-clauses V1736 (append (shen.double->singles (snd (hd V1737))) (tl V1737)))) (true (shen.sys-error shen.rules->horn-clauses)))) +(defun shen.rules->horn-clauses (V1776 V1777) (cond ((= () V1777) ()) ((and (cons? V1777) (and (tuple? (hd V1777)) (= shen.single (fst (hd V1777))))) (cons (shen.rule->horn-clause V1776 (snd (hd V1777))) (shen.rules->horn-clauses V1776 (tl V1777)))) ((and (cons? V1777) (and (tuple? (hd V1777)) (= shen.double (fst (hd V1777))))) (shen.rules->horn-clauses V1776 (append (shen.double->singles (snd (hd V1777))) (tl V1777)))) (true (shen.sys-error shen.rules->horn-clauses)))) -(defun shen.double->singles (V1738) (cons (shen.right-rule V1738) (cons (shen.left-rule V1738) ()))) +(defun shen.double->singles (V1778) (cons (shen.right-rule V1778) (cons (shen.left-rule V1778) ()))) -(defun shen.right-rule (V1739) (@p shen.single V1739)) +(defun shen.right-rule (V1779) (@p shen.single V1779)) -(defun shen.left-rule (V1740) (cond ((and (cons? V1740) (and (cons? (tl V1740)) (and (cons? (tl (tl V1740))) (and (tuple? (hd (tl (tl V1740)))) (and (= () (fst (hd (tl (tl V1740))))) (= () (tl (tl (tl V1740))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1740)))) ()) Q) (let NewPremises (cons (@p (map shen.right->left (hd (tl V1740))) Q) ()) (@p shen.single (cons (hd V1740) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) +(defun shen.left-rule (V1780) (cond ((and (cons? V1780) (and (cons? (tl V1780)) (and (cons? (tl (tl V1780))) (and (tuple? (hd (tl (tl V1780)))) (and (= () (fst (hd (tl (tl V1780))))) (= () (tl (tl (tl V1780))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1780)))) ()) Q) (let NewPremises (cons (@p (map (lambda X1668 (shen.right->left X1668)) (hd (tl V1780))) Q) ()) (@p shen.single (cons (hd V1780) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) -(defun shen.right->left (V1745) (cond ((and (tuple? V1745) (= () (fst V1745))) (snd V1745)) (true (simple-error "syntax error with ========== +(defun shen.right->left (V1785) (cond ((and (tuple? V1785) (= () (fst V1785))) (snd V1785)) (true (simple-error "syntax error with ========== ")))) -(defun shen.rule->horn-clause (V1746 V1747) (cond ((and (cons? V1747) (and (cons? (tl V1747)) (and (cons? (tl (tl V1747))) (and (tuple? (hd (tl (tl V1747)))) (= () (tl (tl (tl V1747)))))))) (cons (shen.rule->horn-clause-head V1746 (snd (hd (tl (tl V1747))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1747) (hd (tl V1747)) (fst (hd (tl (tl V1747))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) +(defun shen.rule->horn-clause (V1786 V1787) (cond ((and (cons? V1787) (and (cons? (tl V1787)) (and (cons? (tl (tl V1787))) (and (tuple? (hd (tl (tl V1787)))) (= () (tl (tl (tl V1787)))))))) (cons (shen.rule->horn-clause-head V1786 (snd (hd (tl (tl V1787))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1787) (hd (tl V1787)) (fst (hd (tl (tl V1787))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) -(defun shen.rule->horn-clause-head (V1748 V1749) (cons V1748 (cons (shen.mode-ify V1749) (cons Context_1957 ())))) +(defun shen.rule->horn-clause-head (V1788 V1789) (cons V1788 (cons (shen.mode-ify V1789) (cons Context_1957 ())))) -(defun shen.mode-ify (V1750) (cond ((and (cons? V1750) (and (cons? (tl V1750)) (and (= : (hd (tl V1750))) (and (cons? (tl (tl V1750))) (= () (tl (tl (tl V1750)))))))) (cons mode (cons (cons (hd V1750) (cons : (cons (cons mode (cons (hd (tl (tl V1750))) (cons + ()))) ()))) (cons - ())))) (true V1750))) +(defun shen.mode-ify (V1790) (cond ((and (cons? V1790) (and (cons? (tl V1790)) (and (= : (hd (tl V1790))) (and (cons? (tl (tl V1790))) (= () (tl (tl (tl V1790)))))))) (cons mode (cons (cons (hd V1790) (cons : (cons (cons mode (cons (hd (tl (tl V1790))) (cons + ()))) ()))) (cons - ())))) (true V1790))) -(defun shen.rule->horn-clause-body (V1751 V1752 V1753) (let Variables (map shen.extract_vars V1753) (let Predicates (map (lambda X (gensym shen.cl)) V1753) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1753 Variables) (let SideLiterals (shen.construct-side-literals V1751) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1753))) V1752) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) +(defun shen.rule->horn-clause-body (V1791 V1792 V1793) (let Variables (map (lambda X1669 (shen.extract_vars X1669)) V1793) (let Predicates (map (lambda X (gensym shen.cl)) V1793) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1793 Variables) (let SideLiterals (shen.construct-side-literals V1791) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1793))) V1792) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) -(defun shen.construct-search-literals (V1758 V1759 V1760 V1761) (cond ((and (= () V1758) (= () V1759)) ()) (true (shen.csl-help V1758 V1759 V1760 V1761)))) +(defun shen.construct-search-literals (V1798 V1799 V1800 V1801) (cond ((and (= () V1798) (= () V1799)) ()) (true (shen.csl-help V1798 V1799 V1800 V1801)))) -(defun shen.csl-help (V1764 V1765 V1766 V1767) (cond ((and (= () V1764) (= () V1765)) (cons (cons bind (cons ContextOut_1957 (cons V1766 ()))) ())) ((and (cons? V1764) (cons? V1765)) (cons (cons (hd V1764) (cons V1766 (cons V1767 (hd V1765)))) (shen.csl-help (tl V1764) (tl V1765) V1767 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) +(defun shen.csl-help (V1804 V1805 V1806 V1807) (cond ((and (= () V1804) (= () V1805)) (cons (cons bind (cons ContextOut_1957 (cons V1806 ()))) ())) ((and (cons? V1804) (cons? V1805)) (cons (cons (hd V1804) (cons V1806 (cons V1807 (hd V1805)))) (shen.csl-help (tl V1804) (tl V1805) V1807 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) -(defun shen.construct-search-clauses (V1768 V1769 V1770) (cond ((and (= () V1768) (and (= () V1769) (= () V1770))) shen.skip) ((and (cons? V1768) (and (cons? V1769) (cons? V1770))) (do (shen.construct-search-clause (hd V1768) (hd V1769) (hd V1770)) (shen.construct-search-clauses (tl V1768) (tl V1769) (tl V1770)))) (true (shen.sys-error shen.construct-search-clauses)))) +(defun shen.construct-search-clauses (V1808 V1809 V1810) (cond ((and (= () V1808) (and (= () V1809) (= () V1810))) shen.skip) ((and (cons? V1808) (and (cons? V1809) (cons? V1810))) (do (shen.construct-search-clause (hd V1808) (hd V1809) (hd V1810)) (shen.construct-search-clauses (tl V1808) (tl V1809) (tl V1810)))) (true (shen.sys-error shen.construct-search-clauses)))) -(defun shen.construct-search-clause (V1771 V1772 V1773) (shen.s-prolog (cons (shen.construct-base-search-clause V1771 V1772 V1773) (cons (shen.construct-recursive-search-clause V1771 V1772 V1773) ())))) +(defun shen.construct-search-clause (V1811 V1812 V1813) (shen.s-prolog (cons (shen.construct-base-search-clause V1811 V1812 V1813) (cons (shen.construct-recursive-search-clause V1811 V1812 V1813) ())))) -(defun shen.construct-base-search-clause (V1774 V1775 V1776) (cons (cons V1774 (cons (cons (shen.mode-ify V1775) In_1957) (cons In_1957 V1776))) (cons :- (cons () ())))) +(defun shen.construct-base-search-clause (V1814 V1815 V1816) (cons (cons V1814 (cons (cons (shen.mode-ify V1815) In_1957) (cons In_1957 V1816))) (cons :- (cons () ())))) -(defun shen.construct-recursive-search-clause (V1777 V1778 V1779) (cons (cons V1777 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1779))) (cons :- (cons (cons (cons V1777 (cons Assumptions_1957 (cons Out_1957 V1779))) ()) ())))) +(defun shen.construct-recursive-search-clause (V1817 V1818 V1819) (cons (cons V1817 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1819))) (cons :- (cons (cons (cons V1817 (cons Assumptions_1957 (cons Out_1957 V1819))) ()) ())))) -(defun shen.construct-side-literals (V1784) (cond ((= () V1784) ()) ((and (cons? V1784) (and (cons? (hd V1784)) (and (= if (hd (hd V1784))) (and (cons? (tl (hd V1784))) (= () (tl (tl (hd V1784)))))))) (cons (cons when (tl (hd V1784))) (shen.construct-side-literals (tl V1784)))) ((and (cons? V1784) (and (cons? (hd V1784)) (and (= let (hd (hd V1784))) (and (cons? (tl (hd V1784))) (and (cons? (tl (tl (hd V1784)))) (= () (tl (tl (tl (hd V1784)))))))))) (cons (cons is (tl (hd V1784))) (shen.construct-side-literals (tl V1784)))) ((cons? V1784) (shen.construct-side-literals (tl V1784))) (true (shen.sys-error shen.construct-side-literals)))) +(defun shen.construct-side-literals (V1824) (cond ((= () V1824) ()) ((and (cons? V1824) (and (cons? (hd V1824)) (and (= if (hd (hd V1824))) (and (cons? (tl (hd V1824))) (= () (tl (tl (hd V1824)))))))) (cons (cons when (tl (hd V1824))) (shen.construct-side-literals (tl V1824)))) ((and (cons? V1824) (and (cons? (hd V1824)) (and (= let (hd (hd V1824))) (and (cons? (tl (hd V1824))) (and (cons? (tl (tl (hd V1824)))) (= () (tl (tl (tl (hd V1824)))))))))) (cons (cons is (tl (hd V1824))) (shen.construct-side-literals (tl V1824)))) ((cons? V1824) (shen.construct-side-literals (tl V1824))) (true (shen.sys-error shen.construct-side-literals)))) -(defun shen.construct-premiss-literal (V1789 V1790) (cond ((tuple? V1789) (cons shen.t* (cons (shen.recursive_cons_form (snd V1789)) (cons (shen.construct-context V1790 (fst V1789)) ())))) ((= ! V1789) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) +(defun shen.construct-premiss-literal (V1829 V1830) (cond ((tuple? V1829) (cons shen.t* (cons (shen.recursive_cons_form (snd V1829)) (cons (shen.construct-context V1830 (fst V1829)) ())))) ((= ! V1829) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) -(defun shen.construct-context (V1791 V1792) (cond ((and (= true V1791) (= () V1792)) Context_1957) ((and (= false V1791) (= () V1792)) ContextOut_1957) ((cons? V1792) (cons cons (cons (shen.recursive_cons_form (hd V1792)) (cons (shen.construct-context V1791 (tl V1792)) ())))) (true (shen.sys-error shen.construct-context)))) +(defun shen.construct-context (V1831 V1832) (cond ((and (= true V1831) (= () V1832)) Context_1957) ((and (= false V1831) (= () V1832)) ContextOut_1957) ((cons? V1832) (cons cons (cons (shen.recursive_cons_form (hd V1832)) (cons (shen.construct-context V1831 (tl V1832)) ())))) (true (shen.sys-error shen.construct-context)))) -(defun shen.recursive_cons_form (V1793) (cond ((cons? V1793) (cons cons (cons (shen.recursive_cons_form (hd V1793)) (cons (shen.recursive_cons_form (tl V1793)) ())))) (true V1793))) +(defun shen.recursive_cons_form (V1833) (cond ((cons? V1833) (cons cons (cons (shen.recursive_cons_form (hd V1833)) (cons (shen.recursive_cons_form (tl V1833)) ())))) (true V1833))) -(defun preclude (V1794) (shen.preclude-h (map shen.intern-type V1794))) +(defun preclude (V1834) (shen.preclude-h (map (lambda X1670 (shen.intern-type X1670)) V1834))) -(defun shen.preclude-h (V1795) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1795)) (value shen.*datatypes*))) +(defun shen.preclude-h (V1835) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1835)) (value shen.*datatypes*))) -(defun include (V1796) (shen.include-h (map shen.intern-type V1796))) +(defun include (V1836) (shen.include-h (map (lambda X1671 (shen.intern-type X1671)) V1836))) -(defun shen.include-h (V1797) (let ValidTypes (intersection V1797 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) +(defun shen.include-h (V1837) (let ValidTypes (intersection V1837 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) -(defun preclude-all-but (V1798) (shen.preclude-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1798)))) +(defun preclude-all-but (V1838) (shen.preclude-h (difference (value shen.*alldatatypes*) (map (lambda X1672 (shen.intern-type X1672)) V1838)))) -(defun include-all-but (V1799) (shen.include-h (difference (value shen.*alldatatypes*) (map shen.intern-type V1799)))) +(defun include-all-but (V1839) (shen.include-h (difference (value shen.*alldatatypes*) (map (lambda X1673 (shen.intern-type X1673)) V1839)))) -(defun shen.synonyms-help (V1804) (cond ((= () V1804) synonyms) ((and (cons? V1804) (cons? (tl V1804))) (do (shen.pushnew (cons (hd V1804) (shen.curry-type (hd (tl V1804)))) shen.*synonyms*) (shen.synonyms-help (tl (tl V1804))))) (true (simple-error (cn "odd number of synonyms -" ""))))) +(defun shen.synonyms-help (V1844) (cond ((= () V1844) (shen.demodulation-function (value shen.*tc*) (mapcan (lambda X1674 (shen.demod-rule X1674)) (value shen.*synonyms*)))) ((and (cons? V1844) (cons? (tl V1844))) (do (shen.pushnew (cons (hd V1844) (cons (hd (tl V1844)) ())) shen.*synonyms*) (shen.synonyms-help (tl (tl V1844))))) (true (simple-error "odd number of synonyms +")))) + +(defun shen.pushnew (V1845 V1846) (if (element? V1845 (value V1846)) (value V1846) (set V1846 (cons V1845 (value V1846))))) + +(defun shen.demod-rule (V1847) (cond ((and (cons? V1847) (and (cons? (tl V1847)) (= () (tl (tl V1847))))) (cons (shen.rcons_form (hd V1847)) (cons -> (cons (shen.rcons_form (hd (tl V1847))) ())))) (true (shen.sys-error shen.demod-rule)))) + +(defun shen.demodulation-function (V1848 V1849) (do (tc -) (do (eval (cons define (cons shen.demod (append V1849 (shen.default-rule))))) (do (if V1848 (tc +) shen.skip) synonyms)))) -(defun shen.pushnew (V1805 V1806) (if (element? V1805 (value V1806)) (value V1806) (set V1806 (cons V1805 (value V1806))))) +(defun shen.default-rule () (cons X (cons -> (cons X ())))) diff --git a/shen/klambda/sys.kl b/shen/klambda/sys.kl index ab6e37f..ec2c17c 100644 --- a/shen/klambda/sys.kl +++ b/shen/klambda/sys.kl @@ -47,210 +47,210 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun thaw (V1809) (V1809)) +"(defun thaw (V1855) (V1855)) -(defun eval (V1810) (let Macroexpand (shen.walk (lambda V1807 (macroexpand V1807)) V1810) (if (shen.packaged? Macroexpand) (map shen.eval-without-macros (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) +(defun eval (V1856) (let Macroexpand (shen.walk (lambda X1850 (macroexpand X1850)) V1856) (if (shen.packaged? Macroexpand) (map (lambda X1851 (shen.eval-without-macros X1851)) (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) -(defun shen.eval-without-macros (V1811) (eval-kl (shen.elim-def (shen.proc-input+ V1811)))) +(defun shen.eval-without-macros (V1857) (eval-kl (shen.elim-def (shen.proc-input+ V1857)))) -(defun shen.proc-input+ (V1812) (cond ((and (cons? V1812) (and (= input+ (hd V1812)) (and (cons? (tl V1812)) (and (cons? (tl (tl V1812))) (= () (tl (tl (tl V1812)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1812))) (tl (tl V1812))))) ((and (cons? V1812) (and (= read+ (hd V1812)) (and (cons? (tl V1812)) (and (cons? (tl (tl V1812))) (= () (tl (tl (tl V1812)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1812))) (tl (tl V1812))))) ((cons? V1812) (map shen.proc-input+ V1812)) (true V1812))) +(defun shen.proc-input+ (V1858) (cond ((and (cons? V1858) (and (= input+ (hd V1858)) (and (cons? (tl V1858)) (and (cons? (tl (tl V1858))) (= () (tl (tl (tl V1858)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1858))) (tl (tl V1858))))) ((and (cons? V1858) (and (= read+ (hd V1858)) (and (cons? (tl V1858)) (and (cons? (tl (tl V1858))) (= () (tl (tl (tl V1858)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1858))) (tl (tl V1858))))) ((cons? V1858) (map (lambda X1852 (shen.proc-input+ X1852)) V1858)) (true V1858))) -(defun shen.elim-def (V1813) (cond ((and (cons? V1813) (and (= define (hd V1813)) (cons? (tl V1813)))) (shen.shen->kl (hd (tl V1813)) (tl (tl V1813)))) ((and (cons? V1813) (and (= defmacro (hd V1813)) (cons? (tl V1813)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1813)) (append (tl (tl V1813)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1813))) Def)))) ((and (cons? V1813) (and (= defcc (hd V1813)) (cons? (tl V1813)))) (shen.elim-def (shen.yacc V1813))) ((cons? V1813) (map shen.elim-def V1813)) (true V1813))) +(defun shen.elim-def (V1859) (cond ((and (cons? V1859) (and (= define (hd V1859)) (cons? (tl V1859)))) (shen.shen->kl (hd (tl V1859)) (tl (tl V1859)))) ((and (cons? V1859) (and (= defmacro (hd V1859)) (cons? (tl V1859)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1859)) (append (tl (tl V1859)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1859))) Def)))) ((and (cons? V1859) (and (= defcc (hd V1859)) (cons? (tl V1859)))) (shen.elim-def (shen.yacc V1859))) ((cons? V1859) (map (lambda X1853 (shen.elim-def X1853)) V1859)) (true V1859))) -(defun shen.add-macro (V1814) (set *macros* (adjoin V1814 (value *macros*)))) +(defun shen.add-macro (V1860) (set *macros* (adjoin V1860 (value *macros*)))) -(defun shen.packaged? (V1821) (cond ((and (cons? V1821) (and (= package (hd V1821)) (and (cons? (tl V1821)) (cons? (tl (tl V1821)))))) true) (true false))) +(defun shen.packaged? (V1867) (cond ((and (cons? V1867) (and (= package (hd V1867)) (and (cons? (tl V1867)) (cons? (tl (tl V1867)))))) true) (true false))) -(defun external (V1822) (trap-error (get V1822 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1822 " has not been used. +(defun external (V1868) (trap-error (get V1868 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1868 " has not been used. " shen.a)))))) -(defun shen.package-contents (V1825) (cond ((and (cons? V1825) (and (= package (hd V1825)) (and (cons? (tl V1825)) (and (= null (hd (tl V1825))) (cons? (tl (tl V1825))))))) (tl (tl (tl V1825)))) ((and (cons? V1825) (and (= package (hd V1825)) (and (cons? (tl V1825)) (cons? (tl (tl V1825)))))) (shen.packageh (hd (tl V1825)) (hd (tl (tl V1825))) (tl (tl (tl V1825))))) (true (shen.sys-error shen.package-contents)))) +(defun shen.package-contents (V1871) (cond ((and (cons? V1871) (and (= package (hd V1871)) (and (cons? (tl V1871)) (and (= null (hd (tl V1871))) (cons? (tl (tl V1871))))))) (tl (tl (tl V1871)))) ((and (cons? V1871) (and (= package (hd V1871)) (and (cons? (tl V1871)) (cons? (tl (tl V1871)))))) (shen.packageh (hd (tl V1871)) (hd (tl (tl V1871))) (tl (tl (tl V1871))))) (true (shen.sys-error shen.package-contents)))) -(defun shen.walk (V1826 V1827) (cond ((cons? V1827) (V1826 (map (lambda Z (shen.walk V1826 Z)) V1827))) (true (V1826 V1827)))) +(defun shen.walk (V1872 V1873) (cond ((cons? V1873) (V1872 (map (lambda Z (shen.walk V1872 Z)) V1873))) (true (V1872 V1873)))) -(defun compile (V1828 V1829 V1830) (let O (V1828 (cons V1829 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1830 O) (shen.hdtl O)))) +(defun compile (V1874 V1875 V1876) (let O (V1874 (cons V1875 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1876 O) (shen.hdtl O)))) -(defun fail-if (V1831 V1832) (if (V1831 V1832) (fail) V1832)) +(defun fail-if (V1877 V1878) (if (V1877 V1878) (fail) V1878)) -(defun @s (V1833 V1834) (cn V1833 V1834)) +(defun @s (V1879 V1880) (cn V1879 V1880)) (defun tc? () (value shen.*tc*)) -(defun ps (V1835) (trap-error (get V1835 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1835 " not found. +(defun ps (V1881) (trap-error (get V1881 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1881 " not found. " shen.a))))) (defun stinput () (value *stinput*)) -(defun shen.+vector? (V1836) (and (absvector? V1836) (> (<-address V1836 0) 0))) +(defun shen.+vector? (V1882) (and (absvector? V1882) (> (<-address V1882 0) 0))) -(defun vector (V1837) (let Vector (absvector (+ V1837 1)) (let ZeroStamp (address-> Vector 0 V1837) (let Standard (if (= V1837 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1837 (fail))) Standard)))) +(defun vector (V1883) (let Vector (absvector (+ V1883 1)) (let ZeroStamp (address-> Vector 0 V1883) (let Standard (if (= V1883 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1883 (fail))) Standard)))) -(defun shen.fillvector (V1838 V1839 V1840 V1841) (cond ((= V1840 V1839) (address-> V1838 V1840 V1841)) (true (shen.fillvector (address-> V1838 V1839 V1841) (+ 1 V1839) V1840 V1841)))) +(defun shen.fillvector (V1884 V1885 V1886 V1887) (cond ((= V1886 V1885) (address-> V1884 V1886 V1887)) (true (shen.fillvector (address-> V1884 V1885 V1887) (+ 1 V1885) V1886 V1887)))) -(defun vector? (V1843) (and (absvector? V1843) (trap-error (>= (<-address V1843 0) 0) (lambda E false)))) +(defun vector? (V1889) (and (absvector? V1889) (trap-error (>= (<-address V1889 0) 0) (lambda E false)))) -(defun vector-> (V1844 V1845 V1846) (if (= V1845 0) (simple-error "cannot access 0th element of a vector -") (address-> V1844 V1845 V1846))) +(defun vector-> (V1890 V1891 V1892) (if (= V1891 0) (simple-error "cannot access 0th element of a vector +") (address-> V1890 V1891 V1892))) -(defun <-vector (V1847 V1848) (if (= V1848 0) (simple-error "cannot access 0th element of a vector -") (let VectorElement (<-address V1847 V1848) (if (= VectorElement (fail)) (simple-error "vector element not found +(defun <-vector (V1893 V1894) (if (= V1894 0) (simple-error "cannot access 0th element of a vector +") (let VectorElement (<-address V1893 V1894) (if (= VectorElement (fail)) (simple-error "vector element not found ") VectorElement)))) -(defun shen.posint? (V1849) (and (integer? V1849) (>= V1849 0))) +(defun shen.posint? (V1895) (and (integer? V1895) (>= V1895 0))) -(defun limit (V1850) (<-address V1850 0)) +(defun limit (V1896) (<-address V1896 0)) -(defun symbol? (V1851) (cond ((or (boolean? V1851) (or (number? V1851) (string? V1851))) false) (true (trap-error (let String (str V1851) (shen.analyse-symbol? String)) (lambda E false))))) +(defun symbol? (V1897) (cond ((or (boolean? V1897) (or (number? V1897) (string? V1897))) false) (true (trap-error (let String (str V1897) (shen.analyse-symbol? String)) (lambda E false))))) -(defun shen.analyse-symbol? (V1852) (cond ((shen.+string? V1852) (and (shen.alpha? (pos V1852 0)) (shen.alphanums? (tlstr V1852)))) (true (shen.sys-error shen.analyse-symbol?)))) +(defun shen.analyse-symbol? (V1898) (cond ((shen.+string? V1898) (and (shen.alpha? (pos V1898 0)) (shen.alphanums? (tlstr V1898)))) (true (shen.sys-error shen.analyse-symbol?)))) -(defun shen.alpha? (V1853) (element? V1853 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(defun shen.alpha? (V1899) (element? V1899 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -(defun shen.alphanums? (V1854) (cond ((= "" V1854) true) ((shen.+string? V1854) (and (shen.alphanum? (pos V1854 0)) (shen.alphanums? (tlstr V1854)))) (true (shen.sys-error shen.alphanums?)))) +(defun shen.alphanums? (V1900) (cond ((= "" V1900) true) ((shen.+string? V1900) (and (shen.alphanum? (pos V1900 0)) (shen.alphanums? (tlstr V1900)))) (true (shen.sys-error shen.alphanums?)))) -(defun shen.alphanum? (V1855) (or (shen.alpha? V1855) (shen.digit? V1855))) +(defun shen.alphanum? (V1901) (or (shen.alpha? V1901) (shen.digit? V1901))) -(defun shen.digit? (V1856) (element? V1856 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) +(defun shen.digit? (V1902) (element? V1902 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) -(defun variable? (V1857) (cond ((or (boolean? V1857) (or (number? V1857) (string? V1857))) false) (true (trap-error (let String (str V1857) (shen.analyse-variable? String)) (lambda E false))))) +(defun variable? (V1903) (cond ((or (boolean? V1903) (or (number? V1903) (string? V1903))) false) (true (trap-error (let String (str V1903) (shen.analyse-variable? String)) (lambda E false))))) -(defun shen.analyse-variable? (V1858) (cond ((shen.+string? V1858) (and (shen.uppercase? (pos V1858 0)) (shen.alphanums? (tlstr V1858)))) (true (shen.sys-error shen.analyse-variable?)))) +(defun shen.analyse-variable? (V1904) (cond ((shen.+string? V1904) (and (shen.uppercase? (pos V1904 0)) (shen.alphanums? (tlstr V1904)))) (true (shen.sys-error shen.analyse-variable?)))) -(defun shen.uppercase? (V1859) (element? V1859 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) +(defun shen.uppercase? (V1905) (element? V1905 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) -(defun gensym (V1860) (concat V1860 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) +(defun gensym (V1906) (concat V1906 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) -(defun concat (V1861 V1862) (intern (cn (str V1861) (str V1862)))) +(defun concat (V1907 V1908) (intern (cn (str V1907) (str V1908)))) -(defun @p (V1863 V1864) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1863) (let Snd (address-> Vector 2 V1864) Vector))))) +(defun @p (V1909 V1910) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1909) (let Snd (address-> Vector 2 V1910) Vector))))) -(defun fst (V1865) (<-address V1865 1)) +(defun fst (V1911) (<-address V1911 1)) -(defun snd (V1866) (<-address V1866 2)) +(defun snd (V1912) (<-address V1912 2)) -(defun tuple? (V1867) (trap-error (and (absvector? V1867) (= shen.tuple (<-address V1867 0))) (lambda E false))) +(defun tuple? (V1913) (trap-error (and (absvector? V1913) (= shen.tuple (<-address V1913 0))) (lambda E false))) -(defun append (V1868 V1869) (cond ((= () V1868) V1869) ((cons? V1868) (cons (hd V1868) (append (tl V1868) V1869))) (true (shen.sys-error append)))) +(defun append (V1914 V1915) (cond ((= () V1914) V1915) ((cons? V1914) (cons (hd V1914) (append (tl V1914) V1915))) (true (shen.sys-error append)))) -(defun @v (V1870 V1871) (let Limit (limit V1871) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1870) (if (= Limit 0) X+NewVector (shen.@v-help V1871 1 Limit X+NewVector)))))) +(defun @v (V1916 V1917) (let Limit (limit V1917) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1916) (if (= Limit 0) X+NewVector (shen.@v-help V1917 1 Limit X+NewVector)))))) -(defun shen.@v-help (V1872 V1873 V1874 V1875) (cond ((= V1874 V1873) (shen.copyfromvector V1872 V1875 V1874 (+ V1874 1))) (true (shen.@v-help V1872 (+ V1873 1) V1874 (shen.copyfromvector V1872 V1875 V1873 (+ V1873 1)))))) +(defun shen.@v-help (V1918 V1919 V1920 V1921) (cond ((= V1920 V1919) (shen.copyfromvector V1918 V1921 V1920 (+ V1920 1))) (true (shen.@v-help V1918 (+ V1919 1) V1920 (shen.copyfromvector V1918 V1921 V1919 (+ V1919 1)))))) -(defun shen.copyfromvector (V1877 V1878 V1879 V1880) (trap-error (vector-> V1878 V1880 (<-vector V1877 V1879)) (lambda E V1878))) +(defun shen.copyfromvector (V1923 V1924 V1925 V1926) (trap-error (vector-> V1924 V1926 (<-vector V1923 V1925)) (lambda E V1924))) -(defun hdv (V1881) (trap-error (<-vector V1881 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1881 " +(defun hdv (V1927) (trap-error (<-vector V1927 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1927 " " shen.s)))))) -(defun tlv (V1882) (let Limit (limit V1882) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector -") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1882 2 Limit (vector (- Limit 1)))))))) +(defun tlv (V1928) (let Limit (limit V1928) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector +") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1928 2 Limit (vector (- Limit 1)))))))) -(defun shen.tlv-help (V1883 V1884 V1885 V1886) (cond ((= V1885 V1884) (shen.copyfromvector V1883 V1886 V1885 (- V1885 1))) (true (shen.tlv-help V1883 (+ V1884 1) V1885 (shen.copyfromvector V1883 V1886 V1884 (- V1884 1)))))) +(defun shen.tlv-help (V1929 V1930 V1931 V1932) (cond ((= V1931 V1930) (shen.copyfromvector V1929 V1932 V1931 (- V1931 1))) (true (shen.tlv-help V1929 (+ V1930 1) V1931 (shen.copyfromvector V1929 V1932 V1930 (- V1930 1)))))) -(defun assoc (V1896 V1897) (cond ((= () V1897) ()) ((and (cons? V1897) (and (cons? (hd V1897)) (= (hd (hd V1897)) V1896))) (hd V1897)) ((cons? V1897) (assoc V1896 (tl V1897))) (true (shen.sys-error assoc)))) +(defun assoc (V1942 V1943) (cond ((= () V1943) ()) ((and (cons? V1943) (and (cons? (hd V1943)) (= (hd (hd V1943)) V1942))) (hd V1943)) ((cons? V1943) (assoc V1942 (tl V1943))) (true (shen.sys-error assoc)))) -(defun boolean? (V1903) (cond ((= true V1903) true) ((= false V1903) true) (true false))) +(defun boolean? (V1949) (cond ((= true V1949) true) ((= false V1949) true) (true false))) -(defun nl (V1904) (cond ((= 0 V1904) 0) (true (do (shen.prhush " -" (stoutput)) (nl (- V1904 1)))))) +(defun nl (V1950) (cond ((= 0 V1950) 0) (true (do (shen.prhush " +" (stoutput)) (nl (- V1950 1)))))) -(defun difference (V1907 V1908) (cond ((= () V1907) ()) ((cons? V1907) (if (element? (hd V1907) V1908) (difference (tl V1907) V1908) (cons (hd V1907) (difference (tl V1907) V1908)))) (true (shen.sys-error difference)))) +(defun difference (V1953 V1954) (cond ((= () V1953) ()) ((cons? V1953) (if (element? (hd V1953) V1954) (difference (tl V1953) V1954) (cons (hd V1953) (difference (tl V1953) V1954)))) (true (shen.sys-error difference)))) -(defun do (V1909 V1910) V1910) +(defun do (V1955 V1956) V1956) -(defun element? (V1919 V1920) (cond ((= () V1920) false) ((and (cons? V1920) (= (hd V1920) V1919)) true) ((cons? V1920) (element? V1919 (tl V1920))) (true (shen.sys-error element?)))) +(defun element? (V1965 V1966) (cond ((= () V1966) false) ((and (cons? V1966) (= (hd V1966) V1965)) true) ((cons? V1966) (element? V1965 (tl V1966))) (true (shen.sys-error element?)))) -(defun empty? (V1926) (cond ((= () V1926) true) (true false))) +(defun empty? (V1972) (cond ((= () V1972) true) (true false))) -(defun fix (V1927 V1928) (shen.fix-help V1927 V1928 (V1927 V1928))) +(defun fix (V1973 V1974) (shen.fix-help V1973 V1974 (V1973 V1974))) -(defun shen.fix-help (V1935 V1936 V1937) (cond ((= V1937 V1936) V1937) (true (shen.fix-help V1935 V1937 (V1935 V1937))))) +(defun shen.fix-help (V1981 V1982 V1983) (cond ((= V1983 V1982) V1983) (true (shen.fix-help V1981 V1983 (V1981 V1983))))) -(defun put (V1939 V1940 V1941 V1942) (let N (hash V1939 (limit V1942)) (let Entry (trap-error (<-vector V1942 N) (lambda E ())) (let Change (vector-> V1942 N (shen.change-pointer-value V1939 V1940 V1941 Entry)) V1941)))) +(defun put (V1985 V1986 V1987 V1988) (let N (hash V1985 (limit V1988)) (let Entry (trap-error (<-vector V1988 N) (lambda E ())) (let Change (vector-> V1988 N (shen.change-pointer-value V1985 V1986 V1987 Entry)) V1987)))) -(defun shen.change-pointer-value (V1945 V1946 V1947 V1948) (cond ((= () V1948) (cons (cons (cons V1945 (cons V1946 ())) V1947) ())) ((and (cons? V1948) (and (cons? (hd V1948)) (and (cons? (hd (hd V1948))) (and (cons? (tl (hd (hd V1948)))) (and (= () (tl (tl (hd (hd V1948))))) (and (= (hd (tl (hd (hd V1948)))) V1946) (= (hd (hd (hd V1948))) V1945))))))) (cons (cons (hd (hd V1948)) V1947) (tl V1948))) ((cons? V1948) (cons (hd V1948) (shen.change-pointer-value V1945 V1946 V1947 (tl V1948)))) (true (shen.sys-error shen.change-pointer-value)))) +(defun shen.change-pointer-value (V1991 V1992 V1993 V1994) (cond ((= () V1994) (cons (cons (cons V1991 (cons V1992 ())) V1993) ())) ((and (cons? V1994) (and (cons? (hd V1994)) (and (cons? (hd (hd V1994))) (and (cons? (tl (hd (hd V1994)))) (and (= () (tl (tl (hd (hd V1994))))) (and (= (hd (tl (hd (hd V1994)))) V1992) (= (hd (hd (hd V1994))) V1991))))))) (cons (cons (hd (hd V1994)) V1993) (tl V1994))) ((cons? V1994) (cons (hd V1994) (shen.change-pointer-value V1991 V1992 V1993 (tl V1994)))) (true (shen.sys-error shen.change-pointer-value)))) -(defun get (V1951 V1952 V1953) (let N (hash V1951 (limit V1953)) (let Entry (trap-error (<-vector V1953 N) (lambda E (simple-error "pointer not found -"))) (let Result (assoc (cons V1951 (cons V1952 ())) Entry) (if (empty? Result) (simple-error "value not found +(defun get (V1997 V1998 V1999) (let N (hash V1997 (limit V1999)) (let Entry (trap-error (<-vector V1999 N) (lambda E (simple-error "pointer not found +"))) (let Result (assoc (cons V1997 (cons V1998 ())) Entry) (if (empty? Result) (simple-error "value not found ") (tl Result)))))) -(defun hash (V1954 V1955) (let Hash (shen.mod (sum (map (lambda V1808 (string->n V1808)) (explode V1954))) V1955) (if (= 0 Hash) 1 Hash))) +(defun hash (V2000 V2001) (let Hash (shen.mod (sum (map (lambda X1854 (string->n X1854)) (explode V2000))) V2001) (if (= 0 Hash) 1 Hash))) -(defun shen.mod (V1956 V1957) (shen.modh V1956 (shen.multiples V1956 (cons V1957 ())))) +(defun shen.mod (V2002 V2003) (shen.modh V2002 (shen.multiples V2002 (cons V2003 ())))) -(defun shen.multiples (V1958 V1959) (cond ((and (cons? V1959) (> (hd V1959) V1958)) (tl V1959)) ((cons? V1959) (shen.multiples V1958 (cons (* 2 (hd V1959)) V1959))) (true (shen.sys-error shen.multiples)))) +(defun shen.multiples (V2004 V2005) (cond ((and (cons? V2005) (> (hd V2005) V2004)) (tl V2005)) ((cons? V2005) (shen.multiples V2004 (cons (* 2 (hd V2005)) V2005))) (true (shen.sys-error shen.multiples)))) -(defun shen.modh (V1962 V1963) (cond ((= 0 V1962) 0) ((= () V1963) V1962) ((and (cons? V1963) (> (hd V1963) V1962)) (if (empty? (tl V1963)) V1962 (shen.modh V1962 (tl V1963)))) ((cons? V1963) (shen.modh (- V1962 (hd V1963)) V1963)) (true (shen.sys-error shen.modh)))) +(defun shen.modh (V2008 V2009) (cond ((= 0 V2008) 0) ((= () V2009) V2008) ((and (cons? V2009) (> (hd V2009) V2008)) (if (empty? (tl V2009)) V2008 (shen.modh V2008 (tl V2009)))) ((cons? V2009) (shen.modh (- V2008 (hd V2009)) V2009)) (true (shen.sys-error shen.modh)))) -(defun sum (V1964) (cond ((= () V1964) 0) ((cons? V1964) (+ (hd V1964) (sum (tl V1964)))) (true (shen.sys-error sum)))) +(defun sum (V2010) (cond ((= () V2010) 0) ((cons? V2010) (+ (hd V2010) (sum (tl V2010)))) (true (shen.sys-error sum)))) -(defun head (V1971) (cond ((cons? V1971) (hd V1971)) (true (simple-error "head expects a non-empty list")))) +(defun head (V2017) (cond ((cons? V2017) (hd V2017)) (true (simple-error "head expects a non-empty list")))) -(defun tail (V1978) (cond ((cons? V1978) (tl V1978)) (true (simple-error "tail expects a non-empty list")))) +(defun tail (V2024) (cond ((cons? V2024) (tl V2024)) (true (simple-error "tail expects a non-empty list")))) -(defun hdstr (V1979) (pos V1979 0)) +(defun hdstr (V2025) (pos V2025 0)) -(defun intersection (V1982 V1983) (cond ((= () V1982) ()) ((cons? V1982) (if (element? (hd V1982) V1983) (cons (hd V1982) (intersection (tl V1982) V1983)) (intersection (tl V1982) V1983))) (true (shen.sys-error intersection)))) +(defun intersection (V2028 V2029) (cond ((= () V2028) ()) ((cons? V2028) (if (element? (hd V2028) V2029) (cons (hd V2028) (intersection (tl V2028) V2029)) (intersection (tl V2028) V2029))) (true (shen.sys-error intersection)))) -(defun reverse (V1984) (shen.reverse_help V1984 ())) +(defun reverse (V2030) (shen.reverse_help V2030 ())) -(defun shen.reverse_help (V1985 V1986) (cond ((= () V1985) V1986) ((cons? V1985) (shen.reverse_help (tl V1985) (cons (hd V1985) V1986))) (true (shen.sys-error shen.reverse_help)))) +(defun shen.reverse_help (V2031 V2032) (cond ((= () V2031) V2032) ((cons? V2031) (shen.reverse_help (tl V2031) (cons (hd V2031) V2032))) (true (shen.sys-error shen.reverse_help)))) -(defun union (V1987 V1988) (cond ((= () V1987) V1988) ((cons? V1987) (if (element? (hd V1987) V1988) (union (tl V1987) V1988) (cons (hd V1987) (union (tl V1987) V1988)))) (true (shen.sys-error union)))) +(defun union (V2033 V2034) (cond ((= () V2033) V2034) ((cons? V2033) (if (element? (hd V2033) V2034) (union (tl V2033) V2034) (cons (hd V2033) (union (tl V2033) V2034)))) (true (shen.sys-error union)))) -(defun y-or-n? (V1989) (let Message (shen.prhush (shen.proc-nl V1989) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n -" (stoutput)) (y-or-n? V1989)))))))) +(defun y-or-n? (V2035) (let Message (shen.prhush (shen.proc-nl V2035) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n +" (stoutput)) (y-or-n? V2035)))))))) -(defun not (V1990) (if V1990 false true)) +(defun not (V2036) (if V2036 false true)) -(defun subst (V1999 V2000 V2001) (cond ((= V2001 V2000) V1999) ((cons? V2001) (cons (subst V1999 V2000 (hd V2001)) (subst V1999 V2000 (tl V2001)))) (true V2001))) +(defun subst (V2045 V2046 V2047) (cond ((= V2047 V2046) V2045) ((cons? V2047) (cons (subst V2045 V2046 (hd V2047)) (subst V2045 V2046 (tl V2047)))) (true V2047))) -(defun explode (V2003) (shen.explode-h (shen.app V2003 "" shen.a))) +(defun explode (V2049) (shen.explode-h (shen.app V2049 "" shen.a))) -(defun shen.explode-h (V2004) (cond ((= "" V2004) ()) ((shen.+string? V2004) (cons (pos V2004 0) (shen.explode-h (tlstr V2004)))) (true (shen.sys-error shen.explode-h)))) +(defun shen.explode-h (V2050) (cond ((= "" V2050) ()) ((shen.+string? V2050) (cons (pos V2050 0) (shen.explode-h (tlstr V2050)))) (true (shen.sys-error shen.explode-h)))) -(defun cd (V2005) (set *home-directory* (if (= V2005 "") "" (shen.app V2005 "/" shen.a)))) +(defun cd (V2051) (set *home-directory* (if (= V2051 "") "" (shen.app V2051 "/" shen.a)))) -(defun map (V2006 V2007) (shen.map-h V2006 V2007 ())) +(defun map (V2052 V2053) (shen.map-h V2052 V2053 ())) -(defun shen.map-h (V2010 V2011 V2012) (cond ((= () V2011) (reverse V2012)) ((cons? V2011) (shen.map-h V2010 (tl V2011) (cons (V2010 (hd V2011)) V2012))) (true (shen.sys-error shen.map-h)))) +(defun shen.map-h (V2056 V2057 V2058) (cond ((= () V2057) (reverse V2058)) ((cons? V2057) (shen.map-h V2056 (tl V2057) (cons (V2056 (hd V2057)) V2058))) (true (shen.sys-error shen.map-h)))) -(defun length (V2013) (shen.length-h V2013 0)) +(defun length (V2059) (shen.length-h V2059 0)) -(defun shen.length-h (V2014 V2015) (cond ((= () V2014) V2015) (true (shen.length-h (tl V2014) (+ V2015 1))))) +(defun shen.length-h (V2060 V2061) (cond ((= () V2060) V2061) (true (shen.length-h (tl V2060) (+ V2061 1))))) -(defun occurrences (V2024 V2025) (cond ((= V2025 V2024) 1) ((cons? V2025) (+ (occurrences V2024 (hd V2025)) (occurrences V2024 (tl V2025)))) (true 0))) +(defun occurrences (V2070 V2071) (cond ((= V2071 V2070) 1) ((cons? V2071) (+ (occurrences V2070 (hd V2071)) (occurrences V2070 (tl V2071)))) (true 0))) -(defun nth (V2033 V2034) (cond ((and (= 1 V2033) (cons? V2034)) (hd V2034)) ((cons? V2034) (nth (- V2033 1) (tl V2034))) (true (shen.sys-error nth)))) +(defun nth (V2079 V2080) (cond ((and (= 1 V2079) (cons? V2080)) (hd V2080)) ((cons? V2080) (nth (- V2079 1) (tl V2080))) (true (shen.sys-error nth)))) -(defun integer? (V2035) (and (number? V2035) (let Abs (shen.abs V2035) (shen.integer-test? Abs (shen.magless Abs 1))))) +(defun integer? (V2081) (and (number? V2081) (let Abs (shen.abs V2081) (shen.integer-test? Abs (shen.magless Abs 1))))) -(defun shen.abs (V2036) (if (> V2036 0) V2036 (- 0 V2036))) +(defun shen.abs (V2082) (if (> V2082 0) V2082 (- 0 V2082))) -(defun shen.magless (V2037 V2038) (let Nx2 (* V2038 2) (if (> Nx2 V2037) V2038 (shen.magless V2037 Nx2)))) +(defun shen.magless (V2083 V2084) (let Nx2 (* V2084 2) (if (> Nx2 V2083) V2084 (shen.magless V2083 Nx2)))) -(defun shen.integer-test? (V2042 V2043) (cond ((= 0 V2042) true) ((> 1 V2042) false) (true (let Abs-N (- V2042 V2043) (if (> 0 Abs-N) (integer? V2042) (shen.integer-test? Abs-N V2043)))))) +(defun shen.integer-test? (V2088 V2089) (cond ((= 0 V2088) true) ((> 1 V2088) false) (true (let Abs-N (- V2088 V2089) (if (> 0 Abs-N) (integer? V2088) (shen.integer-test? Abs-N V2089)))))) -(defun mapcan (V2046 V2047) (cond ((= () V2047) ()) ((cons? V2047) (append (V2046 (hd V2047)) (mapcan V2046 (tl V2047)))) (true (shen.sys-error mapcan)))) +(defun mapcan (V2092 V2093) (cond ((= () V2093) ()) ((cons? V2093) (append (V2092 (hd V2093)) (mapcan V2092 (tl V2093)))) (true (shen.sys-error mapcan)))) -(defun == (V2056 V2057) (cond ((= V2057 V2056) true) (true false))) +(defun == (V2102 V2103) (cond ((= V2103 V2102) true) (true false))) (defun abort () (simple-error "")) -(defun bound? (V2059) (and (symbol? V2059) (let Val (trap-error (value V2059) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) +(defun bound? (V2105) (and (symbol? V2105) (let Val (trap-error (value V2105) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) -(defun shen.string->bytes (V2060) (cond ((= "" V2060) ()) (true (cons (string->n (pos V2060 0)) (shen.string->bytes (tlstr V2060)))))) +(defun shen.string->bytes (V2106) (cond ((= "" V2106) ()) (true (cons (string->n (pos V2106 0)) (shen.string->bytes (tlstr V2106)))))) -(defun maxinferences (V2061) (set shen.*maxinferences* V2061)) +(defun maxinferences (V2107) (set shen.*maxinferences* V2107)) (defun inferences () (value shen.*infs*)) -(defun protect (V2062) V2062) +(defun protect (V2108) V2108) (defun stoutput () (value *stoutput*)) -(defun string->symbol (V2063) (let Symbol (intern V2063) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2063 " to a symbol" shen.s)))))) +(defun string->symbol (V2109) (let Symbol (intern V2109) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2109 " to a symbol" shen.s)))))) -(defun shen.optimise (V2068) (cond ((= + V2068) (set shen.*optimise* true)) ((= - V2068) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. +(defun shen.optimise (V2114) (cond ((= + V2114) (set shen.*optimise* true)) ((= - V2114) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. ")))) (defun os () (value *os*)) diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index 066b269..1b3a3ae 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,113 +47,113 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2826 V2827) (let Curry (shen.curry V2826) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2827)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2882 V2883) (let Curry (shen.curry V2882) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2883)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2828) (cond ((and (cons? V2828) (shen.special? (hd V2828))) (cons (hd V2828) (map shen.curry (tl V2828)))) ((and (cons? V2828) (and (cons? (tl V2828)) (shen.extraspecial? (hd V2828)))) V2828) ((and (cons? V2828) (and (= type (hd V2828)) (and (cons? (tl V2828)) (and (cons? (tl (tl V2828))) (= () (tl (tl (tl V2828)))))))) (cons type (cons (shen.curry (hd (tl V2828))) (tl (tl V2828))))) ((and (cons? V2828) (and (cons? (tl V2828)) (cons? (tl (tl V2828))))) (shen.curry (cons (cons (hd V2828) (cons (hd (tl V2828)) ())) (tl (tl V2828))))) ((and (cons? V2828) (and (cons? (tl V2828)) (= () (tl (tl V2828))))) (cons (shen.curry (hd V2828)) (cons (shen.curry (hd (tl V2828))) ()))) (true V2828))) +(defun shen.curry (V2884) (cond ((and (cons? V2884) (shen.special? (hd V2884))) (cons (hd V2884) (map (lambda X2877 (shen.curry X2877)) (tl V2884)))) ((and (cons? V2884) (and (cons? (tl V2884)) (shen.extraspecial? (hd V2884)))) V2884) ((and (cons? V2884) (and (= type (hd V2884)) (and (cons? (tl V2884)) (and (cons? (tl (tl V2884))) (= () (tl (tl (tl V2884)))))))) (cons type (cons (shen.curry (hd (tl V2884))) (tl (tl V2884))))) ((and (cons? V2884) (and (cons? (tl V2884)) (cons? (tl (tl V2884))))) (shen.curry (cons (cons (hd V2884) (cons (hd (tl V2884)) ())) (tl (tl V2884))))) ((and (cons? V2884) (and (cons? (tl V2884)) (= () (tl (tl V2884))))) (cons (shen.curry (hd V2884)) (cons (shen.curry (hd (tl V2884))) ()))) (true V2884))) -(defun shen.special? (V2829) (element? V2829 (value shen.*special*))) +(defun shen.special? (V2885) (element? V2885 (value shen.*special*))) -(defun shen.extraspecial? (V2830) (element? V2830 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2886) (element? V2886 (value shen.*extraspecial*))) -(defun shen.t* (V2831 V2832 V2833 V2834) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2833) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2833 (freeze (bind Error (shen.errormaxinfs) V2833 V2834))))) (if (= Case false) (let Case (let V2820 (shen.lazyderef V2831 V2833) (if (= fail V2820) (do (shen.incinfs) (cut Throwcontrol V2833 (freeze (shen.prolog-failure V2833 V2834)))) false)) (if (= Case false) (let Case (let V2821 (shen.lazyderef V2831 V2833) (if (cons? V2821) (let X (hd V2821) (let V2822 (shen.lazyderef (tl V2821) V2833) (if (cons? V2822) (let V2823 (shen.lazyderef (hd V2822) V2833) (if (= : V2823) (let V2824 (shen.lazyderef (tl V2822) V2833) (if (cons? V2824) (let A (hd V2824) (let V2825 (shen.lazyderef (tl V2824) V2833) (if (= () V2825) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2833 (freeze (cut Throwcontrol V2833 (freeze (shen.th* X A V2832 V2833 V2834)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2833) (do (shen.incinfs) (shen.show V2831 V2832 V2833 (freeze (bind Datatypes (value shen.*datatypes*) V2833 (freeze (shen.udefs* V2831 V2832 Datatypes V2833 V2834))))))) Case)) Case)) Case))))) +(defun shen.t* (V2887 V2888 V2889 V2890) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2889) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2889 (freeze (bind Error (shen.errormaxinfs) V2889 V2890))))) (if (= Case false) (let Case (let V2871 (shen.lazyderef V2887 V2889) (if (= fail V2871) (do (shen.incinfs) (cut Throwcontrol V2889 (freeze (shen.prolog-failure V2889 V2890)))) false)) (if (= Case false) (let Case (let V2872 (shen.lazyderef V2887 V2889) (if (cons? V2872) (let X (hd V2872) (let V2873 (shen.lazyderef (tl V2872) V2889) (if (cons? V2873) (let V2874 (shen.lazyderef (hd V2873) V2889) (if (= : V2874) (let V2875 (shen.lazyderef (tl V2873) V2889) (if (cons? V2875) (let A (hd V2875) (let V2876 (shen.lazyderef (tl V2875) V2889) (if (= () V2876) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2889 (freeze (cut Throwcontrol V2889 (freeze (shen.th* X A V2888 V2889 V2890)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2889) (do (shen.incinfs) (shen.show V2887 V2888 V2889 (freeze (bind Datatypes (value shen.*datatypes*) V2889 (freeze (shen.udefs* V2887 V2888 Datatypes V2889 V2890))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2839) (cond ((= + V2839) (set shen.*shen-type-theory-enabled?* true)) ((= - V2839) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2895) (cond ((= + V2895) (set shen.*shen-type-theory-enabled?* true)) ((= - V2895) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2848 V2849) false) +(defun shen.prolog-failure (V2904 V2905) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2850 V2851 V2852 V2853 V2854) (let Case (let V2816 (shen.lazyderef V2852 V2853) (if (cons? V2816) (let D (hd V2816) (do (shen.incinfs) (call (cons D (cons V2850 (cons V2851 ()))) V2853 V2854))) false)) (if (= Case false) (let V2817 (shen.lazyderef V2852 V2853) (if (cons? V2817) (let Ds (tl V2817) (do (shen.incinfs) (shen.udefs* V2850 V2851 Ds V2853 V2854))) false)) Case))) +(defun shen.udefs* (V2906 V2907 V2908 V2909 V2910) (let Case (let V2867 (shen.lazyderef V2908 V2909) (if (cons? V2867) (let D (hd V2867) (do (shen.incinfs) (call (cons D (cons V2906 (cons V2907 ()))) V2909 V2910))) false)) (if (= Case false) (let V2868 (shen.lazyderef V2908 V2909) (if (cons? V2868) (let Ds (tl V2868) (do (shen.incinfs) (shen.udefs* V2906 V2907 Ds V2909 V2910))) false)) Case))) -(defun shen.th* (V2855 V2856 V2857 V2858 V2859) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2855 (cons : (cons V2856 ()))) V2857 V2858 (freeze (fwhen false V2858 V2859)))) (if (= Case false) (let Case (let F (shen.newpv V2858) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2855 V2858)) V2858 (freeze (bind F (shen.sigf (shen.lazyderef V2855 V2858)) V2858 (freeze (call (cons F (cons V2856 ())) V2858 V2859))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2855 V2856 V2858 V2859)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2855 V2856 V2857 V2858 V2859)) (if (= Case false) (let Case (let V2701 (shen.lazyderef V2855 V2858) (if (cons? V2701) (let F (hd V2701) (let V2702 (shen.lazyderef (tl V2701) V2858) (if (= () V2702) (do (shen.incinfs) (shen.th* F (cons --> (cons V2856 ())) V2857 V2858 V2859)) false))) false)) (if (= Case false) (let Case (let V2703 (shen.lazyderef V2855 V2858) (if (cons? V2703) (let F (hd V2703) (let V2704 (shen.lazyderef (tl V2703) V2858) (if (cons? V2704) (let X (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2858) (if (= () V2705) (let B (shen.newpv V2858) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2856 ()))) V2857 V2858 (freeze (shen.th* X B V2857 V2858 V2859))))) false))) false))) false)) (if (= Case false) (let Case (let V2706 (shen.lazyderef V2855 V2858) (if (cons? V2706) (let V2707 (shen.lazyderef (hd V2706) V2858) (if (= cons V2707) (let V2708 (shen.lazyderef (tl V2706) V2858) (if (cons? V2708) (let X (hd V2708) (let V2709 (shen.lazyderef (tl V2708) V2858) (if (cons? V2709) (let Y (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2858) (if (= () V2710) (let V2711 (shen.lazyderef V2856 V2858) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2858) (if (= list V2712) (let V2713 (shen.lazyderef (tl V2711) V2858) (if (cons? V2713) (let A (hd V2713) (let V2714 (shen.lazyderef (tl V2713) V2858) (if (= () V2714) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2714) (do (shen.bindv V2714 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2714 V2858) Result))) false)))) (if (shen.pvar? V2713) (let A (shen.newpv V2858) (do (shen.bindv V2713 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2713 V2858) Result)))) false))) (if (shen.pvar? V2712) (do (shen.bindv V2712 list V2858) (let Result (let V2715 (shen.lazyderef (tl V2711) V2858) (if (cons? V2715) (let A (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2858) (if (= () V2716) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2716) (do (shen.bindv V2716 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2716 V2858) Result))) false)))) (if (shen.pvar? V2715) (let A (shen.newpv V2858) (do (shen.bindv V2715 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2715 V2858) Result)))) false))) (do (shen.unbindv V2712 V2858) Result))) false))) (if (shen.pvar? V2711) (let A (shen.newpv V2858) (do (shen.bindv V2711 (cons list (cons A ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons list (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2711 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2717 (shen.lazyderef V2855 V2858) (if (cons? V2717) (let V2718 (shen.lazyderef (hd V2717) V2858) (if (= @p V2718) (let V2719 (shen.lazyderef (tl V2717) V2858) (if (cons? V2719) (let X (hd V2719) (let V2720 (shen.lazyderef (tl V2719) V2858) (if (cons? V2720) (let Y (hd V2720) (let V2721 (shen.lazyderef (tl V2720) V2858) (if (= () V2721) (let V2722 (shen.lazyderef V2856 V2858) (if (cons? V2722) (let A (hd V2722) (let V2723 (shen.lazyderef (tl V2722) V2858) (if (cons? V2723) (let V2724 (shen.lazyderef (hd V2723) V2858) (if (= * V2724) (let V2725 (shen.lazyderef (tl V2723) V2858) (if (cons? V2725) (let B (hd V2725) (let V2726 (shen.lazyderef (tl V2725) V2858) (if (= () V2726) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (if (shen.pvar? V2726) (do (shen.bindv V2726 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2726 V2858) Result))) false)))) (if (shen.pvar? V2725) (let B (shen.newpv V2858) (do (shen.bindv V2725 (cons B ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2725 V2858) Result)))) false))) (if (shen.pvar? V2724) (do (shen.bindv V2724 * V2858) (let Result (let V2727 (shen.lazyderef (tl V2723) V2858) (if (cons? V2727) (let B (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2858) (if (= () V2728) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (if (shen.pvar? V2728) (do (shen.bindv V2728 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2728 V2858) Result))) false)))) (if (shen.pvar? V2727) (let B (shen.newpv V2858) (do (shen.bindv V2727 (cons B ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2727 V2858) Result)))) false))) (do (shen.unbindv V2724 V2858) Result))) false))) (if (shen.pvar? V2723) (let B (shen.newpv V2858) (do (shen.bindv V2723 (cons * (cons B ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2723 V2858) Result)))) false)))) (if (shen.pvar? V2722) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2722 (cons A (cons * (cons B ()))) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y B V2857 V2858 V2859)))) (do (shen.unbindv V2722 V2858) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2729 (shen.lazyderef V2855 V2858) (if (cons? V2729) (let V2730 (shen.lazyderef (hd V2729) V2858) (if (= @v V2730) (let V2731 (shen.lazyderef (tl V2729) V2858) (if (cons? V2731) (let X (hd V2731) (let V2732 (shen.lazyderef (tl V2731) V2858) (if (cons? V2732) (let Y (hd V2732) (let V2733 (shen.lazyderef (tl V2732) V2858) (if (= () V2733) (let V2734 (shen.lazyderef V2856 V2858) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2858) (if (= vector V2735) (let V2736 (shen.lazyderef (tl V2734) V2858) (if (cons? V2736) (let A (hd V2736) (let V2737 (shen.lazyderef (tl V2736) V2858) (if (= () V2737) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2737) (do (shen.bindv V2737 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2737 V2858) Result))) false)))) (if (shen.pvar? V2736) (let A (shen.newpv V2858) (do (shen.bindv V2736 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2736 V2858) Result)))) false))) (if (shen.pvar? V2735) (do (shen.bindv V2735 vector V2858) (let Result (let V2738 (shen.lazyderef (tl V2734) V2858) (if (cons? V2738) (let A (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2858) (if (= () V2739) (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (if (shen.pvar? V2739) (do (shen.bindv V2739 () V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2739 V2858) Result))) false)))) (if (shen.pvar? V2738) (let A (shen.newpv V2858) (do (shen.bindv V2738 (cons A ()) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2738 V2858) Result)))) false))) (do (shen.unbindv V2735 V2858) Result))) false))) (if (shen.pvar? V2734) (let A (shen.newpv V2858) (do (shen.bindv V2734 (cons vector (cons A ())) V2858) (let Result (do (shen.incinfs) (shen.th* X A V2857 V2858 (freeze (shen.th* Y (cons vector (cons A ())) V2857 V2858 V2859)))) (do (shen.unbindv V2734 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2740 (shen.lazyderef V2855 V2858) (if (cons? V2740) (let V2741 (shen.lazyderef (hd V2740) V2858) (if (= @s V2741) (let V2742 (shen.lazyderef (tl V2740) V2858) (if (cons? V2742) (let X (hd V2742) (let V2743 (shen.lazyderef (tl V2742) V2858) (if (cons? V2743) (let Y (hd V2743) (let V2744 (shen.lazyderef (tl V2743) V2858) (if (= () V2744) (let V2745 (shen.lazyderef V2856 V2858) (if (= string V2745) (do (shen.incinfs) (shen.th* X string V2857 V2858 (freeze (shen.th* Y string V2857 V2858 V2859)))) (if (shen.pvar? V2745) (do (shen.bindv V2745 string V2858) (let Result (do (shen.incinfs) (shen.th* X string V2857 V2858 (freeze (shen.th* Y string V2857 V2858 V2859)))) (do (shen.unbindv V2745 V2858) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2746 (shen.lazyderef V2855 V2858) (if (cons? V2746) (let V2747 (shen.lazyderef (hd V2746) V2858) (if (= lambda V2747) (let V2748 (shen.lazyderef (tl V2746) V2858) (if (cons? V2748) (let X (hd V2748) (let V2749 (shen.lazyderef (tl V2748) V2858) (if (cons? V2749) (let Y (hd V2749) (let V2750 (shen.lazyderef (tl V2749) V2858) (if (= () V2750) (let V2751 (shen.lazyderef V2856 V2858) (if (cons? V2751) (let A (hd V2751) (let V2752 (shen.lazyderef (tl V2751) V2858) (if (cons? V2752) (let V2753 (shen.lazyderef (hd V2752) V2858) (if (= --> V2753) (let V2754 (shen.lazyderef (tl V2752) V2858) (if (cons? V2754) (let B (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2858) (if (= () V2755) (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (if (shen.pvar? V2755) (do (shen.bindv V2755 () V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2755 V2858) Result))) false)))) (if (shen.pvar? V2754) (let B (shen.newpv V2858) (do (shen.bindv V2754 (cons B ()) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2754 V2858) Result)))) false))) (if (shen.pvar? V2753) (do (shen.bindv V2753 --> V2858) (let Result (let V2756 (shen.lazyderef (tl V2752) V2858) (if (cons? V2756) (let B (hd V2756) (let V2757 (shen.lazyderef (tl V2756) V2858) (if (= () V2757) (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (if (shen.pvar? V2757) (do (shen.bindv V2757 () V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2757 V2858) Result))) false)))) (if (shen.pvar? V2756) (let B (shen.newpv V2858) (do (shen.bindv V2756 (cons B ()) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2756 V2858) Result)))) false))) (do (shen.unbindv V2753 V2858) Result))) false))) (if (shen.pvar? V2752) (let B (shen.newpv V2858) (do (shen.bindv V2752 (cons --> (cons B ())) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2752 V2858) Result)))) false)))) (if (shen.pvar? V2751) (let A (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.bindv V2751 (cons A (cons --> (cons B ()))) V2858) (let Result (let Z (shen.newpv V2858) (let X&& (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Y V2858)) V2858 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2857) V2858 V2859)))))))))) (do (shen.unbindv V2751 V2858) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2758 (shen.lazyderef V2855 V2858) (if (cons? V2758) (let V2759 (shen.lazyderef (hd V2758) V2858) (if (= let V2759) (let V2760 (shen.lazyderef (tl V2758) V2858) (if (cons? V2760) (let X (hd V2760) (let V2761 (shen.lazyderef (tl V2760) V2858) (if (cons? V2761) (let Y (hd V2761) (let V2762 (shen.lazyderef (tl V2761) V2858) (if (cons? V2762) (let Z (hd V2762) (let V2763 (shen.lazyderef (tl V2762) V2858) (if (= () V2763) (let W (shen.newpv V2858) (let X&& (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.incinfs) (shen.th* Y B V2857 V2858 (freeze (bind X&& (shen.placeholder) V2858 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2858) (shen.lazyderef X V2858) (shen.lazyderef Z V2858)) V2858 (freeze (shen.th* W V2856 (cons (cons X&& (cons : (cons B ()))) V2857) V2858 V2859))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2764 (shen.lazyderef V2855 V2858) (if (cons? V2764) (let V2765 (shen.lazyderef (hd V2764) V2858) (if (= open V2765) (let V2766 (shen.lazyderef (tl V2764) V2858) (if (cons? V2766) (let FileName (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2858) (if (cons? V2767) (let Direction2697 (hd V2767) (let V2768 (shen.lazyderef (tl V2767) V2858) (if (= () V2768) (let V2769 (shen.lazyderef V2856 V2858) (if (cons? V2769) (let V2770 (shen.lazyderef (hd V2769) V2858) (if (= stream V2770) (let V2771 (shen.lazyderef (tl V2769) V2858) (if (cons? V2771) (let Direction (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2858) (if (= () V2772) (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (if (shen.pvar? V2772) (do (shen.bindv V2772 () V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2772 V2858) Result))) false)))) (if (shen.pvar? V2771) (let Direction (shen.newpv V2858) (do (shen.bindv V2771 (cons Direction ()) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2771 V2858) Result)))) false))) (if (shen.pvar? V2770) (do (shen.bindv V2770 stream V2858) (let Result (let V2773 (shen.lazyderef (tl V2769) V2858) (if (cons? V2773) (let Direction (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2858) (if (= () V2774) (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (if (shen.pvar? V2774) (do (shen.bindv V2774 () V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2774 V2858) Result))) false)))) (if (shen.pvar? V2773) (let Direction (shen.newpv V2858) (do (shen.bindv V2773 (cons Direction ()) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2773 V2858) Result)))) false))) (do (shen.unbindv V2770 V2858) Result))) false))) (if (shen.pvar? V2769) (let Direction (shen.newpv V2858) (do (shen.bindv V2769 (cons stream (cons Direction ())) V2858) (let Result (do (shen.incinfs) (unify! Direction Direction2697 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* FileName string V2857 V2858 V2859)))))) (do (shen.unbindv V2769 V2858) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2775 (shen.lazyderef V2855 V2858) (if (cons? V2775) (let V2776 (shen.lazyderef (hd V2775) V2858) (if (= type V2776) (let V2777 (shen.lazyderef (tl V2775) V2858) (if (cons? V2777) (let X (hd V2777) (let V2778 (shen.lazyderef (tl V2777) V2858) (if (cons? V2778) (let A (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2858) (if (= () V2779) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (unify A V2856 V2858 (freeze (shen.th* X A V2857 V2858 V2859)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2855 V2858) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2858) (if (= input+ V2781) (let V2782 (shen.lazyderef (tl V2780) V2858) (if (cons? V2782) (let A (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2858) (if (cons? V2783) (let Stream (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2858) (if (= () V2784) (let C (shen.newpv V2858) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2858)) V2858 (freeze (unify V2856 C V2858 (freeze (shen.th* Stream (cons stream (cons in ())) V2857 V2858 V2859))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2785 (shen.lazyderef V2855 V2858) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2858) (if (= set V2786) (let V2787 (shen.lazyderef (tl V2785) V2858) (if (cons? V2787) (let Var (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2858) (if (cons? V2788) (let Val (hd V2788) (let V2789 (shen.lazyderef (tl V2788) V2858) (if (= () V2789) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.th* Var symbol V2857 V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* (cons value (cons Var ())) V2856 V2857 V2858 (freeze (shen.th* Val V2856 V2857 V2858 V2859)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2790 (shen.lazyderef V2855 V2858) (if (cons? V2790) (let V2791 (shen.lazyderef (hd V2790) V2858) (if (= shen.<-sem V2791) (let V2792 (shen.lazyderef (tl V2790) V2858) (if (cons? V2792) (let F (hd V2792) (let V2793 (shen.lazyderef (tl V2792) V2858) (if (= () V2793) (let A (shen.newpv V2858) (let F&& (shen.newpv V2858) (let B (shen.newpv V2858) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2857 V2858 (freeze (cut Throwcontrol V2858 (freeze (bind F&& (concat && (shen.lazyderef F V2858)) V2858 (freeze (cut Throwcontrol V2858 (freeze (shen.th* F&& V2856 (cons (cons F&& (cons : (cons B ()))) V2857) V2858 V2859))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2794 (shen.lazyderef V2855 V2858) (if (cons? V2794) (let V2795 (shen.lazyderef (hd V2794) V2858) (if (= fail V2795) (let V2796 (shen.lazyderef (tl V2794) V2858) (if (= () V2796) (let V2797 (shen.lazyderef V2856 V2858) (if (= symbol V2797) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2797) (do (shen.bindv V2797 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2797 V2858) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2858) (do (shen.incinfs) (shen.t*-hyps V2857 NewHyp V2858 (freeze (shen.th* V2855 V2856 NewHyp V2858 V2859))))) (if (= Case false) (let Case (let V2798 (shen.lazyderef V2855 V2858) (if (cons? V2798) (let V2799 (shen.lazyderef (hd V2798) V2858) (if (= define V2799) (let V2800 (shen.lazyderef (tl V2798) V2858) (if (cons? V2800) (let F (hd V2800) (let X (tl V2800) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.t*-def (cons define (cons F X)) V2856 V2857 V2858 V2859)))))) false)) false)) false)) (if (= Case false) (let Case (let V2801 (shen.lazyderef V2855 V2858) (if (cons? V2801) (let V2802 (shen.lazyderef (hd V2801) V2858) (if (= defcc V2802) (let V2803 (shen.lazyderef (tl V2801) V2858) (if (cons? V2803) (let F (hd V2803) (let X (tl V2803) (do (shen.incinfs) (cut Throwcontrol V2858 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2856 V2857 V2858 V2859)))))) false)) false)) false)) (if (= Case false) (let Case (let V2804 (shen.lazyderef V2855 V2858) (if (cons? V2804) (let V2805 (shen.lazyderef (hd V2804) V2858) (if (= defmacro V2805) (let V2806 (shen.lazyderef V2856 V2858) (if (= unit V2806) (do (shen.incinfs) (cut Throwcontrol V2858 V2859)) (if (shen.pvar? V2806) (do (shen.bindv V2806 unit V2858) (let Result (do (shen.incinfs) (cut Throwcontrol V2858 V2859)) (do (shen.unbindv V2806 V2858) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2807 (shen.lazyderef V2855 V2858) (if (cons? V2807) (let V2808 (shen.lazyderef (hd V2807) V2858) (if (= shen.process-datatype V2808) (let V2809 (shen.lazyderef V2856 V2858) (if (= symbol V2809) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2809) (do (shen.bindv V2809 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2809 V2858) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2810 (shen.lazyderef V2855 V2858) (if (cons? V2810) (let V2811 (shen.lazyderef (hd V2810) V2858) (if (= shen.synonyms-help V2811) (let V2812 (shen.lazyderef V2856 V2858) (if (= symbol V2812) (do (shen.incinfs) (thaw V2859)) (if (shen.pvar? V2812) (do (shen.bindv V2812 symbol V2858) (let Result (do (shen.incinfs) (thaw V2859)) (do (shen.unbindv V2812 V2858) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2858) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2858 (freeze (shen.udefs* (cons V2855 (cons : (cons V2856 ()))) V2857 Datatypes V2858 V2859))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2911 V2912 V2913 V2914 V2915) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2911 (cons : (cons V2912 ()))) V2913 V2914 (freeze (fwhen false V2914 V2915)))) (if (= Case false) (let Case (let F (shen.newpv V2914) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2911 V2914)) V2914 (freeze (bind F (shen.sigf (shen.lazyderef V2911 V2914)) V2914 (freeze (call (cons F (cons V2912 ())) V2914 V2915))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2911 V2912 V2914 V2915)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2911 V2912 V2913 V2914 V2915)) (if (= Case false) (let Case (let V2752 (shen.lazyderef V2911 V2914) (if (cons? V2752) (let F (hd V2752) (let V2753 (shen.lazyderef (tl V2752) V2914) (if (= () V2753) (do (shen.incinfs) (shen.th* F (cons --> (cons V2912 ())) V2913 V2914 V2915)) false))) false)) (if (= Case false) (let Case (let V2754 (shen.lazyderef V2911 V2914) (if (cons? V2754) (let F (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2914) (if (cons? V2755) (let X (hd V2755) (let V2756 (shen.lazyderef (tl V2755) V2914) (if (= () V2756) (let B (shen.newpv V2914) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2912 ()))) V2913 V2914 (freeze (shen.th* X B V2913 V2914 V2915))))) false))) false))) false)) (if (= Case false) (let Case (let V2757 (shen.lazyderef V2911 V2914) (if (cons? V2757) (let V2758 (shen.lazyderef (hd V2757) V2914) (if (= cons V2758) (let V2759 (shen.lazyderef (tl V2757) V2914) (if (cons? V2759) (let X (hd V2759) (let V2760 (shen.lazyderef (tl V2759) V2914) (if (cons? V2760) (let Y (hd V2760) (let V2761 (shen.lazyderef (tl V2760) V2914) (if (= () V2761) (let V2762 (shen.lazyderef V2912 V2914) (if (cons? V2762) (let V2763 (shen.lazyderef (hd V2762) V2914) (if (= list V2763) (let V2764 (shen.lazyderef (tl V2762) V2914) (if (cons? V2764) (let A (hd V2764) (let V2765 (shen.lazyderef (tl V2764) V2914) (if (= () V2765) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2765) (do (shen.bindv V2765 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2765 V2914) Result))) false)))) (if (shen.pvar? V2764) (let A (shen.newpv V2914) (do (shen.bindv V2764 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2764 V2914) Result)))) false))) (if (shen.pvar? V2763) (do (shen.bindv V2763 list V2914) (let Result (let V2766 (shen.lazyderef (tl V2762) V2914) (if (cons? V2766) (let A (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2914) (if (= () V2767) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2767) (do (shen.bindv V2767 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2767 V2914) Result))) false)))) (if (shen.pvar? V2766) (let A (shen.newpv V2914) (do (shen.bindv V2766 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2766 V2914) Result)))) false))) (do (shen.unbindv V2763 V2914) Result))) false))) (if (shen.pvar? V2762) (let A (shen.newpv V2914) (do (shen.bindv V2762 (cons list (cons A ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2762 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2768 (shen.lazyderef V2911 V2914) (if (cons? V2768) (let V2769 (shen.lazyderef (hd V2768) V2914) (if (= @p V2769) (let V2770 (shen.lazyderef (tl V2768) V2914) (if (cons? V2770) (let X (hd V2770) (let V2771 (shen.lazyderef (tl V2770) V2914) (if (cons? V2771) (let Y (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2914) (if (= () V2772) (let V2773 (shen.lazyderef V2912 V2914) (if (cons? V2773) (let A (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2914) (if (cons? V2774) (let V2775 (shen.lazyderef (hd V2774) V2914) (if (= * V2775) (let V2776 (shen.lazyderef (tl V2774) V2914) (if (cons? V2776) (let B (hd V2776) (let V2777 (shen.lazyderef (tl V2776) V2914) (if (= () V2777) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (if (shen.pvar? V2777) (do (shen.bindv V2777 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2777 V2914) Result))) false)))) (if (shen.pvar? V2776) (let B (shen.newpv V2914) (do (shen.bindv V2776 (cons B ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2776 V2914) Result)))) false))) (if (shen.pvar? V2775) (do (shen.bindv V2775 * V2914) (let Result (let V2778 (shen.lazyderef (tl V2774) V2914) (if (cons? V2778) (let B (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2914) (if (= () V2779) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (if (shen.pvar? V2779) (do (shen.bindv V2779 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2779 V2914) Result))) false)))) (if (shen.pvar? V2778) (let B (shen.newpv V2914) (do (shen.bindv V2778 (cons B ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2778 V2914) Result)))) false))) (do (shen.unbindv V2775 V2914) Result))) false))) (if (shen.pvar? V2774) (let B (shen.newpv V2914) (do (shen.bindv V2774 (cons * (cons B ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2774 V2914) Result)))) false)))) (if (shen.pvar? V2773) (let A (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.bindv V2773 (cons A (cons * (cons B ()))) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2773 V2914) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2911 V2914) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2914) (if (= @v V2781) (let V2782 (shen.lazyderef (tl V2780) V2914) (if (cons? V2782) (let X (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2914) (if (cons? V2783) (let Y (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2914) (if (= () V2784) (let V2785 (shen.lazyderef V2912 V2914) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2914) (if (= vector V2786) (let V2787 (shen.lazyderef (tl V2785) V2914) (if (cons? V2787) (let A (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2914) (if (= () V2788) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2788) (do (shen.bindv V2788 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2788 V2914) Result))) false)))) (if (shen.pvar? V2787) (let A (shen.newpv V2914) (do (shen.bindv V2787 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2787 V2914) Result)))) false))) (if (shen.pvar? V2786) (do (shen.bindv V2786 vector V2914) (let Result (let V2789 (shen.lazyderef (tl V2785) V2914) (if (cons? V2789) (let A (hd V2789) (let V2790 (shen.lazyderef (tl V2789) V2914) (if (= () V2790) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2790) (do (shen.bindv V2790 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2790 V2914) Result))) false)))) (if (shen.pvar? V2789) (let A (shen.newpv V2914) (do (shen.bindv V2789 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2789 V2914) Result)))) false))) (do (shen.unbindv V2786 V2914) Result))) false))) (if (shen.pvar? V2785) (let A (shen.newpv V2914) (do (shen.bindv V2785 (cons vector (cons A ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2785 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2791 (shen.lazyderef V2911 V2914) (if (cons? V2791) (let V2792 (shen.lazyderef (hd V2791) V2914) (if (= @s V2792) (let V2793 (shen.lazyderef (tl V2791) V2914) (if (cons? V2793) (let X (hd V2793) (let V2794 (shen.lazyderef (tl V2793) V2914) (if (cons? V2794) (let Y (hd V2794) (let V2795 (shen.lazyderef (tl V2794) V2914) (if (= () V2795) (let V2796 (shen.lazyderef V2912 V2914) (if (= string V2796) (do (shen.incinfs) (shen.th* X string V2913 V2914 (freeze (shen.th* Y string V2913 V2914 V2915)))) (if (shen.pvar? V2796) (do (shen.bindv V2796 string V2914) (let Result (do (shen.incinfs) (shen.th* X string V2913 V2914 (freeze (shen.th* Y string V2913 V2914 V2915)))) (do (shen.unbindv V2796 V2914) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2797 (shen.lazyderef V2911 V2914) (if (cons? V2797) (let V2798 (shen.lazyderef (hd V2797) V2914) (if (= lambda V2798) (let V2799 (shen.lazyderef (tl V2797) V2914) (if (cons? V2799) (let X (hd V2799) (let V2800 (shen.lazyderef (tl V2799) V2914) (if (cons? V2800) (let Y (hd V2800) (let V2801 (shen.lazyderef (tl V2800) V2914) (if (= () V2801) (let V2802 (shen.lazyderef V2912 V2914) (if (cons? V2802) (let A (hd V2802) (let V2803 (shen.lazyderef (tl V2802) V2914) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2914) (if (= --> V2804) (let V2805 (shen.lazyderef (tl V2803) V2914) (if (cons? V2805) (let B (hd V2805) (let V2806 (shen.lazyderef (tl V2805) V2914) (if (= () V2806) (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (if (shen.pvar? V2806) (do (shen.bindv V2806 () V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2806 V2914) Result))) false)))) (if (shen.pvar? V2805) (let B (shen.newpv V2914) (do (shen.bindv V2805 (cons B ()) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2805 V2914) Result)))) false))) (if (shen.pvar? V2804) (do (shen.bindv V2804 --> V2914) (let Result (let V2807 (shen.lazyderef (tl V2803) V2914) (if (cons? V2807) (let B (hd V2807) (let V2808 (shen.lazyderef (tl V2807) V2914) (if (= () V2808) (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (if (shen.pvar? V2808) (do (shen.bindv V2808 () V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2808 V2914) Result))) false)))) (if (shen.pvar? V2807) (let B (shen.newpv V2914) (do (shen.bindv V2807 (cons B ()) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2807 V2914) Result)))) false))) (do (shen.unbindv V2804 V2914) Result))) false))) (if (shen.pvar? V2803) (let B (shen.newpv V2914) (do (shen.bindv V2803 (cons --> (cons B ())) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2803 V2914) Result)))) false)))) (if (shen.pvar? V2802) (let A (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.bindv V2802 (cons A (cons --> (cons B ()))) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2802 V2914) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2809 (shen.lazyderef V2911 V2914) (if (cons? V2809) (let V2810 (shen.lazyderef (hd V2809) V2914) (if (= let V2810) (let V2811 (shen.lazyderef (tl V2809) V2914) (if (cons? V2811) (let X (hd V2811) (let V2812 (shen.lazyderef (tl V2811) V2914) (if (cons? V2812) (let Y (hd V2812) (let V2813 (shen.lazyderef (tl V2812) V2914) (if (cons? V2813) (let Z (hd V2813) (let V2814 (shen.lazyderef (tl V2813) V2914) (if (= () V2814) (let W (shen.newpv V2914) (let X&& (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.incinfs) (shen.th* Y B V2913 V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Z V2914)) V2914 (freeze (shen.th* W V2912 (cons (cons X&& (cons : (cons B ()))) V2913) V2914 V2915))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2911 V2914) (if (cons? V2815) (let V2816 (shen.lazyderef (hd V2815) V2914) (if (= open V2816) (let V2817 (shen.lazyderef (tl V2815) V2914) (if (cons? V2817) (let FileName (hd V2817) (let V2818 (shen.lazyderef (tl V2817) V2914) (if (cons? V2818) (let Direction2748 (hd V2818) (let V2819 (shen.lazyderef (tl V2818) V2914) (if (= () V2819) (let V2820 (shen.lazyderef V2912 V2914) (if (cons? V2820) (let V2821 (shen.lazyderef (hd V2820) V2914) (if (= stream V2821) (let V2822 (shen.lazyderef (tl V2820) V2914) (if (cons? V2822) (let Direction (hd V2822) (let V2823 (shen.lazyderef (tl V2822) V2914) (if (= () V2823) (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (if (shen.pvar? V2823) (do (shen.bindv V2823 () V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2823 V2914) Result))) false)))) (if (shen.pvar? V2822) (let Direction (shen.newpv V2914) (do (shen.bindv V2822 (cons Direction ()) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2822 V2914) Result)))) false))) (if (shen.pvar? V2821) (do (shen.bindv V2821 stream V2914) (let Result (let V2824 (shen.lazyderef (tl V2820) V2914) (if (cons? V2824) (let Direction (hd V2824) (let V2825 (shen.lazyderef (tl V2824) V2914) (if (= () V2825) (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (if (shen.pvar? V2825) (do (shen.bindv V2825 () V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2825 V2914) Result))) false)))) (if (shen.pvar? V2824) (let Direction (shen.newpv V2914) (do (shen.bindv V2824 (cons Direction ()) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2824 V2914) Result)))) false))) (do (shen.unbindv V2821 V2914) Result))) false))) (if (shen.pvar? V2820) (let Direction (shen.newpv V2914) (do (shen.bindv V2820 (cons stream (cons Direction ())) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2820 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2826 (shen.lazyderef V2911 V2914) (if (cons? V2826) (let V2827 (shen.lazyderef (hd V2826) V2914) (if (= type V2827) (let V2828 (shen.lazyderef (tl V2826) V2914) (if (cons? V2828) (let X (hd V2828) (let V2829 (shen.lazyderef (tl V2828) V2914) (if (cons? V2829) (let A (hd V2829) (let V2830 (shen.lazyderef (tl V2829) V2914) (if (= () V2830) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (unify A V2912 V2914 (freeze (shen.th* X A V2913 V2914 V2915)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2831 (shen.lazyderef V2911 V2914) (if (cons? V2831) (let V2832 (shen.lazyderef (hd V2831) V2914) (if (= input+ V2832) (let V2833 (shen.lazyderef (tl V2831) V2914) (if (cons? V2833) (let A (hd V2833) (let V2834 (shen.lazyderef (tl V2833) V2914) (if (cons? V2834) (let Stream (hd V2834) (let V2835 (shen.lazyderef (tl V2834) V2914) (if (= () V2835) (let C (shen.newpv V2914) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2914)) V2914 (freeze (unify V2912 C V2914 (freeze (shen.th* Stream (cons stream (cons in ())) V2913 V2914 V2915))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2836 (shen.lazyderef V2911 V2914) (if (cons? V2836) (let V2837 (shen.lazyderef (hd V2836) V2914) (if (= set V2837) (let V2838 (shen.lazyderef (tl V2836) V2914) (if (cons? V2838) (let Var (hd V2838) (let V2839 (shen.lazyderef (tl V2838) V2914) (if (cons? V2839) (let Val (hd V2839) (let V2840 (shen.lazyderef (tl V2839) V2914) (if (= () V2840) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.th* Var symbol V2913 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* (cons value (cons Var ())) V2912 V2913 V2914 (freeze (shen.th* Val V2912 V2913 V2914 V2915)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2841 (shen.lazyderef V2911 V2914) (if (cons? V2841) (let V2842 (shen.lazyderef (hd V2841) V2914) (if (= shen.<-sem V2842) (let V2843 (shen.lazyderef (tl V2841) V2914) (if (cons? V2843) (let F (hd V2843) (let V2844 (shen.lazyderef (tl V2843) V2914) (if (= () V2844) (let A (shen.newpv V2914) (let F&& (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2913 V2914 (freeze (cut Throwcontrol V2914 (freeze (bind F&& (concat && (shen.lazyderef F V2914)) V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* F&& V2912 (cons (cons F&& (cons : (cons B ()))) V2913) V2914 V2915))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2845 (shen.lazyderef V2911 V2914) (if (cons? V2845) (let V2846 (shen.lazyderef (hd V2845) V2914) (if (= fail V2846) (let V2847 (shen.lazyderef (tl V2845) V2914) (if (= () V2847) (let V2848 (shen.lazyderef V2912 V2914) (if (= symbol V2848) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2848) (do (shen.bindv V2848 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2848 V2914) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2914) (do (shen.incinfs) (shen.t*-hyps V2913 NewHyp V2914 (freeze (shen.th* V2911 V2912 NewHyp V2914 V2915))))) (if (= Case false) (let Case (let V2849 (shen.lazyderef V2911 V2914) (if (cons? V2849) (let V2850 (shen.lazyderef (hd V2849) V2914) (if (= define V2850) (let V2851 (shen.lazyderef (tl V2849) V2914) (if (cons? V2851) (let F (hd V2851) (let X (tl V2851) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.t*-def (cons define (cons F X)) V2912 V2913 V2914 V2915)))))) false)) false)) false)) (if (= Case false) (let Case (let V2852 (shen.lazyderef V2911 V2914) (if (cons? V2852) (let V2853 (shen.lazyderef (hd V2852) V2914) (if (= defcc V2853) (let V2854 (shen.lazyderef (tl V2852) V2914) (if (cons? V2854) (let F (hd V2854) (let X (tl V2854) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2912 V2913 V2914 V2915)))))) false)) false)) false)) (if (= Case false) (let Case (let V2855 (shen.lazyderef V2911 V2914) (if (cons? V2855) (let V2856 (shen.lazyderef (hd V2855) V2914) (if (= defmacro V2856) (let V2857 (shen.lazyderef V2912 V2914) (if (= unit V2857) (do (shen.incinfs) (cut Throwcontrol V2914 V2915)) (if (shen.pvar? V2857) (do (shen.bindv V2857 unit V2914) (let Result (do (shen.incinfs) (cut Throwcontrol V2914 V2915)) (do (shen.unbindv V2857 V2914) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2858 (shen.lazyderef V2911 V2914) (if (cons? V2858) (let V2859 (shen.lazyderef (hd V2858) V2914) (if (= shen.process-datatype V2859) (let V2860 (shen.lazyderef V2912 V2914) (if (= symbol V2860) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2860) (do (shen.bindv V2860 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2860 V2914) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2861 (shen.lazyderef V2911 V2914) (if (cons? V2861) (let V2862 (shen.lazyderef (hd V2861) V2914) (if (= shen.synonyms-help V2862) (let V2863 (shen.lazyderef V2912 V2914) (if (= symbol V2863) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2863) (do (shen.bindv V2863 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2863 V2914) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2914) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2914 (freeze (shen.udefs* (cons V2911 (cons : (cons V2912 ()))) V2913 Datatypes V2914 V2915))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2860 V2861 V2862 V2863) (let Case (let V2612 (shen.lazyderef V2860 V2862) (if (cons? V2612) (let V2613 (shen.lazyderef (hd V2612) V2862) (if (cons? V2613) (let V2614 (shen.lazyderef (hd V2613) V2862) (if (cons? V2614) (let V2615 (shen.lazyderef (hd V2614) V2862) (if (= cons V2615) (let V2616 (shen.lazyderef (tl V2614) V2862) (if (cons? V2616) (let X (hd V2616) (let V2617 (shen.lazyderef (tl V2616) V2862) (if (cons? V2617) (let Y (hd V2617) (let V2618 (shen.lazyderef (tl V2617) V2862) (if (= () V2618) (let V2619 (shen.lazyderef (tl V2613) V2862) (if (cons? V2619) (let V2620 (shen.lazyderef (hd V2619) V2862) (if (= : V2620) (let V2621 (shen.lazyderef (tl V2619) V2862) (if (cons? V2621) (let V2622 (shen.lazyderef (hd V2621) V2862) (if (cons? V2622) (let V2623 (shen.lazyderef (hd V2622) V2862) (if (= list V2623) (let V2624 (shen.lazyderef (tl V2622) V2862) (if (cons? V2624) (let A (hd V2624) (let V2625 (shen.lazyderef (tl V2624) V2862) (if (= () V2625) (let V2626 (shen.lazyderef (tl V2621) V2862) (if (= () V2626) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2626 V2862) Result))) false))) (if (shen.pvar? V2625) (do (shen.bindv V2625 () V2862) (let Result (let V2627 (shen.lazyderef (tl V2621) V2862) (if (= () V2627) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2627) (do (shen.bindv V2627 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2627 V2862) Result))) false))) (do (shen.unbindv V2625 V2862) Result))) false)))) (if (shen.pvar? V2624) (let A (shen.newpv V2862) (do (shen.bindv V2624 (cons A ()) V2862) (let Result (let V2628 (shen.lazyderef (tl V2621) V2862) (if (= () V2628) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2628) (do (shen.bindv V2628 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2628 V2862) Result))) false))) (do (shen.unbindv V2624 V2862) Result)))) false))) (if (shen.pvar? V2623) (do (shen.bindv V2623 list V2862) (let Result (let V2629 (shen.lazyderef (tl V2622) V2862) (if (cons? V2629) (let A (hd V2629) (let V2630 (shen.lazyderef (tl V2629) V2862) (if (= () V2630) (let V2631 (shen.lazyderef (tl V2621) V2862) (if (= () V2631) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2631) (do (shen.bindv V2631 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2631 V2862) Result))) false))) (if (shen.pvar? V2630) (do (shen.bindv V2630 () V2862) (let Result (let V2632 (shen.lazyderef (tl V2621) V2862) (if (= () V2632) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2632) (do (shen.bindv V2632 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2632 V2862) Result))) false))) (do (shen.unbindv V2630 V2862) Result))) false)))) (if (shen.pvar? V2629) (let A (shen.newpv V2862) (do (shen.bindv V2629 (cons A ()) V2862) (let Result (let V2633 (shen.lazyderef (tl V2621) V2862) (if (= () V2633) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2633) (do (shen.bindv V2633 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2633 V2862) Result))) false))) (do (shen.unbindv V2629 V2862) Result)))) false))) (do (shen.unbindv V2623 V2862) Result))) false))) (if (shen.pvar? V2622) (let A (shen.newpv V2862) (do (shen.bindv V2622 (cons list (cons A ())) V2862) (let Result (let V2634 (shen.lazyderef (tl V2621) V2862) (if (= () V2634) (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2634) (do (shen.bindv V2634 () V2862) (let Result (let Hyp (tl V2612) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons list (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2634 V2862) Result))) false))) (do (shen.unbindv V2622 V2862) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2635 (shen.lazyderef V2860 V2862) (if (cons? V2635) (let V2636 (shen.lazyderef (hd V2635) V2862) (if (cons? V2636) (let V2637 (shen.lazyderef (hd V2636) V2862) (if (cons? V2637) (let V2638 (shen.lazyderef (hd V2637) V2862) (if (= @p V2638) (let V2639 (shen.lazyderef (tl V2637) V2862) (if (cons? V2639) (let X (hd V2639) (let V2640 (shen.lazyderef (tl V2639) V2862) (if (cons? V2640) (let Y (hd V2640) (let V2641 (shen.lazyderef (tl V2640) V2862) (if (= () V2641) (let V2642 (shen.lazyderef (tl V2636) V2862) (if (cons? V2642) (let V2643 (shen.lazyderef (hd V2642) V2862) (if (= : V2643) (let V2644 (shen.lazyderef (tl V2642) V2862) (if (cons? V2644) (let V2645 (shen.lazyderef (hd V2644) V2862) (if (cons? V2645) (let A (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2862) (if (cons? V2646) (let V2647 (shen.lazyderef (hd V2646) V2862) (if (= * V2647) (let V2648 (shen.lazyderef (tl V2646) V2862) (if (cons? V2648) (let B (hd V2648) (let V2649 (shen.lazyderef (tl V2648) V2862) (if (= () V2649) (let V2650 (shen.lazyderef (tl V2644) V2862) (if (= () V2650) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2650) (do (shen.bindv V2650 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2650 V2862) Result))) false))) (if (shen.pvar? V2649) (do (shen.bindv V2649 () V2862) (let Result (let V2651 (shen.lazyderef (tl V2644) V2862) (if (= () V2651) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2651) (do (shen.bindv V2651 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2651 V2862) Result))) false))) (do (shen.unbindv V2649 V2862) Result))) false)))) (if (shen.pvar? V2648) (let B (shen.newpv V2862) (do (shen.bindv V2648 (cons B ()) V2862) (let Result (let V2652 (shen.lazyderef (tl V2644) V2862) (if (= () V2652) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2652) (do (shen.bindv V2652 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2652 V2862) Result))) false))) (do (shen.unbindv V2648 V2862) Result)))) false))) (if (shen.pvar? V2647) (do (shen.bindv V2647 * V2862) (let Result (let V2653 (shen.lazyderef (tl V2646) V2862) (if (cons? V2653) (let B (hd V2653) (let V2654 (shen.lazyderef (tl V2653) V2862) (if (= () V2654) (let V2655 (shen.lazyderef (tl V2644) V2862) (if (= () V2655) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2655) (do (shen.bindv V2655 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2655 V2862) Result))) false))) (if (shen.pvar? V2654) (do (shen.bindv V2654 () V2862) (let Result (let V2656 (shen.lazyderef (tl V2644) V2862) (if (= () V2656) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2656) (do (shen.bindv V2656 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2656 V2862) Result))) false))) (do (shen.unbindv V2654 V2862) Result))) false)))) (if (shen.pvar? V2653) (let B (shen.newpv V2862) (do (shen.bindv V2653 (cons B ()) V2862) (let Result (let V2657 (shen.lazyderef (tl V2644) V2862) (if (= () V2657) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2657) (do (shen.bindv V2657 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2657 V2862) Result))) false))) (do (shen.unbindv V2653 V2862) Result)))) false))) (do (shen.unbindv V2647 V2862) Result))) false))) (if (shen.pvar? V2646) (let B (shen.newpv V2862) (do (shen.bindv V2646 (cons * (cons B ())) V2862) (let Result (let V2658 (shen.lazyderef (tl V2644) V2862) (if (= () V2658) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2658) (do (shen.bindv V2658 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2658 V2862) Result))) false))) (do (shen.unbindv V2646 V2862) Result)))) false)))) (if (shen.pvar? V2645) (let A (shen.newpv V2862) (let B (shen.newpv V2862) (do (shen.bindv V2645 (cons A (cons * (cons B ()))) V2862) (let Result (let V2659 (shen.lazyderef (tl V2644) V2862) (if (= () V2659) (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2659) (do (shen.bindv V2659 () V2862) (let Result (let Hyp (tl V2635) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (shen.lazyderef B V2862) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2659 V2862) Result))) false))) (do (shen.unbindv V2645 V2862) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2660 (shen.lazyderef V2860 V2862) (if (cons? V2660) (let V2661 (shen.lazyderef (hd V2660) V2862) (if (cons? V2661) (let V2662 (shen.lazyderef (hd V2661) V2862) (if (cons? V2662) (let V2663 (shen.lazyderef (hd V2662) V2862) (if (= @v V2663) (let V2664 (shen.lazyderef (tl V2662) V2862) (if (cons? V2664) (let X (hd V2664) (let V2665 (shen.lazyderef (tl V2664) V2862) (if (cons? V2665) (let Y (hd V2665) (let V2666 (shen.lazyderef (tl V2665) V2862) (if (= () V2666) (let V2667 (shen.lazyderef (tl V2661) V2862) (if (cons? V2667) (let V2668 (shen.lazyderef (hd V2667) V2862) (if (= : V2668) (let V2669 (shen.lazyderef (tl V2667) V2862) (if (cons? V2669) (let V2670 (shen.lazyderef (hd V2669) V2862) (if (cons? V2670) (let V2671 (shen.lazyderef (hd V2670) V2862) (if (= vector V2671) (let V2672 (shen.lazyderef (tl V2670) V2862) (if (cons? V2672) (let A (hd V2672) (let V2673 (shen.lazyderef (tl V2672) V2862) (if (= () V2673) (let V2674 (shen.lazyderef (tl V2669) V2862) (if (= () V2674) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2674) (do (shen.bindv V2674 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2674 V2862) Result))) false))) (if (shen.pvar? V2673) (do (shen.bindv V2673 () V2862) (let Result (let V2675 (shen.lazyderef (tl V2669) V2862) (if (= () V2675) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2675) (do (shen.bindv V2675 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2675 V2862) Result))) false))) (do (shen.unbindv V2673 V2862) Result))) false)))) (if (shen.pvar? V2672) (let A (shen.newpv V2862) (do (shen.bindv V2672 (cons A ()) V2862) (let Result (let V2676 (shen.lazyderef (tl V2669) V2862) (if (= () V2676) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2676 V2862) Result))) false))) (do (shen.unbindv V2672 V2862) Result)))) false))) (if (shen.pvar? V2671) (do (shen.bindv V2671 vector V2862) (let Result (let V2677 (shen.lazyderef (tl V2670) V2862) (if (cons? V2677) (let A (hd V2677) (let V2678 (shen.lazyderef (tl V2677) V2862) (if (= () V2678) (let V2679 (shen.lazyderef (tl V2669) V2862) (if (= () V2679) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2679 V2862) Result))) false))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2862) (let Result (let V2680 (shen.lazyderef (tl V2669) V2862) (if (= () V2680) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2680) (do (shen.bindv V2680 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2680 V2862) Result))) false))) (do (shen.unbindv V2678 V2862) Result))) false)))) (if (shen.pvar? V2677) (let A (shen.newpv V2862) (do (shen.bindv V2677 (cons A ()) V2862) (let Result (let V2681 (shen.lazyderef (tl V2669) V2862) (if (= () V2681) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2681 V2862) Result))) false))) (do (shen.unbindv V2677 V2862) Result)))) false))) (do (shen.unbindv V2671 V2862) Result))) false))) (if (shen.pvar? V2670) (let A (shen.newpv V2862) (do (shen.bindv V2670 (cons vector (cons A ())) V2862) (let Result (let V2682 (shen.lazyderef (tl V2669) V2862) (if (= () V2682) (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2682) (do (shen.bindv V2682 () V2862) (let Result (let Hyp (tl V2660) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons (shen.lazyderef A V2862) ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons (cons vector (cons (shen.lazyderef A V2862) ())) ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2682 V2862) Result))) false))) (do (shen.unbindv V2670 V2862) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2683 (shen.lazyderef V2860 V2862) (if (cons? V2683) (let V2684 (shen.lazyderef (hd V2683) V2862) (if (cons? V2684) (let V2685 (shen.lazyderef (hd V2684) V2862) (if (cons? V2685) (let V2686 (shen.lazyderef (hd V2685) V2862) (if (= @s V2686) (let V2687 (shen.lazyderef (tl V2685) V2862) (if (cons? V2687) (let X (hd V2687) (let V2688 (shen.lazyderef (tl V2687) V2862) (if (cons? V2688) (let Y (hd V2688) (let V2689 (shen.lazyderef (tl V2688) V2862) (if (= () V2689) (let V2690 (shen.lazyderef (tl V2684) V2862) (if (cons? V2690) (let V2691 (shen.lazyderef (hd V2690) V2862) (if (= : V2691) (let V2692 (shen.lazyderef (tl V2690) V2862) (if (cons? V2692) (let V2693 (shen.lazyderef (hd V2692) V2862) (if (= string V2693) (let V2694 (shen.lazyderef (tl V2692) V2862) (if (= () V2694) (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2694) (do (shen.bindv V2694 () V2862) (let Result (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2694 V2862) Result))) false))) (if (shen.pvar? V2693) (do (shen.bindv V2693 string V2862) (let Result (let V2695 (shen.lazyderef (tl V2692) V2862) (if (= () V2695) (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (if (shen.pvar? V2695) (do (shen.bindv V2695 () V2862) (let Result (let Hyp (tl V2683) (do (shen.incinfs) (bind V2861 (cons (cons (shen.lazyderef X V2862) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2862) (cons : (cons string ()))) (shen.lazyderef Hyp V2862))) V2862 V2863))) (do (shen.unbindv V2695 V2862) Result))) false))) (do (shen.unbindv V2693 V2862) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2696 (shen.lazyderef V2860 V2862) (if (cons? V2696) (let X (hd V2696) (let Hyp (tl V2696) (let NewHyps (shen.newpv V2862) (do (shen.incinfs) (bind V2861 (cons (shen.lazyderef X V2862) (shen.lazyderef NewHyps V2862)) V2862 (freeze (shen.t*-hyps Hyp NewHyps V2862 V2863))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2916 V2917 V2918 V2919) (let Case (let V2663 (shen.lazyderef V2916 V2918) (if (cons? V2663) (let V2664 (shen.lazyderef (hd V2663) V2918) (if (cons? V2664) (let V2665 (shen.lazyderef (hd V2664) V2918) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2918) (if (= cons V2666) (let V2667 (shen.lazyderef (tl V2665) V2918) (if (cons? V2667) (let X (hd V2667) (let V2668 (shen.lazyderef (tl V2667) V2918) (if (cons? V2668) (let Y (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2918) (if (= () V2669) (let V2670 (shen.lazyderef (tl V2664) V2918) (if (cons? V2670) (let V2671 (shen.lazyderef (hd V2670) V2918) (if (= : V2671) (let V2672 (shen.lazyderef (tl V2670) V2918) (if (cons? V2672) (let V2673 (shen.lazyderef (hd V2672) V2918) (if (cons? V2673) (let V2674 (shen.lazyderef (hd V2673) V2918) (if (= list V2674) (let V2675 (shen.lazyderef (tl V2673) V2918) (if (cons? V2675) (let A (hd V2675) (let V2676 (shen.lazyderef (tl V2675) V2918) (if (= () V2676) (let V2677 (shen.lazyderef (tl V2672) V2918) (if (= () V2677) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2677 V2918) Result))) false))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2918) (let Result (let V2678 (shen.lazyderef (tl V2672) V2918) (if (= () V2678) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2678 V2918) Result))) false))) (do (shen.unbindv V2676 V2918) Result))) false)))) (if (shen.pvar? V2675) (let A (shen.newpv V2918) (do (shen.bindv V2675 (cons A ()) V2918) (let Result (let V2679 (shen.lazyderef (tl V2672) V2918) (if (= () V2679) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2679 V2918) Result))) false))) (do (shen.unbindv V2675 V2918) Result)))) false))) (if (shen.pvar? V2674) (do (shen.bindv V2674 list V2918) (let Result (let V2680 (shen.lazyderef (tl V2673) V2918) (if (cons? V2680) (let A (hd V2680) (let V2681 (shen.lazyderef (tl V2680) V2918) (if (= () V2681) (let V2682 (shen.lazyderef (tl V2672) V2918) (if (= () V2682) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2682) (do (shen.bindv V2682 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2682 V2918) Result))) false))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2918) (let Result (let V2683 (shen.lazyderef (tl V2672) V2918) (if (= () V2683) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2683) (do (shen.bindv V2683 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2683 V2918) Result))) false))) (do (shen.unbindv V2681 V2918) Result))) false)))) (if (shen.pvar? V2680) (let A (shen.newpv V2918) (do (shen.bindv V2680 (cons A ()) V2918) (let Result (let V2684 (shen.lazyderef (tl V2672) V2918) (if (= () V2684) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2684) (do (shen.bindv V2684 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2684 V2918) Result))) false))) (do (shen.unbindv V2680 V2918) Result)))) false))) (do (shen.unbindv V2674 V2918) Result))) false))) (if (shen.pvar? V2673) (let A (shen.newpv V2918) (do (shen.bindv V2673 (cons list (cons A ())) V2918) (let Result (let V2685 (shen.lazyderef (tl V2672) V2918) (if (= () V2685) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2685) (do (shen.bindv V2685 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2685 V2918) Result))) false))) (do (shen.unbindv V2673 V2918) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2686 (shen.lazyderef V2916 V2918) (if (cons? V2686) (let V2687 (shen.lazyderef (hd V2686) V2918) (if (cons? V2687) (let V2688 (shen.lazyderef (hd V2687) V2918) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2918) (if (= @p V2689) (let V2690 (shen.lazyderef (tl V2688) V2918) (if (cons? V2690) (let X (hd V2690) (let V2691 (shen.lazyderef (tl V2690) V2918) (if (cons? V2691) (let Y (hd V2691) (let V2692 (shen.lazyderef (tl V2691) V2918) (if (= () V2692) (let V2693 (shen.lazyderef (tl V2687) V2918) (if (cons? V2693) (let V2694 (shen.lazyderef (hd V2693) V2918) (if (= : V2694) (let V2695 (shen.lazyderef (tl V2693) V2918) (if (cons? V2695) (let V2696 (shen.lazyderef (hd V2695) V2918) (if (cons? V2696) (let A (hd V2696) (let V2697 (shen.lazyderef (tl V2696) V2918) (if (cons? V2697) (let V2698 (shen.lazyderef (hd V2697) V2918) (if (= * V2698) (let V2699 (shen.lazyderef (tl V2697) V2918) (if (cons? V2699) (let B (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2918) (if (= () V2700) (let V2701 (shen.lazyderef (tl V2695) V2918) (if (= () V2701) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2701) (do (shen.bindv V2701 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2701 V2918) Result))) false))) (if (shen.pvar? V2700) (do (shen.bindv V2700 () V2918) (let Result (let V2702 (shen.lazyderef (tl V2695) V2918) (if (= () V2702) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2702) (do (shen.bindv V2702 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2702 V2918) Result))) false))) (do (shen.unbindv V2700 V2918) Result))) false)))) (if (shen.pvar? V2699) (let B (shen.newpv V2918) (do (shen.bindv V2699 (cons B ()) V2918) (let Result (let V2703 (shen.lazyderef (tl V2695) V2918) (if (= () V2703) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2703) (do (shen.bindv V2703 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2703 V2918) Result))) false))) (do (shen.unbindv V2699 V2918) Result)))) false))) (if (shen.pvar? V2698) (do (shen.bindv V2698 * V2918) (let Result (let V2704 (shen.lazyderef (tl V2697) V2918) (if (cons? V2704) (let B (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2918) (if (= () V2705) (let V2706 (shen.lazyderef (tl V2695) V2918) (if (= () V2706) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2706) (do (shen.bindv V2706 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2706 V2918) Result))) false))) (if (shen.pvar? V2705) (do (shen.bindv V2705 () V2918) (let Result (let V2707 (shen.lazyderef (tl V2695) V2918) (if (= () V2707) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2707) (do (shen.bindv V2707 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2707 V2918) Result))) false))) (do (shen.unbindv V2705 V2918) Result))) false)))) (if (shen.pvar? V2704) (let B (shen.newpv V2918) (do (shen.bindv V2704 (cons B ()) V2918) (let Result (let V2708 (shen.lazyderef (tl V2695) V2918) (if (= () V2708) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2708) (do (shen.bindv V2708 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2708 V2918) Result))) false))) (do (shen.unbindv V2704 V2918) Result)))) false))) (do (shen.unbindv V2698 V2918) Result))) false))) (if (shen.pvar? V2697) (let B (shen.newpv V2918) (do (shen.bindv V2697 (cons * (cons B ())) V2918) (let Result (let V2709 (shen.lazyderef (tl V2695) V2918) (if (= () V2709) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2709) (do (shen.bindv V2709 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2709 V2918) Result))) false))) (do (shen.unbindv V2697 V2918) Result)))) false)))) (if (shen.pvar? V2696) (let A (shen.newpv V2918) (let B (shen.newpv V2918) (do (shen.bindv V2696 (cons A (cons * (cons B ()))) V2918) (let Result (let V2710 (shen.lazyderef (tl V2695) V2918) (if (= () V2710) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2710) (do (shen.bindv V2710 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2710 V2918) Result))) false))) (do (shen.unbindv V2696 V2918) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2711 (shen.lazyderef V2916 V2918) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2918) (if (cons? V2712) (let V2713 (shen.lazyderef (hd V2712) V2918) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2918) (if (= @v V2714) (let V2715 (shen.lazyderef (tl V2713) V2918) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2918) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2918) (if (= () V2717) (let V2718 (shen.lazyderef (tl V2712) V2918) (if (cons? V2718) (let V2719 (shen.lazyderef (hd V2718) V2918) (if (= : V2719) (let V2720 (shen.lazyderef (tl V2718) V2918) (if (cons? V2720) (let V2721 (shen.lazyderef (hd V2720) V2918) (if (cons? V2721) (let V2722 (shen.lazyderef (hd V2721) V2918) (if (= vector V2722) (let V2723 (shen.lazyderef (tl V2721) V2918) (if (cons? V2723) (let A (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2918) (if (= () V2724) (let V2725 (shen.lazyderef (tl V2720) V2918) (if (= () V2725) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2725) (do (shen.bindv V2725 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2725 V2918) Result))) false))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2918) (let Result (let V2726 (shen.lazyderef (tl V2720) V2918) (if (= () V2726) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2726) (do (shen.bindv V2726 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2726 V2918) Result))) false))) (do (shen.unbindv V2724 V2918) Result))) false)))) (if (shen.pvar? V2723) (let A (shen.newpv V2918) (do (shen.bindv V2723 (cons A ()) V2918) (let Result (let V2727 (shen.lazyderef (tl V2720) V2918) (if (= () V2727) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2727) (do (shen.bindv V2727 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2727 V2918) Result))) false))) (do (shen.unbindv V2723 V2918) Result)))) false))) (if (shen.pvar? V2722) (do (shen.bindv V2722 vector V2918) (let Result (let V2728 (shen.lazyderef (tl V2721) V2918) (if (cons? V2728) (let A (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2918) (if (= () V2729) (let V2730 (shen.lazyderef (tl V2720) V2918) (if (= () V2730) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2730) (do (shen.bindv V2730 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2730 V2918) Result))) false))) (if (shen.pvar? V2729) (do (shen.bindv V2729 () V2918) (let Result (let V2731 (shen.lazyderef (tl V2720) V2918) (if (= () V2731) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2731) (do (shen.bindv V2731 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2731 V2918) Result))) false))) (do (shen.unbindv V2729 V2918) Result))) false)))) (if (shen.pvar? V2728) (let A (shen.newpv V2918) (do (shen.bindv V2728 (cons A ()) V2918) (let Result (let V2732 (shen.lazyderef (tl V2720) V2918) (if (= () V2732) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2732) (do (shen.bindv V2732 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2732 V2918) Result))) false))) (do (shen.unbindv V2728 V2918) Result)))) false))) (do (shen.unbindv V2722 V2918) Result))) false))) (if (shen.pvar? V2721) (let A (shen.newpv V2918) (do (shen.bindv V2721 (cons vector (cons A ())) V2918) (let Result (let V2733 (shen.lazyderef (tl V2720) V2918) (if (= () V2733) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2733 V2918) Result))) false))) (do (shen.unbindv V2721 V2918) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2734 (shen.lazyderef V2916 V2918) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2918) (if (cons? V2735) (let V2736 (shen.lazyderef (hd V2735) V2918) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2918) (if (= @s V2737) (let V2738 (shen.lazyderef (tl V2736) V2918) (if (cons? V2738) (let X (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2918) (if (cons? V2739) (let Y (hd V2739) (let V2740 (shen.lazyderef (tl V2739) V2918) (if (= () V2740) (let V2741 (shen.lazyderef (tl V2735) V2918) (if (cons? V2741) (let V2742 (shen.lazyderef (hd V2741) V2918) (if (= : V2742) (let V2743 (shen.lazyderef (tl V2741) V2918) (if (cons? V2743) (let V2744 (shen.lazyderef (hd V2743) V2918) (if (= string V2744) (let V2745 (shen.lazyderef (tl V2743) V2918) (if (= () V2745) (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2745) (do (shen.bindv V2745 () V2918) (let Result (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2745 V2918) Result))) false))) (if (shen.pvar? V2744) (do (shen.bindv V2744 string V2918) (let Result (let V2746 (shen.lazyderef (tl V2743) V2918) (if (= () V2746) (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2746) (do (shen.bindv V2746 () V2918) (let Result (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2746 V2918) Result))) false))) (do (shen.unbindv V2744 V2918) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2747 (shen.lazyderef V2916 V2918) (if (cons? V2747) (let X (hd V2747) (let Hyp (tl V2747) (let NewHyps (shen.newpv V2918) (do (shen.incinfs) (bind V2917 (cons (shen.lazyderef X V2918) (shen.lazyderef NewHyps V2918)) V2918 (freeze (shen.t*-hyps Hyp NewHyps V2918 V2919))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2876 V2877 V2878 V2879) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2876 V2878)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2877 V2878) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2879))))))))) (true (thaw V2879)))) +(defun shen.show (V2932 V2933 V2934 V2935) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2932 V2934)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2933 V2934) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2935))))))))) (true (thaw V2935)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2880) (cond ((and (cons? V2880) (and (cons? (tl V2880)) (and (= : (hd (tl V2880))) (and (cons? (tl (tl V2880))) (= () (tl (tl (tl V2880)))))))) (shen.prhush (shen.app (hd V2880) (cn " : " (shen.app (hd (tl (tl V2880))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2880 "" shen.r) (stoutput))))) +(defun shen.show-p (V2936) (cond ((and (cons? V2936) (and (cons? (tl V2936)) (and (= : (hd (tl V2936))) (and (cons? (tl (tl V2936))) (= () (tl (tl (tl V2936)))))))) (shen.prhush (shen.app (hd V2936) (cn " : " (shen.app (hd (tl (tl V2936))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2936 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2883 V2884) (cond ((= () V2883) shen.skip) ((cons? V2883) (do (shen.prhush (shen.app V2884 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2883)) (do (nl 1) (shen.show-assumptions (tl V2883) (+ V2884 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2939 V2940) (cond ((= () V2939) shen.skip) ((cons? V2939) (do (shen.prhush (shen.app V2940 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2939)) (do (nl 1) (shen.show-assumptions (tl V2939) (+ V2940 1)))))) (true (shen.sys-error shen.show-assumptions)))) (defun shen.pause-for-user () (let Byte (read-byte (stinput)) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2885) (cons? (assoc V2885 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2941) (cons? (assoc V2941 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2886) (concat shen.type-signature-of- V2886)) +(defun shen.sigf (V2942) (concat shen.type-signature-of- V2942)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2887 V2888 V2889 V2890) (let Case (let V2599 (shen.lazyderef V2888 V2889) (if (= number V2599) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2599) (do (shen.bindv V2599 number V2889) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2599 V2889) Result))) false))) (if (= Case false) (let Case (let V2600 (shen.lazyderef V2888 V2889) (if (= boolean V2600) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2600) (do (shen.bindv V2600 boolean V2889) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2600 V2889) Result))) false))) (if (= Case false) (let Case (let V2601 (shen.lazyderef V2888 V2889) (if (= string V2601) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2887 V2889)) V2889 V2890)) (if (shen.pvar? V2601) (do (shen.bindv V2601 string V2889) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2887 V2889)) V2889 V2890)) (do (shen.unbindv V2601 V2889) Result))) false))) (if (= Case false) (let Case (let V2602 (shen.lazyderef V2888 V2889) (if (= symbol V2602) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2887 V2889)) V2889 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2887 V2889))) V2889 V2890)))) (if (shen.pvar? V2602) (do (shen.bindv V2602 symbol V2889) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2887 V2889)) V2889 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2887 V2889))) V2889 V2890)))) (do (shen.unbindv V2602 V2889) Result))) false))) (if (= Case false) (let V2603 (shen.lazyderef V2887 V2889) (if (= () V2603) (let V2604 (shen.lazyderef V2888 V2889) (if (cons? V2604) (let V2605 (shen.lazyderef (hd V2604) V2889) (if (= list V2605) (let V2606 (shen.lazyderef (tl V2604) V2889) (if (cons? V2606) (let A (hd V2606) (let V2607 (shen.lazyderef (tl V2606) V2889) (if (= () V2607) (do (shen.incinfs) (thaw V2890)) (if (shen.pvar? V2607) (do (shen.bindv V2607 () V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2607 V2889) Result))) false)))) (if (shen.pvar? V2606) (let A (shen.newpv V2889) (do (shen.bindv V2606 (cons A ()) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2606 V2889) Result)))) false))) (if (shen.pvar? V2605) (do (shen.bindv V2605 list V2889) (let Result (let V2608 (shen.lazyderef (tl V2604) V2889) (if (cons? V2608) (let A (hd V2608) (let V2609 (shen.lazyderef (tl V2608) V2889) (if (= () V2609) (do (shen.incinfs) (thaw V2890)) (if (shen.pvar? V2609) (do (shen.bindv V2609 () V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2609 V2889) Result))) false)))) (if (shen.pvar? V2608) (let A (shen.newpv V2889) (do (shen.bindv V2608 (cons A ()) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2608 V2889) Result)))) false))) (do (shen.unbindv V2605 V2889) Result))) false))) (if (shen.pvar? V2604) (let A (shen.newpv V2889) (do (shen.bindv V2604 (cons list (cons A ())) V2889) (let Result (do (shen.incinfs) (thaw V2890)) (do (shen.unbindv V2604 V2889) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2943 V2944 V2945 V2946) (let Case (let V2650 (shen.lazyderef V2944 V2945) (if (= number V2650) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2650) (do (shen.bindv V2650 number V2945) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2650 V2945) Result))) false))) (if (= Case false) (let Case (let V2651 (shen.lazyderef V2944 V2945) (if (= boolean V2651) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2651) (do (shen.bindv V2651 boolean V2945) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2651 V2945) Result))) false))) (if (= Case false) (let Case (let V2652 (shen.lazyderef V2944 V2945) (if (= string V2652) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2652) (do (shen.bindv V2652 string V2945) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2652 V2945) Result))) false))) (if (= Case false) (let Case (let V2653 (shen.lazyderef V2944 V2945) (if (= symbol V2653) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2943 V2945)) V2945 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2943 V2945))) V2945 V2946)))) (if (shen.pvar? V2653) (do (shen.bindv V2653 symbol V2945) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2943 V2945)) V2945 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2943 V2945))) V2945 V2946)))) (do (shen.unbindv V2653 V2945) Result))) false))) (if (= Case false) (let V2654 (shen.lazyderef V2943 V2945) (if (= () V2654) (let V2655 (shen.lazyderef V2944 V2945) (if (cons? V2655) (let V2656 (shen.lazyderef (hd V2655) V2945) (if (= list V2656) (let V2657 (shen.lazyderef (tl V2655) V2945) (if (cons? V2657) (let A (hd V2657) (let V2658 (shen.lazyderef (tl V2657) V2945) (if (= () V2658) (do (shen.incinfs) (thaw V2946)) (if (shen.pvar? V2658) (do (shen.bindv V2658 () V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2658 V2945) Result))) false)))) (if (shen.pvar? V2657) (let A (shen.newpv V2945) (do (shen.bindv V2657 (cons A ()) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2657 V2945) Result)))) false))) (if (shen.pvar? V2656) (do (shen.bindv V2656 list V2945) (let Result (let V2659 (shen.lazyderef (tl V2655) V2945) (if (cons? V2659) (let A (hd V2659) (let V2660 (shen.lazyderef (tl V2659) V2945) (if (= () V2660) (do (shen.incinfs) (thaw V2946)) (if (shen.pvar? V2660) (do (shen.bindv V2660 () V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2660 V2945) Result))) false)))) (if (shen.pvar? V2659) (let A (shen.newpv V2945) (do (shen.bindv V2659 (cons A ()) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2659 V2945) Result)))) false))) (do (shen.unbindv V2656 V2945) Result))) false))) (if (shen.pvar? V2655) (let A (shen.newpv V2945) (do (shen.bindv V2655 (cons list (cons A ())) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2655 V2945) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2891 V2892 V2893 V2894 V2895) (let Case (let V2590 (shen.lazyderef V2893 V2894) (if (cons? V2590) (let V2591 (shen.lazyderef (hd V2590) V2894) (if (cons? V2591) (let Y (hd V2591) (let V2592 (shen.lazyderef (tl V2591) V2894) (if (cons? V2592) (let V2593 (shen.lazyderef (hd V2592) V2894) (if (= : V2593) (let V2594 (shen.lazyderef (tl V2592) V2894) (if (cons? V2594) (let B (hd V2594) (let V2595 (shen.lazyderef (tl V2594) V2894) (if (= () V2595) (do (shen.incinfs) (identical V2891 Y V2894 (freeze (unify! V2892 B V2894 V2895)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2596 (shen.lazyderef V2893 V2894) (if (cons? V2596) (let Hyp (tl V2596) (do (shen.incinfs) (shen.by_hypothesis V2891 V2892 Hyp V2894 V2895))) false)) Case))) +(defun shen.by_hypothesis (V2947 V2948 V2949 V2950 V2951) (let Case (let V2641 (shen.lazyderef V2949 V2950) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2950) (if (cons? V2642) (let Y (hd V2642) (let V2643 (shen.lazyderef (tl V2642) V2950) (if (cons? V2643) (let V2644 (shen.lazyderef (hd V2643) V2950) (if (= : V2644) (let V2645 (shen.lazyderef (tl V2643) V2950) (if (cons? V2645) (let B (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2950) (if (= () V2646) (do (shen.incinfs) (identical V2947 Y V2950 (freeze (unify! V2948 B V2950 V2951)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2647 (shen.lazyderef V2949 V2950) (if (cons? V2647) (let Hyp (tl V2647) (do (shen.incinfs) (shen.by_hypothesis V2947 V2948 Hyp V2950 V2951))) false)) Case))) -(defun shen.t*-def (V2896 V2897 V2898 V2899 V2900) (let V2584 (shen.lazyderef V2896 V2899) (if (cons? V2584) (let V2585 (shen.lazyderef (hd V2584) V2899) (if (= define V2585) (let V2586 (shen.lazyderef (tl V2584) V2899) (if (cons? V2586) (let F (hd V2586) (let X (tl V2586) (let E (shen.newpv V2899) (do (shen.incinfs) (shen.t*-defh (compile shen. X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2952 V2953 V2954 V2955 V2956) (let V2635 (shen.lazyderef V2952 V2955) (if (cons? V2635) (let V2636 (shen.lazyderef (hd V2635) V2955) (if (= define V2636) (let V2637 (shen.lazyderef (tl V2635) V2955) (if (cons? V2637) (let F (hd V2637) (let X (tl V2637) (let E (shen.newpv V2955) (do (shen.incinfs) (shen.t*-defh (compile (lambda X2878 (shen. X2878)) X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2897 V2898 V2899 V2900))))) false)) false)) false))) +")))) F V2953 V2954 V2955 V2956))))) false)) false)) false))) -(defun shen.t*-defh (V2901 V2902 V2903 V2904 V2905 V2906) (let V2580 (shen.lazyderef V2901 V2905) (if (cons? V2580) (let Sig (hd V2580) (let Rules (tl V2580) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2902 V2903 V2904 Rules V2905 V2906)))) false))) +(defun shen.t*-defh (V2957 V2958 V2959 V2960 V2961 V2962) (let V2631 (shen.lazyderef V2957 V2961) (if (cons? V2631) (let Sig (hd V2631) (let Rules (tl V2631) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2958 V2959 V2960 Rules V2961 V2962)))) false))) -(defun shen.t*-defhh (V2907 V2908 V2909 V2910 V2911 V2912 V2913 V2914) (do (shen.incinfs) (shen.t*-rules V2912 V2908 1 V2909 (cons (cons V2909 (cons : (cons V2908 ()))) V2911) V2913 (freeze (shen.memo V2909 V2907 V2910 V2913 V2914))))) +(defun shen.t*-defhh (V2963 V2964 V2965 V2966 V2967 V2968 V2969 V2970) (do (shen.incinfs) (shen.t*-rules V2968 V2964 1 V2965 (cons (cons V2965 (cons : (cons V2964 ()))) V2967) V2969 (freeze (shen.memo V2965 V2963 V2966 V2969 V2970))))) -(defun shen.memo (V2915 V2916 V2917 V2918 V2919) (let Jnk (shen.newpv V2918) (do (shen.incinfs) (unify! V2917 V2916 V2918 (freeze (bind Jnk (declare (shen.lazyderef V2915 V2918) (shen.lazyderef V2917 V2918)) V2918 V2919)))))) +(defun shen.memo (V2971 V2972 V2973 V2974 V2975) (let Jnk (shen.newpv V2974) (do (shen.incinfs) (unify! V2973 V2972 V2974 (freeze (bind Jnk (declare (shen.lazyderef V2971 V2974) (shen.lazyderef V2973 V2974)) V2974 V2975)))))) -(defun shen. (V2924) (let Result (let Parse_shen. (shen. V2924) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2980) (let Result (let Parse_shen. (shen. V2980) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2925) (cond ((and (cons? V2925) (and (cons? (tl V2925)) (and (= () (tl (tl V2925))) (= (hd V2925) protect)))) V2925) ((cons? V2925) (map shen.ue V2925)) ((variable? V2925) (concat && V2925)) (true V2925))) +(defun shen.ue (V2981) (cond ((and (cons? V2981) (and (cons? (tl V2981)) (and (= () (tl (tl V2981))) (= (hd V2981) protect)))) V2981) ((cons? V2981) (map (lambda X2879 (shen.ue X2879)) V2981)) ((variable? V2981) (concat && V2981)) (true V2981))) -(defun shen.ue-sig (V2926) (cond ((cons? V2926) (map shen.ue-sig V2926)) ((variable? V2926) (concat &&& V2926)) (true V2926))) +(defun shen.ue-sig (V2982) (cond ((cons? V2982) (map (lambda X2880 (shen.ue-sig X2880)) V2982)) ((variable? V2982) (concat &&& V2982)) (true V2982))) -(defun shen.ues (V2931) (cond ((shen.ue? V2931) (cons V2931 ())) ((cons? V2931) (union (shen.ues (hd V2931)) (shen.ues (tl V2931)))) (true ()))) +(defun shen.ues (V2987) (cond ((shen.ue? V2987) (cons V2987 ())) ((cons? V2987) (union (shen.ues (hd V2987)) (shen.ues (tl V2987)))) (true ()))) -(defun shen.ue? (V2932) (and (symbol? V2932) (shen.ue-h? (str V2932)))) +(defun shen.ue? (V2988) (and (symbol? V2988) (shen.ue-h? (str V2988)))) -(defun shen.ue-h? (V2939) (cond ((and (shen.+string? V2939) (and (= "&" (pos V2939 0)) (and (shen.+string? (tlstr V2939)) (= "&" (pos (tlstr V2939) 0))))) true) (true false))) +(defun shen.ue-h? (V2995) (cond ((and (shen.+string? V2995) (and (= "&" (pos V2995 0)) (and (shen.+string? (tlstr V2995)) (= "&" (pos (tlstr V2995) 0))))) true) (true false))) -(defun shen.t*-rules (V2940 V2941 V2942 V2943 V2944 V2945 V2946) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2555 (shen.lazyderef V2940 V2945) (if (= () V2555) (do (shen.incinfs) (thaw V2946)) false)) (if (= Case false) (let Case (let V2556 (shen.lazyderef V2940 V2945) (if (cons? V2556) (let V2557 (shen.lazyderef (hd V2556) V2945) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2945) (if (= () V2558) (let V2559 (shen.lazyderef (tl V2557) V2945) (if (cons? V2559) (let Action (hd V2559) (let V2560 (shen.lazyderef (tl V2559) V2945) (if (= () V2560) (let Rules (tl V2556) (let V2561 (shen.lazyderef V2941 V2945) (if (cons? V2561) (let V2562 (shen.lazyderef (hd V2561) V2945) (if (= --> V2562) (let V2563 (shen.lazyderef (tl V2561) V2945) (if (cons? V2563) (let A (hd V2563) (let V2564 (shen.lazyderef (tl V2563) V2945) (if (= () V2564) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2944 V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rules Rules A (+ V2942 1) V2943 V2944 V2945 V2946)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2565 (shen.lazyderef V2940 V2945) (if (cons? V2565) (let Rule (hd V2565) (let Rules (tl V2565) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2941 V2944 V2945 (freeze (cut Throwcontrol V2945 (freeze (shen.t*-rules Rules V2941 (+ V2942 1) V2943 V2944 V2945 V2946)))))))) false)) (if (= Case false) (let Err (shen.newpv V2945) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2942 V2945) (cn " of " (shen.app (shen.lazyderef V2943 V2945) "" shen.a)) shen.a))) V2945 V2946))) Case)) Case)) Case))))) +(defun shen.t*-rules (V2996 V2997 V2998 V2999 V3000 V3001 V3002) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2606 (shen.lazyderef V2996 V3001) (if (= () V2606) (do (shen.incinfs) (thaw V3002)) false)) (if (= Case false) (let Case (let V2607 (shen.lazyderef V2996 V3001) (if (cons? V2607) (let V2608 (shen.lazyderef (hd V2607) V3001) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V3001) (if (= () V2609) (let V2610 (shen.lazyderef (tl V2608) V3001) (if (cons? V2610) (let Action (hd V2610) (let V2611 (shen.lazyderef (tl V2610) V3001) (if (= () V2611) (let Rules (tl V2607) (let V2612 (shen.lazyderef V2997 V3001) (if (cons? V2612) (let V2613 (shen.lazyderef (hd V2612) V3001) (if (= --> V2613) (let V2614 (shen.lazyderef (tl V2612) V3001) (if (cons? V2614) (let A (hd V2614) (let V2615 (shen.lazyderef (tl V2614) V3001) (if (= () V2615) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V3000 V3001 (freeze (cut Throwcontrol V3001 (freeze (shen.t*-rules Rules A (+ V2998 1) V2999 V3000 V3001 V3002)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2616 (shen.lazyderef V2996 V3001) (if (cons? V2616) (let Rule (hd V2616) (let Rules (tl V2616) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2997 V3000 V3001 (freeze (cut Throwcontrol V3001 (freeze (shen.t*-rules Rules V2997 (+ V2998 1) V2999 V3000 V3001 V3002)))))))) false)) (if (= Case false) (let Err (shen.newpv V3001) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2998 V3001) (cn " of " (shen.app (shen.lazyderef V2999 V3001) "" shen.a)) shen.a))) V3001 V3002))) Case)) Case)) Case))))) -(defun shen.t*-rule (V2947 V2948 V2949 V2950 V2951) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2537 (shen.lazyderef V2947 V2950) (if (cons? V2537) (let V2538 (shen.lazyderef (hd V2537) V2950) (if (= () V2538) (let V2539 (shen.lazyderef (tl V2537) V2950) (if (cons? V2539) (let Action (hd V2539) (let V2540 (shen.lazyderef (tl V2539) V2950) (if (= () V2540) (do (shen.incinfs) (cut Throwcontrol V2950 (freeze (shen.t*-action (shen.curry Action) V2948 V2949 V2950 V2951)))) false))) false)) false)) false)) (if (= Case false) (let V2541 (shen.lazyderef V2947 V2950) (if (cons? V2541) (let V2542 (shen.lazyderef (hd V2541) V2950) (if (cons? V2542) (let Pattern (hd V2542) (let Patterns (tl V2542) (let V2543 (shen.lazyderef (tl V2541) V2950) (if (cons? V2543) (let Action (hd V2543) (let V2544 (shen.lazyderef (tl V2543) V2950) (if (= () V2544) (let V2545 (shen.lazyderef V2948 V2950) (if (cons? V2545) (let A (hd V2545) (let V2546 (shen.lazyderef (tl V2545) V2950) (if (cons? V2546) (let V2547 (shen.lazyderef (hd V2546) V2950) (if (= --> V2547) (let V2548 (shen.lazyderef (tl V2546) V2950) (if (cons? V2548) (let B (hd V2548) (let V2549 (shen.lazyderef (tl V2548) V2950) (if (= () V2549) (do (shen.incinfs) (shen.t*-pattern Pattern A V2950 (freeze (cut Throwcontrol V2950 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2949) V2950 V2951)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rule (V3003 V3004 V3005 V3006 V3007) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2588 (shen.lazyderef V3003 V3006) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V3006) (if (= () V2589) (let V2590 (shen.lazyderef (tl V2588) V3006) (if (cons? V2590) (let Action (hd V2590) (let V2591 (shen.lazyderef (tl V2590) V3006) (if (= () V2591) (do (shen.incinfs) (cut Throwcontrol V3006 (freeze (shen.t*-action (shen.curry Action) V3004 V3005 V3006 V3007)))) false))) false)) false)) false)) (if (= Case false) (let V2592 (shen.lazyderef V3003 V3006) (if (cons? V2592) (let V2593 (shen.lazyderef (hd V2592) V3006) (if (cons? V2593) (let Pattern (hd V2593) (let Patterns (tl V2593) (let V2594 (shen.lazyderef (tl V2592) V3006) (if (cons? V2594) (let Action (hd V2594) (let V2595 (shen.lazyderef (tl V2594) V3006) (if (= () V2595) (let V2596 (shen.lazyderef V3004 V3006) (if (cons? V2596) (let A (hd V2596) (let V2597 (shen.lazyderef (tl V2596) V3006) (if (cons? V2597) (let V2598 (shen.lazyderef (hd V2597) V3006) (if (= --> V2598) (let V2599 (shen.lazyderef (tl V2597) V3006) (if (cons? V2599) (let B (hd V2599) (let V2600 (shen.lazyderef (tl V2599) V3006) (if (= () V2600) (do (shen.incinfs) (shen.t*-pattern Pattern A V3006 (freeze (cut Throwcontrol V3006 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V3005) V3006 V3007)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-action (V2952 V2953 V2954 V2955 V2956) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2514 (shen.lazyderef V2952 V2955) (if (cons? V2514) (let V2515 (shen.lazyderef (hd V2514) V2955) (if (= where V2515) (let V2516 (shen.lazyderef (tl V2514) V2955) (if (cons? V2516) (let P (hd V2516) (let V2517 (shen.lazyderef (tl V2516) V2955) (if (cons? V2517) (let Action (hd V2517) (let V2518 (shen.lazyderef (tl V2517) V2955) (if (= () V2518) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2954 V2955 (freeze (cut Throwcontrol V2955 (freeze (shen.t*-action Action V2953 (cons (cons P (cons : (cons verified ()))) V2954) V2955 V2956)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2519 (shen.lazyderef V2952 V2955) (if (cons? V2519) (let V2520 (shen.lazyderef (hd V2519) V2955) (if (= shen.choicepoint! V2520) (let V2521 (shen.lazyderef (tl V2519) V2955) (if (cons? V2521) (let V2522 (shen.lazyderef (hd V2521) V2955) (if (cons? V2522) (let V2523 (shen.lazyderef (hd V2522) V2955) (if (cons? V2523) (let V2524 (shen.lazyderef (hd V2523) V2955) (if (= fail-if V2524) (let V2525 (shen.lazyderef (tl V2523) V2955) (if (cons? V2525) (let F (hd V2525) (let V2526 (shen.lazyderef (tl V2525) V2955) (if (= () V2526) (let V2527 (shen.lazyderef (tl V2522) V2955) (if (cons? V2527) (let Action (hd V2527) (let V2528 (shen.lazyderef (tl V2527) V2955) (if (= () V2528) (let V2529 (shen.lazyderef (tl V2521) V2955) (if (= () V2529) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2953 V2954 V2955 V2956)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2530 (shen.lazyderef V2952 V2955) (if (cons? V2530) (let V2531 (shen.lazyderef (hd V2530) V2955) (if (= shen.choicepoint! V2531) (let V2532 (shen.lazyderef (tl V2530) V2955) (if (cons? V2532) (let Action (hd V2532) (let V2533 (shen.lazyderef (tl V2532) V2955) (if (= () V2533) (do (shen.incinfs) (cut Throwcontrol V2955 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2953 V2954 V2955 V2956)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2952 (cons : (cons V2953 ()))) V2954 V2955 V2956)) Case)) Case)) Case))))) +(defun shen.t*-action (V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2565 (shen.lazyderef V3008 V3011) (if (cons? V2565) (let V2566 (shen.lazyderef (hd V2565) V3011) (if (= where V2566) (let V2567 (shen.lazyderef (tl V2565) V3011) (if (cons? V2567) (let P (hd V2567) (let V2568 (shen.lazyderef (tl V2567) V3011) (if (cons? V2568) (let Action (hd V2568) (let V2569 (shen.lazyderef (tl V2568) V3011) (if (= () V2569) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V3010 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.t*-action Action V3009 (cons (cons P (cons : (cons verified ()))) V3010) V3011 V3012)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2570 (shen.lazyderef V3008 V3011) (if (cons? V2570) (let V2571 (shen.lazyderef (hd V2570) V3011) (if (= shen.choicepoint! V2571) (let V2572 (shen.lazyderef (tl V2570) V3011) (if (cons? V2572) (let V2573 (shen.lazyderef (hd V2572) V3011) (if (cons? V2573) (let V2574 (shen.lazyderef (hd V2573) V3011) (if (cons? V2574) (let V2575 (shen.lazyderef (hd V2574) V3011) (if (= fail-if V2575) (let V2576 (shen.lazyderef (tl V2574) V3011) (if (cons? V2576) (let F (hd V2576) (let V2577 (shen.lazyderef (tl V2576) V3011) (if (= () V2577) (let V2578 (shen.lazyderef (tl V2573) V3011) (if (cons? V2578) (let Action (hd V2578) (let V2579 (shen.lazyderef (tl V2578) V3011) (if (= () V2579) (let V2580 (shen.lazyderef (tl V2572) V3011) (if (= () V2580) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V3009 V3010 V3011 V3012)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2581 (shen.lazyderef V3008 V3011) (if (cons? V2581) (let V2582 (shen.lazyderef (hd V2581) V3011) (if (= shen.choicepoint! V2582) (let V2583 (shen.lazyderef (tl V2581) V3011) (if (cons? V2583) (let Action (hd V2583) (let V2584 (shen.lazyderef (tl V2583) V3011) (if (= () V2584) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V3009 V3010 V3011 V3012)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V3008 (cons : (cons V3009 ()))) V3010 V3011 V3012)) Case)) Case)) Case))))) -(defun shen.t*-pattern (V2957 V2958 V2959 V2960) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2959) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2957) Hyp V2959 (freeze (cut Throwcontrol V2959 (freeze (shen.t* (cons V2957 (cons : (cons V2958 ()))) Hyp V2959 V2960)))))))))) +(defun shen.t*-pattern (V3013 V3014 V3015 V3016) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V3015) (do (shen.incinfs) (shen.tms->hyp (shen.ues V3013) Hyp V3015 (freeze (cut Throwcontrol V3015 (freeze (shen.t* (cons V3013 (cons : (cons V3014 ()))) Hyp V3015 V3016)))))))))) -(defun shen.tms->hyp (V2961 V2962 V2963 V2964) (let Case (let V2498 (shen.lazyderef V2961 V2963) (if (= () V2498) (let V2499 (shen.lazyderef V2962 V2963) (if (= () V2499) (do (shen.incinfs) (thaw V2964)) (if (shen.pvar? V2499) (do (shen.bindv V2499 () V2963) (let Result (do (shen.incinfs) (thaw V2964)) (do (shen.unbindv V2499 V2963) Result))) false))) false)) (if (= Case false) (let V2500 (shen.lazyderef V2961 V2963) (if (cons? V2500) (let Tm2495 (hd V2500) (let Tms (tl V2500) (let V2501 (shen.lazyderef V2962 V2963) (if (cons? V2501) (let V2502 (shen.lazyderef (hd V2501) V2963) (if (cons? V2502) (let Tm (hd V2502) (let V2503 (shen.lazyderef (tl V2502) V2963) (if (cons? V2503) (let V2504 (shen.lazyderef (hd V2503) V2963) (if (= : V2504) (let V2505 (shen.lazyderef (tl V2503) V2963) (if (cons? V2505) (let A (hd V2505) (let V2506 (shen.lazyderef (tl V2505) V2963) (if (= () V2506) (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (if (shen.pvar? V2506) (do (shen.bindv V2506 () V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2506 V2963) Result))) false)))) (if (shen.pvar? V2505) (let A (shen.newpv V2963) (do (shen.bindv V2505 (cons A ()) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2505 V2963) Result)))) false))) (if (shen.pvar? V2504) (do (shen.bindv V2504 : V2963) (let Result (let V2507 (shen.lazyderef (tl V2503) V2963) (if (cons? V2507) (let A (hd V2507) (let V2508 (shen.lazyderef (tl V2507) V2963) (if (= () V2508) (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (if (shen.pvar? V2508) (do (shen.bindv V2508 () V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2508 V2963) Result))) false)))) (if (shen.pvar? V2507) (let A (shen.newpv V2963) (do (shen.bindv V2507 (cons A ()) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2507 V2963) Result)))) false))) (do (shen.unbindv V2504 V2963) Result))) false))) (if (shen.pvar? V2503) (let A (shen.newpv V2963) (do (shen.bindv V2503 (cons : (cons A ())) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2503 V2963) Result)))) false)))) (if (shen.pvar? V2502) (let Tm (shen.newpv V2963) (let A (shen.newpv V2963) (do (shen.bindv V2502 (cons Tm (cons : (cons A ()))) V2963) (let Result (let Hyp (tl V2501) (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964))))) (do (shen.unbindv V2502 V2963) Result))))) false))) (if (shen.pvar? V2501) (let Tm (shen.newpv V2963) (let A (shen.newpv V2963) (let Hyp (shen.newpv V2963) (do (shen.bindv V2501 (cons (cons Tm (cons : (cons A ()))) Hyp) V2963) (let Result (do (shen.incinfs) (unify! Tm Tm2495 V2963 (freeze (shen.tms->hyp Tms Hyp V2963 V2964)))) (do (shen.unbindv V2501 V2963) Result)))))) false))))) false)) Case))) +(defun shen.tms->hyp (V3017 V3018 V3019 V3020) (let Case (let V2549 (shen.lazyderef V3017 V3019) (if (= () V2549) (let V2550 (shen.lazyderef V3018 V3019) (if (= () V2550) (do (shen.incinfs) (thaw V3020)) (if (shen.pvar? V2550) (do (shen.bindv V2550 () V3019) (let Result (do (shen.incinfs) (thaw V3020)) (do (shen.unbindv V2550 V3019) Result))) false))) false)) (if (= Case false) (let V2551 (shen.lazyderef V3017 V3019) (if (cons? V2551) (let Tm2546 (hd V2551) (let Tms (tl V2551) (let V2552 (shen.lazyderef V3018 V3019) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V3019) (if (cons? V2553) (let Tm (hd V2553) (let V2554 (shen.lazyderef (tl V2553) V3019) (if (cons? V2554) (let V2555 (shen.lazyderef (hd V2554) V3019) (if (= : V2555) (let V2556 (shen.lazyderef (tl V2554) V3019) (if (cons? V2556) (let A (hd V2556) (let V2557 (shen.lazyderef (tl V2556) V3019) (if (= () V2557) (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (if (shen.pvar? V2557) (do (shen.bindv V2557 () V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2557 V3019) Result))) false)))) (if (shen.pvar? V2556) (let A (shen.newpv V3019) (do (shen.bindv V2556 (cons A ()) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2556 V3019) Result)))) false))) (if (shen.pvar? V2555) (do (shen.bindv V2555 : V3019) (let Result (let V2558 (shen.lazyderef (tl V2554) V3019) (if (cons? V2558) (let A (hd V2558) (let V2559 (shen.lazyderef (tl V2558) V3019) (if (= () V2559) (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (if (shen.pvar? V2559) (do (shen.bindv V2559 () V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2559 V3019) Result))) false)))) (if (shen.pvar? V2558) (let A (shen.newpv V3019) (do (shen.bindv V2558 (cons A ()) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2558 V3019) Result)))) false))) (do (shen.unbindv V2555 V3019) Result))) false))) (if (shen.pvar? V2554) (let A (shen.newpv V3019) (do (shen.bindv V2554 (cons : (cons A ())) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2554 V3019) Result)))) false)))) (if (shen.pvar? V2553) (let Tm (shen.newpv V3019) (let A (shen.newpv V3019) (do (shen.bindv V2553 (cons Tm (cons : (cons A ()))) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2553 V3019) Result))))) false))) (if (shen.pvar? V2552) (let Tm (shen.newpv V3019) (let A (shen.newpv V3019) (let Hyp (shen.newpv V3019) (do (shen.bindv V2552 (cons (cons Tm (cons : (cons A ()))) Hyp) V3019) (let Result (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020)))) (do (shen.unbindv V2552 V3019) Result)))))) false))))) false)) Case))) -(defun findall (V2965 V2966 V2967 V2968 V2969) (let B (shen.newpv V2968) (let A (shen.newpv V2968) (do (shen.incinfs) (bind A (gensym shen.a) V2968 (freeze (bind B (set (shen.lazyderef A V2968) ()) V2968 (freeze (shen.findallhelp V2965 V2966 V2967 A V2968 V2969))))))))) +(defun findall (V3021 V3022 V3023 V3024 V3025) (let B (shen.newpv V3024) (let A (shen.newpv V3024) (do (shen.incinfs) (bind A (gensym shen.a) V3024 (freeze (bind B (set (shen.lazyderef A V3024) ()) V3024 (freeze (shen.findallhelp V3021 V3022 V3023 A V3024 V3025))))))))) -(defun shen.findallhelp (V2970 V2971 V2972 V2973 V2974 V2975) (let Case (do (shen.incinfs) (call V2971 V2974 (freeze (shen.remember V2973 V2970 V2974 (freeze (fwhen false V2974 V2975)))))) (if (= Case false) (do (shen.incinfs) (bind V2972 (value (shen.lazyderef V2973 V2974)) V2974 V2975)) Case))) +(defun shen.findallhelp (V3026 V3027 V3028 V3029 V3030 V3031) (let Case (do (shen.incinfs) (call V3027 V3030 (freeze (shen.remember V3029 V3026 V3030 (freeze (fwhen false V3030 V3031)))))) (if (= Case false) (do (shen.incinfs) (bind V3028 (value (shen.lazyderef V3029 V3030)) V3030 V3031)) Case))) -(defun shen.remember (V2976 V2977 V2978 V2979) (let B (shen.newpv V2978) (do (shen.incinfs) (bind B (set (shen.deref V2976 V2978) (cons (shen.deref V2977 V2978) (value (shen.deref V2976 V2978)))) V2978 V2979)))) +(defun shen.remember (V3032 V3033 V3034 V3035) (let B (shen.newpv V3034) (do (shen.incinfs) (bind B (set (shen.deref V3032 V3034) (cons (shen.deref V3033 V3034) (value (shen.deref V3032 V3034)))) V3034 V3035)))) -(defun shen.t*-defcc (V2980 V2981 V2982 V2983 V2984) (let V2471 (shen.lazyderef V2980 V2983) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V2983) (if (= defcc V2472) (let V2473 (shen.lazyderef (tl V2471) V2983) (if (cons? V2473) (let F (hd V2473) (let V2474 (shen.lazyderef (tl V2473) V2983) (if (cons? V2474) (let V2475 (shen.lazyderef (hd V2474) V2983) (if (= { V2475) (let V2476 (shen.lazyderef (tl V2474) V2983) (if (cons? V2476) (let V2477 (shen.lazyderef (hd V2476) V2983) (if (cons? V2477) (let V2478 (shen.lazyderef (hd V2477) V2983) (if (= list V2478) (let V2479 (shen.lazyderef (tl V2477) V2983) (if (cons? V2479) (let A (hd V2479) (let V2480 (shen.lazyderef (tl V2479) V2983) (if (= () V2480) (let V2481 (shen.lazyderef (tl V2476) V2983) (if (cons? V2481) (let V2482 (shen.lazyderef (hd V2481) V2983) (if (= ==> V2482) (let V2483 (shen.lazyderef (tl V2481) V2983) (if (cons? V2483) (let B (hd V2483) (let V2484 (shen.lazyderef (tl V2483) V2983) (if (cons? V2484) (let V2485 (shen.lazyderef (hd V2484) V2983) (if (= } V2485) (let Rest (tl V2484) (do (shen.incinfs) (shen.t*-defcc-h (cons defcc (cons F (cons (shen.ue (shen.demodulate (cons (cons list (cons A ())) (cons ==> (cons B ()))))) (shen.ue (shen.split_cc_rules false (shen.plug-wildcards Rest) ()))))) V2981 V2982 V2983 V2984))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))) +(defun shen.t*-defcc (V3036 V3037 V3038 V3039 V3040) (let V2522 (shen.lazyderef V3036 V3039) (if (cons? V2522) (let V2523 (shen.lazyderef (hd V2522) V3039) (if (= defcc V2523) (let V2524 (shen.lazyderef (tl V2522) V3039) (if (cons? V2524) (let F (hd V2524) (let V2525 (shen.lazyderef (tl V2524) V3039) (if (cons? V2525) (let V2526 (shen.lazyderef (hd V2525) V3039) (if (= { V2526) (let V2527 (shen.lazyderef (tl V2525) V3039) (if (cons? V2527) (let V2528 (shen.lazyderef (hd V2527) V3039) (if (cons? V2528) (let V2529 (shen.lazyderef (hd V2528) V3039) (if (= list V2529) (let V2530 (shen.lazyderef (tl V2528) V3039) (if (cons? V2530) (let A (hd V2530) (let V2531 (shen.lazyderef (tl V2530) V3039) (if (= () V2531) (let V2532 (shen.lazyderef (tl V2527) V3039) (if (cons? V2532) (let V2533 (shen.lazyderef (hd V2532) V3039) (if (= ==> V2533) (let V2534 (shen.lazyderef (tl V2532) V3039) (if (cons? V2534) (let B (hd V2534) (let V2535 (shen.lazyderef (tl V2534) V3039) (if (cons? V2535) (let V2536 (shen.lazyderef (hd V2535) V3039) (if (= } V2536) (let Rest (tl V2535) (do (shen.incinfs) (shen.t*-defcc-h (cons defcc (cons F (cons (shen.ue (shen.demodulate (cons (cons list (cons A ())) (cons ==> (cons B ()))))) (shen.ue (shen.split_cc_rules false (shen.plug-wildcards Rest) ()))))) V3037 V3038 V3039 V3040))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))) -(defun shen.plug-wildcards (V2985) (cond ((cons? V2985) (map shen.plug-wildcards V2985)) ((= V2985 _) (gensym (intern "X"))) (true V2985))) +(defun shen.plug-wildcards (V3041) (cond ((cons? V3041) (map (lambda X2881 (shen.plug-wildcards X2881)) V3041)) ((= V3041 _) (gensym (intern "X"))) (true V3041))) -(defun shen.t*-defcc-h (V2986 V2987 V2988 V2989 V2990) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2455 (shen.lazyderef V2986 V2989) (if (cons? V2455) (let V2456 (shen.lazyderef (hd V2455) V2989) (if (= defcc V2456) (let V2457 (shen.lazyderef (tl V2455) V2989) (if (cons? V2457) (let F (hd V2457) (let V2458 (shen.lazyderef (tl V2457) V2989) (if (cons? V2458) (let V2459 (shen.lazyderef (hd V2458) V2989) (if (cons? V2459) (let V2460 (shen.lazyderef (hd V2459) V2989) (if (cons? V2460) (let V2461 (shen.lazyderef (hd V2460) V2989) (if (= list V2461) (let V2462 (shen.lazyderef (tl V2460) V2989) (if (cons? V2462) (let A (hd V2462) (let V2463 (shen.lazyderef (tl V2462) V2989) (if (= () V2463) (let V2464 (shen.lazyderef (tl V2459) V2989) (if (cons? V2464) (let V2465 (shen.lazyderef (hd V2464) V2989) (if (= ==> V2465) (let V2466 (shen.lazyderef (tl V2464) V2989) (if (cons? V2466) (let B (hd V2466) (let V2467 (shen.lazyderef (tl V2466) V2989) (if (= () V2467) (let Rules (tl V2458) (let Declare (shen.newpv V2989) (do (shen.incinfs) (cut Throwcontrol V2989 (freeze (shen.tc-rules F Rules (cons list (cons A ())) B (cons (cons F (cons : (cons (cons (cons list (cons A ())) (cons ==> (cons B ()))) ()))) V2988) 1 V2989 (freeze (unify V2987 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V2989 (freeze (bind Declare (declare (shen.lazyderef F V2989) (cons (cons list (cons (shen.lazyderef A V2989) ())) (cons ==> (cons (shen.lazyderef B V2989) ())))) V2989 V2990)))))))))) false))) false)) false)) false)) false))) false)) false)) false)) false)) false))) false)) false)) false))))) +(defun shen.t*-defcc-h (V3042 V3043 V3044 V3045 V3046) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2506 (shen.lazyderef V3042 V3045) (if (cons? V2506) (let V2507 (shen.lazyderef (hd V2506) V3045) (if (= defcc V2507) (let V2508 (shen.lazyderef (tl V2506) V3045) (if (cons? V2508) (let F (hd V2508) (let V2509 (shen.lazyderef (tl V2508) V3045) (if (cons? V2509) (let V2510 (shen.lazyderef (hd V2509) V3045) (if (cons? V2510) (let V2511 (shen.lazyderef (hd V2510) V3045) (if (cons? V2511) (let V2512 (shen.lazyderef (hd V2511) V3045) (if (= list V2512) (let V2513 (shen.lazyderef (tl V2511) V3045) (if (cons? V2513) (let A (hd V2513) (let V2514 (shen.lazyderef (tl V2513) V3045) (if (= () V2514) (let V2515 (shen.lazyderef (tl V2510) V3045) (if (cons? V2515) (let V2516 (shen.lazyderef (hd V2515) V3045) (if (= ==> V2516) (let V2517 (shen.lazyderef (tl V2515) V3045) (if (cons? V2517) (let B (hd V2517) (let V2518 (shen.lazyderef (tl V2517) V3045) (if (= () V2518) (let Rules (tl V2509) (let Declare (shen.newpv V3045) (do (shen.incinfs) (cut Throwcontrol V3045 (freeze (shen.tc-rules F Rules (cons list (cons A ())) B (cons (cons F (cons : (cons (cons (cons list (cons A ())) (cons ==> (cons B ()))) ()))) V3044) 1 V3045 (freeze (unify V3043 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V3045 (freeze (bind Declare (declare (shen.lazyderef F V3045) (cons (cons list (cons (shen.lazyderef A V3045) ())) (cons ==> (cons (shen.lazyderef B V3045) ())))) V3045 V3046)))))))))) false))) false)) false)) false)) false))) false)) false)) false)) false)) false))) false)) false)) false))))) -(defun shen.tc-rules (V2991 V2992 V2993 V2994 V2995 V2996 V2997 V2998) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2446 (shen.lazyderef V2992 V2997) (if (= () V2446) (do (shen.incinfs) (thaw V2998)) false)) (if (= Case false) (let V2447 (shen.lazyderef V2992 V2997) (if (cons? V2447) (let Rule (hd V2447) (let Rules (tl V2447) (let V2448 (shen.lazyderef V2993 V2997) (if (cons? V2448) (let V2449 (shen.lazyderef (hd V2448) V2997) (if (= list V2449) (let V2450 (shen.lazyderef (tl V2448) V2997) (if (cons? V2450) (let A (hd V2450) (let V2451 (shen.lazyderef (tl V2450) V2997) (if (= () V2451) (let M (shen.newpv V2997) (do (shen.incinfs) (shen.tc-rule V2991 Rule A V2994 V2995 V2996 V2997 (freeze (bind M (+ (shen.deref V2996 V2997) 1) V2997 (freeze (cut Throwcontrol V2997 (freeze (shen.tc-rules V2991 Rules (cons list (cons A ())) V2994 V2995 M V2997 V2998))))))))) false))) false)) false)) false)))) false)) Case))))) +(defun shen.tc-rules (V3047 V3048 V3049 V3050 V3051 V3052 V3053 V3054) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2497 (shen.lazyderef V3048 V3053) (if (= () V2497) (do (shen.incinfs) (thaw V3054)) false)) (if (= Case false) (let V2498 (shen.lazyderef V3048 V3053) (if (cons? V2498) (let Rule (hd V2498) (let Rules (tl V2498) (let V2499 (shen.lazyderef V3049 V3053) (if (cons? V2499) (let V2500 (shen.lazyderef (hd V2499) V3053) (if (= list V2500) (let V2501 (shen.lazyderef (tl V2499) V3053) (if (cons? V2501) (let A (hd V2501) (let V2502 (shen.lazyderef (tl V2501) V3053) (if (= () V2502) (let M (shen.newpv V3053) (do (shen.incinfs) (shen.tc-rule V3047 Rule A V3050 V3051 V3052 V3053 (freeze (bind M (+ (shen.deref V3052 V3053) 1) V3053 (freeze (cut Throwcontrol V3053 (freeze (shen.tc-rules V3047 Rules (cons list (cons A ())) V3050 V3051 M V3053 V3054))))))))) false))) false)) false)) false)))) false)) Case))))) -(defun shen.tc-rule (V2999 V3000 V3001 V3002 V3003 V3004 V3005 V3006) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3000 V3001 V3002 V3003 V3005 V3006)) (if (= Case false) (let Err (shen.newpv V3005) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3004 V3005) (cn " of " (shen.app (shen.lazyderef V2999 V3005) "" shen.a)) shen.a))) V3005 V3006))) Case))) +(defun shen.tc-rule (V3055 V3056 V3057 V3058 V3059 V3060 V3061 V3062) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3056 V3057 V3058 V3059 V3061 V3062)) (if (= Case false) (let Err (shen.newpv V3061) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3060 V3061) (cn " of " (shen.app (shen.lazyderef V3055 V3061) "" shen.a)) shen.a))) V3061 V3062))) Case))) -(defun shen.check-defcc-rule (V3007 V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2431 (shen.lazyderef V3007 V3011) (if (cons? V2431) (let Syntax (hd V2431) (let V2432 (shen.lazyderef (tl V2431) V3011) (if (cons? V2432) (let Semantics (hd V2432) (let V2433 (shen.lazyderef (tl V2432) V3011) (if (= () V2433) (let SynHyps (shen.newpv V3011) (do (shen.incinfs) (shen.syntax-hyps Syntax V3010 SynHyps V3008 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.syntax-check Syntax V3008 SynHyps V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.semantics-check Semantics V3009 SynHyps V3011 V3012))))))))))) false))) false))) false))))) +(defun shen.check-defcc-rule (V3063 V3064 V3065 V3066 V3067 V3068) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2482 (shen.lazyderef V3063 V3067) (if (cons? V2482) (let Syntax (hd V2482) (let V2483 (shen.lazyderef (tl V2482) V3067) (if (cons? V2483) (let Semantics (hd V2483) (let V2484 (shen.lazyderef (tl V2483) V3067) (if (= () V2484) (let SynHyps (shen.newpv V3067) (do (shen.incinfs) (shen.syntax-hyps Syntax V3066 SynHyps V3064 V3067 (freeze (cut Throwcontrol V3067 (freeze (shen.syntax-check Syntax V3064 SynHyps V3067 (freeze (cut Throwcontrol V3067 (freeze (shen.semantics-check Semantics V3065 SynHyps V3067 V3068))))))))))) false))) false))) false))))) -(defun shen.syntax-hyps (V3013 V3014 V3015 V3016 V3017 V3018) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2416 (shen.lazyderef V3013 V3017) (if (= () V2416) (do (shen.incinfs) (unify! V3015 V3014 V3017 V3018)) false)) (if (= Case false) (let Case (let V2417 (shen.lazyderef V3013 V3017) (if (cons? V2417) (let X2410 (hd V2417) (let Y (tl V2417) (let V2418 (shen.lazyderef V3015 V3017) (if (cons? V2418) (let V2419 (shen.lazyderef (hd V2418) V3017) (if (cons? V2419) (let X (hd V2419) (let V2420 (shen.lazyderef (tl V2419) V3017) (if (cons? V2420) (let V2421 (shen.lazyderef (hd V2420) V3017) (if (= : V2421) (let V2422 (shen.lazyderef (tl V2420) V3017) (if (cons? V2422) (let A2411 (hd V2422) (let V2423 (shen.lazyderef (tl V2422) V3017) (if (= () V2423) (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2423) (do (shen.bindv V2423 () V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2423 V3017) Result))) false)))) (if (shen.pvar? V2422) (let A2411 (shen.newpv V3017) (do (shen.bindv V2422 (cons A2411 ()) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2422 V3017) Result)))) false))) (if (shen.pvar? V2421) (do (shen.bindv V2421 : V3017) (let Result (let V2424 (shen.lazyderef (tl V2420) V3017) (if (cons? V2424) (let A2411 (hd V2424) (let V2425 (shen.lazyderef (tl V2424) V3017) (if (= () V2425) (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (if (shen.pvar? V2425) (do (shen.bindv V2425 () V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2425 V3017) Result))) false)))) (if (shen.pvar? V2424) (let A2411 (shen.newpv V3017) (do (shen.bindv V2424 (cons A2411 ()) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2424 V3017) Result)))) false))) (do (shen.unbindv V2421 V3017) Result))) false))) (if (shen.pvar? V2420) (let A2411 (shen.newpv V3017) (do (shen.bindv V2420 (cons : (cons A2411 ())) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2420 V3017) Result)))) false)))) (if (shen.pvar? V2419) (let X (shen.newpv V3017) (let A2411 (shen.newpv V3017) (do (shen.bindv V2419 (cons X (cons : (cons A2411 ()))) V3017) (let Result (let SynHyps (tl V2418) (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018))))))))))) (do (shen.unbindv V2419 V3017) Result))))) false))) (if (shen.pvar? V2418) (let X (shen.newpv V3017) (let A2411 (shen.newpv V3017) (let SynHyps (shen.newpv V3017) (do (shen.bindv V2418 (cons (cons X (cons : (cons A2411 ()))) SynHyps) V3017) (let Result (do (shen.incinfs) (unify! V3016 A2411 V3017 (freeze (unify! X X2410 V3017 (freeze (fwhen (shen.ue? (shen.deref X V3017)) V3017 (freeze (cut Throwcontrol V3017 (freeze (shen.syntax-hyps Y V3014 SynHyps V3016 V3017 V3018)))))))))) (do (shen.unbindv V2418 V3017) Result)))))) false))))) false)) (if (= Case false) (let V2426 (shen.lazyderef V3013 V3017) (if (cons? V2426) (let Y (tl V2426) (do (shen.incinfs) (shen.syntax-hyps Y V3014 V3015 V3016 V3017 V3018))) false)) Case)) Case))))) +(defun shen.syntax-hyps (V3069 V3070 V3071 V3072 V3073 V3074) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2467 (shen.lazyderef V3069 V3073) (if (= () V2467) (do (shen.incinfs) (unify! V3071 V3070 V3073 V3074)) false)) (if (= Case false) (let Case (let V2468 (shen.lazyderef V3069 V3073) (if (cons? V2468) (let X2461 (hd V2468) (let Y (tl V2468) (let V2469 (shen.lazyderef V3071 V3073) (if (cons? V2469) (let V2470 (shen.lazyderef (hd V2469) V3073) (if (cons? V2470) (let X (hd V2470) (let V2471 (shen.lazyderef (tl V2470) V3073) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V3073) (if (= : V2472) (let V2473 (shen.lazyderef (tl V2471) V3073) (if (cons? V2473) (let A2462 (hd V2473) (let V2474 (shen.lazyderef (tl V2473) V3073) (if (= () V2474) (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (if (shen.pvar? V2474) (do (shen.bindv V2474 () V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2474 V3073) Result))) false)))) (if (shen.pvar? V2473) (let A2462 (shen.newpv V3073) (do (shen.bindv V2473 (cons A2462 ()) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2473 V3073) Result)))) false))) (if (shen.pvar? V2472) (do (shen.bindv V2472 : V3073) (let Result (let V2475 (shen.lazyderef (tl V2471) V3073) (if (cons? V2475) (let A2462 (hd V2475) (let V2476 (shen.lazyderef (tl V2475) V3073) (if (= () V2476) (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (if (shen.pvar? V2476) (do (shen.bindv V2476 () V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2476 V3073) Result))) false)))) (if (shen.pvar? V2475) (let A2462 (shen.newpv V3073) (do (shen.bindv V2475 (cons A2462 ()) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2475 V3073) Result)))) false))) (do (shen.unbindv V2472 V3073) Result))) false))) (if (shen.pvar? V2471) (let A2462 (shen.newpv V3073) (do (shen.bindv V2471 (cons : (cons A2462 ())) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2471 V3073) Result)))) false)))) (if (shen.pvar? V2470) (let X (shen.newpv V3073) (let A2462 (shen.newpv V3073) (do (shen.bindv V2470 (cons X (cons : (cons A2462 ()))) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2470 V3073) Result))))) false))) (if (shen.pvar? V2469) (let X (shen.newpv V3073) (let A2462 (shen.newpv V3073) (let SynHyps (shen.newpv V3073) (do (shen.bindv V2469 (cons (cons X (cons : (cons A2462 ()))) SynHyps) V3073) (let Result (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074)))))))))) (do (shen.unbindv V2469 V3073) Result)))))) false))))) false)) (if (= Case false) (let V2477 (shen.lazyderef V3069 V3073) (if (cons? V2477) (let Y (tl V2477) (do (shen.incinfs) (shen.syntax-hyps Y V3070 V3071 V3072 V3073 V3074))) false)) Case)) Case))))) -(defun shen.syntax-check (V3019 V3020 V3021 V3022 V3023) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2406 (shen.lazyderef V3019 V3022) (if (= () V2406) (do (shen.incinfs) (thaw V3023)) false)) (if (= Case false) (let Case (let V2407 (shen.lazyderef V3019 V3022) (if (cons? V2407) (let X (hd V2407) (let Syntax (tl V2407) (let C (shen.newpv V3022) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3022)) V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons V3020 ())) (cons ==> (cons C ()))) ()))) V3021 V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.syntax-check Syntax V3020 V3021 V3022 V3023))))))))))))) false)) (if (= Case false) (let V2408 (shen.lazyderef V3019 V3022) (if (cons? V2408) (let X (hd V2408) (let Syntax (tl V2408) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3020 ()))) V3021 V3022 (freeze (cut Throwcontrol V3022 (freeze (shen.syntax-check Syntax V3020 V3021 V3022 V3023)))))))) false)) Case)) Case))))) +(defun shen.syntax-check (V3075 V3076 V3077 V3078 V3079) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2457 (shen.lazyderef V3075 V3078) (if (= () V2457) (do (shen.incinfs) (thaw V3079)) false)) (if (= Case false) (let Case (let V2458 (shen.lazyderef V3075 V3078) (if (cons? V2458) (let X (hd V2458) (let Syntax (tl V2458) (let C (shen.newpv V3078) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3078)) V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons V3076 ())) (cons ==> (cons C ()))) ()))) V3077 V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.syntax-check Syntax V3076 V3077 V3078 V3079))))))))))))) false)) (if (= Case false) (let V2459 (shen.lazyderef V3075 V3078) (if (cons? V2459) (let X (hd V2459) (let Syntax (tl V2459) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3076 ()))) V3077 V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.syntax-check Syntax V3076 V3077 V3078 V3079)))))))) false)) Case)) Case))))) -(defun shen.semantics-check (V3024 V3025 V3026 V3027 V3028) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2398 (shen.lazyderef V3024 V3027) (if (cons? V2398) (let V2399 (shen.lazyderef (hd V2398) V3027) (if (= where V2399) (let V2400 (shen.lazyderef (tl V2398) V3027) (if (cons? V2400) (let P (hd V2400) (let V2401 (shen.lazyderef (tl V2400) V3027) (if (cons? V2401) (let Q (hd V2401) (let V2402 (shen.lazyderef (tl V2401) V3027) (if (= () V2402) (do (shen.incinfs) (cut Throwcontrol V3027 (freeze (shen.t* (cons (shen.curry P) (cons : (cons boolean ()))) V3026 V3027 (freeze (shen.t* (cons (shen.curry Q) (cons : (cons V3025 ()))) V3026 V3027 V3028)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Semantics* (shen.newpv V3027) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3024 V3027))) V3027 (freeze (shen.t* (cons Semantics* (cons : (cons V3025 ()))) V3026 V3027 V3028))))) Case))))) +(defun shen.semantics-check (V3080 V3081 V3082 V3083 V3084) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2449 (shen.lazyderef V3080 V3083) (if (cons? V2449) (let V2450 (shen.lazyderef (hd V2449) V3083) (if (= where V2450) (let V2451 (shen.lazyderef (tl V2449) V3083) (if (cons? V2451) (let P (hd V2451) (let V2452 (shen.lazyderef (tl V2451) V3083) (if (cons? V2452) (let Q (hd V2452) (let V2453 (shen.lazyderef (tl V2452) V3083) (if (= () V2453) (do (shen.incinfs) (cut Throwcontrol V3083 (freeze (shen.t* (cons (shen.curry P) (cons : (cons boolean ()))) V3082 V3083 (freeze (shen.t* (cons (shen.curry Q) (cons : (cons V3081 ()))) V3082 V3083 V3084)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Semantics* (shen.newpv V3083) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3080 V3083))) V3083 (freeze (shen.t* (cons Semantics* (cons : (cons V3081 ()))) V3082 V3083 V3084))))) Case))))) -(defun shen.rename-semantics (V3029) (cond ((cons? V3029) (cons (shen.rename-semantics (hd V3029)) (shen.rename-semantics (tl V3029)))) ((shen.grammar_symbol? V3029) (cons shen.<-sem (cons V3029 ()))) (true V3029))) +(defun shen.rename-semantics (V3085) (cond ((cons? V3085) (cons (shen.rename-semantics (hd V3085)) (shen.rename-semantics (tl V3085)))) ((shen.grammar_symbol? V3085) (cons shen.<-sem (cons V3085 ()))) (true V3085))) "(defprolog syntax-check (mode [] -) _ _ <--; diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index cc20c44..bba8bbe 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -61,27 +61,27 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.initialise_environment () (shen.multiple-set (cons shen.*call* (cons 0 (cons shen.*infs* (cons 0 (cons shen.*process-counter* (cons 0 (cons shen.*catch* (cons 0 ())))))))))) -(defun shen.multiple-set (V2316) (cond ((= () V2316) ()) ((and (cons? V2316) (cons? (tl V2316))) (do (set (hd V2316) (hd (tl V2316))) (shen.multiple-set (tl (tl V2316))))) (true (shen.sys-error shen.multiple-set)))) +(defun shen.multiple-set (V2367) (cond ((= () V2367) ()) ((and (cons? V2367) (cons? (tl V2367))) (do (set (hd V2367) (hd (tl V2367))) (shen.multiple-set (tl (tl V2367))))) (true (shen.sys-error shen.multiple-set)))) -(defun destroy (V2317) (declare V2317 symbol)) +(defun destroy (V2368) (declare V2368 symbol)) (set shen.*history* ()) (defun shen.read-evaluate-print () (let Lineread (shen.toplineread) (let History (value shen.*history*) (let NewLineread (shen.retrieve-from-history-if-needed Lineread History) (let NewHistory (shen.update_history NewLineread History) (let Parsed (fst NewLineread) (shen.toplevel Parsed))))))) -(defun shen.retrieve-from-history-if-needed (V2327 V2328) (cond ((and (tuple? V2327) (and (cons? (snd V2327)) (element? (hd (snd V2327)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2327) (tl (snd V2327))) V2328)) ((and (tuple? V2327) (and (cons? (snd V2327)) (and (cons? (tl (snd V2327))) (and (= () (tl (tl (snd V2327)))) (and (cons? V2328) (and (= (hd (snd V2327)) (shen.exclamation)) (= (hd (tl (snd V2327))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2328))) (hd V2328))) ((and (tuple? V2327) (and (cons? (snd V2327)) (= (hd (snd V2327)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2327)) V2328) (let Find (head (shen.find-past-inputs Key? V2328)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2327) (and (cons? (snd V2327)) (and (= () (tl (snd V2327))) (= (hd (snd V2327)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2328) 0) (abort))) ((and (tuple? V2327) (and (cons? (snd V2327)) (= (hd (snd V2327)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2327)) V2328) (let Pastprint (shen.print-past-inputs Key? (reverse V2328) 0) (abort)))) (true V2327))) +(defun shen.retrieve-from-history-if-needed (V2378 V2379) (cond ((and (tuple? V2378) (and (cons? (snd V2378)) (element? (hd (snd V2378)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2378) (tl (snd V2378))) V2379)) ((and (tuple? V2378) (and (cons? (snd V2378)) (and (cons? (tl (snd V2378))) (and (= () (tl (tl (snd V2378)))) (and (cons? V2379) (and (= (hd (snd V2378)) (shen.exclamation)) (= (hd (tl (snd V2378))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2379))) (hd V2379))) ((and (tuple? V2378) (and (cons? (snd V2378)) (= (hd (snd V2378)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2378)) V2379) (let Find (head (shen.find-past-inputs Key? V2379)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2378) (and (cons? (snd V2378)) (and (= () (tl (snd V2378))) (= (hd (snd V2378)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2379) 0) (abort))) ((and (tuple? V2378) (and (cons? (snd V2378)) (= (hd (snd V2378)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2378)) V2379) (let Pastprint (shen.print-past-inputs Key? (reverse V2379) 0) (abort)))) (true V2378))) (defun shen.percent () 37) (defun shen.exclamation () 33) -(defun shen.prbytes (V2329) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2329) (nl 1))) +(defun shen.prbytes (V2380) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2380) (nl 1))) -(defun shen.update_history (V2330 V2331) (set shen.*history* (cons V2330 V2331))) +(defun shen.update_history (V2381 V2382) (set shen.*history* (cons V2381 V2382))) (defun shen.toplineread () (shen.toplineread_loop (read-byte (stinput)) ())) -(defun shen.toplineread_loop (V2333 V2334) (cond ((= V2333 (shen.hat)) (simple-error "line read aborted")) ((element? V2333 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile shen. V2334 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2334 (cons V2333 ()))) (@p Line V2334)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2334 (cons V2333 ())))))) +(defun shen.toplineread_loop (V2384 V2385) (cond ((= V2384 (shen.hat)) (simple-error "line read aborted")) ((element? V2384 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X2365 (shen. X2365)) V2385 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2385 (cons V2384 ()))) (@p Line V2385)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2385 (cons V2384 ())))))) (defun shen.hat () 94) @@ -89,7 +89,7 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.carriage-return () 13) -(defun tc (V2339) (cond ((= + V2339) (set shen.*tc* true)) ((= - V2339) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) +(defun tc (V2390) (cond ((= + V2390) (set shen.*tc* true)) ((= - V2390) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) (defun shen.prompt () (if (value shen.*tc*) (shen.prhush (cn " @@ -97,16 +97,16 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (" (shen.app (length (value shen.*history*)) "-) " shen.a)) (stoutput)))) -(defun shen.toplevel (V2340) (shen.toplevel_evaluate V2340 (value shen.*tc*))) +(defun shen.toplevel (V2391) (shen.toplevel_evaluate V2391 (value shen.*tc*))) -(defun shen.find-past-inputs (V2341 V2342) (let F (shen.find V2341 V2342) (if (empty? F) (simple-error "input not found +(defun shen.find-past-inputs (V2392 V2393) (let F (shen.find V2392 V2393) (if (empty? F) (simple-error "input not found ") F))) -(defun shen.make-key (V2343 V2344) (let Atom (hd (compile shen. V2343 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.make-key (V2394 V2395) (let Atom (hd (compile (lambda X2366 (shen. X2366)) V2394 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2344)))) (lambda X (shen.prefix? V2343 (shen.trim-gubbins (snd X))))))) +"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2395)))) (lambda X (shen.prefix? V2394 (shen.trim-gubbins (snd X))))))) -(defun shen.trim-gubbins (V2345) (cond ((and (cons? V2345) (= (hd V2345) (shen.space))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.newline))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.carriage-return))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.tab))) (shen.trim-gubbins (tl V2345))) ((and (cons? V2345) (= (hd V2345) (shen.left-round))) (shen.trim-gubbins (tl V2345))) (true V2345))) +(defun shen.trim-gubbins (V2396) (cond ((and (cons? V2396) (= (hd V2396) (shen.space))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.newline))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.carriage-return))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.tab))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.left-round))) (shen.trim-gubbins (tl V2396))) (true V2396))) (defun shen.space () 32) @@ -114,22 +114,22 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.left-round () 40) -(defun shen.find (V2352 V2353) (cond ((= () V2353) ()) ((and (cons? V2353) (V2352 (hd V2353))) (cons (hd V2353) (shen.find V2352 (tl V2353)))) ((cons? V2353) (shen.find V2352 (tl V2353))) (true (shen.sys-error shen.find)))) +(defun shen.find (V2403 V2404) (cond ((= () V2404) ()) ((and (cons? V2404) (V2403 (hd V2404))) (cons (hd V2404) (shen.find V2403 (tl V2404)))) ((cons? V2404) (shen.find V2403 (tl V2404))) (true (shen.sys-error shen.find)))) -(defun shen.prefix? (V2364 V2365) (cond ((= () V2364) true) ((and (cons? V2364) (and (cons? V2365) (= (hd V2365) (hd V2364)))) (shen.prefix? (tl V2364) (tl V2365))) (true false))) +(defun shen.prefix? (V2415 V2416) (cond ((= () V2415) true) ((and (cons? V2415) (and (cons? V2416) (= (hd V2416) (hd V2415)))) (shen.prefix? (tl V2415) (tl V2416))) (true false))) -(defun shen.print-past-inputs (V2375 V2376 V2377) (cond ((= () V2376) _) ((and (cons? V2376) (not (V2375 (hd V2376)))) (shen.print-past-inputs V2375 (tl V2376) (+ V2377 1))) ((and (cons? V2376) (tuple? (hd V2376))) (do (shen.prhush (shen.app V2377 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2376))) (shen.print-past-inputs V2375 (tl V2376) (+ V2377 1))))) (true (shen.sys-error shen.print-past-inputs)))) +(defun shen.print-past-inputs (V2426 V2427 V2428) (cond ((= () V2427) _) ((and (cons? V2427) (not (V2426 (hd V2427)))) (shen.print-past-inputs V2426 (tl V2427) (+ V2428 1))) ((and (cons? V2427) (tuple? (hd V2427))) (do (shen.prhush (shen.app V2428 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2427))) (shen.print-past-inputs V2426 (tl V2427) (+ V2428 1))))) (true (shen.sys-error shen.print-past-inputs)))) -(defun shen.toplevel_evaluate (V2378 V2379) (cond ((and (cons? V2378) (and (cons? (tl V2378)) (and (= : (hd (tl V2378))) (and (cons? (tl (tl V2378))) (and (= () (tl (tl (tl V2378)))) (= true V2379)))))) (shen.typecheck-and-evaluate (hd V2378) (hd (tl (tl V2378))))) ((and (cons? V2378) (cons? (tl V2378))) (do (shen.toplevel_evaluate (cons (hd V2378) ()) V2379) (do (nl 1) (shen.toplevel_evaluate (tl V2378) V2379)))) ((and (cons? V2378) (and (= () (tl V2378)) (= true V2379))) (shen.typecheck-and-evaluate (hd V2378) (gensym A))) ((and (cons? V2378) (and (= () (tl V2378)) (= false V2379))) (let Eval (shen.eval-without-macros (hd V2378)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) +(defun shen.toplevel_evaluate (V2429 V2430) (cond ((and (cons? V2429) (and (cons? (tl V2429)) (and (= : (hd (tl V2429))) (and (cons? (tl (tl V2429))) (and (= () (tl (tl (tl V2429)))) (= true V2430)))))) (shen.typecheck-and-evaluate (hd V2429) (hd (tl (tl V2429))))) ((and (cons? V2429) (cons? (tl V2429))) (do (shen.toplevel_evaluate (cons (hd V2429) ()) V2430) (do (nl 1) (shen.toplevel_evaluate (tl V2429) V2430)))) ((and (cons? V2429) (and (= () (tl V2429)) (= true V2430))) (shen.typecheck-and-evaluate (hd V2429) (gensym A))) ((and (cons? V2429) (and (= () (tl V2429)) (= false V2430))) (let Eval (shen.eval-without-macros (hd V2429)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) -(defun shen.typecheck-and-evaluate (V2380 V2381) (let Typecheck (shen.typecheck V2380 V2381) (if (= Typecheck false) (simple-error "type error -") (let Eval (shen.eval-without-macros V2380) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) +(defun shen.typecheck-and-evaluate (V2431 V2432) (let Typecheck (shen.typecheck V2431 V2432) (if (= Typecheck false) (simple-error "type error +") (let Eval (shen.eval-without-macros V2431) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) -(defun shen.pretty-type (V2382) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2382) V2382)) +(defun shen.pretty-type (V2433) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2433) V2433)) -(defun shen.extract-pvars (V2387) (cond ((shen.pvar? V2387) (cons V2387 ())) ((cons? V2387) (union (shen.extract-pvars (hd V2387)) (shen.extract-pvars (tl V2387)))) (true ()))) +(defun shen.extract-pvars (V2438) (cond ((shen.pvar? V2438) (cons V2438 ())) ((cons? V2438) (union (shen.extract-pvars (hd V2438)) (shen.extract-pvars (tl V2438)))) (true ()))) -(defun shen.mult_subst (V2392 V2393 V2394) (cond ((= () V2392) V2394) ((= () V2393) V2394) ((and (cons? V2392) (cons? V2393)) (shen.mult_subst (tl V2392) (tl V2393) (subst (hd V2392) (hd V2393) V2394))) (true (shen.sys-error shen.mult_subst)))) +(defun shen.mult_subst (V2443 V2444 V2445) (cond ((= () V2443) V2445) ((= () V2444) V2445) ((and (cons? V2443) (cons? V2444)) (shen.mult_subst (tl V2443) (tl V2444) (subst (hd V2443) (hd V2444) V2445))) (true (shen.sys-error shen.mult_subst)))) diff --git a/shen/klambda/track.kl b/shen/klambda/track.kl index a98d9e1..1d660c7 100644 --- a/shen/klambda/track.kl +++ b/shen/klambda/track.kl @@ -47,57 +47,57 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.f_error (V2069) (do (shen.prhush (cn "partial function " (shen.app V2069 "; -" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2069)) (y-or-n? (cn "track " (shen.app V2069 "? " shen.a)))) (shen.track-function (ps V2069)) shen.ok) (simple-error "aborted")))) +"(defun shen.f_error (V2115) (do (shen.prhush (cn "partial function " (shen.app V2115 "; +" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2115)) (y-or-n? (cn "track " (shen.app V2115 "? " shen.a)))) (shen.track-function (ps V2115)) shen.ok) (simple-error "aborted")))) -(defun shen.tracked? (V2070) (element? V2070 (value shen.*tracking*))) +(defun shen.tracked? (V2116) (element? V2116 (value shen.*tracking*))) -(defun track (V2071) (let Source (ps V2071) (shen.track-function Source))) +(defun track (V2117) (let Source (ps V2117) (shen.track-function Source))) -(defun shen.track-function (V2072) (cond ((and (cons? V2072) (and (= defun (hd V2072)) (and (cons? (tl V2072)) (and (cons? (tl (tl V2072))) (and (cons? (tl (tl (tl V2072)))) (= () (tl (tl (tl (tl V2072)))))))))) (let KL (cons defun (cons (hd (tl V2072)) (cons (hd (tl (tl V2072))) (cons (shen.insert-tracking-code (hd (tl V2072)) (hd (tl (tl V2072))) (hd (tl (tl (tl V2072))))) ())))) (let Ob (eval KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) +(defun shen.track-function (V2118) (cond ((and (cons? V2118) (and (= defun (hd V2118)) (and (cons? (tl V2118)) (and (cons? (tl (tl V2118))) (and (cons? (tl (tl (tl V2118)))) (= () (tl (tl (tl (tl V2118)))))))))) (let KL (cons defun (cons (hd (tl V2118)) (cons (hd (tl (tl V2118))) (cons (shen.insert-tracking-code (hd (tl V2118)) (hd (tl (tl V2118))) (hd (tl (tl (tl V2118))))) ())))) (let Ob (eval KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) -(defun shen.insert-tracking-code (V2073 V2074 V2075) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2073 (cons (shen.cons_form V2074) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2075 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2073 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) +(defun shen.insert-tracking-code (V2119 V2120 V2121) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2119 (cons (shen.cons_form V2120) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2121 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2119 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) (set shen.*step* false) -(defun step (V2080) (cond ((= + V2080) (set shen.*step* true)) ((= - V2080) (set shen.*step* false)) (true (simple-error "step expects a + or a -. +(defun step (V2126) (cond ((= + V2126) (set shen.*step* true)) ((= - V2126) (set shen.*step* false)) (true (simple-error "step expects a + or a -. ")))) -(defun spy (V2085) (cond ((= + V2085) (set shen.*spy* true)) ((= - V2085) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. +(defun spy (V2131) (cond ((= + V2131) (set shen.*spy* true)) ((= - V2131) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. ")))) (defun shen.terpri-or-read-char () (if (value shen.*step*) (shen.check-byte (read-byte (value *stinput*))) (nl 1))) -(defun shen.check-byte (V2090) (cond ((= V2090 (shen.hat)) (simple-error "aborted")) (true true))) +(defun shen.check-byte (V2136) (cond ((= V2136 (shen.hat)) (simple-error "aborted")) (true true))) -(defun shen.input-track (V2091 V2092 V2093) (do (shen.prhush (cn " -" (shen.app (shen.spaces V2091) (cn "<" (shen.app V2091 (cn "> Inputs to " (shen.app V2092 (cn " -" (shen.app (shen.spaces V2091) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2093))) +(defun shen.input-track (V2137 V2138 V2139) (do (shen.prhush (cn " +" (shen.app (shen.spaces V2137) (cn "<" (shen.app V2137 (cn "> Inputs to " (shen.app V2138 (cn " +" (shen.app (shen.spaces V2137) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2139))) -(defun shen.recursively-print (V2094) (cond ((= () V2094) (shen.prhush " ==>" (stoutput))) ((cons? V2094) (do (print (hd V2094)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2094))))) (true (shen.sys-error shen.recursively-print)))) +(defun shen.recursively-print (V2140) (cond ((= () V2140) (shen.prhush " ==>" (stoutput))) ((cons? V2140) (do (print (hd V2140)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2140))))) (true (shen.sys-error shen.recursively-print)))) -(defun shen.spaces (V2095) (cond ((= 0 V2095) "") (true (cn " " (shen.spaces (- V2095 1)))))) +(defun shen.spaces (V2141) (cond ((= 0 V2141) "") (true (cn " " (shen.spaces (- V2141 1)))))) -(defun shen.output-track (V2096 V2097 V2098) (shen.prhush (cn " -" (shen.app (shen.spaces V2096) (cn "<" (shen.app V2096 (cn "> Output from " (shen.app V2097 (cn " -" (shen.app (shen.spaces V2096) (cn "==> " (shen.app V2098 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) +(defun shen.output-track (V2142 V2143 V2144) (shen.prhush (cn " +" (shen.app (shen.spaces V2142) (cn "<" (shen.app V2142 (cn "> Output from " (shen.app V2143 (cn " +" (shen.app (shen.spaces V2142) (cn "==> " (shen.app V2144 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) -(defun untrack (V2099) (eval (ps V2099))) +(defun untrack (V2145) (eval (ps V2145))) -(defun profile (V2100) (shen.profile-help (ps V2100))) +(defun profile (V2146) (shen.profile-help (ps V2146))) -(defun shen.profile-help (V2105) (cond ((and (cons? V2105) (and (= defun (hd V2105)) (and (cons? (tl V2105)) (and (cons? (tl (tl V2105))) (and (cons? (tl (tl (tl V2105)))) (= () (tl (tl (tl (tl V2105)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2105)) (cons (hd (tl (tl V2105))) (cons (shen.profile-func (hd (tl V2105)) (hd (tl (tl V2105))) (cons G (hd (tl (tl V2105))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2105))) (cons (subst G (hd (tl V2105)) (hd (tl (tl (tl V2105))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2105)))))))) (true (simple-error "Cannot profile. +(defun shen.profile-help (V2151) (cond ((and (cons? V2151) (and (= defun (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (and (cons? (tl (tl (tl V2151)))) (= () (tl (tl (tl (tl V2151)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2151)) (cons (hd (tl (tl V2151))) (cons (shen.profile-func (hd (tl V2151)) (hd (tl (tl V2151))) (cons G (hd (tl (tl V2151))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2151))) (cons (subst G (hd (tl V2151)) (hd (tl (tl (tl V2151))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2151)))))))) (true (simple-error "Cannot profile. ")))) -(defun unprofile (V2106) (untrack V2106)) +(defun unprofile (V2152) (untrack V2152)) -(defun shen.profile-func (V2107 V2108 V2109) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2109 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2107 (cons (cons + (cons (cons shen.get-profile (cons V2107 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) +(defun shen.profile-func (V2153 V2154 V2155) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2155 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2153 (cons (cons + (cons (cons shen.get-profile (cons V2153 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) -(defun profile-results (V2110) (let Results (shen.get-profile V2110) (let Initialise (shen.put-profile V2110 0) (@p V2110 Results)))) +(defun profile-results (V2156) (let Results (shen.get-profile V2156) (let Initialise (shen.put-profile V2156 0) (@p V2156 Results)))) -(defun shen.get-profile (V2111) (trap-error (get V2111 profile (value *property-vector*)) (lambda E 0))) +(defun shen.get-profile (V2157) (trap-error (get V2157 profile (value *property-vector*)) (lambda E 0))) -(defun shen.put-profile (V2112 V2113) (put V2112 profile V2113 (value *property-vector*))) +(defun shen.put-profile (V2158 V2159) (put V2158 profile V2159 (value *property-vector*))) diff --git a/shen/klambda/types.kl b/shen/klambda/types.kl index c90461f..5013348 100644 --- a/shen/klambda/types.kl +++ b/shen/klambda/types.kl @@ -47,18 +47,14 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun declare (V2114 V2115) (let Record (set shen.*signedfuncs* (cons (cons V2114 V2115) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2114 V2115) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2115)) (let F* (concat shen.type-signature-of- V2114) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2114))))))))))) +"(defun declare (V2161 V2162) (let Record (set shen.*signedfuncs* (cons (cons V2161 V2162) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2161 V2162) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2162)) (let F* (concat shen.type-signature-of- V2161) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2161))))))))))) -(defun shen.demodulate (V2116) (fix shen.demodh V2116)) +(defun shen.demodulate (V2163) (trap-error (let Demod (shen.walk (lambda X2160 (shen.demod X2160)) V2163) (if (= Demod V2163) V2163 (shen.demodulate Demod))) (lambda E V2163))) -(defun shen.demodh (V2117) (cond ((cons? V2117) (map shen.demodh V2117)) (true (shen.demod-atom V2117)))) - -(defun shen.demod-atom (V2118) (let Val (assoc V2118 (value shen.*synonyms*)) (if (empty? Val) V2118 (tl Val)))) - -(defun shen.variancy-test (V2119 V2120) (let TypeF (shen.typecheck V2119 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2120) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2119 " may create errors +(defun shen.variancy-test (V2164 V2165) (let TypeF (shen.typecheck V2164 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2165) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2164 " may create errors " shen.a)) (stoutput)))) shen.skip))) -(defun shen.variant? (V2129 V2130) (cond ((= V2130 V2129) true) ((and (cons? V2129) (and (cons? V2130) (= (hd V2130) (hd V2129)))) (shen.variant? (tl V2129) (tl V2130))) ((and (cons? V2129) (and (cons? V2130) (and (shen.pvar? (hd V2129)) (variable? (hd V2130))))) (shen.variant? (subst shen.a (hd V2129) (tl V2129)) (subst shen.a (hd V2130) (tl V2130)))) ((and (cons? V2129) (and (cons? (hd V2129)) (and (cons? V2130) (cons? (hd V2130))))) (shen.variant? (append (hd V2129) (tl V2129)) (append (hd V2130) (tl V2130)))) (true false))) +(defun shen.variant? (V2174 V2175) (cond ((= V2175 V2174) true) ((and (cons? V2174) (and (cons? V2175) (= (hd V2175) (hd V2174)))) (shen.variant? (tl V2174) (tl V2175))) ((and (cons? V2174) (and (cons? V2175) (and (shen.pvar? (hd V2174)) (variable? (hd V2175))))) (shen.variant? (subst shen.a (hd V2174) (tl V2174)) (subst shen.a (hd V2175) (tl V2175)))) ((and (cons? V2174) (and (cons? (hd V2174)) (and (cons? V2175) (cons? (hd V2175))))) (shen.variant? (append (hd V2174) (tl V2174)) (append (hd V2175) (tl V2175)))) (true false))) (declare absvector? (cons A (cons --> (cons boolean ())))) diff --git a/shen/klambda/writer.kl b/shen/klambda/writer.kl index 2692038..917fb0b 100644 --- a/shen/klambda/writer.kl +++ b/shen/klambda/writer.kl @@ -47,59 +47,59 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun pr (V2238 V2239) (trap-error (shen.prh V2238 V2239 0) (lambda E V2238))) +"(defun pr (V2287 V2288) (trap-error (shen.prh V2287 V2288 0) (lambda E V2287))) -(defun shen.prh (V2240 V2241 V2242) (shen.prh V2240 V2241 (shen.write-char-and-inc V2240 V2241 V2242))) +(defun shen.prh (V2289 V2290 V2291) (shen.prh V2289 V2290 (shen.write-char-and-inc V2289 V2290 V2291))) -(defun shen.write-char-and-inc (V2243 V2244 V2245) (do (write-byte (string->n (pos V2243 V2245)) V2244) (+ V2245 1))) +(defun shen.write-char-and-inc (V2292 V2293 V2294) (do (write-byte (string->n (pos V2292 V2294)) V2293) (+ V2294 1))) -(defun print (V2246) (let String (shen.insert V2246 "~S") (let Print (shen.prhush String (stoutput)) V2246))) +(defun print (V2295) (let String (shen.insert V2295 "~S") (let Print (shen.prhush String (stoutput)) V2295))) -(defun shen.prhush (V2247 V2248) (if (value *hush*) V2247 (pr V2247 V2248))) +(defun shen.prhush (V2296 V2297) (if (value *hush*) V2296 (pr V2296 V2297))) -(defun shen.mkstr (V2249 V2250) (cond ((string? V2249) (shen.mkstr-l (shen.proc-nl V2249) V2250)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2249 ())) V2250)))) +(defun shen.mkstr (V2298 V2299) (cond ((string? V2298) (shen.mkstr-l (shen.proc-nl V2298) V2299)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2298 ())) V2299)))) -(defun shen.mkstr-l (V2251 V2252) (cond ((= () V2252) V2251) ((cons? V2252) (shen.mkstr-l (shen.insert-l (hd V2252) V2251) (tl V2252))) (true (shen.sys-error shen.mkstr-l)))) +(defun shen.mkstr-l (V2300 V2301) (cond ((= () V2301) V2300) ((cons? V2301) (shen.mkstr-l (shen.insert-l (hd V2301) V2300) (tl V2301))) (true (shen.sys-error shen.mkstr-l)))) -(defun shen.insert-l (V2255 V2256) (cond ((= "" V2256) "") ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "A" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.a ()))))) ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "R" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.r ()))))) ((and (shen.+string? V2256) (and (= "~" (pos V2256 0)) (and (shen.+string? (tlstr V2256)) (= "S" (pos (tlstr V2256) 0))))) (cons shen.app (cons V2255 (cons (tlstr (tlstr V2256)) (cons shen.s ()))))) ((shen.+string? V2256) (shen.factor-cn (cons cn (cons (pos V2256 0) (cons (shen.insert-l V2255 (tlstr V2256)) ()))))) ((and (cons? V2256) (and (= cn (hd V2256)) (and (cons? (tl V2256)) (and (cons? (tl (tl V2256))) (= () (tl (tl (tl V2256)))))))) (cons cn (cons (hd (tl V2256)) (cons (shen.insert-l V2255 (hd (tl (tl V2256)))) ())))) ((and (cons? V2256) (and (= shen.app (hd V2256)) (and (cons? (tl V2256)) (and (cons? (tl (tl V2256))) (and (cons? (tl (tl (tl V2256)))) (= () (tl (tl (tl (tl V2256)))))))))) (cons shen.app (cons (hd (tl V2256)) (cons (shen.insert-l V2255 (hd (tl (tl V2256)))) (tl (tl (tl V2256))))))) (true (shen.sys-error shen.insert-l)))) +(defun shen.insert-l (V2304 V2305) (cond ((= "" V2305) "") ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "A" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.a ()))))) ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "R" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.r ()))))) ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "S" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.s ()))))) ((shen.+string? V2305) (shen.factor-cn (cons cn (cons (pos V2305 0) (cons (shen.insert-l V2304 (tlstr V2305)) ()))))) ((and (cons? V2305) (and (= cn (hd V2305)) (and (cons? (tl V2305)) (and (cons? (tl (tl V2305))) (= () (tl (tl (tl V2305)))))))) (cons cn (cons (hd (tl V2305)) (cons (shen.insert-l V2304 (hd (tl (tl V2305)))) ())))) ((and (cons? V2305) (and (= shen.app (hd V2305)) (and (cons? (tl V2305)) (and (cons? (tl (tl V2305))) (and (cons? (tl (tl (tl V2305)))) (= () (tl (tl (tl (tl V2305)))))))))) (cons shen.app (cons (hd (tl V2305)) (cons (shen.insert-l V2304 (hd (tl (tl V2305)))) (tl (tl (tl V2305))))))) (true (shen.sys-error shen.insert-l)))) -(defun shen.factor-cn (V2257) (cond ((and (cons? V2257) (and (= cn (hd V2257)) (and (cons? (tl V2257)) (and (cons? (tl (tl V2257))) (and (cons? (hd (tl (tl V2257)))) (and (= cn (hd (hd (tl (tl V2257))))) (and (cons? (tl (hd (tl (tl V2257))))) (and (cons? (tl (tl (hd (tl (tl V2257)))))) (and (= () (tl (tl (tl (hd (tl (tl V2257))))))) (and (= () (tl (tl (tl V2257)))) (and (string? (hd (tl V2257))) (string? (hd (tl (hd (tl (tl V2257))))))))))))))))) (cons cn (cons (cn (hd (tl V2257)) (hd (tl (hd (tl (tl V2257)))))) (tl (tl (hd (tl (tl V2257)))))))) (true V2257))) +(defun shen.factor-cn (V2306) (cond ((and (cons? V2306) (and (= cn (hd V2306)) (and (cons? (tl V2306)) (and (cons? (tl (tl V2306))) (and (cons? (hd (tl (tl V2306)))) (and (= cn (hd (hd (tl (tl V2306))))) (and (cons? (tl (hd (tl (tl V2306))))) (and (cons? (tl (tl (hd (tl (tl V2306)))))) (and (= () (tl (tl (tl (hd (tl (tl V2306))))))) (and (= () (tl (tl (tl V2306)))) (and (string? (hd (tl V2306))) (string? (hd (tl (hd (tl (tl V2306))))))))))))))))) (cons cn (cons (cn (hd (tl V2306)) (hd (tl (hd (tl (tl V2306)))))) (tl (tl (hd (tl (tl V2306)))))))) (true V2306))) -(defun shen.proc-nl (V2258) (cond ((= "" V2258) "") ((and (shen.+string? V2258) (and (= "~" (pos V2258 0)) (and (shen.+string? (tlstr V2258)) (= "%" (pos (tlstr V2258) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2258))))) ((shen.+string? V2258) (cn (pos V2258 0) (shen.proc-nl (tlstr V2258)))) (true (shen.sys-error shen.proc-nl)))) +(defun shen.proc-nl (V2307) (cond ((= "" V2307) "") ((and (shen.+string? V2307) (and (= "~" (pos V2307 0)) (and (shen.+string? (tlstr V2307)) (= "%" (pos (tlstr V2307) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2307))))) ((shen.+string? V2307) (cn (pos V2307 0) (shen.proc-nl (tlstr V2307)))) (true (shen.sys-error shen.proc-nl)))) -(defun shen.mkstr-r (V2259 V2260) (cond ((= () V2260) V2259) ((cons? V2260) (shen.mkstr-r (cons shen.insert (cons (hd V2260) (cons V2259 ()))) (tl V2260))) (true (shen.sys-error shen.mkstr-r)))) +(defun shen.mkstr-r (V2308 V2309) (cond ((= () V2309) V2308) ((cons? V2309) (shen.mkstr-r (cons shen.insert (cons (hd V2309) (cons V2308 ()))) (tl V2309))) (true (shen.sys-error shen.mkstr-r)))) -(defun shen.insert (V2261 V2262) (shen.insert-h V2261 V2262 "")) +(defun shen.insert (V2310 V2311) (shen.insert-h V2310 V2311 "")) -(defun shen.insert-h (V2265 V2266 V2267) (cond ((= "" V2266) V2267) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "A" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.a))) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "R" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.r))) ((and (shen.+string? V2266) (and (= "~" (pos V2266 0)) (and (shen.+string? (tlstr V2266)) (= "S" (pos (tlstr V2266) 0))))) (cn V2267 (shen.app V2265 (tlstr (tlstr V2266)) shen.s))) ((shen.+string? V2266) (shen.insert-h V2265 (tlstr V2266) (cn V2267 (pos V2266 0)))) (true (shen.sys-error shen.insert-h)))) +(defun shen.insert-h (V2314 V2315 V2316) (cond ((= "" V2315) V2316) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "A" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.a))) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "R" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.r))) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "S" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.s))) ((shen.+string? V2315) (shen.insert-h V2314 (tlstr V2315) (cn V2316 (pos V2315 0)))) (true (shen.sys-error shen.insert-h)))) -(defun shen.app (V2268 V2269 V2270) (cn (shen.arg->str V2268 V2270) V2269)) +(defun shen.app (V2317 V2318 V2319) (cn (shen.arg->str V2317 V2319) V2318)) -(defun shen.arg->str (V2276 V2277) (cond ((= V2276 (fail)) "...") ((shen.list? V2276) (shen.list->str V2276 V2277)) ((string? V2276) (shen.str->str V2276 V2277)) ((absvector? V2276) (shen.vector->str V2276 V2277)) (true (shen.atom->str V2276)))) +(defun shen.arg->str (V2325 V2326) (cond ((= V2325 (fail)) "...") ((shen.list? V2325) (shen.list->str V2325 V2326)) ((string? V2325) (shen.str->str V2325 V2326)) ((absvector? V2325) (shen.vector->str V2325 V2326)) (true (shen.atom->str V2325)))) -(defun shen.list->str (V2278 V2279) (cond ((= shen.r V2279) (@s "(" (@s (shen.iter-list V2278 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2278 V2279 (shen.maxseq)) "]"))))) +(defun shen.list->str (V2327 V2328) (cond ((= shen.r V2328) (@s "(" (@s (shen.iter-list V2327 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2327 V2328 (shen.maxseq)) "]"))))) (defun shen.maxseq () (value *maximum-print-sequence-size*)) -(defun shen.iter-list (V2290 V2291 V2292) (cond ((= () V2290) "") ((= 0 V2292) "... etc") ((and (cons? V2290) (= () (tl V2290))) (shen.arg->str (hd V2290) V2291)) ((cons? V2290) (@s (shen.arg->str (hd V2290) V2291) (@s " " (shen.iter-list (tl V2290) V2291 (- V2292 1))))) (true (@s "|" (@s " " (shen.arg->str V2290 V2291)))))) +(defun shen.iter-list (V2339 V2340 V2341) (cond ((= () V2339) "") ((= 0 V2341) "... etc") ((and (cons? V2339) (= () (tl V2339))) (shen.arg->str (hd V2339) V2340)) ((cons? V2339) (@s (shen.arg->str (hd V2339) V2340) (@s " " (shen.iter-list (tl V2339) V2340 (- V2341 1))))) (true (@s "|" (@s " " (shen.arg->str V2339 V2340)))))) -(defun shen.str->str (V2297 V2298) (cond ((= shen.a V2298) V2297) (true (@s (n->string 34) (@s V2297 (n->string 34)))))) +(defun shen.str->str (V2346 V2347) (cond ((= shen.a V2347) V2346) (true (@s (n->string 34) (@s V2346 (n->string 34)))))) -(defun shen.vector->str (V2299 V2300) (if (shen.print-vector? V2299) ((<-address V2299 0) V2299) (if (vector? V2299) (@s "<" (@s (shen.iter-vector V2299 1 V2300 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2299 0 V2300 (shen.maxseq)) ">>")))))) +(defun shen.vector->str (V2348 V2349) (if (shen.print-vector? V2348) ((<-address V2348 0) V2348) (if (vector? V2348) (@s "<" (@s (shen.iter-vector V2348 1 V2349 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2348 0 V2349 (shen.maxseq)) ">>")))))) -(defun shen.print-vector? (V2301) (let Zero (<-address V2301 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) +(defun shen.print-vector? (V2350) (let Zero (<-address V2350 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) -(defun shen.fbound? (V2302) (trap-error (do (ps V2302) true) (lambda E false))) +(defun shen.fbound? (V2351) (trap-error (do (ps V2351) true) (lambda E false))) -(defun shen.tuple (V2303) (cn "(@p " (shen.app (<-address V2303 1) (cn " " (shen.app (<-address V2303 2) ")" shen.s)) shen.s))) +(defun shen.tuple (V2352) (cn "(@p " (shen.app (<-address V2352 1) (cn " " (shen.app (<-address V2352 2) ")" shen.s)) shen.s))) -(defun shen.iter-vector (V2310 V2311 V2312 V2313) (cond ((= 0 V2313) "... etc") (true (let Item (trap-error (<-address V2310 V2311) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2310 (+ V2311 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2312) (@s (shen.arg->str Item V2312) (@s " " (shen.iter-vector V2310 (+ V2311 1) V2312 (- V2313 1))))))))))) +(defun shen.iter-vector (V2359 V2360 V2361 V2362) (cond ((= 0 V2362) "... etc") (true (let Item (trap-error (<-address V2359 V2360) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2359 (+ V2360 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2361) (@s (shen.arg->str Item V2361) (@s " " (shen.iter-vector V2359 (+ V2360 1) V2361 (- V2362 1))))))))))) -(defun shen.atom->str (V2314) (trap-error (str V2314) (lambda E (shen.funexstring)))) +(defun shen.atom->str (V2363) (trap-error (str V2363) (lambda E (shen.funexstring)))) (defun shen.funexstring () (@s "" (@s "f" (@s "u" (@s "n" (@s "e" (@s (shen.arg->str (gensym (intern "x")) shen.a) ""))))))) -(defun shen.list? (V2315) (or (empty? V2315) (cons? V2315))) +(defun shen.list? (V2364) (or (empty? V2364) (cons? V2364))) diff --git a/shen/klambda/yacc.kl b/shen/klambda/yacc.kl index 8cd65aa..b23e84f 100644 --- a/shen/klambda/yacc.kl +++ b/shen/klambda/yacc.kl @@ -47,61 +47,67 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.yacc (V2133) (cond ((and (cons? V2133) (and (= defcc (hd V2133)) (and (cons? (tl V2133)) (and (cons? (tl (tl V2133))) (and (= { (hd (tl (tl V2133)))) (and (cons? (tl (tl (tl V2133)))) (and (cons? (tl (tl (tl (tl V2133))))) (and (= ==> (hd (tl (tl (tl (tl V2133)))))) (and (cons? (tl (tl (tl (tl (tl V2133)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2133))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2133)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2133)) (tl (tl (tl (tl (tl (tl (tl V2133))))))))))) ((and (cons? V2133) (and (= defcc (hd V2133)) (cons? (tl V2133)))) (shen.yacc->shen (hd (tl V2133)) (tl (tl V2133)))) (true (shen.sys-error shen.yacc)))) +"(defun shen.yacc (V2180) (cond ((and (cons? V2180) (and (= defcc (hd V2180)) (and (cons? (tl V2180)) (and (cons? (tl (tl V2180))) (and (= { (hd (tl (tl V2180)))) (and (cons? (tl (tl (tl V2180)))) (and (cons? (tl (tl (tl (tl V2180))))) (and (= ==> (hd (tl (tl (tl (tl V2180)))))) (and (cons? (tl (tl (tl (tl (tl V2180)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2180))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2180)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2180)) (tl (tl (tl (tl (tl (tl (tl V2180))))))))))) ((and (cons? V2180) (and (= defcc (hd V2180)) (cons? (tl V2180)))) (shen.yacc->shen (hd (tl V2180)) (tl (tl V2180)))) (true (shen.sys-error shen.yacc)))) -(defun shen.yacc->shen (V2134 V2135) (let CCRules (shen.split_cc_rules true V2135 ()) (let CCBody (map shen.cc_body CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2134 (cons Stream (cons -> (cons YaccCases ()))))))))) +(defun shen.yacc->shen (V2181 V2182) (let CCRules (shen.split_cc_rules true V2182 ()) (let CCBody (map (lambda X2178 (shen.cc_body X2178)) CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2181 (cons Stream (cons -> (cons (shen.kill-code YaccCases) ()))))))))) -(defun shen.split_cc_rules (V2138 V2139 V2140) (cond ((and (= () V2139) (= () V2140)) ()) ((= () V2139) (cons (shen.split_cc_rule V2138 (reverse V2140) ()) ())) ((and (cons? V2139) (= ; (hd V2139))) (cons (shen.split_cc_rule V2138 (reverse V2140) ()) (shen.split_cc_rules V2138 (tl V2139) ()))) ((cons? V2139) (shen.split_cc_rules V2138 (tl V2139) (cons (hd V2139) V2140))) (true (shen.sys-error shen.split_cc_rules)))) +(defun shen.kill-code (V2183) (cond ((> (occurrences kill V2183) 0) (cons trap-error (cons V2183 (cons (cons lambda (cons E (cons (cons shen.analyse-kill (cons E ())) ()))) ())))) (true V2183))) -(defun shen.split_cc_rule (V2145 V2146 V2147) (cond ((and (cons? V2146) (and (= := (hd V2146)) (and (cons? (tl V2146)) (= () (tl (tl V2146)))))) (cons (reverse V2147) (tl V2146))) ((and (cons? V2146) (and (= := (hd V2146)) (and (cons? (tl V2146)) (and (cons? (tl (tl V2146))) (and (= where (hd (tl (tl V2146)))) (and (cons? (tl (tl (tl V2146)))) (= () (tl (tl (tl (tl V2146))))))))))) (cons (reverse V2147) (cons (cons where (cons (hd (tl (tl (tl V2146)))) (cons (hd (tl V2146)) ()))) ()))) ((= () V2146) (do (shen.semantic-completion-warning V2145 V2147) (shen.split_cc_rule V2145 (cons := (cons (shen.default_semantics (reverse V2147)) ())) V2147))) ((cons? V2146) (shen.split_cc_rule V2145 (tl V2146) (cons (hd V2146) V2147))) (true (shen.sys-error shen.split_cc_rule)))) +(defun kill () (simple-error "yacc kill")) -(defun shen.semantic-completion-warning (V2156 V2157) (cond ((= true V2156) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2157)) (shen.prhush "has no semantics. +(defun shen.analyse-kill (V2184) (let String (error-to-string V2184) (if (= String "yacc kill") (fail) V2184))) + +(defun shen.split_cc_rules (V2187 V2188 V2189) (cond ((and (= () V2188) (= () V2189)) ()) ((= () V2188) (cons (shen.split_cc_rule V2187 (reverse V2189) ()) ())) ((and (cons? V2188) (= ; (hd V2188))) (cons (shen.split_cc_rule V2187 (reverse V2189) ()) (shen.split_cc_rules V2187 (tl V2188) ()))) ((cons? V2188) (shen.split_cc_rules V2187 (tl V2188) (cons (hd V2188) V2189))) (true (shen.sys-error shen.split_cc_rules)))) + +(defun shen.split_cc_rule (V2194 V2195 V2196) (cond ((and (cons? V2195) (and (= := (hd V2195)) (and (cons? (tl V2195)) (= () (tl (tl V2195)))))) (cons (reverse V2196) (tl V2195))) ((and (cons? V2195) (and (= := (hd V2195)) (and (cons? (tl V2195)) (and (cons? (tl (tl V2195))) (and (= where (hd (tl (tl V2195)))) (and (cons? (tl (tl (tl V2195)))) (= () (tl (tl (tl (tl V2195))))))))))) (cons (reverse V2196) (cons (cons where (cons (hd (tl (tl (tl V2195)))) (cons (hd (tl V2195)) ()))) ()))) ((= () V2195) (do (shen.semantic-completion-warning V2194 V2196) (shen.split_cc_rule V2194 (cons := (cons (shen.default_semantics (reverse V2196)) ())) V2196))) ((cons? V2195) (shen.split_cc_rule V2194 (tl V2195) (cons (hd V2195) V2196))) (true (shen.sys-error shen.split_cc_rule)))) + +(defun shen.semantic-completion-warning (V2205 V2206) (cond ((= true V2205) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2206)) (shen.prhush "has no semantics. " (stoutput))))) (true shen.skip))) -(defun shen.default_semantics (V2158) (cond ((= () V2158) ()) ((and (cons? V2158) (and (= () (tl V2158)) (shen.grammar_symbol? (hd V2158)))) (hd V2158)) ((and (cons? V2158) (shen.grammar_symbol? (hd V2158))) (cons append (cons (hd V2158) (cons (shen.default_semantics (tl V2158)) ())))) ((cons? V2158) (cons cons (cons (hd V2158) (cons (shen.default_semantics (tl V2158)) ())))) (true (shen.sys-error shen.default_semantics)))) +(defun shen.default_semantics (V2207) (cond ((= () V2207) ()) ((and (cons? V2207) (and (= () (tl V2207)) (shen.grammar_symbol? (hd V2207)))) (hd V2207)) ((and (cons? V2207) (shen.grammar_symbol? (hd V2207))) (cons append (cons (hd V2207) (cons (shen.default_semantics (tl V2207)) ())))) ((cons? V2207) (cons cons (cons (hd V2207) (cons (shen.default_semantics (tl V2207)) ())))) (true (shen.sys-error shen.default_semantics)))) -(defun shen.grammar_symbol? (V2159) (and (symbol? V2159) (let Cs (shen.strip-pathname (explode V2159)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) +(defun shen.grammar_symbol? (V2208) (and (symbol? V2208) (let Cs (shen.strip-pathname (explode V2208)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) -(defun shen.yacc_cases (V2160) (cond ((and (cons? V2160) (= () (tl V2160))) (hd V2160)) ((cons? V2160) (let P YaccParse (cons let (cons P (cons (hd V2160) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2160)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) +(defun shen.yacc_cases (V2209) (cond ((and (cons? V2209) (= () (tl V2209))) (hd V2209)) ((cons? V2209) (let P YaccParse (cons let (cons P (cons (hd V2209) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2209)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) -(defun shen.cc_body (V2161) (cond ((and (cons? V2161) (and (cons? (tl V2161)) (= () (tl (tl V2161))))) (shen.syntax (hd V2161) Stream (hd (tl V2161)))) (true (shen.sys-error shen.cc_body)))) +(defun shen.cc_body (V2210) (cond ((and (cons? V2210) (and (cons? (tl V2210)) (= () (tl (tl V2210))))) (shen.syntax (hd V2210) Stream (hd (tl V2210)))) (true (shen.sys-error shen.cc_body)))) -(defun shen.syntax (V2162 V2163 V2164) (cond ((and (= () V2162) (and (cons? V2164) (and (= where (hd V2164)) (and (cons? (tl V2164)) (and (cons? (tl (tl V2164))) (= () (tl (tl (tl V2164))))))))) (cons if (cons (shen.semantics (hd (tl V2164))) (cons (cons shen.pair (cons (cons hd (cons V2163 ())) (cons (shen.semantics (hd (tl (tl V2164)))) ()))) (cons (cons fail ()) ()))))) ((= () V2162) (cons shen.pair (cons (cons hd (cons V2163 ())) (cons (shen.semantics V2164) ())))) ((cons? V2162) (if (shen.grammar_symbol? (hd V2162)) (shen.recursive_descent V2162 V2163 V2164) (if (variable? (hd V2162)) (shen.variable-match V2162 V2163 V2164) (if (shen.jump_stream? (hd V2162)) (shen.jump_stream V2162 V2163 V2164) (if (shen.terminal? (hd V2162)) (shen.check_stream V2162 V2163 V2164) (if (cons? (hd V2162)) (shen.list-stream (shen.decons (hd V2162)) (tl V2162) V2163 V2164) (simple-error (shen.app (hd V2162) " is not legal syntax +(defun shen.syntax (V2211 V2212 V2213) (cond ((and (= () V2211) (and (cons? V2213) (and (= where (hd V2213)) (and (cons? (tl V2213)) (and (cons? (tl (tl V2213))) (= () (tl (tl (tl V2213))))))))) (cons if (cons (shen.semantics (hd (tl V2213))) (cons (cons shen.pair (cons (cons hd (cons V2212 ())) (cons (shen.semantics (hd (tl (tl V2213)))) ()))) (cons (cons fail ()) ()))))) ((= () V2211) (cons shen.pair (cons (cons hd (cons V2212 ())) (cons (shen.semantics V2213) ())))) ((cons? V2211) (if (shen.grammar_symbol? (hd V2211)) (shen.recursive_descent V2211 V2212 V2213) (if (variable? (hd V2211)) (shen.variable-match V2211 V2212 V2213) (if (shen.jump_stream? (hd V2211)) (shen.jump_stream V2211 V2212 V2213) (if (shen.terminal? (hd V2211)) (shen.check_stream V2211 V2212 V2213) (if (cons? (hd V2211)) (shen.list-stream (shen.decons (hd V2211)) (tl V2211) V2212 V2213) (simple-error (shen.app (hd V2211) " is not legal syntax " shen.a)))))))) (true (shen.sys-error shen.syntax)))) -(defun shen.list-stream (V2165 V2166 V2167 V2168) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2167 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2167 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2166 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2167 ())) ())) (cons (cons hd (cons (cons tl (cons V2167 ())) ())) ()))) V2168) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2165 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2167 ())) ())) (cons (cons hd (cons (cons tl (cons V2167 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) +(defun shen.list-stream (V2214 V2215 V2216 V2217) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2216 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2216 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2215 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2216 ())) ())) (cons (cons hd (cons (cons tl (cons V2216 ())) ())) ()))) V2217) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2214 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2216 ())) ())) (cons (cons hd (cons (cons tl (cons V2216 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) -(defun shen.decons (V2169) (cond ((and (cons? V2169) (and (= cons (hd V2169)) (and (cons? (tl V2169)) (and (cons? (tl (tl V2169))) (and (= () (hd (tl (tl V2169)))) (= () (tl (tl (tl V2169))))))))) (cons (hd (tl V2169)) ())) ((and (cons? V2169) (and (= cons (hd V2169)) (and (cons? (tl V2169)) (and (cons? (tl (tl V2169))) (= () (tl (tl (tl V2169)))))))) (cons (hd (tl V2169)) (shen.decons (hd (tl (tl V2169)))))) (true V2169))) +(defun shen.decons (V2218) (cond ((and (cons? V2218) (and (= cons (hd V2218)) (and (cons? (tl V2218)) (and (cons? (tl (tl V2218))) (and (= () (hd (tl (tl V2218)))) (= () (tl (tl (tl V2218))))))))) (cons (hd (tl V2218)) ())) ((and (cons? V2218) (and (= cons (hd V2218)) (and (cons? (tl V2218)) (and (cons? (tl (tl V2218))) (= () (tl (tl (tl V2218)))))))) (cons (hd (tl V2218)) (shen.decons (hd (tl (tl V2218)))))) (true V2218))) -(defun shen.insert-runon (V2180 V2181 V2182) (cond ((and (cons? V2182) (and (= shen.pair (hd V2182)) (and (cons? (tl V2182)) (and (cons? (tl (tl V2182))) (and (= () (tl (tl (tl V2182)))) (= (hd (tl (tl V2182))) V2181)))))) V2180) ((cons? V2182) (map (lambda Z (shen.insert-runon V2180 V2181 Z)) V2182)) (true V2182))) +(defun shen.insert-runon (V2229 V2230 V2231) (cond ((and (cons? V2231) (and (= shen.pair (hd V2231)) (and (cons? (tl V2231)) (and (cons? (tl (tl V2231))) (and (= () (tl (tl (tl V2231)))) (= (hd (tl (tl V2231))) V2230)))))) V2229) ((cons? V2231) (map (lambda Z (shen.insert-runon V2229 V2230 Z)) V2231)) (true V2231))) -(defun shen.strip-pathname (V2188) (cond ((not (element? "." V2188)) V2188) ((cons? V2188) (shen.strip-pathname (tl V2188))) (true (shen.sys-error shen.strip-pathname)))) +(defun shen.strip-pathname (V2237) (cond ((not (element? "." V2237)) V2237) ((cons? V2237) (shen.strip-pathname (tl V2237))) (true (shen.sys-error shen.strip-pathname)))) -(defun shen.recursive_descent (V2189 V2190 V2191) (cond ((cons? V2189) (let Test (cons (hd V2189) (cons V2190 ())) (let Action (shen.syntax (tl V2189) (concat Parse_ (hd V2189)) V2191) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2189)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2189)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) +(defun shen.recursive_descent (V2238 V2239 V2240) (cond ((cons? V2238) (let Test (cons (hd V2238) (cons V2239 ())) (let Action (shen.syntax (tl V2238) (concat Parse_ (hd V2238)) V2240) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2238)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2238)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) -(defun shen.variable-match (V2192 V2193 V2194) (cond ((cons? V2192) (let Test (cons cons? (cons (cons hd (cons V2193 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2192)) (cons (cons hd (cons (cons hd (cons V2193 ())) ())) (cons (shen.syntax (tl V2192) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2193 ())) ())) (cons (cons shen.hdtl (cons V2193 ())) ()))) V2194) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) +(defun shen.variable-match (V2241 V2242 V2243) (cond ((cons? V2241) (let Test (cons cons? (cons (cons hd (cons V2242 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2241)) (cons (cons hd (cons (cons hd (cons V2242 ())) ())) (cons (shen.syntax (tl V2241) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2242 ())) ())) (cons (cons shen.hdtl (cons V2242 ())) ()))) V2243) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) -(defun shen.terminal? (V2203) (cond ((cons? V2203) false) ((variable? V2203) false) (true true))) +(defun shen.terminal? (V2252) (cond ((cons? V2252) false) ((variable? V2252) false) (true true))) -(defun shen.jump_stream? (V2208) (cond ((= V2208 _) true) (true false))) +(defun shen.jump_stream? (V2257) (cond ((= V2257 _) true) (true false))) -(defun shen.check_stream (V2209 V2210 V2211) (cond ((cons? V2209) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2210 ())) ())) (cons (cons = (cons (hd V2209) (cons (cons hd (cons (cons hd (cons V2210 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2209) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2210 ())) ())) (cons (cons shen.hdtl (cons V2210 ())) ()))) V2211) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) +(defun shen.check_stream (V2258 V2259 V2260) (cond ((cons? V2258) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2259 ())) ())) (cons (cons = (cons (hd V2258) (cons (cons hd (cons (cons hd (cons V2259 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2258) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2259 ())) ())) (cons (cons shen.hdtl (cons V2259 ())) ()))) V2260) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) -(defun shen.jump_stream (V2212 V2213 V2214) (cond ((cons? V2212) (let Test (cons cons? (cons (cons hd (cons V2213 ())) ())) (let Action (shen.syntax (tl V2212) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2213 ())) ())) (cons (cons shen.hdtl (cons V2213 ())) ()))) V2214) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) +(defun shen.jump_stream (V2261 V2262 V2263) (cond ((cons? V2261) (let Test (cons cons? (cons (cons hd (cons V2262 ())) ())) (let Action (shen.syntax (tl V2261) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2262 ())) ())) (cons (cons shen.hdtl (cons V2262 ())) ()))) V2263) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) -(defun shen.semantics (V2215) (cond ((= () V2215) ()) ((shen.grammar_symbol? V2215) (cons shen.hdtl (cons (concat Parse_ V2215) ()))) ((variable? V2215) (concat Parse_ V2215)) ((cons? V2215) (map shen.semantics V2215)) (true V2215))) +(defun shen.semantics (V2264) (cond ((= () V2264) ()) ((shen.grammar_symbol? V2264) (cons shen.hdtl (cons (concat Parse_ V2264) ()))) ((variable? V2264) (concat Parse_ V2264)) ((cons? V2264) (map (lambda X2179 (shen.semantics X2179)) V2264)) (true V2264))) -(defun shen.snd-or-fail (V2222) (cond ((and (cons? V2222) (and (cons? (tl V2222)) (= () (tl (tl V2222))))) (hd (tl V2222))) (true (fail)))) +(defun shen.snd-or-fail (V2271) (cond ((and (cons? V2271) (and (cons? (tl V2271)) (= () (tl (tl V2271))))) (hd (tl V2271))) (true (fail)))) (defun fail () shen.fail!) -(defun shen.pair (V2223 V2224) (cons V2223 (cons V2224 ()))) +(defun shen.pair (V2272 V2273) (cons V2272 (cons V2273 ()))) -(defun shen.hdtl (V2225) (hd (tl V2225))) +(defun shen.hdtl (V2274) (hd (tl V2274))) -(defun (V2232) (cond ((and (cons? V2232) (and (cons? (tl V2232)) (= () (tl (tl V2232))))) (cons () (cons (hd V2232) ()))) (true (fail)))) +(defun (V2281) (cond ((and (cons? V2281) (and (cons? (tl V2281)) (= () (tl (tl V2281))))) (cons () (cons (hd V2281) ()))) (true (fail)))) -(defun (V2237) (cond ((and (cons? V2237) (and (cons? (tl V2237)) (= () (tl (tl V2237))))) (cons (hd V2237) (cons () ()))) (true (shen.sys-error )))) +(defun (V2286) (cond ((and (cons? V2286) (and (cons? (tl V2286)) (= () (tl (tl V2286))))) (cons (hd V2286) (cons () ()))) (true (shen.sys-error )))) diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index e3e26e7..58cf299 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -85,7 +85,7 @@ (set *infs* 0) (set *hush* false) (set *optimise* false) -(set *version* "version 14.2") +(set *version* "version 15") (define initialise_arity_table [] -> [] @@ -101,7 +101,7 @@ cn 2 declare 2 destroy 1 difference 2 do 2 element? 2 empty? 1 enable-type-theory 1 interror 2 eval 1 eval-kl 1 explode 1 external 1 fail-if 2 fail 0 fix 2 findall 5 freeze 1 fst 1 gensym 1 get 3 get-time 1 address-> 3 <-address 2 <-vector 2 > 2 >= 2 = 2 hd 1 hdv 1 hdstr 1 head 1 if 3 integer? 1 - intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 language 0 + intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 kill 0 language 0 length 1 lineread 1 load 1 < 2 <= 2 vector 1 macroexpand 1 map 2 mapcan 2 maxinferences 1 not 1 nth 2 n->string 1 number? 1 occurs-check 1 occurrences 2 occurs-check 1 optimise 1 or 2 os 0 package 3 port 0 porters 0 pos 2 print 1 profile 1 profile-results 1 pr 2 ps 1 preclude 1 preclude-all-but 1 protect 1 @@ -131,7 +131,7 @@ read-file-as-bytelist read-file-as-string read-byte read-from-string quit put preclude preclude-all-but ps prolog? protect profile-results profile print pr pos porters port package output out os or open occurrences occurs-check n->string number? number null nth not nl mode macro macroexpand - maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language is + maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language kill is intersection inferences intern integer? input input+ include include-all-but in implementation if identical head hd hdv hdstr hash get get-time gensym function fst freeze fix file fail fail-if fwhen findall false enable-type-theory explode external exception eval-kl eval error-to-string error empty? diff --git a/shen/src/macros.shen b/shen/src/macros.shen index d8f6cb5..eff2f56 100644 --- a/shen/src/macros.shen +++ b/shen/src/macros.shen @@ -155,9 +155,12 @@ X -> X) (define synonyms-macro - [synonyms | X] -> [synonyms-help (rcons_form X)] + [synonyms | X] -> [synonyms-help (rcons_form (curry-synonyms X))] X -> X) +(define curry-synonyms + Synonyms -> (map (function curry-type) Synonyms)) + (define nl-macro [nl] -> [nl 1] X -> X) diff --git a/shen/src/sequent.shen b/shen/src/sequent.shen index ffd5db9..2764b95 100644 --- a/shen/src/sequent.shen +++ b/shen/src/sequent.shen @@ -259,12 +259,26 @@ Types -> (include-h (difference (value *alldatatypes*) (map (function intern-type) Types)))) (define synonyms-help - [] -> synonyms - [S1 S2 | S] -> (do (pushnew [S1 | (curry-type S2)] *synonyms*) + [] -> (demodulation-function (value *tc*) + (mapcan (function demod-rule) (value *synonyms*))) + [S1 S2 | S] -> (do (pushnew [S1 S2] *synonyms*) (synonyms-help S)) - _ -> (error "odd number of synonyms~%" [])) - + _ -> (error "odd number of synonyms~%")) + (define pushnew X Global -> (if (element? X (value Global)) - (value Global) - (set Global [X | (value Global)]))) ) \ No newline at end of file + (value Global) + (set Global [X | (value Global)]))) + +(define demod-rule + [S1 S2] -> [(rcons_form S1) -> (rcons_form S2)]) + +(define demodulation-function + TC? Rules -> (do (tc -) + (eval [define demod | (append Rules (default-rule))]) + (if TC? (tc +) skip) + synonyms)) + +(define default-rule + -> (protect [X -> X])) + ) \ No newline at end of file diff --git a/shen/src/types.shen b/shen/src/types.shen index c840e2a..53563ba 100644 --- a/shen/src/types.shen +++ b/shen/src/types.shen @@ -70,18 +70,11 @@ F)) (define demodulate - X -> (fix (function demodh) X)) - -(define demodh - [X | Y] -> (map (function demodh) [X | Y]) - X -> (demod-atom X)) - -(define demod-atom - X -> (let Val (assoc X (value *synonyms*)) - (if (empty? Val) - X - (tl Val)))) - + X -> (trap-error (let Demod (walk (function demod) X) + (if (= Demod X) + X + (demodulate Demod))) (/. E X))) + (define variancy-test F A -> (let TypeF (typecheck F (protect B)) Check (cases (= symbol TypeF) skip diff --git a/shen/src/yacc.shen b/shen/src/yacc.shen index edd9959..04620bc 100644 --- a/shen/src/yacc.shen +++ b/shen/src/yacc.shen @@ -62,7 +62,20 @@ S CC_Stuff -> (let CCRules (split_cc_rules true CC_Stuff []) CCBody (map (function cc_body) CCRules) YaccCases (yacc_cases CCBody) - [define S (protect Stream) -> YaccCases])) + [define S (protect Stream) -> (kill-code YaccCases)])) + +(define kill-code + YaccCases -> (protect [trap-error YaccCases [lambda E [analyse-kill E]]]) where (> (occurrences kill YaccCases) 0) + YaccCases -> YaccCases) + +(define kill + -> (simple-error "yacc kill")) + +(define analyse-kill + Exception -> (let String (error-to-string Exception) + (if (= String "yacc kill") + (fail) + Exception))) (define split_cc_rules _ [] [] -> [] From 9a32358ba7551d20600e74bdfaa9c57f93e19dc0 Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 11 Feb 2014 20:31:25 +0000 Subject: [PATCH 33/57] updating README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ed48534..27b1821 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java (Shen 14.2) +# 神.java | Shen for Java (Shen 15) http://shenlanguage.org/ @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b124. +* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b128. * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). From 168e7cf8ac6c20219952629fa1cfba0abb08f8d7 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:05:53 +0000 Subject: [PATCH 34/57] more detailed documentation and error debugging file --- README.md | 37 +++++++++++++++++++++++++++++++++---- errors_debug.shen | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 errors_debug.shen diff --git a/README.md b/README.md index 27b1821..09c870c 100644 --- a/README.md +++ b/README.md @@ -70,12 +70,41 @@ Optional requirements : There's an IntelliJ project, which requires [IDEA 12](ht (/. X (integer? (/ X 3)))) [0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60... etc] -#### In Windows : +#### In Windows XP : -In **buildAndRunWindows.bat** : +* Click "Download ZIP" button at https://github.com/artella-coding/Shen.java +Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip -* Set **JAVA_HOME** -* Set **MAVEN_HOME** +* Download Apache maven from http://maven.apache.org/download.cgi & extract + +Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. + +* Download jdk8 from https://jdk8.java.net/download.html + +To extract in Windows XP : + + * Right click on jdk-8-fcs-bin-b129-windows-i586-07_feb_2014.exe + + * Choose 7-Zip, then choose 'extract to "jdk-8-fcs-bin-b129-windows-i586-07_feb_2014"'. Suppose extracted dictory is : + +C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 + + * Choose tools.zip, right click, choose 7-Zip, and "Extract Here". + +Then create a file run.bat with the contents at the top level of the jdk directory : + + @echo off + + set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" + + FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" + +and run it. + +* In **buildAndRunWindows.bat** : + + * Set **JAVA_HOME** + * Set **MAVEN_HOME** Then first run of **buildAndRunWindows.bat** performs build. Subsequent invocations runs the repl. diff --git a/errors_debug.shen b/errors_debug.shen new file mode 100644 index 0000000..e9f82ba --- /dev/null +++ b/errors_debug.shen @@ -0,0 +1,43 @@ +\* +See following two posts : + +https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/wNUU5OKdDMkJ + +http://shenlanguage.org/Download/Shen.zip … https://groups.google.com/d/msg/qilang/xc1zzltI3Dc/vC-tOuu-3CUJ + +Note that you can only track functions which are not made +external. For example if you add "bind" to the list below, +Shen complains that it is not a legitimate function name +*\ + +(package shen [] + +\\from prolog.shen +(define deref + [X | Y] ProcessN -> [(deref X ProcessN) | (deref Y ProcessN)] + X ProcessN -> (if (pvar? X) + (let Value (valvector X ProcessN) + (if (= Value -null-) + X + (deref Value ProcessN))) + X)) + +\\from prolog.shen +(define lazyderef + X ProcessN -> (if (pvar? X) + (let Value (valvector X ProcessN) + (if (= Value -null-) + X + (lazyderef Value ProcessN))) + X)) +\* +\\from prolog.shen +(define bind + X Y ProcessN Continuation -> (do (bindv X Y ProcessN) + (let Result (thaw Continuation) + (do (unbindv X ProcessN) + Result)))) +*\ +) + +(map (function track) [deref lazyderef]) From 594a166f4eaf4ecb4401f599d49a1c6a95b93d8a Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:08:06 +0000 Subject: [PATCH 35/57] updating README --- README.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 09c870c..9f3e9e6 100644 --- a/README.md +++ b/README.md @@ -72,26 +72,25 @@ Optional requirements : There's an IntelliJ project, which requires [IDEA 12](ht #### In Windows XP : -* Click "Download ZIP" button at https://github.com/artella-coding/Shen.java -Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip - -* Download Apache maven from http://maven.apache.org/download.cgi & extract +* Click "Download ZIP" button at https://github.com/artella-coding/Shen.java. +Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip. +* Download Apache maven from http://maven.apache.org/download.cgi & extract. Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. * Download jdk8 from https://jdk8.java.net/download.html -To extract in Windows XP : + To extract in Windows XP : - * Right click on jdk-8-fcs-bin-b129-windows-i586-07_feb_2014.exe + * Right click on jdk-8-fcs-bin-b129-windows-i586-07_feb_2014.exe - * Choose 7-Zip, then choose 'extract to "jdk-8-fcs-bin-b129-windows-i586-07_feb_2014"'. Suppose extracted dictory is : + * Choose 7-Zip, then choose 'extract to "jdk-8-fcs-bin-b129-windows-i586-07_feb_2014"'. Suppose extracted dictory is : -C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 + C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 - * Choose tools.zip, right click, choose 7-Zip, and "Extract Here". + * Choose tools.zip, right click, choose 7-Zip, and "Extract Here". -Then create a file run.bat with the contents at the top level of the jdk directory : + Then create a file run.bat with the contents at the top level of the jdk directory : @echo off From fcb00fbd032c36e41ff14e95b4b558682f1509c3 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:09:47 +0000 Subject: [PATCH 36/57] updating README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9f3e9e6..1d6edf0 100644 --- a/README.md +++ b/README.md @@ -86,19 +86,19 @@ Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. * Choose 7-Zip, then choose 'extract to "jdk-8-fcs-bin-b129-windows-i586-07_feb_2014"'. Suppose extracted dictory is : - C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 + C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 * Choose tools.zip, right click, choose 7-Zip, and "Extract Here". - Then create a file run.bat with the contents at the top level of the jdk directory : + Then create a file run.bat with the contents at the top level of the jdk directory : - @echo off + @echo off - set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" + set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" - FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" + FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" -and run it. + and run it. * In **buildAndRunWindows.bat** : From 70b945f3e10775202269d0843ee16bbb0c9289c6 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:10:50 +0000 Subject: [PATCH 37/57] updating README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1d6edf0..8c71cf2 100644 --- a/README.md +++ b/README.md @@ -92,11 +92,11 @@ Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. Then create a file run.bat with the contents at the top level of the jdk directory : - @echo off + @echo off - set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" + set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" - FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" + FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" and run it. From 87ca392feb25b8fc49d53e1cd678c64892cdc1a0 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:14:09 +0000 Subject: [PATCH 38/57] updating README and updating buildAndRunWindows.bat to reflect changes in README --- README.md | 4 ++-- buildAndRunWindows.bat | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8c71cf2..e65de90 100644 --- a/README.md +++ b/README.md @@ -88,9 +88,9 @@ Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 - * Choose tools.zip, right click, choose 7-Zip, and "Extract Here". + * Then within extracted directory, choose tools.zip, right click, choose 7-Zip, and "Extract Here". - Then create a file run.bat with the contents at the top level of the jdk directory : + Then create a file run.bat with the following contents at the top level of the jdk directory : @echo off diff --git a/buildAndRunWindows.bat b/buildAndRunWindows.bat index 9ec6247..6a20cce 100755 --- a/buildAndRunWindows.bat +++ b/buildAndRunWindows.bat @@ -1,6 +1,6 @@ @echo off -set "JAVA_HOME=C:\Program Files\lambda-8-b99-windows-i586-14_jul_2013\jdk1.8.0" +set "JAVA_HOME=C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014" set "MAVEN_HOME=C:\Program Files\maven\apache-maven-2.2.1" IF NOT EXIST "%JAVA_HOME%" ( From 0c9c558d3275d997c49f5d85bb70db7d324345e5 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 13:17:39 +0000 Subject: [PATCH 39/57] updating README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e65de90..60910ed 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. * In **buildAndRunWindows.bat** : - * Set **JAVA_HOME** - * Set **MAVEN_HOME** + * Set **JAVA_HOME** appropriately (i.e. C:\Program Files\jdk-8-fcs-bin-b129-windows-i586-07_feb_2014 if performed as above). + * Set **MAVEN_HOME** appropriately (i.e. C:\Program Files\maven\apache-maven-2.2.1) if performed as above). Then first run of **buildAndRunWindows.bat** performs build. Subsequent invocations runs the repl. From a254df5ce0c088ce328b9ca40c21bc7851f0a222 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 21:16:36 +0000 Subject: [PATCH 40/57] updating error files --- errors_debug.shen | 2 +- errors_illustrate.shen | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/errors_debug.shen b/errors_debug.shen index e9f82ba..7528736 100644 --- a/errors_debug.shen +++ b/errors_debug.shen @@ -3,7 +3,7 @@ See following two posts : https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/wNUU5OKdDMkJ -http://shenlanguage.org/Download/Shen.zip … https://groups.google.com/d/msg/qilang/xc1zzltI3Dc/vC-tOuu-3CUJ +https://groups.google.com/d/msg/qilang/9WxbCbxg8f4/dJsJtLmREkcJ Note that you can only track functions which are not made external. For example if you add "bind" to the list below, diff --git a/errors_illustrate.shen b/errors_illustrate.shen index e36905c..ceaeac8 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -30,3 +30,28 @@ fine. *\ (prolog? (mem 1 [X | 2]) (return X)) + + +\* + +Note that the following works fine : + +(prolog? (mem 1 [X | 2]) (return [X])) + +Also if you track mem, then the line above works fine. +But as soon as you untrack, the error returns. To see +this do ; + +(track mem) + +(prolog? (mem 1 [X | 2]) (return X)) + +(untrack mem) + +(prolog? (mem 1 [X | 2]) (return X)) + +See also the post at : + +https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/Q5iXoYaF-FsJ + +*\ From a6f7ea522e719acaf40984d2c95ec96462d80624 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 15 Feb 2014 21:21:47 +0000 Subject: [PATCH 41/57] updating errors file --- errors_illustrate.shen | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index ceaeac8..cf0939f 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -6,12 +6,13 @@ \* The mem function above works fine. However -it is this mem function which, in conjunction with +it is the mem function below which, in conjunction with the new form of the prolog-macro, and the "(return X)" which seems to cause the error. Tracking the mem function shows that it returns fine. *\ + (defprolog mem X (mode [X | _] -) <--; X (mode [_ | Y] -) <-- (mem X Y);) @@ -29,9 +30,9 @@ fine. Case))) *\ +\\This line causes the problem (prolog? (mem 1 [X | 2]) (return X)) - \* Note that the following works fine : @@ -40,7 +41,7 @@ Note that the following works fine : Also if you track mem, then the line above works fine. But as soon as you untrack, the error returns. To see -this do ; +this do : (track mem) From 7bfac4dd3ca1932bf90aa18552cee3ab1fb5abac Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 16 Feb 2014 15:39:45 +0000 Subject: [PATCH 42/57] updating error files --- errors_debug.shen | 2 +- errors_illustrate.shen | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/errors_debug.shen b/errors_debug.shen index 7528736..c09eec3 100644 --- a/errors_debug.shen +++ b/errors_debug.shen @@ -40,4 +40,4 @@ Shen complains that it is not a legitimate function name *\ ) -(map (function track) [deref lazyderef]) +(map (function track) [shen.deref shen.lazyderef]) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index cf0939f..ac884cd 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -38,6 +38,13 @@ fine. Note that the following works fine : (prolog? (mem 1 [X | 2]) (return [X])) +(prolog? (return 2)) +(prolog? (mem 1 [X | 2]) (return "2")) +(prolog? (mem 1 [X | 2]) (return Y)) + +But the following does not : + +(prolog? (mem 1 [X | 2]) (return 2)) Also if you track mem, then the line above works fine. But as soon as you untrack, the error returns. To see From 7dcd7a5097b39e790f7df1480110fa6a09ed70ca Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 16 Feb 2014 15:48:04 +0000 Subject: [PATCH 43/57] updating errors files --- errors_illustrate.shen | 1 + 1 file changed, 1 insertion(+) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index ac884cd..1165036 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -41,6 +41,7 @@ Note that the following works fine : (prolog? (return 2)) (prolog? (mem 1 [X | 2]) (return "2")) (prolog? (mem 1 [X | 2]) (return Y)) +(prolog? (mem "1" [X | 2]) (return X)) But the following does not : From 822ed136b85f31657e947156c8a8c79fdcb90fe2 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 16 Feb 2014 16:17:05 +0000 Subject: [PATCH 44/57] updating errors files --- errors_illustrate.shen | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index 1165036..2b70ba3 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -63,4 +63,12 @@ See also the post at : https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/Q5iXoYaF-FsJ +Also found if you define mem as : + +(defprolog mem + X (mode [X | _] -) <--; + X (mode [_ | Y] -) <-- ((mem X Y));) + +then the problem line of code works fine. + *\ From 285bfbeeb7a3c954828477fbd1cb36b1b6a85a39 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 16 Feb 2014 16:19:16 +0000 Subject: [PATCH 45/57] updating errors files --- errors_illustrate.shen | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index 2b70ba3..f00d2a6 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -63,7 +63,8 @@ See also the post at : https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/Q5iXoYaF-FsJ -Also found if you define mem as : +Also found if you define mem as (notice extra brackets around +"(mem X Y)"): (defprolog mem X (mode [X | _] -) <--; From 049d72f82d61ebc192c40cf94114a414ad1251eb Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 16 Feb 2014 17:25:24 +0000 Subject: [PATCH 46/57] updating errors file --- errors_illustrate.shen | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/errors_illustrate.shen b/errors_illustrate.shen index f00d2a6..c6b0040 100644 --- a/errors_illustrate.shen +++ b/errors_illustrate.shen @@ -63,6 +63,8 @@ See also the post at : https://groups.google.com/d/msg/qilang/3DXJWo0hcRc/Q5iXoYaF-FsJ +*****[EXTRA BRACKET PHENOMENON]***** + Also found if you define mem as (notice extra brackets around "(mem X Y)"): @@ -70,6 +72,17 @@ Also found if you define mem as (notice extra brackets around X (mode [X | _] -) <--; X (mode [_ | Y] -) <-- ((mem X Y));) -then the problem line of code works fine. +(prolog? (mem 1 [X | 2]) (return X)) + +then the problem line of code works fine. You can also +put the extra brackets upon the invocation of mem i.e +the following code works fine : + +(defprolog mem + X (mode [X | _] -) <--; + X (mode [_ | Y] -) <-- (mem X Y);) + +\\Notice extra brackets below +(prolog? ((mem 1 [X | 2])) (return X)) *\ From 283684a7a18f0046e4566766e3b11b11e7988751 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 22 Feb 2014 11:46:00 +0000 Subject: [PATCH 47/57] reorganising code --- src/shen/Compiler.java | 0 src/shen/Cons.java | 0 src/shen/KLReader.java | 0 src/shen/Numbers.java | 11 + src/shen/Overrides.java | 0 src/shen/Primitives.java | 0 src/shen/RT.java | 0 src/shen/Shen.java | 1626 +------------------------------ src/shen/Symbol.java | 0 test/shen/BenchmarksTest.java | 11 +- test/shen/MicroBench.java | 23 +- test/shen/PrimitivesTest.java | 124 ++- test/shen/SmokeTest.java | 194 ++-- test/shen/TestProgramsTest.java | 11 +- 14 files changed, 220 insertions(+), 1780 deletions(-) create mode 100644 src/shen/Compiler.java create mode 100644 src/shen/Cons.java create mode 100644 src/shen/KLReader.java create mode 100644 src/shen/Numbers.java create mode 100644 src/shen/Overrides.java create mode 100644 src/shen/Primitives.java create mode 100644 src/shen/RT.java create mode 100644 src/shen/Symbol.java diff --git a/src/shen/Compiler.java b/src/shen/Compiler.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/Cons.java b/src/shen/Cons.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/KLReader.java b/src/shen/KLReader.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/Numbers.java b/src/shen/Numbers.java new file mode 100644 index 0000000..b481600 --- /dev/null +++ b/src/shen/Numbers.java @@ -0,0 +1,11 @@ +package shen; + +/** + * Created with IntelliJ IDEA. + * User: linux + * Date: 18/02/14 + * Time: 18:49 + * To change this template use File | Settings | File Templates. + */ +public class Numbers { +} diff --git a/src/shen/Overrides.java b/src/shen/Overrides.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/Primitives.java b/src/shen/Primitives.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/RT.java b/src/shen/RT.java new file mode 100644 index 0000000..e69de29 diff --git a/src/shen/Shen.java b/src/shen/Shen.java index 4e9acf1..a5342df 100755 --- a/src/shen/Shen.java +++ b/src/shen/Shen.java @@ -1,20 +1,7 @@ package shen; -import jdk.internal.org.objectweb.asm.*; -import jdk.internal.org.objectweb.asm.commons.GeneratorAdapter; -import jdk.internal.org.objectweb.asm.tree.ClassNode; -import jdk.internal.org.objectweb.asm.util.ASMifier; -import jdk.internal.org.objectweb.asm.util.TraceClassVisitor; -import sun.invoke.anon.AnonymousClassLoader; -import sun.invoke.util.Wrapper; -import sun.misc.Unsafe; - import java.io.*; import java.lang.invoke.*; -import java.lang.reflect.Constructor; -import java.lang.reflect.Executable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.nio.charset.Charset; import java.util.*; import java.util.ArrayList; @@ -25,48 +12,16 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static java.lang.Character.isUpperCase; import static java.lang.ClassLoader.getSystemClassLoader; import static java.lang.ClassLoader.getSystemResources; -import static java.lang.Double.doubleToLongBits; -import static java.lang.Double.longBitsToDouble; -import static java.lang.Math.floorMod; -import static java.lang.Math.toIntExact; import static java.lang.String.format; import static java.lang.System.*; -import static java.lang.invoke.MethodHandleProxies.asInterfaceInstance; -import static java.lang.invoke.MethodHandles.*; -import static java.lang.invoke.MethodHandles.lookup; -import static java.lang.invoke.MethodType.genericMethodType; -import static java.lang.invoke.MethodType.methodType; -import static java.lang.invoke.SwitchPoint.invalidateAll; -import static java.lang.reflect.Modifier.isPublic; import static java.util.Arrays.*; -import static java.util.Arrays.fill; import static java.util.Collections.*; -import static java.util.Objects.deepEquals; import static java.util.function.Predicate.isEqual; import static java.util.jar.Attributes.Name.IMPLEMENTATION_VERSION; import static java.util.stream.Collectors.toSet; import static java.util.stream.Stream.concat; -import static java.util.stream.Stream.empty; -import static jdk.internal.org.objectweb.asm.ClassReader.SKIP_DEBUG; -import static jdk.internal.org.objectweb.asm.ClassWriter.COMPUTE_FRAMES; -import static jdk.internal.org.objectweb.asm.Type.*; -import static jdk.internal.org.objectweb.asm.commons.GeneratorAdapter.*; -import static shen.Shen.Compiler.*; -import static shen.Shen.Cons.toCons; -import static shen.Shen.KLReader.lines; -import static shen.Shen.KLReader.read; -import static shen.Shen.Numbers.*; -import static shen.Shen.Numbers.asNumber; -import static shen.Shen.Primitives.EQ; -import static shen.Shen.Primitives.*; -import static shen.Shen.RT.*; -import static shen.Shen.RT.lookup; -import static sun.invoke.util.BytecodeName.toBytecodeName; -import static sun.invoke.util.BytecodeName.toSourceName; -import static sun.invoke.util.Wrapper.*; @SuppressWarnings({"UnusedDeclaration", "Convert2Diamond"}) public class Shen { @@ -78,563 +33,29 @@ public static void main(String... args) throws Throwable { static final Map symbols = new HashMap<>(); static { - set("*language*", "Java"); - set("*implementation*", format("%s (build %s)", getProperty("java.runtime.name"), getProperty("java.runtime.version"))); - set("*porters*", new String("Håkan Råberg".getBytes(), Charset.forName("ISO-8859-1"))); - set("*port*", version()); - set("*stinput*", in); - set("*stoutput*", out); - set("*debug*", Boolean.getBoolean("shen.debug")); - set("*debug-asm*", Boolean.getBoolean("shen.debug.asm")); - set("*compile-path*", getProperty("shen.compile.path", "target/classes")); - set("*home-directory*", getProperty("user.dir")); - - register(Primitives.class, RT::defun); - register(Overrides.class, RT::override); + Primitives.set("*language*", "Java"); + Primitives.set("*implementation*", format("%s (build %s)", getProperty("java.runtime.name"), getProperty("java.runtime.version"))); + Primitives.set("*porters*", new String("Håkan Råberg".getBytes(), Charset.forName("ISO-8859-1"))); + Primitives.set("*port*", version()); + Primitives.set("*stinput*", in); + Primitives.set("*stoutput*", out); + Primitives.set("*debug*", Boolean.getBoolean("shen.debug")); + Primitives.set("*debug-asm*", Boolean.getBoolean("shen.debug.asm")); + Primitives.set("*compile-path*", getProperty("shen.compile.path", "target/classes")); + Primitives.set("*home-directory*", getProperty("user.dir")); + + RT.register(Primitives.class, RT::defun); + RT.register(Overrides.class, RT::override); asList(Math.class, System.class).forEach(Primitives::KL_import); } - interface LLPredicate { boolean test(long a, long b); } - interface Invokable { MethodHandle invoker() throws Exception; } - - public static class Numbers implements Opcodes { - static final long tag = 1, real = 0, integer = 1; - static final Set operators = new HashSet<>(); - - // longs are either 63 bit signed integers or doubleToLongBits with bit 0 used as tag, 0 = double, 1 = long. - // Java: 5ms, Shen.java: 10ms, Boxed Java: 15ms. Which ever branch that starts will be faster for some reason. - static { - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); - cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, "shen/Shen$Operators", null, getInternalName(Object.class), null); - - binaryOp(cw, "+", ADD); - binaryOp(cw, "-", SUB); - binaryOp(cw, "*", MUL); - binaryOp(cw, "/", realOp(DIV), integerDivision()); - binaryOp(cw, "%", REM); - binaryComp(cw, "<", LT); - binaryComp(cw, "<=", LE); - binaryComp(cw, ">", GT); - binaryComp(cw, ">=", GE); - - register(loader.loadClass(cw.toByteArray()), Numbers::op); - } - - static Consumer integerOp(int op) { - return mv -> toInteger(mv, op); - } - - static Consumer realOp(int op) { - return mv -> toReal(mv, op); - } - - static Consumer integerDivision() { - return mv -> { - Label notZero = new Label(); - mv.dup2(); - mv.visitInsn(L2I); - mv.ifZCmp(IFNE, notZero); - mv.newInstance(getType(ArithmeticException.class)); - mv.dup(); - mv.push("Division by zero"); - mv.invokeConstructor(getType(ArithmeticException.class), method("", desc(void.class, String.class))); - mv.throwException(); - mv.visitLabel(notZero); - mv.visitInsn(L2D); - mv.swap(DOUBLE_TYPE, LONG_TYPE); - mv.visitInsn(L2D); - mv.swap(DOUBLE_TYPE, DOUBLE_TYPE); - toReal(mv, DIV); - }; - } - - static void toInteger(GeneratorAdapter mv, int op) { - mv.math(op, LONG_TYPE); - mv.push((int) tag); - mv.visitInsn(LSHL); - mv.push(integer); - mv.visitInsn(LOR); - } - - static void toReal(GeneratorAdapter mv, int op) { - mv.math(op, DOUBLE_TYPE); - mv.invokeStatic(getType(Double.class), method("doubleToRawLongBits", desc(long.class, double.class))); - mv.push(~integer); - mv.visitInsn(LAND); - } - - static void binaryComp(ClassWriter cw, String op, int test) { - binaryOp(cw, op, boolean.class, comparison(DOUBLE_TYPE, test), comparison(LONG_TYPE, test)); - } - - static Consumer comparison(Type type, int test) { - return mv -> { - Label _else = new Label(); - mv.ifCmp(type, test, _else); - mv.push(false); - mv.returnValue(); - mv.visitLabel(_else); - mv.push(true); - mv.returnValue(); - }; - } - - static void binaryOp(ClassWriter cw, String op, int instruction) { - binaryOp(cw, op, long.class, realOp(instruction), integerOp(instruction)); - } - - static void binaryOp(ClassWriter cw, String op, Consumer realOp, Consumer integerOp) { - binaryOp(cw, op, long.class, realOp, integerOp); - } - - static void binaryOp(ClassWriter cw, String op, Class returnType, Consumer realOp, - Consumer integerOp) { - GeneratorAdapter mv = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, - method(toBytecodeName(op), desc(returnType, long.class, long.class)), null, null, cw); - - isInteger(mv, 0); - Label argOneIsLong = new Label(); - mv.ifZCmp(IFNE, argOneIsLong); - asDouble(mv, 0); - isInteger(mv, 1); - Label argTwoIsLong = new Label(); - mv.ifZCmp(IFNE, argTwoIsLong); - asDouble(mv, 1); - Label doubleOperation = new Label(); - mv.goTo(doubleOperation); - mv.visitLabel(argTwoIsLong); - asLong(mv, 1); - mv.visitInsn(L2D); - mv.goTo(doubleOperation); - mv.visitLabel(argOneIsLong); - isInteger(mv, 1); - Label longOperation = new Label(); - mv.ifZCmp(IFNE, longOperation); - asLong(mv, 0); - mv.visitInsn(L2D); - asDouble(mv, 1); - mv.visitLabel(doubleOperation); - realOp.accept(mv); - mv.returnValue(); - mv.visitLabel(longOperation); - asLong(mv, 0); - asLong(mv, 1); - integerOp.accept(mv); - mv.returnValue(); - mv.endMethod(); - } - - static void asDouble(GeneratorAdapter mv, int arg) { - mv.loadArg(arg); - mv.invokeStatic(getType(Double.class), method("longBitsToDouble", desc(double.class, long.class))); - } - - static void asLong(GeneratorAdapter mv, int arg) { - mv.loadArg(arg); - mv.push((int) tag); - mv.visitInsn(LSHR); - } - - static void isInteger(GeneratorAdapter mv, int arg) { - mv.loadArg(arg); - mv.visitInsn(L2I); - mv.push((int) tag); - mv.visitInsn(IAND); - } - - static void op(Method op) { - try { - Symbol symbol = intern(toSourceName(op.getName())); - symbol.fn.add(lookup.unreflect(op)); - operators.add(symbol); - } catch (IllegalAccessException e) { - throw uncheck(e); - } - } - - static Object maybeNumber(Object o) { - return o instanceof Long ? asNumber((Long) o) : o; - } - - public static long number(Number n) { - return n instanceof Double ? real(n.doubleValue()) : integer(n.longValue()); - } - - static long real(double d) { - return ~tag & doubleToLongBits(d); - } - - static long integer(long l) { - return l << tag | tag; - } - - static double asDouble(long l) { - return isInteger(l) ? l >> tag : longBitsToDouble(l); - } - - public static int asInt(long l) { - return toIntExact(asNumber(l).longValue()); - } - - public static Number asNumber(long fp) { //noinspection RedundantCast - return isInteger(fp) ? (Number) (fp >> tag) : (Number) longBitsToDouble(fp); - } - - static boolean isInteger(long l) { - return (tag & l) == integer; - } - } - - public final static class Symbol implements Invokable { - public final String symbol; - public List fn = new ArrayList<>(); - public SwitchPoint fnGuard; - public Object var; - public Collection source; - - Symbol(String symbol) { - this.symbol = symbol.intern(); - } - - public String toString() { - return symbol; - } - - public T value() { - if (var == null) throw new IllegalArgumentException("variable " + this + " has no value"); - //noinspection unchecked - return (T) var; - } - - public boolean equals(Object o) { //noinspection StringEquality - return o instanceof Symbol && symbol == ((Symbol) o).symbol; - } - - public int hashCode() { - return symbol.hashCode(); - } - - public MethodHandle invoker() throws IllegalAccessException { - if (fn.isEmpty()) return reLinker(symbol, 0); - MethodHandle mh = fn.get(0); - if (fn.size() > 1) return reLinker(symbol, mh.type().parameterCount()); - return mh; - } - } - - public final static class Cons extends AbstractCollection { - public final Object car, cdr; - public final int size; - - public Cons(Object car, Object cdr) { - this.car = car; - this.cdr = cdr; - this.size = cdr instanceof Cons ? 1 + (((Cons) cdr).size) : EMPTY_LIST.equals(cdr) ? 1 : 2; - } - - public boolean equals(Object o) { - if (this == o) return true; - if (o instanceof List && isList()) //noinspection unchecked - return vec(toList().stream().map(Numbers::maybeNumber)).equals(o); - if (o == null || getClass() != o.getClass()) return false; - //noinspection ConstantConditions - Cons cons = (Cons) o; - return EQ(car, cons.car) && cdr.equals(cons.cdr); - } - - boolean isList() { - return cdr instanceof Cons || EMPTY_LIST.equals(cdr); - } - - public int hashCode() { - return 31 * car.hashCode() + cdr.hashCode(); - } - - @SuppressWarnings("NullableProblems") - public Iterator iterator() { - if (!isList()) throw new IllegalStateException("cons pair is not a list: " + this); - return new ConsIterator(); - } - - public int size() { - return size; - } - - public String toString() { - if (isList()) return vec(toList().stream().map(Numbers::maybeNumber)).toString(); - return "[" + maybeNumber(car) + " | " + maybeNumber(cdr) + "]"; - } - - public List toList() { - return new ArrayList(this); - } - - public static Collection toCons(List list) { - if (list.isEmpty()) return list; - Cons cons = null; - list = new ArrayList<>(list); - reverse(list); - for (Object o : list) { - if (o instanceof List) o = toCons((List) o); - if (cons == null) cons = new Cons(o, EMPTY_LIST); - else cons = new Cons(o, cons); - } - return cons; - } - - class ConsIterator implements Iterator { - Cons cons = Cons.this; - - public boolean hasNext() { - return cons != null; - } - - public Object next() { - if (cons == null) throw new NoSuchElementException(); - try { - if (!cons.isList()) return cons; - return cons.car; - } finally { - cons =!cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; - } - } - } - } - - public static final class Primitives { - public static boolean EQ(Object left, Object right) { - if (Objects.equals(left, right)) return true; - if (absvectorP(left) && absvectorP(right)) { - Object[] leftA = (Object[]) left; - Object[] rightA = (Object[]) right; - if (leftA.length != rightA.length) return false; - for (int i = 0; i < leftA.length; i++) - if (!EQ(leftA[i], rightA[i])) - return false; - return true; - } - if (numberP(left) && numberP(right)) { - long a = (Long) left; - long b = (Long) right; - return (tag & a) == integer && (tag & b) == integer ? a == b : asDouble(a) == asDouble(b); - } - return false; - } - - public static Class KL_import(Symbol s) throws ClassNotFoundException { - Class aClass = Class.forName(s.symbol); - return set(intern(aClass.getSimpleName()), aClass); - } - - static Class KL_import(Class type) { - try { - return KL_import(intern(type.getName())); - } catch (ClassNotFoundException e) { - throw uncheck(e); - } - } - - public static Cons cons(Object x, Object y) { - return new Cons(x, y); - } - - public static boolean consP(Object x) { - return x instanceof Cons; - } - - public static Object simple_error(String s) { - throw new RuntimeException(s, null, false, false) {}; - } - - public static String error_to_string(Throwable e) { - return e.getMessage() == null ? e.toString() : e.getMessage(); - } - - public static Object hd(Cons cons) { - return cons.car; - } - - public static Object tl(Cons cons) { - return cons.cdr; - } - - public static String str(Object x) { - if (consP(x)) throw new IllegalArgumentException(x + " is not an atom; str cannot convert it to a string."); - if (x != null && x.getClass().isArray()) return deepToString((Object[]) x); - if (x instanceof Long) x = asNumber((Long) x); - return String.valueOf(x); - } - - public static String pos(String x, long n) { - return str(x.charAt((int) (n >> tag))); - } - - public static String tlstr(String x) { - return x.substring(1); - } - - public static Class type(Object x) { - return x.getClass(); - } - - public static Object[] absvector(long n) { - Object[] objects = new Object[(int) (n >> tag)]; - fill(objects, intern("fail!")); - return objects; - } - - public static boolean absvectorP(Object x) { - return x.getClass() == Object[].class; - } - - public static Object LT_address(Object[] vector, long n) { - return vector[((int) (n >> tag))]; - } - - public static Object[] address_GT(Object[] vector, long n, Object value) { - vector[((int) (n >> tag))] = value; - return vector; - } - - public static boolean numberP(Object x) { - return x instanceof Long; - } - - public static boolean stringP(Object x) { - return x instanceof String; - } - - public static String n_GTstring(long n) { - if (n >> tag < 0) throw new IllegalArgumentException(n + " is not a valid character"); - return Character.toString((char) (n >> tag)); - } - - public static String byte_GTstring(long n) { - return n_GTstring(n >> tag); - } - - public static long string_GTn(String s) { - return integer((int) s.charAt(0)); - } - - public static long read_byte(InputStream s) throws IOException { - return integer(s.read()); - } - - public static Long convertToLong(Object x) { - return (Long) asNumber((Long) x); - } - - public static T write_byte(T x, OutputStream s) throws IOException { - s.write(convertToLong(x).byteValue()); - s.flush(); - return x; - } - - public static Closeable open(String string, Symbol direction) throws IOException { - File file = new File(string); - if (!file.isAbsolute()) { - //noinspection RedundantCast - file = new File((String) intern("*home-directory*").value(), string); - } - - switch (direction.symbol) { - case "in": return new BufferedInputStream(new FileInputStream(file)); - case "out": return new BufferedOutputStream(new FileOutputStream(file)); - } - throw new IllegalArgumentException("invalid direction"); - } - - public static Object close(Closeable stream) throws IOException { - stream.close(); - return EMPTY_LIST; - } - - static long startTime = System.currentTimeMillis(); - public static long get_time(Symbol time) { - switch (time.symbol) { - case "run": return real((currentTimeMillis() - startTime) / 1000.0); - case "unix": return integer(currentTimeMillis() / 1000); - } - throw new IllegalArgumentException("get-time does not understand the parameter " + time); - } - - public static String cn(String s1, String s2) { - return s1 + s2; - } - - public static Symbol intern(String name) { - return symbols.computeIfAbsent(name, Symbol::new); - } - - public static T value(Symbol x) { - return x.value(); - } - - @SuppressWarnings("unchecked") - public static T set(Symbol x, T y) { - return (T) (x.var = y); - } - - static T set(String x, T y) { - return set(intern(x), y); - } - - public static MethodHandle function(Invokable x) throws Exception { - return x.invoker(); - } - - static MethodHandle function(String x) throws Exception { - return function(intern(x)); - } - - public static Object eval_kl(Object kl) throws Throwable { - return new Compiler(kl).load("__eval__", Callable.class).newInstance().call(); - } - - public static boolean or(boolean x, boolean y) { - return x || y; - } - - public static boolean and(boolean x, boolean y) { - return x && y; - } + interface LLPredicate { + boolean test(long a, long b); } - public static final class Overrides { - static final Symbol _true = intern("true"), _false = intern("false"), shen_tuple = intern("shen.tuple"); - - public static boolean variableP(Object x) { - return x instanceof Symbol && isUpperCase(((Symbol) x).symbol.charAt(0)); - } - - public static boolean booleanP(Object x) { - return x instanceof Boolean || _true == x || _false == x; - } - - public static boolean symbolP(Object x) { - return x instanceof Symbol && !booleanP(x); - } - - public static long length(Collection x) { - return integer(x.size()); - } - - public static Object[] ATp(Object x, Object y) { - return new Object[] {shen_tuple, x, y}; - } - - public static long hash(Object s, long limit) { - long hash = s.hashCode(); - if (hash == 0) return 1; - return integer(floorMod(hash, limit >> tag)); - } - - public static Object[] shen_fillvector(Object[] vector, long counter, long n, Object x) { - fill(vector, (int) (counter >> tag), (int) (n >> tag) + 1, x); - return vector; - } + interface Invokable { + MethodHandle invoker() throws Exception; } static boolean isDebug() { @@ -642,24 +63,24 @@ static boolean isDebug() { } static boolean booleanProperty(String property) { - return intern(property).var == Boolean.TRUE; + return Primitives.intern(property).var == Boolean.TRUE; } public static Object eval(String kl) throws Throwable { - return eval_kl(read(new StringReader(kl)).get(0)); + return Primitives.eval_kl(KLReader.read(new StringReader(kl)).get(0)); } static void install() throws Throwable { readTypes(); - set("shen-*installing-kl*", true); + Primitives.set("shen-*installing-kl*", true); for (String file : asList("toplevel", "core", "sys", "sequent", "yacc", "reader", "prolog", "track", "load", "writer", "macros", "declarations", "types", "t-star")) load("klambda/" + file, Callable.class).newInstance().call(); for (String file : asList("types")) - load("klambda-custom/" + file, Callable.class).newInstance().call(); - set("shen-*installing-kl*", false); - set("*home-directory*", getProperty("user.dir")); //Resetting it because it gets overwritten in declarations.kl - builtins.addAll(vec(symbols.values().stream().filter(s -> !s.fn.isEmpty()))); + load("klambda-custom/" + file, Callable.class).newInstance().call(); + Primitives.set("shen-*installing-kl*", false); + Primitives.set("*home-directory*", getProperty("user.dir")); //Resetting it because it gets overwritten in declarations.kl + RT.builtins.addAll(vec(symbols.values().stream().filter(s -> !s.fn.isEmpty()))); } static void readTypes() throws Throwable { @@ -667,14 +88,14 @@ static void readTypes() throws Throwable { getSystemClassLoader().loadClass("klambda.types"); } catch (ClassNotFoundException ignored) { try (Reader in = resource("klambda/types.kl")) { - List declarations = vec(read(in).stream().filter(List.class::isInstance) - .filter(c -> ((List) c).get(0).equals(intern("declare")))); + List declarations = vec(KLReader.read(in).stream().filter(List.class::isInstance) + .filter(c -> ((List) c).get(0).equals(Primitives.intern("declare")))); for (Object declaration : declarations) { List list = (List) declaration; Symbol symbol = (Symbol) list.get(1); - if (!tooStrictTypes.contains(symbol)) + if (!RT.tooStrictTypes.contains(symbol)) //noinspection unchecked - typesForInstallation.put(symbol, typeSignature(symbol, shenTypeSignature(((Cons) eval_kl(list.get(2))).toList()))); + RT.typesForInstallation.put(symbol, RT.typeSignature(symbol, RT.shenTypeSignature(((Cons) Primitives.eval_kl(list.get(2))).toList()))); } } } @@ -693,15 +114,16 @@ static Class load(String file, Class aClass) throws Throwable { static Class compile(String file, Class aClass) throws Throwable { try (Reader in = resource(format("%s.kl", file))) { debug("loading: %s", file); - Compiler compiler = new Compiler(null, file, cons(intern("do"), read(in))); + Compiler compiler = new Compiler(null, file, cons(Primitives.intern("do"), KLReader.read(in))); //noinspection RedundantCast - File compilePath = new File((String) intern("*compile-path*").value()); + File compilePath = new File((String) Primitives.intern("*compile-path*").value()); File classFile = new File(compilePath, file + ".class"); - if (!(compilePath.mkdirs() || compilePath.isDirectory())) throw new IOException("could not make directory: " + compilePath); + if (!(compilePath.mkdirs() || compilePath.isDirectory())) + throw new IOException("could not make directory: " + compilePath); try { return compiler.load(classFile.getName().replaceAll(".class$", ".kl"), aClass); } finally { - lines.clear(); + KLReader.lines.clear(); if (compiler.bytes != null) try (OutputStream out = new FileOutputStream(classFile)) { out.write(compiler.bytes); @@ -716,988 +138,13 @@ static Reader resource(String resource) { static String version() { try (InputStream manifest = find(Collections.list(getSystemResources("META-INF/MANIFEST.MF")).stream(), - u -> u.getPath().matches(".*shen.java.*?.jar!.*")).openStream()) { - return new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); + u -> u.getPath().matches(".*shen.java.*?.jar!.*")).openStream()) { + return new Manifest(manifest).getMainAttributes().getValue(IMPLEMENTATION_VERSION); } catch (IOException | NullPointerException ignored) { } return ""; } - public static class KLReader { - static Map lines = new IdentityHashMap<>(); - static int currentLine; - - static List read(Reader reader) throws Exception { - lines.clear(); - currentLine = 1; - return tokenizeAll(new Scanner(reader).useDelimiter("(\\s|\\)|\")")); - } - - static Object tokenize(Scanner sc) throws Exception { - whitespace(sc); - if (find(sc, "\\(")) return tokenizeAll(sc); - if (find(sc, "\"")) return nextString(sc); - if (find(sc, "\\)")) return null; - if (sc.hasNextBoolean()) return sc.nextBoolean(); - if (sc.hasNextLong()) return integer(sc.nextLong()); - if (sc.hasNextDouble()) return real(sc.nextDouble()); - if (sc.hasNext()) return intern(sc.next()); - return null; - } - - static void whitespace(Scanner sc) { - sc.skip("[^\\S\\n]*"); - while (find(sc, "\\n")) { - currentLine++; - sc.skip("[^\\S\\n]*"); - } - } - - static boolean find(Scanner sc, String pattern) { - return sc.findWithinHorizon(pattern, 1) != null; - } - - static Object nextString(Scanner sc) throws IOException { - String s = sc.findWithinHorizon("(?s).*?\"", 0); - currentLine += s.replaceAll("[^\n]", "").length(); - return s.substring(0, s.length() - 1); - } - - static List tokenizeAll(Scanner sc) throws Exception { - List list = list(); - lines.put(list, currentLine); - Object x; - while ((x = tokenize(sc)) != null) list.add(x); - return list; - } - } - - public static class RT { - static final Lookup lookup = lookup(); - static final Set overrides = new HashSet<>(); - static final Set builtins = new HashSet<>(); - static final Map typesForInstallation = new HashMap<>(); - static final Map sites = new HashMap<>(); - static final Map guards = new HashMap<>(); - - static final MethodHandle - link = mh(RT.class, "link"), proxy = mh(RT.class, "proxy"), - checkClass = mh(RT.class, "checkClass"), toIntExact = mh(Math.class, "toIntExact"), - asNumber = mh(Numbers.class, "asNumber"), number = mh(Numbers.class, "number"), - asInt = mh(Numbers.class, "asInt"), toList = mh(Cons.class, "toList"), - partial = mh(RT.class, "partial"), arityCheck = mh(RT.class, "arityCheck"); - - public static Object link(MutableCallSite site, String name, Object... args) throws Throwable { - name = toSourceName(name); - MethodType type = site.type(); - debug("LINKING: %s%s %s", name, type, vec(stream(args).map(Numbers::maybeNumber))); - List> actualTypes = vec(stream(args).map(Object::getClass)); - debug("actual types: %s", actualTypes); - Symbol symbol = intern(name); - debug("candidates: %s", symbol.fn); - - if (symbol.fn.isEmpty()) { - MethodHandle java = javaCall(site, name, type, args); - if (java != null) { - debug("calling java: %s", java); - site.setTarget(java.asType(type)); - return java.invokeWithArguments(args); - } - throw new NoSuchMethodException("undefined function " + name + type - + (symbol.fn.isEmpty() ? "" : " in " + vec(symbol.fn.stream().map(MethodHandle::type)))); - } - - int arity = symbol.fn.get(0).type().parameterCount(); - if (arity > args.length) { - MethodHandle partial = insertArguments(reLinker(name, arity), 0, args); - debug("partial: %s", partial); - return partial; - } - - MethodHandle match = find(symbol.fn.stream(), f -> every(actualTypes, f.type().parameterList(), RT::canCastStrict)); - if (match == null) throw new NoSuchMethodException("undefined function " + name + type); - debug("match based on argument types: %s", match); - - MethodHandle fallback = linker(site, toBytecodeName(name)).asType(type); - if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { - match = guards.computeIfAbsent(asList(type, symbol.fn), key -> guard(type, symbol.fn)); - debug("selected: %s", match); - } - - synchronized (symbol.symbol) { - if (symbol.fnGuard == null) symbol.fnGuard = new SwitchPoint(); - site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); - } - Object result = match.invokeWithArguments(args); - //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); - try{ - maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); - }catch(Exception e){ } - return result; - } - - static void maybeRecompile(MethodType type, Symbol symbol, Class returnType) throws Throwable { - if (symbol.source == null || booleanProperty("shen-*installing-kl*")) return; - MethodType signature = typeSignature(symbol); - type = signature != null ? signature : type.changeReturnType(isWrapperType(returnType) ? wrapper(returnType).primitiveType() - : isPrimitiveType(returnType) ? returnType : Object.class); - if ((signature != null || (type.changeReturnType(Object.class).hasPrimitives() && !builtins.contains(symbol)))) - recompile(type, symbol); - } - - static void recompile(MethodType type, Symbol symbol) throws Throwable { - if (symbol.source == null || symbol.fn.stream().map(MethodHandle::type).anyMatch(isEqual(type))) return; - debug("recompiling as %s: %s", type, symbol.source); - List fn = new ArrayList<>(symbol.fn); - try { - typeHint.set(type); - eval_kl(symbol.source); - } finally { - typeHint.remove(); - symbol.fn.addAll(fn); - if (!type.returnType().equals(Object.class)) - symbol.fn.removeIf(f -> f.type().equals(type.changeReturnType(Object.class))); - } - } - - static final Map types = new HashMap<>(); - static { - types.put(intern("symbol"), Symbol.class); - types.put(intern("number"), long.class); - types.put(intern("boolean"), boolean.class); - types.put(intern("string"), String.class); - types.put(intern("exception"), Exception.class); - types.put(intern("list"), Iterable.class); - types.put(intern("vector"), Object[].class); - } - - static Set tooStrictTypes = new HashSet<>(asList(intern("concat"), intern("fail-if"), - intern("tail"), intern("systemf"))); - - static MethodType typeSignature(Symbol symbol) throws Throwable { - if (tooStrictTypes.contains(symbol) || !hasKnownSignature(symbol)) return null; - return typeSignature(symbol, shenTypeSignature(symbol)); - } - - static MethodType typeSignature(Symbol symbol, List shenTypes) { - List> javaTypes = new ArrayList<>(); - for (Object argumentType : shenTypes) { - if (argumentType instanceof Cons) - argumentType = ((Cons) argumentType).car; - javaTypes.add(types.containsKey(argumentType) ? types.get(argumentType) : - argumentType instanceof Class ? (Class) argumentType : Object.class); - } - MethodType type = methodType(javaTypes.remove(javaTypes.size() - 1), javaTypes); - debug("%s has Shen type signature: %s mapped to Java %s", symbol, shenTypes, type); - return type; - } - - static boolean hasKnownSignature(Symbol symbol) { - return intern("shen.*signedfuncs*").var instanceof Cons && ((Cons) intern("shen.*signedfuncs*").var).contains(symbol); - } - - static List shenTypeSignature(Symbol symbol) throws Throwable { - return shenTypeSignature(((Cons) eval(format("(shen-typecheck %s (gensym A))", symbol))).toList()); - } - - static List shenTypeSignature(List signature) { - if (signature.size() != 3) - return vec(signature.stream().filter(isEqual(intern("-->")).negate())); - List argumentTypes = new ArrayList<>(); - for (; signature.size() == 3; signature = ((Cons) signature.get(2)).toList()) { - argumentTypes.add(signature.get(0)); - if (!(signature.get(2) instanceof Cons) || signature.get(2) instanceof Cons - && !((Cons) signature.get(2)).contains(intern("-->"))) { - argumentTypes.add(signature.get(2)); - break; - } - } - return argumentTypes; - } - - static MethodHandle guard(MethodType type, List candidates) { - candidates = bestMatchingMethods(type, candidates); - debug("applicable candidates: %s", candidates); - MethodHandle match = candidates.get(candidates.size() - 1).asType(type); - for (int i = candidates.size() - 1; i > 0; i--) { - MethodHandle fallback = candidates.get(i); - MethodHandle target = candidates.get(i - 1); - Class differentType = find(target.type().parameterList(), fallback.type().parameterList(), (x, y) -> !x.equals(y)); - int firstDifferent = target.type().parameterList().indexOf(differentType); - if (firstDifferent == -1) firstDifferent = 0; - debug("switching on %d argument type %s", firstDifferent, differentType); - debug("target: %s ; fallback: %s", target, fallback); - MethodHandle test = checkClass.bindTo(differentType); - test = dropArguments(test, 0, type.dropParameterTypes(firstDifferent, type.parameterCount()).parameterList()); - test = test.asType(test.type().changeParameterType(firstDifferent, type.parameterType(firstDifferent))); - match = guardWithTest(test, target.asType(type), match); - } - return match; - } - - static List bestMatchingMethods(MethodType type, List candidates) { - return vec(candidates.stream() - .filter(f -> every(type.parameterList(), f.type().parameterList(), RT::canCast)) - .sorted((x, y) -> y.type().changeReturnType(type.returnType()).equals(y.type().erase()) ? -1 : 1) - .sorted((x, y) -> every(y.type().parameterList(), x.type().parameterList(), RT::canCast) ? -1 : 1)); - } - - public static boolean checkClass(Class xClass, Object x) { - return xClass != null && canCastStrict(x.getClass(), xClass); - } - - static MethodHandle relinkOn(Class exception, MethodHandle fn, MethodHandle fallback) { - return catchException(fn.asType(fallback.type()), exception, dropArguments(fallback, 0, Exception.class)); - } - - static MethodHandle javaCall(MutableCallSite site, String name, MethodType type, Object... args) throws Exception { - if (name.endsWith(".")) { - Class aClass = intern(name.substring(0, name.length() - 1)).value(); - if (aClass != null) - return findJavaMethod(type, aClass.getName(), aClass.getConstructors()); - } - if (name.startsWith(".")) - return relinkOn(ClassCastException.class, findJavaMethod(type, name.substring(1), args[0].getClass().getMethods()), - linker(site, toBytecodeName(name))); - String[] classAndMethod = name.split("/"); - if (classAndMethod.length == 2 && intern(classAndMethod[0]).var instanceof Class) - return findJavaMethod(type, classAndMethod[1], ((Class) intern(classAndMethod[0]).value()).getMethods()); - return null; - } - - public static Object proxy(Method sam, Object x) throws Throwable { - if (x instanceof MethodHandle) { - MethodHandle target = (MethodHandle) x; - int arity = sam.getParameterTypes().length; - int actual = target.type().parameterCount(); - if (arity < actual) target = insertArguments(target, arity, new Object[actual - arity]); - if (arity > actual) target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); - return asInterfaceInstance(sam.getDeclaringClass(), target); - } - return null; - } - - static MethodHandle filterJavaTypes(MethodHandle method) throws IllegalAccessException { - MethodHandle[] filters = new MethodHandle[method.type().parameterCount()]; - for (int i = 0; i < method.type().parameterCount() - (method.isVarargsCollector() ? 1 : 0); i++) - if (isSAM(method.type().parameterType(i))) - filters[i] = proxy.bindTo(findSAM(method.type().parameterType(i))) - .asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().parameterType(i), int.class)) - filters[i] = asInt.asType(methodType(method.type().parameterType(i), Object.class)); - else if (canCast(method.type().wrap().parameterType(i), Number.class)) - filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); - if (canCast(method.type().wrap().returnType(), Number.class)) - method = filterReturnValue(method, number.asType(methodType(long.class, method.type().returnType()))); - return filterArguments(method, 0, filters); - } - - static MethodHandle findJavaMethod(MethodType type, String method, T[] methods) { - return some(stream(methods), m -> { - try { - if (m.getName().equals(method)) { - m.setAccessible(true); - MethodHandle mh = (m instanceof Method) ? lookup.unreflect((Method) m) : lookup.unreflectConstructor((Constructor) m); - mh.asType(methodType(type.returnType(), vec(type.parameterList().stream() - .map(c -> c.equals(Long.class) ? Integer.class : c.equals(long.class) ? int.class : c)))); - return filterJavaTypes(mh); - } - } catch (WrongMethodTypeException | IllegalAccessException ignored) { - } - return null; - }); - } - - public static MethodHandle function(Object target) throws Exception { - return target instanceof Invokable ? Primitives.function((Invokable) target) : (MethodHandle) target; - } - - static MethodHandle linker(MutableCallSite site, String name) { - return insertArguments(link, 0, site, name).asCollector(Object[].class, site.type().parameterCount()); - } - - static MethodHandle reLinker(String name, int arity) throws IllegalAccessException { - MutableCallSite reLinker = new MutableCallSite(genericMethodType(arity)); - return relinkOn(IllegalStateException.class, reLinker.dynamicInvoker(), linker(reLinker, toBytecodeName(name))); - } - - public static CallSite invokeBSM(Lookup lookup, String name, MethodType type) throws IllegalAccessException { - if (isOverloadedInternalFunction(name)) return invokeCallSite(name, type); - return sites.computeIfAbsent(name + type, key -> invokeCallSite(name, type)); - } - - static boolean isOverloadedInternalFunction(String name) { - return intern(toSourceName(name)).fn.size() > 1; - } - - static CallSite invokeCallSite(String name, MethodType type) { - MutableCallSite site = new MutableCallSite(type); - site.setTarget(linker(site, name).asType(type)); - return site; - } - - public static CallSite symbolBSM(Lookup lookup, String name, MethodType type) { - return sites.computeIfAbsent(name, key -> new ConstantCallSite(constant(Symbol.class, intern(toSourceName(name))))); - } - - public static CallSite applyBSM(Lookup lookup, String name, MethodType type) throws Exception { - return sites.computeIfAbsent(name + type, key -> applyCallSite(type)); - } - - public static Object partial(MethodHandle target, Object... args) throws Throwable { - if (args.length > target.type().parameterCount()) return uncurry(target, args); - return insertArguments(target, 0, args); - } - - public static boolean arityCheck(int arity, MethodHandle target) throws Throwable { - return target.type().parameterCount() == arity; - } - - static CallSite applyCallSite(MethodType type) { - MethodHandle apply = invoker(type.dropParameterTypes(0, 1)); - MethodHandle test = insertArguments(arityCheck, 0, type.parameterCount() - 1); - return new ConstantCallSite(guardWithTest(test, apply, partial.asType(type)).asType(type)); - } - - static MethodHandle mh(Class aClass, String name, Class... types) { - try { - return lookup.unreflect(find(stream(aClass.getMethods()), m -> m.getName().equals(name) - && (types.length == 0 || deepEquals(m.getParameterTypes(), types)))); - } catch (IllegalAccessException e) { - throw uncheck(e); - } - } - - static MethodHandle field(Class aClass, String name) { - try { - return lookup.unreflectGetter(aClass.getField(name)); - } catch (Exception e) { - throw uncheck(e); - } - } - - static boolean canCast(Class a, Class b) { - return a == Object.class || b == Object.class || canCastStrict(a, b); - } - - static boolean canCastStrict(Class a, Class b) { - return a == b || b.isAssignableFrom(a) || canWiden(a, b); - } - - static boolean canWiden(Class a, Class b) { - return wrapper(b).isNumeric() && wrapper(b).isConvertibleFrom(wrapper(a)); - } - - static Wrapper wrapper(Class type) { - if (isPrimitiveType(type)) return forPrimitiveType(type); - if (isWrapperType(type)) return forWrapperType(type); - return forBasicType(type); - } - - public static Symbol defun(Symbol name, MethodHandle fn) throws Throwable { - if (overrides.contains(name)) return name; - synchronized (name.symbol) { - SwitchPoint guard = name.fnGuard; - name.fn.clear(); - name.fn.add(fn); - if (guard != null) { - name.fnGuard = new SwitchPoint(); - invalidateAll(new SwitchPoint[] {guard}); - } - return name; - } - } - - static void register(Class aClass, Consumer hook) { - stream(aClass.getDeclaredMethods()).filter(m -> isPublic(m.getModifiers())).forEach(hook); - } - - static void override(Method m) { - overrides.add(defun(m)); - } - - static Symbol defun(Method m) { - try { - Symbol name = intern(unscramble(m.getName())); - name.fn.add(lookup.unreflect(m)); - return name; - } catch (IllegalAccessException e) { - throw uncheck(e); - } - } - - static Object uncurry(Object chain, Object... args) throws Throwable { - for (Object arg : args) - chain = ((MethodHandle) chain).invokeExact(arg); - return chain; - } - - public static MethodHandle bindTo(MethodHandle fn, Object arg) { - return insertArguments(fn, 0, arg); - } - - static String unscramble(String s) { - return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "") .replaceAll("GT", ">").replaceAll("EQ", "=") - .replaceAll("LT", "<").replaceAll("EX$", "!").replaceAll("P$", "?").replaceAll("^AT", "@"); - } - - static MethodHandle findSAM(Object lambda) { - try { - return lookup.unreflect(findSAM(lambda.getClass())).bindTo(lambda); - } catch (IllegalAccessException e) { - throw uncheck(e); - } - } - - static Method findSAM(Class lambda) { - List methods = vec(stream(lambda.getDeclaredMethods()).filter(m -> !m.isSynthetic())); - return methods.size() == 1 ? methods.get(0) : null; - } - - static boolean isSAM(Class aClass) { - return findSAM(aClass) != null; - } - } - - public static class Compiler implements Opcodes { - static final AnonymousClassLoader loader = AnonymousClassLoader.make(unsafe(), RT.class); - static final Map macros = new HashMap<>(); - static final List> literals = asList(Long.class, String.class, Boolean.class, Handle.class); - static final Handle - applyBSM = handle(RT.class, "applyBSM"), invokeBSM = handle(RT.class, "invokeBSM"), - symbolBSM = handle(RT.class, "symbolBSM"), or = handle(Primitives.class, "or"), - and = handle(Primitives.class, "and"); - static final Map push = new HashMap<>(); - static { - register(Macros.class, Compiler::macro); - } - - static int id = 1; - - String className; - ClassWriter cw; - - byte[] bytes; - GeneratorAdapter mv; - Object kl; - static ThreadLocal typeHint = new ThreadLocal<>(); - - Symbol self; - jdk.internal.org.objectweb.asm.commons.Method method; - Map locals; - List args; - List argTypes; - Type topOfStack; - Label recur; - - static class TypedValue { - final Type type; - final Object value; - - TypedValue(Type type, Object value) { - this.type = type; - this.value = value; - } - } - - public Compiler(Object kl, Symbol... args) throws Throwable { - this(null, "shen/ShenEval" + id++, kl, args); - } - - public Compiler(ClassWriter cn, String className, Object kl, Symbol... args) throws Throwable { - this.cw = cn; - this.className = className; - this.kl = kl; - this.args = list(args); - this.locals = new HashMap<>(); - } - - static ClassWriter classWriter(String name, Class anInterface) { - ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) {}; // Needs to be in this package for some reason. - cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[] {getInternalName(anInterface)}); - return cw; - } - - static jdk.internal.org.objectweb.asm.commons.Method method(String name, String desc) { - return new jdk.internal.org.objectweb.asm.commons.Method(name, desc); - } - - - static String desc(Class returnType, Class... argumentTypes) { - return methodType(returnType, argumentTypes).toMethodDescriptorString(); - } - - static String desc(Type returnType, List argumentTypes) { - return getMethodDescriptor(returnType, argumentTypes.toArray(new Type[argumentTypes.size()])); - } - - static Handle handle(Class declaringClass, String name) { - return handle(getInternalName(declaringClass), name, mh(declaringClass, name).type().toMethodDescriptorString()); - } - - static Handle handle(String className, String name, String desc) { - return new Handle(Opcodes.H_INVOKESTATIC, className, name, desc); - } - - static Type boxedType(Type type) { - if (!isPrimitive(type)) return type; - return getType(forBasicType(type.getDescriptor().charAt(0)).wrapperType()); - } - - static boolean isPrimitive(Type type) { - return type.getSort() < ARRAY; - } - - static void macro(Method m) { - try { - macros.put(intern(unscramble(m.getName())), lookup.unreflect(m)); - } catch (IllegalAccessException e) { - throw uncheck(e); - } - } - - GeneratorAdapter generator(int access, jdk.internal.org.objectweb.asm.commons.Method method) { - return new GeneratorAdapter(access, method, cw.visitMethod(access, method.getName(), method.getDescriptor(), null, null)); - } - - TypedValue compile(Object kl) { - return compile(kl, true); - } - - TypedValue compile(Object kl, boolean tail) { - return compile(kl, getType(Object.class), tail); - } - - TypedValue compile(Object kl, Type returnType, boolean tail) { - return compile(kl, returnType, true, tail); - } - - TypedValue compile(Object kl, Type returnType, boolean handlePrimitives, boolean tail) { - try { - Class literalClass = find(literals.stream(), c -> c.isInstance(kl)); - if (literalClass != null) push(literalClass, kl); - else if (kl instanceof Symbol) symbol((Symbol) kl); - else if (kl instanceof Collection) { - @SuppressWarnings("unchecked") - List list = new ArrayList<>((Collection) kl); - lineNumber(list); - if (list.isEmpty()) emptyList(); - else { - Object first = list.get(0); - if (first instanceof Symbol && !inScope((Symbol) first)) { - Symbol s = (Symbol) first; - if (macros.containsKey(s)) macroExpand(s, rest(list), returnType, tail); - else indy(s, rest(list), returnType, tail); - - } else { - compile(first, tail); - apply(returnType, rest(list)); - } - } - } else - throw new IllegalArgumentException("Cannot compile: " + kl + " (" + kl.getClass() + ")"); - if (handlePrimitives) handlePrimitives(returnType); - return new TypedValue(topOfStack, kl); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable t) { - throw uncheck(t); - } - } - - void handlePrimitives(Type returnType) { - if (isPrimitive(returnType) && !isPrimitive(topOfStack)) unbox(returnType); - else if (!isPrimitive(returnType) && isPrimitive(topOfStack)) box(); - } - - void lineNumber(List list) { - if (lines.containsKey(list)) - mv.visitLineNumber(lines.get(list), mv.mark()); - } - - boolean inScope(Symbol x) { - return (locals.containsKey(x) || args.contains(x)); - } - - void macroExpand(Symbol s, List args, Type returnType, boolean tail) throws Throwable { - macros.get(s).invokeWithArguments(into(asList(new Macros(), tail, returnType), - vec(args.stream().map(x -> x instanceof Cons ? ((Cons) x).toList() : x)))); - } - - void indy(Symbol s, List args, Type returnType, boolean tail) throws ReflectiveOperationException { - Iterator selfCallTypes = asList(method.getArgumentTypes()).iterator(); - List typedValues = vec(args.stream().map(o -> compile(o, isSelfCall(s, args) - ? selfCallTypes.next() : getType(Object.class), false, false))); - List argumentTypes = vec(typedValues.stream().map(t -> t.type)); - if (isSelfCall(s, args)) { - if (tail) { - debug("recur: %s", s); - recur(argumentTypes); - } else { - debug("can only recur from tail position: %s", s); - mv.invokeDynamic(toBytecodeName(s.symbol), desc(method.getReturnType(), argumentTypes), invokeBSM); - returnType = method.getReturnType(); - } - } else { - if (operators.contains(s) && returnType.equals(getType(Object.class)) && argumentTypes.size() == 2) - returnType = getType(s.fn.get(0).type().returnType()); - mv.invokeDynamic(toBytecodeName(s.symbol), desc(returnType, argumentTypes), invokeBSM); - } - topOfStack = returnType; - } - - void recur(List argumentTypes) { - for (int i = args.size()- 1; i >= 0; i--) { - if (!isPrimitive(method.getArgumentTypes()[i])) mv.valueOf(argumentTypes.get(i)); - mv.storeArg(i); - } - mv.goTo(recur); - } - - boolean isSelfCall(Symbol s, List args) { - return self.equals(s) && args.size() == this.args.size(); - } - - void apply(Type returnType, List args) throws ReflectiveOperationException { - if (!topOfStack.equals(getType(MethodHandle.class))) - mv.invokeStatic(getType(RT.class), method("function", desc(MethodHandle.class, Object.class))); - List argumentTypes = cons(getType(MethodHandle.class), vec(args.stream().map(o -> compile(o, false).type))); - mv.invokeDynamic("__apply__", desc(returnType, argumentTypes), applyBSM); - topOfStack = returnType; - } - - class Macros { - public void trap_error(boolean tail, Type returnType, Object x, Object f) throws Throwable { - Label after = mv.newLabel(); - - Label start = mv.mark(); - compile(x, returnType, tail); - mv.goTo(after); - - mv.catchException(start, mv.mark(), getType(Throwable.class)); - compile(f, false); - maybeCast(MethodHandle.class); - mv.swap(); - bindTo(); - - mv.invokeVirtual(getType(MethodHandle.class), method("invokeExact", desc(Object.class))); - if (isPrimitive(returnType)) unbox(returnType); - else topOfStack(Object.class); - mv.visitLabel(after); - } - - public void KL_if(boolean tail, Type returnType, Object test, Object then, Object _else) throws Exception { - if (test == Boolean.TRUE || test == intern("true")) { - compile(then, returnType, tail); - return; - } - if (test == Boolean.FALSE || test == intern("false")) { - compile(_else, returnType, tail); - return; - } - - Label elseStart = mv.newLabel(); - Label end = mv.newLabel(); - - compile(test, BOOLEAN_TYPE, false); - if (!BOOLEAN_TYPE.equals(topOfStack)) { - popStack(); - mv.throwException(getType(IllegalArgumentException.class), "boolean expected"); - return; - } - mv.visitJumpInsn(IFEQ, elseStart); - - compile(then, returnType, tail); - Type typeOfThenBranch = topOfStack; - mv.goTo(end); - - mv.visitLabel(elseStart); - compile(_else, returnType, tail); - - mv.visitLabel(end); - if (!typeOfThenBranch.equals(topOfStack) && !isPrimitive(returnType)) - topOfStack(Object.class); - } - - public void cond(boolean tail, Type returnType, List... clauses) throws Exception { - if (clauses.length == 0) - mv.throwException(getType(IllegalArgumentException.class), "condition failure"); - else { - List clause = clauses[0]; - KL_if(tail, returnType, clause.get(0), clause.get(1), cons(intern("cond"), rest(list((Object[]) clauses)))); - } - } - - public void or(boolean tail, Type returnType, Object x, Object... clauses) throws Exception { - if (clauses.length == 0) - bindTo(or, x); - else { - KL_if(tail, BOOLEAN_TYPE, x, true, (clauses.length > 1 ? cons(intern("or"), list(clauses)) : clauses[0])); - if (!isPrimitive(returnType)) mv.box(returnType); - } - } - - public void and(boolean tail, Type returnType, Object x, Object... clauses) throws Exception { - if (clauses.length == 0) - bindTo(and, x); - else { - KL_if(tail, BOOLEAN_TYPE, x, (clauses.length > 1 ? cons(intern("and"), list(clauses)) : clauses[0]), false); - if (!isPrimitive(returnType)) mv.box(returnType); - } - } - - public void lambda(boolean tail, Type returnType, Symbol x, Object y) throws Throwable { - fn("__lambda__", y, x); - } - - public void freeze(boolean tail, Type returnType, Object x) throws Throwable { - fn("__freeze__", x); - } - - public void defun(boolean tail, Type returnType, Symbol name, final List args, Object body) throws Throwable { - push(name); - debug("compiling: %s%s in %s", name, args, getObjectType(className).getClassName()); - name.source = toCons(asList(intern("defun"), name, args, body)); - if (booleanProperty("shen-*installing-kl*") && typesForInstallation.containsKey(name)) - Compiler.typeHint.set(typesForInstallation.get(name)); - fn(name.symbol, body, args.toArray(new Symbol[args.size()])); - mv.invokeStatic(getType(RT.class), method("defun", desc(Symbol.class, Symbol.class, MethodHandle.class))); - topOfStack(Symbol.class); - } - - public void let(boolean tail, Type returnType, Symbol x, Object y, Object z) throws Throwable { - Label start = mv.mark(); - compile(y, false); - Integer hidden = locals.get(x); - int let = hidden != null && tail ? hidden : mv.newLocal(topOfStack); - mv.storeLocal(let); - locals.put(x, let); - compile(z, returnType, tail); - if (hidden != null) locals.put(x, hidden); - else locals.remove(x); - if (!tail) { - mv.push((String) null); - mv.storeLocal(let); - } - mv.visitLocalVariable(x.symbol, mv.getLocalType(let).getDescriptor(), null, start, mv.mark(), let); - } - - public void KL_do(boolean tail, Type returnType, Object... xs) throws Throwable { - for (int i = 0; i < xs.length; i++) { - boolean last = i == xs.length - 1; - compile(xs[i], last ? returnType : getType(Object.class), last && tail); - if (!last) popStack(); - } - } - - public void thaw(boolean tail, Type returnType, Object f) throws Throwable { - compile(f, false); - maybeCast(MethodHandle.class); - mv.invokeVirtual(getType(MethodHandle.class), method("invokeExact", desc(Object.class))); - topOfStack(Object.class); - } - } - - void fn(String name, Object kl, Symbol... args) throws Throwable { - String bytecodeName = toBytecodeName(name) + "_" + id++; - List scope = vec(closesOver(new HashSet<>(asList(args)), kl).distinct()); - scope.retainAll(into(locals.keySet(), this.args)); - - if (name.startsWith("__")) typeHint.remove(); - List types = into(vec(scope.stream().map(this::typeOf)), typeHint.get() != null - ? vec(typeHint.get().parameterList().stream().map(Type::getType)) : nCopies(args.length, getType(Object.class))); - Type returnType = typeHint.get() != null ? getType(typeHint.get().returnType()) : getType(Object.class); - typeHint.remove(); - push(handle(className, bytecodeName, desc(returnType, types))); - insertArgs(0, scope); - - scope.addAll(asList(args)); - Compiler fn = new Compiler(cw, className, kl, scope.toArray(new Symbol[scope.size()])); - fn.method(ACC_PUBLIC | ACC_STATIC | ACC_FINAL, intern(name), bytecodeName, returnType, types); - } - - @SuppressWarnings({"unchecked"}) - Stream closesOver(Set scope, Object kl) { - if (kl instanceof Symbol && !scope.contains(kl)) - return singleton((Symbol) kl).stream(); - if (kl instanceof Collection) { - List list = new ArrayList<>((Collection) kl); - if (!list.isEmpty()) - switch (list.get(0).toString()) { - case "let": return concat(closesOver(scope, list.get(2)), closesOver(conj(scope, list.get(2)), list.get(3))); - case "lambda": return closesOver(conj(scope, list.get(2)), list.get(2)); - case "defun": return closesOver(into(scope, (Collection) list.get(2)), list.get(3)); - } - return list.stream().flatMap(o -> closesOver(scope, o)); - } - return empty(); - } - - void emptyList() { - mv.getStatic(getType(Collections.class), "EMPTY_LIST", getType(List.class)); - topOfStack(List.class); - } - - void symbol(Symbol s) throws Throwable { - if (asList("true", "false").contains(s.symbol)) { - push(Boolean.class, Boolean.valueOf(s.symbol)); - return; - } - else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); - else if (args.contains(s)) mv.loadArg(args.indexOf(s)); - else push(s); - topOfStack = typeOf(s); - } - - Type typeOf(Symbol s) { - if (locals.containsKey(s)) return mv.getLocalType(locals.get(s)); - else if (args.contains(s)) return argTypes.get(args.indexOf(s)); - return getType(Symbol.class); - } - - void loadArgArray(List args) { - mv.push(args.size()); - mv.newArray(getType(Object.class)); - - for (int i = 0; i < args.size(); i++) { - mv.dup(); - mv.push(i); - compile(args.get(i), false); - box(); - mv.arrayStore(getType(Object.class)); - } - topOfStack(Object[].class); - } - - void push(Symbol kl) { - mv.invokeDynamic(toBytecodeName(kl.symbol), desc(Symbol.class), symbolBSM); - topOfStack(Symbol.class); - } - - void push(Handle handle) { - mv.push(handle); - topOfStack(MethodHandle.class); - } - - void push(Class aClass, Object kl) throws Throwable { - aClass = asPrimitiveType(aClass); - push.computeIfAbsent(aClass, c -> mh(mv.getClass(), "push", c)).invoke(mv, kl); - topOfStack(aClass); - } - - void box() { - Type maybePrimitive = topOfStack; - mv.valueOf(maybePrimitive); - topOfStack = boxedType(maybePrimitive); - } - - void unbox(Type type) { - mv.unbox(type); - topOfStack = type; - } - - void popStack() { - if (topOfStack.getSize() == 1) mv.pop(); else mv.pop2(); - } - - void maybeCast(Class type) { - maybeCast(getType(type)); - } - - void maybeCast(Type type) { - if (!type.equals(topOfStack)) mv.checkCast(type); - topOfStack = type; - } - - void topOfStack(Class aClass) { - topOfStack = getType(aClass); - } - - public Class load(String source, Class anInterface) throws Exception { - try { - cw = classWriter(className, anInterface); - cw.visitSource(source, null); - constructor(); - Method sam = findSAM(anInterface); - List types = vec(stream(sam.getParameterTypes()).map(Type::getType)); - method(ACC_PUBLIC, intern(sam.getName()), toBytecodeName(sam.getName()), getType(sam.getReturnType()), types); - bytes = cw.toByteArray(); - if (booleanProperty("*debug-asm*")) printASM(bytes, sam); - //noinspection unchecked - return (Class) loader.loadClass(bytes); - } catch (VerifyError e) { - printASM(bytes, null); - throw e; - } - } - - void method(int modifiers, Symbol name, String bytecodeName, Type returnType, List argumentTypes) { - this.self = name; - this.argTypes = argumentTypes; - this.method = method(bytecodeName, desc(returnType, argumentTypes)); - mv = generator(modifiers, method); - recur = mv.mark(); - compile(kl, returnType, true); - maybeCast(returnType); - mv.returnValue(); - mv.endMethod(); - } - - void constructor() { - GeneratorAdapter ctor = generator(ACC_PUBLIC, method("", desc(void.class))); - ctor.loadThis(); - ctor.invokeConstructor(getType(Object.class), method("", desc(void.class))); - ctor.returnValue(); - ctor.endMethod(); - } - - void bindTo(Handle handle, Object arg) { - push(handle); - compile(arg, false); - box(); - bindTo(); - } - - void bindTo() { - mv.invokeStatic(getType(RT.class), method("bindTo",desc(MethodHandle.class, MethodHandle.class, Object.class))); - topOfStack(MethodHandle.class); - } - - void insertArgs(int pos, List args) { - if (args.isEmpty()) return; - mv.push(pos); - loadArgArray(args); - mv.invokeStatic(getType(MethodHandles.class), method("insertArguments", - desc(MethodHandle.class, MethodHandle.class, int.class, Object[].class))); - topOfStack(MethodHandle.class); - } - - static void printASM(byte[] bytes, Method method) { - ASMifier asm = new ASMifier(); - PrintWriter pw = new PrintWriter(err); - TraceClassVisitor printer = new TraceClassVisitor(null, asm, pw); - if (method == null) - new ClassReader(bytes).accept(printer, SKIP_DEBUG); - else { - ClassNode cn = new ClassNode(); - new ClassReader(bytes).accept(cn, SKIP_DEBUG); - find(cn.methods.stream(), mn -> mn.name.equals(method.getName())).accept(printer); - asm.print(pw); - pw.flush(); - } - } - - static Unsafe unsafe() { - try { - Field unsafe = Unsafe.class.getDeclaredField("theUnsafe"); - unsafe.setAccessible(true); - return (Unsafe) unsafe.get(null); - } catch (Exception e) { - throw uncheck(e); - } - } - } - static void debug(String format, Object... args) { if (isDebug()) err.println(format(format, stream(args).map(o -> o != null && o.getClass() == Object[].class @@ -1739,7 +186,7 @@ static List cons(T x, List seq) { static Stream map(Stream c1, Stream c2, BiFunction f) { Iterator it1 = c1.iterator(); Iterator it2 = c2.iterator(); - List result= new ArrayList(); + List result = new ArrayList(); while (it1.hasNext() && it2.hasNext()) { result.add(f.apply(it1.next(), it2.next())); } @@ -1766,3 +213,4 @@ static T uncheckAndThrow(Throwable t) throws T { //noinspe throw (T) t; } } + diff --git a/src/shen/Symbol.java b/src/shen/Symbol.java new file mode 100644 index 0000000..e69de29 diff --git a/test/shen/BenchmarksTest.java b/test/shen/BenchmarksTest.java index f4d41b4..cf1d7e4 100644 --- a/test/shen/BenchmarksTest.java +++ b/test/shen/BenchmarksTest.java @@ -3,16 +3,13 @@ import org.junit.Ignore; import org.junit.Test; -import static shen.Shen.eval; -import static shen.Shen.install; - public class BenchmarksTest { @Test @Ignore public void benchmarks() throws Throwable { - install(); - eval("(cd \"shen/benchmarks\")"); - eval("(load \"README.shen\")"); - eval("(load \"benchmarks.shen\")"); + Shen.install(); + Shen.eval("(cd \"shen/benchmarks\")"); + Shen.eval("(load \"README.shen\")"); + Shen.eval("(load \"benchmarks.shen\")"); } public static void main(String... args) throws Throwable { diff --git a/test/shen/MicroBench.java b/test/shen/MicroBench.java index 1b21dc0..ec19337 100644 --- a/test/shen/MicroBench.java +++ b/test/shen/MicroBench.java @@ -4,18 +4,13 @@ import java.util.concurrent.Callable; import static java.lang.System.currentTimeMillis; -import static shen.Shen.Compiler; -import static shen.Shen.KLReader.read; -import static shen.Shen.Numbers.maybeNumber; -import static shen.Shen.Primitives.set; -import static shen.Shen.eval; public class MicroBench { public static void main(String[] args) throws Throwable { int times = 10; - set("*debug*", true); - eval("(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))"); + Primitives.set("*debug*", true); + Shen.eval("(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))"); bench("(fib 30)", times); bench("(fib 30.0)", times); // Will switch fib from long to double @@ -25,11 +20,11 @@ public static void main(String[] args) throws Throwable { bench(() -> fib(30), times); // Java bench(() -> fibBoxed(30L), times); // Java Boxed - eval("(defun my-cons (a b) (cons a b))"); + Shen.eval("(defun my-cons (a b) (cons a b))"); bench("(my-cons 1 2)", times); // Will pick cons(Object, Object) bench("(my-cons 1 ())", times); // Fails without hack/fix - eval("(defun my-cons (a b) (cons a b))"); + Shen.eval("(defun my-cons (a b) (cons a b))"); bench("(my-cons 1 ())", times); // Picks cons(Object, List) bench("(my-cons 1 2)", times); // Guarded down to cons(Object, Object) bench("(my-cons 1 ())", times); // Reuses same target matching guard @@ -37,17 +32,17 @@ public static void main(String[] args) throws Throwable { bench("(= 1 1)", times); // Not for performance, but these easily break bench("(= 1 1.0)", times); - eval("(defun map (f x) (if (cons? x) (cons (f (hd x)) (map f (tl x))) ()))"); + Shen.eval("(defun map (f x) (if (cons? x) (cons (f (hd x)) (map f (tl x))) ()))"); bench("(map (+ 1) (cons 1 (cons 2 (cons 3 ()))))", times); - eval("(defun inc (x) (+ 1 x))"); + Shen.eval("(defun inc (x) (+ 1 x))"); bench("(map inc (cons 1 (cons 2 (cons 3 ()))))", times); times = 30; bench("(cons 1 1.0)", times); bench("((cons 1) 1.0)", times); - eval("(defun my-cons (x) ((cons 1) x))"); + Shen.eval("(defun my-cons (x) ((cons 1) x))"); bench("(my-cons 1.0)", times); } @@ -67,13 +62,13 @@ static Long fibBoxed(Long n) { } static void bench(String test, int times) throws Throwable { - Object kl = read(new StringReader(test)).get(0); + Object kl = KLReader.read(new StringReader(test)).get(0); bench(new Compiler(kl).load("__eval__", Callable.class).newInstance(), times); } static void bench(Callable code, int times) throws Exception { long start = currentTimeMillis(); - for (int i = 0; i < times; i++) System.out.println(maybeNumber(code.call())); + for (int i = 0; i < times; i++) System.out.println(Numbers.maybeNumber(code.call())); System.out.println(times + ": " + ((currentTimeMillis() - start) / ((double) times) + "ms.")); } } diff --git a/test/shen/PrimitivesTest.java b/test/shen/PrimitivesTest.java index 527f643..d575b52 100644 --- a/test/shen/PrimitivesTest.java +++ b/test/shen/PrimitivesTest.java @@ -16,10 +16,6 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.*; -import static shen.Shen.*; -import static shen.Shen.Numbers.*; -import static shen.Shen.Primitives.intern; -import static shen.Shen.RT.canCast; public class PrimitivesTest { @Test @@ -27,7 +23,7 @@ public void equals() { is(2L, "2"); is(true, "true"); is("foo", "\"foo\""); - is(intern("bar"), "bar"); + is(Primitives.intern("bar"), "bar"); is(false, "(= 2 3)"); is(false, "(= \"foo\" \"bar\")"); is(false, "(= true false)"); @@ -36,7 +32,7 @@ public void equals() { @Test public void defun_lambda_and_let() { - is(intern("f"), "(defun f (x) (lambda y (+ x y))"); + is(Primitives.intern("f"), "(defun f (x) (lambda y (+ x y))"); is(5L, "((f 3) 2)"); is(10L, "(let x 5 (* 2 x)"); } @@ -106,7 +102,7 @@ public void arithmetic() { is(1.5, "(let x 2.0 (let y 0.5 (- x y)))"); is(1.5, "(let x 2 (let y 0.5 (- x y)))"); is(true, "(= (value x) 1)"); - is(intern("fun"), "(defun fun (x y) (- x y)))"); + is(Primitives.intern("fun"), "(defun fun (x y) (- x y)))"); is(1.5, "(fun 2 0.5)"); is(1.5, "(fun 2.5 1)"); } @@ -223,13 +219,13 @@ public void cons() { @Test public void absvector_absvector_p_address_gt_and_lt_address() { - Symbol fail = intern("fail!"); + Symbol fail = Primitives.intern("fail!"); Object[] absvector = {fail, fail, fail, fail, fail}; is(absvector, "(set v (absvector 5)"); is(false, "(absvector? v)"); is(false, "(absvector? 2)"); is(false, "(absvector? \"foo\")"); - absvector[2] = integer(5L); + absvector[2] = Numbers.integer(5L); is(absvector, "(address-> (value v) 2 5)"); is(5L, "(<-address (value v) 2)"); is(-1L, "(trap-error (<-address (value v) 5) (lambda E -1))"); @@ -239,8 +235,8 @@ public void absvector_absvector_p_address_gt_and_lt_address() { public void eval_kl_freeze_and_thaw() { is(9L, "(eval-kl (cons + (cons 4 (cons 5 ()))))"); is(4L, "(eval-kl 4)"); - is(intern("hello"), "(eval-kl hello)"); - is(intern("hello"), "(eval-kl hello)"); + is(Primitives.intern("hello"), "(eval-kl hello)"); + is(Primitives.intern("hello"), "(eval-kl hello)"); is(MethodHandle.class, "(freeze (+ 2 2)"); is(MethodHandle.class, "(freeze (/ 2 0))"); is(4L, "((freeze (+ 2 2)))"); @@ -252,7 +248,7 @@ public void set_value_and_intern() { is(5L, "(set x 5)"); is(5L, "(value x)"); is(5L, "(value (intern \"x\")"); - is(intern("fun"), "(defun fun () (value x))"); + is(Primitives.intern("fun"), "(defun fun () (value x))"); is(5L, "(fun)"); is(6L, "(set x 6)"); is(6L, "(fun)"); @@ -270,7 +266,7 @@ public void tagged_values() { is(false, "(value x)"); is(asList(), "(set x ())"); is(asList(), "(value x)"); - is(intern("fun"), "(defun fun (x) (value x))"); + is(Primitives.intern("fun"), "(defun fun (x) (value x))"); is(asList(), "(fun x)"); is(5.0, "(set x 5.0)"); is(5.0, "(fun x)"); @@ -344,8 +340,8 @@ public void lists() { is(-1L, "(trap-error (hd 5) (lambda E -1))"); is(-1L, "(trap-error (tl 5) (lambda E -1))"); is(1L, "(hd (cons 1 (cons 2 (cons 3 ()))))"); - is(asList(integer(2L), integer(3L)), "(tl (cons 1 (cons 2 (cons 3 ()))))"); - is(new Cons(integer(5L), integer(10L)), "(cons 5 10)"); + is(asList(Numbers.integer(2L), Numbers.integer(3L)), "(tl (cons 1 (cons 2 (cons 3 ()))))"); + is(new Cons(Numbers.integer(5L), Numbers.integer(10L)), "(cons 5 10)"); } @Test @@ -380,10 +376,10 @@ public void partials() { is(MethodHandle.class, "(cons 1)"); is(MethodHandle.class, "(cons)"); is(MethodHandle.class, "((cons) 1)"); - is(asList(integer(1L)), "((cons 1) ())"); - is(new Cons(integer(1L), integer(2L)), "((cons 1) 2)"); - is(new Cons(integer(1L), integer(2L)), "(((cons) 1) 2)"); - is(new Cons(integer(1L), integer(2L)), "((cons) 1 2)"); + is(asList(Numbers.integer(1L)), "((cons 1) ())"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "((cons 1) 2)"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "(((cons) 1) 2)"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "((cons) 1 2)"); is(true, "((> 50) 10)"); is(true, "(let test or (test true false))"); is(false, "(let test and (test true false))"); @@ -393,20 +389,20 @@ public void partials() { @Test public void uncurry() { - is(asList(integer(1L), integer(2L)), "((lambda x (lambda y (cons x (cons y ())))) 1 2)"); - is(new Cons(integer(1L), integer(2L)), "(((cons) 1) 2)"); + is(asList(Numbers.integer(1L), Numbers.integer(2L)), "((lambda x (lambda y (cons x (cons y ())))) 1 2)"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "(((cons) 1) 2)"); } @Test public void function() { is(3L, "((function +) 1 2)"); is(3.0, "((function +) 1 2.0)"); - is(intern("x"), "(defun x () y)"); - is(intern("y"), "(let z x (z)))"); - is(intern("x"), "(defun x (y) y)"); + is(Primitives.intern("x"), "(defun x () y)"); + is(Primitives.intern("y"), "(let z x (z)))"); + is(Primitives.intern("x"), "(defun x (y) y)"); is(2L, "(let a x (a 2)))"); - is(intern("x"), "(defun x (y) (y))"); - is(intern("y"), "(defun y () 1))"); + is(Primitives.intern("x"), "(defun x (y) (y))"); + is(Primitives.intern("y"), "(defun y () 1))"); is(1L, "(x y)"); is(MethodHandle.class, "(function undefined)"); is(-1L, "(trap-error ((function undefined)) (lambda E -1))"); @@ -414,26 +410,26 @@ public void function() { @Test public void rebind() { - is(intern("fun"), "(defun fun (x) (cons 1 x)"); - is(asList(integer(1L)), "(fun ())"); - is(new Cons(integer(1L), integer(2L)), "(fun 2)"); - is(intern("fun"), "(defun fun (x) (cons 1 x)"); - is(new Cons(integer(1L), integer(2L)), "(fun 2)"); - is(asList(integer(1L)), "(fun ())"); - is(intern("fun2"), "(defun fun2 (x) (+ 2 x))"); + is(Primitives.intern("fun"), "(defun fun (x) (cons 1 x)"); + is(asList(Numbers.integer(1L)), "(fun ())"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "(fun 2)"); + is(Primitives.intern("fun"), "(defun fun (x) (cons 1 x)"); + is(new Cons(Numbers.integer(1L), Numbers.integer(2L)), "(fun 2)"); + is(asList(Numbers.integer(1L)), "(fun ())"); + is(Primitives.intern("fun2"), "(defun fun2 (x) (+ 2 x))"); is(3L, "(fun2 1)"); is(3.0, "(fun2 1.0)"); } @Test public void recur() { - is(intern("factorial"), "(defun factorial (cnt acc) (if (= 0 cnt) acc (factorial (- cnt 1) (* acc cnt)))"); + is(Primitives.intern("factorial"), "(defun factorial (cnt acc) (if (= 0 cnt) acc (factorial (- cnt 1) (* acc cnt)))"); is(3628800L, "(factorial 10 1)"); } @Test public void can_only_recur_from_tail_position() { - is(intern("fib"), "(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))"); + is(Primitives.intern("fib"), "(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))"); is(55L, "(fib 10)"); } @@ -449,16 +445,16 @@ public void java() { is("Oracle Corporation", "(System/getProperty \"java.vendor\")"); is(1.414213562373095, "(Math/sqrt 2)"); // Should be 1.4142135623730951 <- last decimal is truncated is(Class.class, "(import java.util.Arrays)"); - is(asList(integer(1L), integer(2L)), "(Arrays/asList 1 2)"); + is(asList(Numbers.integer(1L), Numbers.integer(2L)), "(Arrays/asList 1 2)"); is(Class.class, "(import java.util.ArrayList)"); is(Class.class, "(value ArrayList)"); is(0L, "(.size ()))"); is(ArrayList.class, "(ArrayList.)"); - is(asList(integer(1L)), "(ArrayList. (cons 1 ())"); + is(asList(Numbers.integer(1L)), "(ArrayList. (cons 1 ())"); is(Long.class, "(.size (ArrayList. (cons 1 ()))"); // is(asList(2L), "(tl (ArrayList. (cons 1 (cons 2 ())))"); is("HELLO", "(.toUpperCase \"Hello\")"); - is(intern("up"), "(defun up (x) (.toUpperCase x))"); + is(Primitives.intern("up"), "(defun up (x) (.toUpperCase x))"); is("UP", "(up \"up\")"); is("TWICE", "(up \"twice\")"); } @@ -478,10 +474,10 @@ public void java_proxies() { public void relink_java() { is(Class.class, "(import java.util.ArrayList)"); is(Class.class, "(import java.util.LinkedList)"); - is(intern("to-string"), "(defun to-string (x) (.toString x))"); + is(Primitives.intern("to-string"), "(defun to-string (x) (.toString x))"); is(String.class, "(to-string (ArrayList. (cons 1 ()))"); is(String.class, "(to-string (LinkedList. (cons 1 ()))"); - is(intern("size"), "(defun size (x) (.size x))"); + is(Primitives.intern("size"), "(defun size (x) (.size x))"); is(1L, "(size (ArrayList. (cons 1 ()))"); is(1L, "(size (LinkedList. (cons 1 ()))"); is(0L, "(size ())"); @@ -491,46 +487,46 @@ public void relink_java() { @Test public void redefine() { - is(intern("fun"), "(defun fun (x y) (+ x y))"); - is(intern("fun2"), "(defun fun2 () (fun 1 2))"); + is(Primitives.intern("fun"), "(defun fun (x y) (+ x y))"); + is(Primitives.intern("fun2"), "(defun fun2 () (fun 1 2))"); is(3L, "(fun 1 2)"); is(3L, "(fun2)"); - is(intern("fun"), "(defun fun (x y) (- x y))"); + is(Primitives.intern("fun"), "(defun fun (x y) (- x y))"); is(-1L, "(fun 1 2)"); is(-1L, "(fun2)"); - is(intern("fun"), "(defun fun (x y) (+ x y))"); + is(Primitives.intern("fun"), "(defun fun (x y) (+ x y))"); is(3L, "(fun 1 2)"); is(3L, "(fun2)"); } @Test public void casts() { - assertTrue(canCast(Long.class, Object.class)); - assertTrue(canCast(Object.class, Long.class)); - assertTrue(canCast(Long.class, Double.class)); - assertFalse(canCast(Double.class, Long.class)); - assertTrue(canCast(long.class, double.class)); - assertFalse(canCast(double.class, long.class)); - assertTrue(canCast(long.class, Double.class)); - assertFalse(canCast(Double.class, Long.class)); - assertTrue(canCast(long.class, Object.class)); - assertTrue(canCast(Object.class, long.class)); - assertTrue(canCast(Long.class, long.class)); - assertTrue(canCast(long.class, Long.class)); - assertTrue(canCast(long.class, long.class)); - assertTrue(canCast(Object.class, Object.class)); - assertTrue(canCast(String.class, Object.class)); - assertTrue(canCast(Object.class, String.class)); - assertFalse(canCast(Long.class, List.class)); + assertTrue(RT.canCast(Long.class, Object.class)); + assertTrue(RT.canCast(Object.class, Long.class)); + assertTrue(RT.canCast(Long.class, Double.class)); + assertFalse(RT.canCast(Double.class, Long.class)); + assertTrue(RT.canCast(long.class, double.class)); + assertFalse(RT.canCast(double.class, long.class)); + assertTrue(RT.canCast(long.class, Double.class)); + assertFalse(RT.canCast(Double.class, Long.class)); + assertTrue(RT.canCast(long.class, Object.class)); + assertTrue(RT.canCast(Object.class, long.class)); + assertTrue(RT.canCast(Long.class, long.class)); + assertTrue(RT.canCast(long.class, Long.class)); + assertTrue(RT.canCast(long.class, long.class)); + assertTrue(RT.canCast(Object.class, Object.class)); + assertTrue(RT.canCast(String.class, Object.class)); + assertTrue(RT.canCast(Object.class, String.class)); + assertFalse(RT.canCast(Long.class, List.class)); } void is(Object expected, String actual) { Object 神 = 神(actual); if (expected instanceof Class) - if (expected == Double.class) assertThat(isInteger((Long) 神), equalTo(false)); + if (expected == Double.class) assertThat(Numbers.isInteger((Long) 神), equalTo(false)); else assertThat(神, instanceOf((Class) expected)); else if (神 instanceof Long) - assertThat(asNumber((Long) 神), equalTo(expected)); + assertThat(Numbers.asNumber((Long) 神), equalTo(expected)); else if (神 instanceof Cons && expected instanceof List) assertThat(((Cons) 神).toList(), equalTo(expected)); else @@ -539,7 +535,7 @@ else if (神 instanceof Cons && expected instanceof List) Object 神(String shen) { try { - return eval(shen); + return Shen.eval(shen); } catch (Throwable t) { throw new RuntimeException(t); } diff --git a/test/shen/SmokeTest.java b/test/shen/SmokeTest.java index c4c9df8..3527e95 100644 --- a/test/shen/SmokeTest.java +++ b/test/shen/SmokeTest.java @@ -10,10 +10,6 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertThat; -import static shen.Shen.Numbers.asNumber; -import static shen.Shen.Numbers.isInteger; -import static shen.Shen.Primitives.*; -import static shen.Shen.eval; // These are the main methods from the interpreter and compiler, no structure or niceness. // Tests lots of random stuff, written while developing, most this should be covered in PrimitivesTest. @@ -21,98 +17,98 @@ public class SmokeTest { @Test public void interpreter() throws Throwable { - out.println(eval_kl(intern("x"))); - out.println(eval("(or false)")); - out.println(eval("(or false false)")); - out.println(eval("(or false true)")); - out.println(eval("(or false false false)")); - out.println(eval("((or false) true)")); - out.println(eval("()")); - out.println(eval("(cons 2 3)")); - - out.println(eval("(absvector? (absvector 10))")); - out.println(eval("(absvector 10)")); - out.println(eval("(absvector? ())")); - out.println(eval("(+ 1 2)")); - out.println(eval("((+ 6.5) 2.0)")); - out.println(eval("(+ 1.0 2.0)")); - out.println(eval("(* 5 2)")); - out.println(eval("(* 5)")); - out.println(eval("(let x 42 x)")); - out.println(eval("(let x 42 (let y 2 (cons x y)))")); - out.println(eval("((lambda x (lambda y (cons x y))) 2 3)")); - out.println(eval("((lambda x (lambda y (cons x y))) 2)")); - out.println(eval("((let x 3 (lambda y (cons x y))) 2)")); - out.println(eval("(cond (true 1))")); - out.println(eval("(cond (false 1) ((> 10 3) 3))")); - out.println(eval("(cond (false 1) ((> 10 3) ()))")); - - out.println(eval("(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))")); - out.println(eval("(fib 10)")); - - out.println(eval("(defun factorial (cnt acc) (if (= 0 cnt) acc (factorial (- cnt 1) (* acc cnt)))")); - out.println(eval("(factorial 10 1)")); - out.println(eval("(factorial 12)")); - out.println(eval("((factorial 19) 1)")); - - out.println(eval_kl(asList(intern("lambda"), intern("x"), intern("x")))); - out.println(eval_kl(asList(intern("defun"), intern("my-fun"), asList(intern("x")), intern("x")))); - out.println(str(eval_kl(asList(intern("my-fun"), 3L)))); - out.println(eval_kl(asList(intern("defun"), intern("my-fun2"), asList(intern("x"), intern("y")), asList(intern("cons"), intern("y"), asList(intern("cons"), intern("x"), new LinkedList()))))); - out.println(eval_kl(asList(intern("my-fun2"), 3L, 5L))); - out.println(eval_kl(asList(intern("defun"), intern("my-fun3"), asList(), "Hello"))); - out.println(str(eval_kl(asList(intern("my-fun3"))))); + out.println(Primitives.eval_kl(Primitives.intern("x"))); + out.println(Shen.eval("(or false)")); + out.println(Shen.eval("(or false false)")); + out.println(Shen.eval("(or false true)")); + out.println(Shen.eval("(or false false false)")); + out.println(Shen.eval("((or false) true)")); + out.println(Shen.eval("()")); + out.println(Shen.eval("(cons 2 3)")); + + out.println(Shen.eval("(absvector? (absvector 10))")); + out.println(Shen.eval("(absvector 10)")); + out.println(Shen.eval("(absvector? ())")); + out.println(Shen.eval("(+ 1 2)")); + out.println(Shen.eval("((+ 6.5) 2.0)")); + out.println(Shen.eval("(+ 1.0 2.0)")); + out.println(Shen.eval("(* 5 2)")); + out.println(Shen.eval("(* 5)")); + out.println(Shen.eval("(let x 42 x)")); + out.println(Shen.eval("(let x 42 (let y 2 (cons x y)))")); + out.println(Shen.eval("((lambda x (lambda y (cons x y))) 2 3)")); + out.println(Shen.eval("((lambda x (lambda y (cons x y))) 2)")); + out.println(Shen.eval("((let x 3 (lambda y (cons x y))) 2)")); + out.println(Shen.eval("(cond (true 1))")); + out.println(Shen.eval("(cond (false 1) ((> 10 3) 3))")); + out.println(Shen.eval("(cond (false 1) ((> 10 3) ()))")); + + out.println(Shen.eval("(defun fib (n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))")); + out.println(Shen.eval("(fib 10)")); + + out.println(Shen.eval("(defun factorial (cnt acc) (if (= 0 cnt) acc (factorial (- cnt 1) (* acc cnt)))")); + out.println(Shen.eval("(factorial 10 1)")); + out.println(Shen.eval("(factorial 12)")); + out.println(Shen.eval("((factorial 19) 1)")); + + out.println(Primitives.eval_kl(asList(Primitives.intern("lambda"), Primitives.intern("x"), Primitives.intern("x")))); + out.println(Primitives.eval_kl(asList(Primitives.intern("defun"), Primitives.intern("my-fun"), asList(Primitives.intern("x")), Primitives.intern("x")))); + out.println(Primitives.str(Primitives.eval_kl(asList(Primitives.intern("my-fun"), 3L)))); + out.println(Primitives.eval_kl(asList(Primitives.intern("defun"), Primitives.intern("my-fun2"), asList(Primitives.intern("x"), Primitives.intern("y")), asList(Primitives.intern("cons"), Primitives.intern("y"), asList(Primitives.intern("cons"), Primitives.intern("x"), new LinkedList()))))); + out.println(Primitives.eval_kl(asList(Primitives.intern("my-fun2"), 3L, 5L))); + out.println(Primitives.eval_kl(asList(Primitives.intern("defun"), Primitives.intern("my-fun3"), asList(), "Hello"))); + out.println(Primitives.str(Primitives.eval_kl(asList(Primitives.intern("my-fun3"))))); } @Test public void compiler() throws Throwable { - out.println(eval("(trap-error my-symbol my-handler)")); - out.println(eval("(trap-error (simple-error \"!\") (lambda x x))")); - out.println(eval("(if true \"true\" \"false\")")); - out.println(eval("(if false \"true\" \"false\")")); - out.println(eval("(cond (false 1) (true 2))")); - out.println(eval("(cond (false 1) ((or true false) 3))")); - out.println(eval("(or false)")); - out.println(eval("((or false) false)")); - out.println(eval("(or false false)")); - out.println(eval("(or false true false)")); - out.println(eval("(and true true)")); - out.println(eval("(and true true (or false false))")); - out.println(eval("(and true false)")); - out.println(eval("(and true)")); - out.println(eval("(lambda x x)")); - out.println(eval("((lambda x x) 2)")); - out.println(eval("(let x \"str\" x)")); - out.println(eval("(let x 10 x)")); - out.println(eval("(let x 10 (let y 5 x))")); - out.println(eval("((let x 42 (lambda y x)) 0)")); - out.println(eval("((lambda x ((lambda y x) 42)) 0)")); - out.println(eval("(get-time unix)")); - out.println(eval("(value *language*)")); - out.println(eval("(+ 1 1)")); - out.println(eval("(+ 1.2 1.1)")); - out.println(eval("(+ 1.2 1)")); - out.println(eval("(+ 1 1.3)")); - out.println(eval("(cons x y)")); - out.println(eval("(cons x)")); - out.println(eval("((cons x) z)")); - out.println(eval("(cons x y)")); - out.println(eval("(absvector? (absvector 10))")); - out.println(eval("(trap-error (/ 1 0) (lambda x x))")); - out.println(eval("(defun fun (x y) (+ x y))")); - out.println(eval("(defun fun2 () (fun 1 2))")); - out.println(eval("(fun2)")); - out.println(eval("(defun fun (x y) (- x y))")); - out.println(eval("(fun2)")); - out.println(eval("(fun 1 2)")); - out.println(eval("(set x y)")); - out.println(eval("(value x)")); - out.println(eval("(set x z)")); - out.println(eval("(value x)")); - out.println(eval("()")); - out.println(eval("(cond (true ()) (false 2))")); - out.println(eval("(if (<= 3 3) x y)")); - out.println(eval("(eval-kl (cons + (cons 1 (cons 2 ()))))")); + out.println(Shen.eval("(trap-error my-symbol my-handler)")); + out.println(Shen.eval("(trap-error (simple-error \"!\") (lambda x x))")); + out.println(Shen.eval("(if true \"true\" \"false\")")); + out.println(Shen.eval("(if false \"true\" \"false\")")); + out.println(Shen.eval("(cond (false 1) (true 2))")); + out.println(Shen.eval("(cond (false 1) ((or true false) 3))")); + out.println(Shen.eval("(or false)")); + out.println(Shen.eval("((or false) false)")); + out.println(Shen.eval("(or false false)")); + out.println(Shen.eval("(or false true false)")); + out.println(Shen.eval("(and true true)")); + out.println(Shen.eval("(and true true (or false false))")); + out.println(Shen.eval("(and true false)")); + out.println(Shen.eval("(and true)")); + out.println(Shen.eval("(lambda x x)")); + out.println(Shen.eval("((lambda x x) 2)")); + out.println(Shen.eval("(let x \"str\" x)")); + out.println(Shen.eval("(let x 10 x)")); + out.println(Shen.eval("(let x 10 (let y 5 x))")); + out.println(Shen.eval("((let x 42 (lambda y x)) 0)")); + out.println(Shen.eval("((lambda x ((lambda y x) 42)) 0)")); + out.println(Shen.eval("(get-time unix)")); + out.println(Shen.eval("(value *language*)")); + out.println(Shen.eval("(+ 1 1)")); + out.println(Shen.eval("(+ 1.2 1.1)")); + out.println(Shen.eval("(+ 1.2 1)")); + out.println(Shen.eval("(+ 1 1.3)")); + out.println(Shen.eval("(cons x y)")); + out.println(Shen.eval("(cons x)")); + out.println(Shen.eval("((cons x) z)")); + out.println(Shen.eval("(cons x y)")); + out.println(Shen.eval("(absvector? (absvector 10))")); + out.println(Shen.eval("(trap-error (/ 1 0) (lambda x x))")); + out.println(Shen.eval("(defun fun (x y) (+ x y))")); + out.println(Shen.eval("(defun fun2 () (fun 1 2))")); + out.println(Shen.eval("(fun2)")); + out.println(Shen.eval("(defun fun (x y) (- x y))")); + out.println(Shen.eval("(fun2)")); + out.println(Shen.eval("(fun 1 2)")); + out.println(Shen.eval("(set x y)")); + out.println(Shen.eval("(value x)")); + out.println(Shen.eval("(set x z)")); + out.println(Shen.eval("(value x)")); + out.println(Shen.eval("()")); + out.println(Shen.eval("(cond (true ()) (false 2))")); + out.println(Shen.eval("(if (<= 3 3) x y)")); + out.println(Shen.eval("(eval-kl (cons + (cons 1 (cons 2 ()))))")); } /* @@ -136,7 +132,7 @@ public void other() throws Throwable { String funcCall = "(funcLetAndRecurse 10)"; //tests that let and recurse works fine when combined together - eval(funcDef1); + Shen.eval(funcDef1); is(6L, funcCall); //tests that second call gives same answer as first @@ -144,26 +140,26 @@ public void other() throws Throwable { //this tests that redefinition works String funcDef2 = " (defun funcLetAndRecurse (V503) (let Z (- V503 1) (if (= Z 1) (* 2 V503) (funcLetAndRecurse Z))))"; - eval(funcDef2); + Shen.eval(funcDef2); is(4L, funcCall); } void is(Object expected, String actual) { Object 神 = 神(actual); if (expected instanceof Class) - if (expected == Double.class) assertThat(isInteger((Long) 神), equalTo(false)); + if (expected == Double.class) assertThat(Numbers.isInteger((Long) 神), equalTo(false)); else assertThat(神, instanceOf((Class) expected)); else if (神 instanceof Long) - assertThat(asNumber((Long) 神), equalTo(expected)); - else if (神 instanceof Shen.Cons && expected instanceof List) - assertThat(((Shen.Cons) 神).toList(), equalTo(expected)); + assertThat(Numbers.asNumber((Long) 神), equalTo(expected)); + else if (神 instanceof Cons && expected instanceof List) + assertThat(((Cons) 神).toList(), equalTo(expected)); else assertThat(神, equalTo(expected)); } Object 神(String shen) { try { - return eval(shen); + return Shen.eval(shen); } catch (Throwable t) { throw new RuntimeException(t); } diff --git a/test/shen/TestProgramsTest.java b/test/shen/TestProgramsTest.java index 2bb125d..cb13979 100644 --- a/test/shen/TestProgramsTest.java +++ b/test/shen/TestProgramsTest.java @@ -3,16 +3,13 @@ import org.junit.Ignore; import org.junit.Test; -import static shen.Shen.eval; -import static shen.Shen.install; - public class TestProgramsTest { @Test @Ignore public void test_programs() throws Throwable { - install(); - eval("(cd \"shen/Test Programs\")"); - eval("(load \"README.shen\")"); - eval("(load \"tests.shen\")"); + Shen.install(); + Shen.eval("(cd \"shen/Test Programs\")"); + Shen.eval("(load \"README.shen\")"); + Shen.eval("(load \"tests.shen\")"); } public static void main(String... args) throws Throwable { From 0e67649db6bec81a99ec700cf06391a38161c355 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 22 Feb 2014 11:53:17 +0000 Subject: [PATCH 48/57] reorganising code --- src/shen/Compiler.java | 582 +++++++++++++++++++++++++++++++++++++++ src/shen/Cons.java | 85 ++++++ src/shen/KLReader.java | 57 ++++ src/shen/Numbers.java | 218 ++++++++++++++- src/shen/Overrides.java | 44 +++ src/shen/Primitives.java | 217 +++++++++++++++ src/shen/RT.java | 419 ++++++++++++++++++++++++++++ src/shen/Symbol.java | 44 +++ 8 files changed, 1657 insertions(+), 9 deletions(-) diff --git a/src/shen/Compiler.java b/src/shen/Compiler.java index e69de29..aaa2ecb 100644 --- a/src/shen/Compiler.java +++ b/src/shen/Compiler.java @@ -0,0 +1,582 @@ +package shen; + +import jdk.internal.org.objectweb.asm.*; +import jdk.internal.org.objectweb.asm.commons.GeneratorAdapter; +import jdk.internal.org.objectweb.asm.tree.ClassNode; +import jdk.internal.org.objectweb.asm.util.ASMifier; +import jdk.internal.org.objectweb.asm.util.TraceClassVisitor; +import sun.invoke.anon.AnonymousClassLoader; +import sun.misc.Unsafe; + +import java.io.PrintWriter; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; +import java.util.stream.Stream; + +import static java.lang.System.err; +import static java.lang.invoke.MethodType.methodType; +import static java.util.Arrays.asList; +import static java.util.Arrays.stream; +import static java.util.Collections.nCopies; +import static java.util.Collections.singleton; +import static java.util.stream.Stream.concat; +import static java.util.stream.Stream.empty; +import static jdk.internal.org.objectweb.asm.ClassReader.SKIP_DEBUG; +import static jdk.internal.org.objectweb.asm.ClassWriter.COMPUTE_FRAMES; +import static jdk.internal.org.objectweb.asm.Type.*; +import static jdk.internal.org.objectweb.asm.Type.getType; + +import static sun.invoke.util.BytecodeName.toBytecodeName; +import static sun.invoke.util.Wrapper.asPrimitiveType; +import static sun.invoke.util.Wrapper.forBasicType; + +public class Compiler implements Opcodes { + static final AnonymousClassLoader loader = AnonymousClassLoader.make(unsafe(), RT.class); + static final Map macros = new HashMap<>(); + static final List> literals = asList(Long.class, String.class, Boolean.class, Handle.class); + static final Handle + applyBSM = handle(RT.class, "applyBSM"), invokeBSM = handle(RT.class, "invokeBSM"), + symbolBSM = handle(RT.class, "symbolBSM"), or = handle(Primitives.class, "or"), + and = handle(Primitives.class, "and"); + static final Map push = new HashMap<>(); + + static { + RT.register(Macros.class, Compiler::macro); + } + + static int id = 1; + + String className; + ClassWriter cw; + + byte[] bytes; + GeneratorAdapter mv; + Object kl; + static ThreadLocal typeHint = new ThreadLocal<>(); + + Symbol self; + jdk.internal.org.objectweb.asm.commons.Method method; + Map locals; + List args; + List argTypes; + Type topOfStack; + Label recur; + + static class TypedValue { + final Type type; + final Object value; + + TypedValue(Type type, Object value) { + this.type = type; + this.value = value; + } + } + + public Compiler(Object kl, Symbol... args) throws Throwable { + this(null, "shen/ShenEval" + id++, kl, args); + } + + public Compiler(ClassWriter cn, String className, Object kl, Symbol... args) throws Throwable { + this.cw = cn; + this.className = className; + this.kl = kl; + this.args = Shen.list(args); + this.locals = new HashMap<>(); + } + + static ClassWriter classWriter(String name, Class anInterface) { + ClassWriter cw = new ClassWriter(COMPUTE_FRAMES) { + }; // Needs to be in this package for some reason. + cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, name, null, getInternalName(Object.class), new String[]{getInternalName(anInterface)}); + return cw; + } + + static jdk.internal.org.objectweb.asm.commons.Method method(String name, String desc) { + return new jdk.internal.org.objectweb.asm.commons.Method(name, desc); + } + + + static String desc(Class returnType, Class... argumentTypes) { + return methodType(returnType, argumentTypes).toMethodDescriptorString(); + } + + static String desc(Type returnType, List argumentTypes) { + return getMethodDescriptor(returnType, argumentTypes.toArray(new Type[argumentTypes.size()])); + } + + static Handle handle(Class declaringClass, String name) { + return handle(getInternalName(declaringClass), name, RT.mh(declaringClass, name).type().toMethodDescriptorString()); + } + + static Handle handle(String className, String name, String desc) { + return new Handle(Opcodes.H_INVOKESTATIC, className, name, desc); + } + + static Type boxedType(Type type) { + if (!isPrimitive(type)) return type; + return getType(forBasicType(type.getDescriptor().charAt(0)).wrapperType()); + } + + static boolean isPrimitive(Type type) { + return type.getSort() < ARRAY; + } + + static void macro(Method m) { + try { + macros.put(Primitives.intern(RT.unscramble(m.getName())), RT.lookup.unreflect(m)); + } catch (IllegalAccessException e) { + throw Shen.uncheck(e); + } + } + + GeneratorAdapter generator(int access, jdk.internal.org.objectweb.asm.commons.Method method) { + return new GeneratorAdapter(access, method, cw.visitMethod(access, method.getName(), method.getDescriptor(), null, null)); + } + + TypedValue compile(Object kl) { + return compile(kl, true); + } + + TypedValue compile(Object kl, boolean tail) { + return compile(kl, getType(Object.class), tail); + } + + TypedValue compile(Object kl, Type returnType, boolean tail) { + return compile(kl, returnType, true, tail); + } + + TypedValue compile(Object kl, Type returnType, boolean handlePrimitives, boolean tail) { + try { + Class literalClass = Shen.find(literals.stream(), c -> c.isInstance(kl)); + if (literalClass != null) push(literalClass, kl); + else if (kl instanceof Symbol) symbol((Symbol) kl); + else if (kl instanceof Collection) { + @SuppressWarnings("unchecked") + List list = new ArrayList<>((Collection) kl); + lineNumber(list); + if (list.isEmpty()) emptyList(); + else { + Object first = list.get(0); + if (first instanceof Symbol && !inScope((Symbol) first)) { + Symbol s = (Symbol) first; + if (macros.containsKey(s)) macroExpand(s, Shen.rest(list), returnType, tail); + else indy(s, Shen.rest(list), returnType, tail); + + } else { + compile(first, tail); + apply(returnType, Shen.rest(list)); + } + } + } else + throw new IllegalArgumentException("Cannot compile: " + kl + " (" + kl.getClass() + ")"); + if (handlePrimitives) handlePrimitives(returnType); + return new TypedValue(topOfStack, kl); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable t) { + throw Shen.uncheck(t); + } + } + + void handlePrimitives(Type returnType) { + if (isPrimitive(returnType) && !isPrimitive(topOfStack)) unbox(returnType); + else if (!isPrimitive(returnType) && isPrimitive(topOfStack)) box(); + } + + void lineNumber(List list) { + if (KLReader.lines.containsKey(list)) + mv.visitLineNumber(KLReader.lines.get(list), mv.mark()); + } + + boolean inScope(Symbol x) { + return (locals.containsKey(x) || args.contains(x)); + } + + void macroExpand(Symbol s, List args, Type returnType, boolean tail) throws Throwable { + macros.get(s).invokeWithArguments(Shen.into(asList(new Macros(), tail, returnType), + Shen.vec(args.stream().map(x -> x instanceof Cons ? ((Cons) x).toList() : x)))); + } + + void indy(Symbol s, List args, Type returnType, boolean tail) throws ReflectiveOperationException { + Iterator selfCallTypes = asList(method.getArgumentTypes()).iterator(); + List typedValues = Shen.vec(args.stream().map(o -> compile(o, isSelfCall(s, args) + ? selfCallTypes.next() : getType(Object.class), false, false))); + List argumentTypes = Shen.vec(typedValues.stream().map(t -> t.type)); + if (isSelfCall(s, args)) { + if (tail) { + Shen.debug("recur: %s", s); + recur(argumentTypes); + } else { + Shen.debug("can only recur from tail position: %s", s); + mv.invokeDynamic(toBytecodeName(s.symbol), desc(method.getReturnType(), argumentTypes), invokeBSM); + returnType = method.getReturnType(); + } + } else { + if (Numbers.operators.contains(s) && returnType.equals(getType(Object.class)) && argumentTypes.size() == 2) + returnType = getType(s.fn.get(0).type().returnType()); + mv.invokeDynamic(toBytecodeName(s.symbol), desc(returnType, argumentTypes), invokeBSM); + } + topOfStack = returnType; + } + + void recur(List argumentTypes) { + for (int i = args.size() - 1; i >= 0; i--) { + if (!isPrimitive(method.getArgumentTypes()[i])) mv.valueOf(argumentTypes.get(i)); + mv.storeArg(i); + } + mv.goTo(recur); + } + + boolean isSelfCall(Symbol s, List args) { + return self.equals(s) && args.size() == this.args.size(); + } + + void apply(Type returnType, List args) throws ReflectiveOperationException { + if (!topOfStack.equals(getType(MethodHandle.class))) + mv.invokeStatic(getType(RT.class), method("function", desc(MethodHandle.class, Object.class))); + List argumentTypes = Shen.cons(getType(MethodHandle.class), Shen.vec(args.stream().map(o -> compile(o, false).type))); + mv.invokeDynamic("__apply__", desc(returnType, argumentTypes), applyBSM); + topOfStack = returnType; + } + + class Macros { + public void trap_error(boolean tail, Type returnType, Object x, Object f) throws Throwable { + Label after = mv.newLabel(); + + Label start = mv.mark(); + compile(x, returnType, tail); + mv.goTo(after); + + mv.catchException(start, mv.mark(), getType(Throwable.class)); + compile(f, false); + maybeCast(MethodHandle.class); + mv.swap(); + bindTo(); + + mv.invokeVirtual(getType(MethodHandle.class), method("invokeExact", desc(Object.class))); + if (isPrimitive(returnType)) unbox(returnType); + else topOfStack(Object.class); + mv.visitLabel(after); + } + + public void KL_if(boolean tail, Type returnType, Object test, Object then, Object _else) throws Exception { + if (test == Boolean.TRUE || test == Primitives.intern("true")) { + compile(then, returnType, tail); + return; + } + if (test == Boolean.FALSE || test == Primitives.intern("false")) { + compile(_else, returnType, tail); + return; + } + + Label elseStart = mv.newLabel(); + Label end = mv.newLabel(); + + compile(test, BOOLEAN_TYPE, false); + if (!BOOLEAN_TYPE.equals(topOfStack)) { + popStack(); + mv.throwException(getType(IllegalArgumentException.class), "boolean expected"); + return; + } + mv.visitJumpInsn(IFEQ, elseStart); + + compile(then, returnType, tail); + Type typeOfThenBranch = topOfStack; + mv.goTo(end); + + mv.visitLabel(elseStart); + compile(_else, returnType, tail); + + mv.visitLabel(end); + if (!typeOfThenBranch.equals(topOfStack) && !isPrimitive(returnType)) + topOfStack(Object.class); + } + + public void cond(boolean tail, Type returnType, List... clauses) throws Exception { + if (clauses.length == 0) + mv.throwException(getType(IllegalArgumentException.class), "condition failure"); + else { + List clause = clauses[0]; + KL_if(tail, returnType, clause.get(0), clause.get(1), + Shen.cons(Primitives.intern("cond"), Shen.rest(Shen.list((Object[]) clauses)))); + } + } + + public void or(boolean tail, Type returnType, Object x, Object... clauses) throws Exception { + if (clauses.length == 0) + bindTo(or, x); + else { + KL_if(tail, BOOLEAN_TYPE, x, true, (clauses.length > 1 ? + Shen.cons(Primitives.intern("or"), Shen.list(clauses)) : clauses[0])); + if (!isPrimitive(returnType)) mv.box(returnType); + } + } + + public void and(boolean tail, Type returnType, Object x, Object... clauses) throws Exception { + if (clauses.length == 0) + bindTo(and, x); + else { + KL_if(tail, BOOLEAN_TYPE, x, (clauses.length > 1 ? + Shen.cons(Primitives.intern("and"), Shen.list(clauses)) : clauses[0]), false); + if (!isPrimitive(returnType)) mv.box(returnType); + } + } + + public void lambda(boolean tail, Type returnType, Symbol x, Object y) throws Throwable { + fn("__lambda__", y, x); + } + + public void freeze(boolean tail, Type returnType, Object x) throws Throwable { + fn("__freeze__", x); + } + + public void defun(boolean tail, Type returnType, Symbol name, final List args, Object body) throws Throwable { + push(name); + Shen.debug("compiling: %s%s in %s", name, args, getObjectType(className).getClassName()); + name.source = Cons.toCons(asList(Primitives.intern("defun"), name, args, body)); + if (Shen.booleanProperty("shen-*installing-kl*") && RT.typesForInstallation.containsKey(name)) + typeHint.set(RT.typesForInstallation.get(name)); + fn(name.symbol, body, args.toArray(new Symbol[args.size()])); + mv.invokeStatic(getType(RT.class), method("defun", desc(Symbol.class, Symbol.class, MethodHandle.class))); + topOfStack(Symbol.class); + } + + public void let(boolean tail, Type returnType, Symbol x, Object y, Object z) throws Throwable { + Label start = mv.mark(); + compile(y, false); + Integer hidden = locals.get(x); + int let = hidden != null && tail ? hidden : mv.newLocal(topOfStack); + mv.storeLocal(let); + locals.put(x, let); + compile(z, returnType, tail); + if (hidden != null) locals.put(x, hidden); + else locals.remove(x); + if (!tail) { + mv.push((String) null); + mv.storeLocal(let); + } + mv.visitLocalVariable(x.symbol, mv.getLocalType(let).getDescriptor(), null, start, mv.mark(), let); + } + + public void KL_do(boolean tail, Type returnType, Object... xs) throws Throwable { + for (int i = 0; i < xs.length; i++) { + boolean last = i == xs.length - 1; + compile(xs[i], last ? returnType : getType(Object.class), last && tail); + if (!last) popStack(); + } + } + + public void thaw(boolean tail, Type returnType, Object f) throws Throwable { + compile(f, false); + maybeCast(MethodHandle.class); + mv.invokeVirtual(getType(MethodHandle.class), method("invokeExact", desc(Object.class))); + topOfStack(Object.class); + } + } + + void fn(String name, Object kl, Symbol... args) throws Throwable { + String bytecodeName = toBytecodeName(name) + "_" + id++; + List scope = Shen.vec(closesOver(new HashSet<>(asList(args)), kl).distinct()); + scope.retainAll(Shen.into(locals.keySet(), this.args)); + + if (name.startsWith("__")) typeHint.remove(); + List types = Shen.into(Shen.vec(scope.stream().map(this::typeOf)), typeHint.get() != null + ? Shen.vec(typeHint.get().parameterList().stream().map(Type::getType)) : nCopies(args.length, getType(Object.class))); + Type returnType = typeHint.get() != null ? getType(typeHint.get().returnType()) : getType(Object.class); + typeHint.remove(); + push(handle(className, bytecodeName, desc(returnType, types))); + insertArgs(0, scope); + + scope.addAll(asList(args)); + Compiler fn = new Compiler(cw, className, kl, scope.toArray(new Symbol[scope.size()])); + fn.method(ACC_PUBLIC | ACC_STATIC | ACC_FINAL, Primitives.intern(name), bytecodeName, returnType, types); + } + + @SuppressWarnings({"unchecked"}) + Stream closesOver(Set scope, Object kl) { + if (kl instanceof Symbol && !scope.contains(kl)) + return singleton((Symbol) kl).stream(); + if (kl instanceof Collection) { + List list = new ArrayList<>((Collection) kl); + if (!list.isEmpty()) + switch (list.get(0).toString()) { + case "let": + return concat(closesOver(scope, list.get(2)), closesOver(Shen.conj(scope, list.get(2)), list.get(3))); + case "lambda": + return closesOver(Shen.conj(scope, list.get(2)), list.get(2)); + case "defun": + return closesOver(Shen.into(scope, (Collection) list.get(2)), list.get(3)); + } + return list.stream().flatMap(o -> closesOver(scope, o)); + } + return empty(); + } + + void emptyList() { + mv.getStatic(getType(Collections.class), "EMPTY_LIST", getType(List.class)); + topOfStack(List.class); + } + + void symbol(Symbol s) throws Throwable { + if (asList("true", "false").contains(s.symbol)) { + push(Boolean.class, Boolean.valueOf(s.symbol)); + return; + } else if (locals.containsKey(s)) mv.loadLocal(locals.get(s)); + else if (args.contains(s)) mv.loadArg(args.indexOf(s)); + else push(s); + topOfStack = typeOf(s); + } + + Type typeOf(Symbol s) { + if (locals.containsKey(s)) return mv.getLocalType(locals.get(s)); + else if (args.contains(s)) return argTypes.get(args.indexOf(s)); + return getType(Symbol.class); + } + + void loadArgArray(List args) { + mv.push(args.size()); + mv.newArray(getType(Object.class)); + + for (int i = 0; i < args.size(); i++) { + mv.dup(); + mv.push(i); + compile(args.get(i), false); + box(); + mv.arrayStore(getType(Object.class)); + } + topOfStack(Object[].class); + } + + void push(Symbol kl) { + mv.invokeDynamic(toBytecodeName(kl.symbol), desc(Symbol.class), symbolBSM); + topOfStack(Symbol.class); + } + + void push(Handle handle) { + mv.push(handle); + topOfStack(MethodHandle.class); + } + + void push(Class aClass, Object kl) throws Throwable { + aClass = asPrimitiveType(aClass); + push.computeIfAbsent(aClass, c -> RT.mh(mv.getClass(), "push", c)).invoke(mv, kl); + topOfStack(aClass); + } + + void box() { + Type maybePrimitive = topOfStack; + mv.valueOf(maybePrimitive); + topOfStack = boxedType(maybePrimitive); + } + + void unbox(Type type) { + mv.unbox(type); + topOfStack = type; + } + + void popStack() { + if (topOfStack.getSize() == 1) mv.pop(); + else mv.pop2(); + } + + void maybeCast(Class type) { + maybeCast(getType(type)); + } + + void maybeCast(Type type) { + if (!type.equals(topOfStack)) mv.checkCast(type); + topOfStack = type; + } + + void topOfStack(Class aClass) { + topOfStack = getType(aClass); + } + + public Class load(String source, Class anInterface) throws Exception { + try { + cw = classWriter(className, anInterface); + cw.visitSource(source, null); + constructor(); + Method sam = RT.findSAM(anInterface); + List types = Shen.vec(stream(sam.getParameterTypes()).map(Type::getType)); + method(ACC_PUBLIC, Primitives.intern(sam.getName()), toBytecodeName(sam.getName()), getType(sam.getReturnType()), types); + bytes = cw.toByteArray(); + if (Shen.booleanProperty("*debug-asm*")) printASM(bytes, sam); + //noinspection unchecked + return (Class) loader.loadClass(bytes); + } catch (VerifyError e) { + printASM(bytes, null); + throw e; + } + } + + void method(int modifiers, Symbol name, String bytecodeName, Type returnType, List argumentTypes) { + this.self = name; + this.argTypes = argumentTypes; + this.method = method(bytecodeName, desc(returnType, argumentTypes)); + mv = generator(modifiers, method); + recur = mv.mark(); + compile(kl, returnType, true); + maybeCast(returnType); + mv.returnValue(); + mv.endMethod(); + } + + void constructor() { + GeneratorAdapter ctor = generator(ACC_PUBLIC, method("", desc(void.class))); + ctor.loadThis(); + ctor.invokeConstructor(getType(Object.class), method("", desc(void.class))); + ctor.returnValue(); + ctor.endMethod(); + } + + void bindTo(Handle handle, Object arg) { + push(handle); + compile(arg, false); + box(); + bindTo(); + } + + void bindTo() { + mv.invokeStatic(getType(RT.class), method("bindTo", desc(MethodHandle.class, MethodHandle.class, Object.class))); + topOfStack(MethodHandle.class); + } + + void insertArgs(int pos, List args) { + if (args.isEmpty()) return; + mv.push(pos); + loadArgArray(args); + mv.invokeStatic(getType(MethodHandles.class), method("insertArguments", + desc(MethodHandle.class, MethodHandle.class, int.class, Object[].class))); + topOfStack(MethodHandle.class); + } + + static void printASM(byte[] bytes, Method method) { + ASMifier asm = new ASMifier(); + PrintWriter pw = new PrintWriter(err); + TraceClassVisitor printer = new TraceClassVisitor(null, asm, pw); + if (method == null) + new ClassReader(bytes).accept(printer, SKIP_DEBUG); + else { + ClassNode cn = new ClassNode(); + new ClassReader(bytes).accept(cn, SKIP_DEBUG); + Shen.find(cn.methods.stream(), mn -> mn.name.equals(method.getName())).accept(printer); + asm.print(pw); + pw.flush(); + } + } + + static Unsafe unsafe() { + try { + Field unsafe = Unsafe.class.getDeclaredField("theUnsafe"); + unsafe.setAccessible(true); + return (Unsafe) unsafe.get(null); + } catch (Exception e) { + throw Shen.uncheck(e); + } + } +} \ No newline at end of file diff --git a/src/shen/Cons.java b/src/shen/Cons.java index e69de29..c1db18d 100644 --- a/src/shen/Cons.java +++ b/src/shen/Cons.java @@ -0,0 +1,85 @@ +package shen; + +import java.util.*; + +import static java.util.Collections.EMPTY_LIST; +import static java.util.Collections.reverse; + +public class Cons extends AbstractCollection { + public final Object car, cdr; + public final int size; + + public Cons(Object car, Object cdr) { + this.car = car; + this.cdr = cdr; + this.size = cdr instanceof Cons ? 1 + (((Cons) cdr).size) : EMPTY_LIST.equals(cdr) ? 1 : 2; + } + + public boolean equals(Object o) { + if (this == o) return true; + if (o instanceof List && isList()) //noinspection unchecked + return Shen.vec(toList().stream().map(Numbers::maybeNumber)).equals(o); + if (o == null || getClass() != o.getClass()) return false; + //noinspection ConstantConditions + Cons cons = (Cons) o; + return Primitives.EQ(car, cons.car) && cdr.equals(cons.cdr); + } + + boolean isList() { + return cdr instanceof Cons || EMPTY_LIST.equals(cdr); + } + + public int hashCode() { + return 31 * car.hashCode() + cdr.hashCode(); + } + + @SuppressWarnings("NullableProblems") + public Iterator iterator() { + if (!isList()) throw new IllegalStateException("cons pair is not a list: " + this); + return new ConsIterator(); + } + + public int size() { + return size; + } + + public String toString() { + if (isList()) return Shen.vec(toList().stream().map(Numbers::maybeNumber)).toString(); + return "[" + Numbers.maybeNumber(car) + " | " + Numbers.maybeNumber(cdr) + "]"; + } + + public List toList() { + return new ArrayList(this); + } + + public static Collection toCons(List list) { + if (list.isEmpty()) return list; + Cons cons = null; + list = new ArrayList<>(list); + reverse(list); + for (Object o : list) { + if (o instanceof List) o = toCons((List) o); + if (cons == null) cons = new Cons(o, EMPTY_LIST); + else cons = new Cons(o, cons); + } + return cons; + } + + class ConsIterator implements Iterator { + Cons cons = Cons.this; + + public boolean hasNext() { + return cons != null; + } + + public Object next() { + if (cons == null) throw new NoSuchElementException(); + try { + if (!cons.isList()) return cons; + return cons.car; + } finally { + cons = !cons.isList() || EMPTY_LIST.equals(cons.cdr) ? null : (Cons) cons.cdr; + } + } + } +} \ No newline at end of file diff --git a/src/shen/KLReader.java b/src/shen/KLReader.java index e69de29..7679438 100644 --- a/src/shen/KLReader.java +++ b/src/shen/KLReader.java @@ -0,0 +1,57 @@ +package shen; + +import java.io.IOException; +import java.io.Reader; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +public class KLReader { + static Map lines = new IdentityHashMap<>(); + static int currentLine; + + static List read(Reader reader) throws Exception { + lines.clear(); + currentLine = 1; + return tokenizeAll(new Scanner(reader).useDelimiter("(\\s|\\)|\")")); + } + + static Object tokenize(Scanner sc) throws Exception { + whitespace(sc); + if (find(sc, "\\(")) return tokenizeAll(sc); + if (find(sc, "\"")) return nextString(sc); + if (find(sc, "\\)")) return null; + if (sc.hasNextBoolean()) return sc.nextBoolean(); + if (sc.hasNextLong()) return Numbers.integer(sc.nextLong()); + if (sc.hasNextDouble()) return Numbers.real(sc.nextDouble()); + if (sc.hasNext()) return Primitives.intern(sc.next()); + return null; + } + + static void whitespace(Scanner sc) { + sc.skip("[^\\S\\n]*"); + while (find(sc, "\\n")) { + currentLine++; + sc.skip("[^\\S\\n]*"); + } + } + + static boolean find(Scanner sc, String pattern) { + return sc.findWithinHorizon(pattern, 1) != null; + } + + static Object nextString(Scanner sc) throws IOException { + String s = sc.findWithinHorizon("(?s).*?\"", 0); + currentLine += s.replaceAll("[^\n]", "").length(); + return s.substring(0, s.length() - 1); + } + + static List tokenizeAll(Scanner sc) throws Exception { + List list = Shen.list(); + lines.put(list, currentLine); + Object x; + while ((x = tokenize(sc)) != null) list.add(x); + return list; + } +} \ No newline at end of file diff --git a/src/shen/Numbers.java b/src/shen/Numbers.java index b481600..9b2642c 100644 --- a/src/shen/Numbers.java +++ b/src/shen/Numbers.java @@ -1,11 +1,211 @@ package shen; -/** - * Created with IntelliJ IDEA. - * User: linux - * Date: 18/02/14 - * Time: 18:49 - * To change this template use File | Settings | File Templates. - */ -public class Numbers { -} +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Label; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; +import jdk.internal.org.objectweb.asm.commons.GeneratorAdapter; + +import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Consumer; + +import static java.lang.Double.doubleToLongBits; +import static java.lang.Double.longBitsToDouble; +import static java.lang.Math.toIntExact; +import static jdk.internal.org.objectweb.asm.Type.*; +import static jdk.internal.org.objectweb.asm.commons.GeneratorAdapter.*; +import static sun.invoke.util.BytecodeName.toBytecodeName; +import static sun.invoke.util.BytecodeName.toSourceName; + +public class Numbers implements Opcodes { + static final long tag = 1, real = 0, integer = 1; + static final Set operators = new HashSet<>(); + + // longs are either 63 bit signed integers or doubleToLongBits with bit 0 used as tag, 0 = double, 1 = long. + // Java: 5ms, Shen.java: 10ms, Boxed Java: 15ms. Which ever branch that starts will be faster for some reason. + static { + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + cw.visit(V1_7, ACC_PUBLIC | ACC_FINAL, "shen/Shen$Operators", null, getInternalName(Object.class), null); + + binaryOp(cw, "+", ADD); + binaryOp(cw, "-", SUB); + binaryOp(cw, "*", MUL); + binaryOp(cw, "/", realOp(DIV), integerDivision()); + binaryOp(cw, "%", REM); + binaryComp(cw, "<", LT); + binaryComp(cw, "<=", LE); + binaryComp(cw, ">", GT); + binaryComp(cw, ">=", GE); + + RT.register(Compiler.loader.loadClass(cw.toByteArray()), Numbers::op); + } + + static Consumer integerOp(int op) { + return mv -> toInteger(mv, op); + } + + static Consumer realOp(int op) { + return mv -> toReal(mv, op); + } + + static Consumer integerDivision() { + return mv -> { + Label notZero = new Label(); + mv.dup2(); + mv.visitInsn(L2I); + mv.ifZCmp(IFNE, notZero); + mv.newInstance(getType(ArithmeticException.class)); + mv.dup(); + mv.push("Division by zero"); + mv.invokeConstructor(getType(ArithmeticException.class), + Compiler.method("", Compiler.desc(void.class, String.class))); + mv.throwException(); + mv.visitLabel(notZero); + mv.visitInsn(L2D); + mv.swap(DOUBLE_TYPE, LONG_TYPE); + mv.visitInsn(L2D); + mv.swap(DOUBLE_TYPE, DOUBLE_TYPE); + toReal(mv, DIV); + }; + } + + static void toInteger(GeneratorAdapter mv, int op) { + mv.math(op, LONG_TYPE); + mv.push((int) tag); + mv.visitInsn(LSHL); + mv.push(integer); + mv.visitInsn(LOR); + } + + static void toReal(GeneratorAdapter mv, int op) { + mv.math(op, DOUBLE_TYPE); + mv.invokeStatic(getType(Double.class), + Compiler.method("doubleToRawLongBits", Compiler.desc(long.class, double.class))); + mv.push(~integer); + mv.visitInsn(LAND); + } + + static void binaryComp(ClassWriter cw, String op, int test) { + binaryOp(cw, op, boolean.class, comparison(DOUBLE_TYPE, test), comparison(LONG_TYPE, test)); + } + + static Consumer comparison(Type type, int test) { + return mv -> { + Label _else = new Label(); + mv.ifCmp(type, test, _else); + mv.push(false); + mv.returnValue(); + mv.visitLabel(_else); + mv.push(true); + mv.returnValue(); + }; + } + + static void binaryOp(ClassWriter cw, String op, int instruction) { + binaryOp(cw, op, long.class, realOp(instruction), integerOp(instruction)); + } + + static void binaryOp(ClassWriter cw, String op, Consumer realOp, Consumer integerOp) { + binaryOp(cw, op, long.class, realOp, integerOp); + } + + static void binaryOp(ClassWriter cw, String op, Class returnType, Consumer realOp, + Consumer integerOp) { + GeneratorAdapter mv = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, + Compiler.method(toBytecodeName(op), Compiler.desc(returnType, long.class, long.class)), null, null, cw); + + isInteger(mv, 0); + Label argOneIsLong = new Label(); + mv.ifZCmp(IFNE, argOneIsLong); + asDouble(mv, 0); + isInteger(mv, 1); + Label argTwoIsLong = new Label(); + mv.ifZCmp(IFNE, argTwoIsLong); + asDouble(mv, 1); + Label doubleOperation = new Label(); + mv.goTo(doubleOperation); + mv.visitLabel(argTwoIsLong); + asLong(mv, 1); + mv.visitInsn(L2D); + mv.goTo(doubleOperation); + mv.visitLabel(argOneIsLong); + isInteger(mv, 1); + Label longOperation = new Label(); + mv.ifZCmp(IFNE, longOperation); + asLong(mv, 0); + mv.visitInsn(L2D); + asDouble(mv, 1); + mv.visitLabel(doubleOperation); + realOp.accept(mv); + mv.returnValue(); + mv.visitLabel(longOperation); + asLong(mv, 0); + asLong(mv, 1); + integerOp.accept(mv); + mv.returnValue(); + mv.endMethod(); + } + + static void asDouble(GeneratorAdapter mv, int arg) { + mv.loadArg(arg); + mv.invokeStatic(getType(Double.class), Compiler.method("longBitsToDouble", + Compiler.desc(double.class, long.class))); + } + + static void asLong(GeneratorAdapter mv, int arg) { + mv.loadArg(arg); + mv.push((int) tag); + mv.visitInsn(LSHR); + } + + static void isInteger(GeneratorAdapter mv, int arg) { + mv.loadArg(arg); + mv.visitInsn(L2I); + mv.push((int) tag); + mv.visitInsn(IAND); + } + + static void op(Method op) { + try { + Symbol symbol = Primitives.intern(toSourceName(op.getName())); + symbol.fn.add(RT.lookup.unreflect(op)); + operators.add(symbol); + } catch (IllegalAccessException e) { + throw Shen.uncheck(e); + } + } + + static Object maybeNumber(Object o) { + return o instanceof Long ? asNumber((Long) o) : o; + } + + public static long number(Number n) { + return n instanceof Double ? real(n.doubleValue()) : integer(n.longValue()); + } + + static long real(double d) { + return ~tag & doubleToLongBits(d); + } + + static long integer(long l) { + return l << tag | tag; + } + + static double asDouble(long l) { + return isInteger(l) ? l >> tag : longBitsToDouble(l); + } + + public static int asInt(long l) { + return toIntExact(asNumber(l).longValue()); + } + + public static Number asNumber(long fp) { //noinspection RedundantCast + return isInteger(fp) ? (Number) (fp >> tag) : (Number) longBitsToDouble(fp); + } + + static boolean isInteger(long l) { + return (tag & l) == integer; + } +} \ No newline at end of file diff --git a/src/shen/Overrides.java b/src/shen/Overrides.java index e69de29..4142c87 100644 --- a/src/shen/Overrides.java +++ b/src/shen/Overrides.java @@ -0,0 +1,44 @@ +package shen; + +import java.util.Collection; + +import static java.lang.Character.isUpperCase; +import static java.lang.Math.floorMod; +import static java.util.Arrays.fill; + +public class Overrides { + static final Symbol _true = Primitives.intern("true"), + _false = Primitives.intern("false"), + shen_tuple = Primitives.intern("shen.tuple"); + + public static boolean variableP(Object x) { + return x instanceof Symbol && isUpperCase(((Symbol) x).symbol.charAt(0)); + } + + public static boolean booleanP(Object x) { + return x instanceof Boolean || _true == x || _false == x; + } + + public static boolean symbolP(Object x) { + return x instanceof Symbol && !booleanP(x); + } + + public static long length(Collection x) { + return Numbers.integer(x.size()); + } + + public static Object[] ATp(Object x, Object y) { + return new Object[]{shen_tuple, x, y}; + } + + public static long hash(Object s, long limit) { + long hash = s.hashCode(); + if (hash == 0) return 1; + return Numbers.integer(floorMod(hash, limit >> Numbers.tag)); + } + + public static Object[] shen_fillvector(Object[] vector, long counter, long n, Object x) { + fill(vector, (int) (counter >> Numbers.tag), (int) (n >> Numbers.tag) + 1, x); + return vector; + } +} \ No newline at end of file diff --git a/src/shen/Primitives.java b/src/shen/Primitives.java index e69de29..1691899 100644 --- a/src/shen/Primitives.java +++ b/src/shen/Primitives.java @@ -0,0 +1,217 @@ +package shen; + +import java.io.*; +import java.lang.invoke.MethodHandle; +import java.util.Objects; +import java.util.concurrent.Callable; + +import static java.lang.System.currentTimeMillis; +import static java.util.Arrays.deepToString; +import static java.util.Arrays.fill; +import static java.util.Collections.EMPTY_LIST; + +public class Primitives { + public static boolean EQ(Object left, Object right) { + if (Objects.equals(left, right)) return true; + if (absvectorP(left) && absvectorP(right)) { + Object[] leftA = (Object[]) left; + Object[] rightA = (Object[]) right; + if (leftA.length != rightA.length) return false; + for (int i = 0; i < leftA.length; i++) + if (!EQ(leftA[i], rightA[i])) + return false; + return true; + } + if (numberP(left) && numberP(right)) { + long a = (Long) left; + long b = (Long) right; + return (Numbers.tag & a) == Numbers.integer && (Numbers.tag & b) == Numbers.integer ? a == b : Numbers.asDouble(a) == Numbers.asDouble(b); + } + return false; + } + + public static Class KL_import(Symbol s) throws ClassNotFoundException { + Class aClass = Class.forName(s.symbol); + return set(intern(aClass.getSimpleName()), aClass); + } + + static Class KL_import(Class type) { + try { + return KL_import(intern(type.getName())); + } catch (ClassNotFoundException e) { + throw Shen.uncheck(e); + } + } + + public static Cons cons(Object x, Object y) { + return new Cons(x, y); + } + + public static boolean consP(Object x) { + return x instanceof Cons; + } + + public static Object simple_error(String s) { + throw new RuntimeException(s, null, false, false) { + }; + } + + public static String error_to_string(Throwable e) { + return e.getMessage() == null ? e.toString() : e.getMessage(); + } + + public static Object hd(Cons cons) { + return cons.car; + } + + public static Object tl(Cons cons) { + return cons.cdr; + } + + public static String str(Object x) { + if (consP(x)) throw new IllegalArgumentException(x + " is not an atom; str cannot convert it to a string."); + if (x != null && x.getClass().isArray()) return deepToString((Object[]) x); + if (x instanceof Long) x = Numbers.asNumber((Long) x); + return String.valueOf(x); + } + + public static String pos(String x, long n) { + return str(x.charAt((int) (n >> Numbers.tag))); + } + + public static String tlstr(String x) { + return x.substring(1); + } + + public static Class type(Object x) { + return x.getClass(); + } + + public static Object[] absvector(long n) { + Object[] objects = new Object[(int) (n >> Numbers.tag)]; + fill(objects, intern("fail!")); + return objects; + } + + public static boolean absvectorP(Object x) { + return x.getClass() == Object[].class; + } + + public static Object LT_address(Object[] vector, long n) { + return vector[((int) (n >> Numbers.tag))]; + } + + public static Object[] address_GT(Object[] vector, long n, Object value) { + vector[((int) (n >> Numbers.tag))] = value; + return vector; + } + + public static boolean numberP(Object x) { + return x instanceof Long; + } + + public static boolean stringP(Object x) { + return x instanceof String; + } + + public static String n_GTstring(long n) { + if (n >> Numbers.tag < 0) throw new IllegalArgumentException(n + " is not a valid character"); + return Character.toString((char) (n >> Numbers.tag)); + } + + public static String byte_GTstring(long n) { + return n_GTstring(n >> Numbers.tag); + } + + public static long string_GTn(String s) { + return Numbers.integer((int) s.charAt(0)); + } + + public static long read_byte(InputStream s) throws IOException { + return Numbers.integer(s.read()); + } + + public static Long convertToLong(Object x) { + return (Long) Numbers.asNumber((Long) x); + } + + public static T write_byte(T x, OutputStream s) throws IOException { + s.write(convertToLong(x).byteValue()); + s.flush(); + return x; + } + + public static Closeable open(String string, Symbol direction) throws IOException { + File file = new File(string); + if (!file.isAbsolute()) { + //noinspection RedundantCast + file = new File((String) intern("*home-directory*").value(), string); + } + + switch (direction.symbol) { + case "in": + return new BufferedInputStream(new FileInputStream(file)); + case "out": + return new BufferedOutputStream(new FileOutputStream(file)); + } + throw new IllegalArgumentException("invalid direction"); + } + + public static Object close(Closeable stream) throws IOException { + stream.close(); + return EMPTY_LIST; + } + + static long startTime = System.currentTimeMillis(); + + public static long get_time(Symbol time) { + switch (time.symbol) { + case "run": + return Numbers.real((currentTimeMillis() - startTime) / 1000.0); + case "unix": + return Numbers.integer(currentTimeMillis() / 1000); + } + throw new IllegalArgumentException("get-time does not understand the parameter " + time); + } + + public static String cn(String s1, String s2) { + return s1 + s2; + } + + public static Symbol intern(String name) { + return Shen.symbols.computeIfAbsent(name, Symbol::new); + } + + public static T value(Symbol x) { + return x.value(); + } + + @SuppressWarnings("unchecked") + public static T set(Symbol x, T y) { + return (T) (x.var = y); + } + + static T set(String x, T y) { + return set(intern(x), y); + } + + public static MethodHandle function(Shen.Invokable x) throws Exception { + return x.invoker(); + } + + static MethodHandle function(String x) throws Exception { + return function(intern(x)); + } + + public static Object eval_kl(Object kl) throws Throwable { + return new Compiler(kl).load("__eval__", Callable.class).newInstance().call(); + } + + public static boolean or(boolean x, boolean y) { + return x || y; + } + + public static boolean and(boolean x, boolean y) { + return x && y; + } +} \ No newline at end of file diff --git a/src/shen/RT.java b/src/shen/RT.java index e69de29..3878e26 100644 --- a/src/shen/RT.java +++ b/src/shen/RT.java @@ -0,0 +1,419 @@ +package shen; + +import sun.invoke.util.Wrapper; + +import java.lang.invoke.*; +import java.lang.reflect.Constructor; +import java.lang.reflect.Executable; +import java.lang.reflect.Method; +import java.util.*; +import java.util.function.Consumer; + +import static java.lang.String.format; +import static java.lang.invoke.MethodHandleProxies.asInterfaceInstance; +import static java.lang.invoke.MethodHandles.*; +import static java.lang.invoke.MethodHandles.guardWithTest; +import static java.lang.invoke.MethodHandles.insertArguments; +import static java.lang.invoke.MethodType.genericMethodType; +import static java.lang.invoke.MethodType.methodType; +import static java.lang.invoke.SwitchPoint.invalidateAll; +import static java.lang.reflect.Modifier.isPublic; +import static java.util.Arrays.asList; +import static java.util.Arrays.stream; +import static java.util.Objects.deepEquals; +import static java.util.function.Predicate.isEqual; + +import static sun.invoke.util.BytecodeName.toBytecodeName; +import static sun.invoke.util.BytecodeName.toSourceName; +import static sun.invoke.util.Wrapper.*; +import static sun.invoke.util.Wrapper.forBasicType; + +public class RT { + static final MethodHandles.Lookup lookup = lookup(); + static final Set overrides = new HashSet<>(); + static final Set builtins = new HashSet<>(); + static final Map typesForInstallation = new HashMap<>(); + static final Map sites = new HashMap<>(); + static final Map guards = new HashMap<>(); + + static final MethodHandle + link = mh(RT.class, "link"), proxy = mh(RT.class, "proxy"), + checkClass = mh(RT.class, "checkClass"), toIntExact = mh(Math.class, "toIntExact"), + asNumber = mh(Numbers.class, "asNumber"), number = mh(Numbers.class, "number"), + asInt = mh(Numbers.class, "asInt"), toList = mh(Cons.class, "toList"), + partial = mh(RT.class, "partial"), arityCheck = mh(RT.class, "arityCheck"); + + public static Object link(MutableCallSite site, String name, Object... args) throws Throwable { + name = toSourceName(name); + MethodType type = site.type(); + Shen.debug("LINKING: %s%s %s", name, type, Shen.vec(stream(args).map(Numbers::maybeNumber))); + List> actualTypes = Shen.vec(stream(args).map(Object::getClass)); + Shen.debug("actual types: %s", actualTypes); + Symbol symbol = Primitives.intern(name); + Shen.debug("candidates: %s", symbol.fn); + + if (symbol.fn.isEmpty()) { + MethodHandle java = javaCall(site, name, type, args); + if (java != null) { + Shen.debug("calling java: %s", java); + site.setTarget(java.asType(type)); + return java.invokeWithArguments(args); + } + throw new NoSuchMethodException("undefined function " + name + type + + (symbol.fn.isEmpty() ? "" : " in " + Shen.vec(symbol.fn.stream().map(MethodHandle::type)))); + } + + int arity = symbol.fn.get(0).type().parameterCount(); + if (arity > args.length) { + MethodHandle partial = insertArguments(reLinker(name, arity), 0, args); + Shen.debug("partial: %s", partial); + return partial; + } + + MethodHandle match = Shen.find(symbol.fn.stream(), f -> Shen.every(actualTypes, f.type().parameterList(), RT::canCastStrict)); + if (match == null) throw new NoSuchMethodException("undefined function " + name + type); + Shen.debug("match based on argument types: %s", match); + + MethodHandle fallback = linker(site, toBytecodeName(name)).asType(type); + if (symbol.fn.size() > 1 && !match.type().parameterList().stream().allMatch(isEqual(long.class))) { + match = guards.computeIfAbsent(asList(type, symbol.fn), key -> guard(type, symbol.fn)); + Shen.debug("selected: %s", match); + } + + synchronized (symbol.symbol) { + if (symbol.fnGuard == null) symbol.fnGuard = new SwitchPoint(); + site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); + } + Object result = match.invokeWithArguments(args); + //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + try { + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + } catch (Exception e) { + } + return result; + } + + static void maybeRecompile(MethodType type, Symbol symbol, Class returnType) throws Throwable { + if (symbol.source == null || Shen.booleanProperty("shen-*installing-kl*")) return; + MethodType signature = typeSignature(symbol); + type = signature != null ? signature : type.changeReturnType(isWrapperType(returnType) ? wrapper(returnType).primitiveType() + : isPrimitiveType(returnType) ? returnType : Object.class); + if ((signature != null || (type.changeReturnType(Object.class).hasPrimitives() && !builtins.contains(symbol)))) + recompile(type, symbol); + } + + static void recompile(MethodType type, Symbol symbol) throws Throwable { + if (symbol.source == null || symbol.fn.stream().map(MethodHandle::type).anyMatch(isEqual(type))) return; + Shen.debug("recompiling as %s: %s", type, symbol.source); + List fn = new ArrayList<>(symbol.fn); + try { + Compiler.typeHint.set(type); + Primitives.eval_kl(symbol.source); + } finally { + Compiler.typeHint.remove(); + symbol.fn.addAll(fn); + if (!type.returnType().equals(Object.class)) + symbol.fn.removeIf(f -> f.type().equals(type.changeReturnType(Object.class))); + } + } + + static final Map types = new HashMap<>(); + + static { + types.put(Primitives.intern("symbol"), Symbol.class); + types.put(Primitives.intern("number"), long.class); + types.put(Primitives.intern("boolean"), boolean.class); + types.put(Primitives.intern("string"), String.class); + types.put(Primitives.intern("exception"), Exception.class); + types.put(Primitives.intern("list"), Iterable.class); + types.put(Primitives.intern("vector"), Object[].class); + } + + static Set tooStrictTypes = new HashSet<>(asList(Primitives.intern("concat"), Primitives.intern("fail-if"), + Primitives.intern("tail"), Primitives.intern("systemf"))); + + static MethodType typeSignature(Symbol symbol) throws Throwable { + if (tooStrictTypes.contains(symbol) || !hasKnownSignature(symbol)) return null; + return typeSignature(symbol, shenTypeSignature(symbol)); + } + + static MethodType typeSignature(Symbol symbol, List shenTypes) { + List> javaTypes = new ArrayList<>(); + for (Object argumentType : shenTypes) { + if (argumentType instanceof Cons) + argumentType = ((Cons) argumentType).car; + javaTypes.add(types.containsKey(argumentType) ? types.get(argumentType) : + argumentType instanceof Class ? (Class) argumentType : Object.class); + } + MethodType type = methodType(javaTypes.remove(javaTypes.size() - 1), javaTypes); + Shen.debug("%s has Shen type signature: %s mapped to Java %s", symbol, shenTypes, type); + return type; + } + + static boolean hasKnownSignature(Symbol symbol) { + return Primitives.intern("shen.*signedfuncs*").var instanceof Cons && ((Cons) Primitives.intern("shen.*signedfuncs*").var).contains(symbol); + } + + static List shenTypeSignature(Symbol symbol) throws Throwable { + return shenTypeSignature(((Cons) Shen.eval(format("(shen-typecheck %s (gensym A))", symbol))).toList()); + } + + static List shenTypeSignature(List signature) { + if (signature.size() != 3) + return Shen.vec(signature.stream().filter(isEqual(Primitives.intern("-->")).negate())); + List argumentTypes = new ArrayList<>(); + for (; signature.size() == 3; signature = ((Cons) signature.get(2)).toList()) { + argumentTypes.add(signature.get(0)); + if (!(signature.get(2) instanceof Cons) || signature.get(2) instanceof Cons + && !((Cons) signature.get(2)).contains(Primitives.intern("-->"))) { + argumentTypes.add(signature.get(2)); + break; + } + } + return argumentTypes; + } + + static MethodHandle guard(MethodType type, List candidates) { + candidates = bestMatchingMethods(type, candidates); + Shen.debug("applicable candidates: %s", candidates); + MethodHandle match = candidates.get(candidates.size() - 1).asType(type); + for (int i = candidates.size() - 1; i > 0; i--) { + MethodHandle fallback = candidates.get(i); + MethodHandle target = candidates.get(i - 1); + Class differentType = Shen.find(target.type().parameterList(), fallback.type().parameterList(), (x, y) -> !x.equals(y)); + int firstDifferent = target.type().parameterList().indexOf(differentType); + if (firstDifferent == -1) firstDifferent = 0; + Shen.debug("switching on %d argument type %s", firstDifferent, differentType); + Shen.debug("target: %s ; fallback: %s", target, fallback); + MethodHandle test = checkClass.bindTo(differentType); + test = dropArguments(test, 0, type.dropParameterTypes(firstDifferent, type.parameterCount()).parameterList()); + test = test.asType(test.type().changeParameterType(firstDifferent, type.parameterType(firstDifferent))); + match = guardWithTest(test, target.asType(type), match); + } + return match; + } + + static List bestMatchingMethods(MethodType type, List candidates) { + return Shen.vec(candidates.stream() + .filter(f -> Shen.every(type.parameterList(), f.type().parameterList(), RT::canCast)) + .sorted((x, y) -> y.type().changeReturnType(type.returnType()).equals(y.type().erase()) ? -1 : 1) + .sorted((x, y) -> Shen.every(y.type().parameterList(), x.type().parameterList(), RT::canCast) ? -1 : 1)); + } + + public static boolean checkClass(Class xClass, Object x) { + return xClass != null && canCastStrict(x.getClass(), xClass); + } + + static MethodHandle relinkOn(Class exception, MethodHandle fn, MethodHandle fallback) { + return catchException(fn.asType(fallback.type()), exception, dropArguments(fallback, 0, Exception.class)); + } + + static MethodHandle javaCall(MutableCallSite site, String name, MethodType type, Object... args) throws Exception { + if (name.endsWith(".")) { + Class aClass = Primitives.intern(name.substring(0, name.length() - 1)).value(); + if (aClass != null) + return findJavaMethod(type, aClass.getName(), aClass.getConstructors()); + } + if (name.startsWith(".")) + return relinkOn(ClassCastException.class, findJavaMethod(type, name.substring(1), args[0].getClass().getMethods()), + linker(site, toBytecodeName(name))); + String[] classAndMethod = name.split("/"); + if (classAndMethod.length == 2 && Primitives.intern(classAndMethod[0]).var instanceof Class) + return findJavaMethod(type, classAndMethod[1], ((Class) Primitives.intern(classAndMethod[0]).value()).getMethods()); + return null; + } + + public static Object proxy(Method sam, Object x) throws Throwable { + if (x instanceof MethodHandle) { + MethodHandle target = (MethodHandle) x; + int arity = sam.getParameterTypes().length; + int actual = target.type().parameterCount(); + if (arity < actual) target = insertArguments(target, arity, new Object[actual - arity]); + if (arity > actual) + target = dropArguments(target, actual, asList(sam.getParameterTypes()).subList(actual, arity)); + return asInterfaceInstance(sam.getDeclaringClass(), target); + } + return null; + } + + static MethodHandle filterJavaTypes(MethodHandle method) throws IllegalAccessException { + MethodHandle[] filters = new MethodHandle[method.type().parameterCount()]; + for (int i = 0; i < method.type().parameterCount() - (method.isVarargsCollector() ? 1 : 0); i++) + if (isSAM(method.type().parameterType(i))) + filters[i] = proxy.bindTo(findSAM(method.type().parameterType(i))) + .asType(methodType(method.type().parameterType(i), Object.class)); + else if (canCast(method.type().parameterType(i), int.class)) + filters[i] = asInt.asType(methodType(method.type().parameterType(i), Object.class)); + else if (canCast(method.type().wrap().parameterType(i), Number.class)) + filters[i] = asNumber.asType(methodType(method.type().parameterType(i), Object.class)); + if (canCast(method.type().wrap().returnType(), Number.class)) + method = filterReturnValue(method, number.asType(methodType(long.class, method.type().returnType()))); + return filterArguments(method, 0, filters); + } + + static MethodHandle findJavaMethod(MethodType type, String method, T[] methods) { + return Shen.some(stream(methods), m -> { + try { + if (m.getName().equals(method)) { + m.setAccessible(true); + MethodHandle mh = (m instanceof Method) ? lookup.unreflect((Method) m) : lookup.unreflectConstructor((Constructor) m); + mh.asType(methodType(type.returnType(), Shen.vec(type.parameterList().stream() + .map(c -> c.equals(Long.class) ? Integer.class : c.equals(long.class) ? int.class : c)))); + return filterJavaTypes(mh); + } + } catch (WrongMethodTypeException | IllegalAccessException ignored) { + } + return null; + }); + } + + public static MethodHandle function(Object target) throws Exception { + return target instanceof Shen.Invokable ? Primitives.function((Shen.Invokable) target) : (MethodHandle) target; + } + + static MethodHandle linker(MutableCallSite site, String name) { + return insertArguments(link, 0, site, name).asCollector(Object[].class, site.type().parameterCount()); + } + + static MethodHandle reLinker(String name, int arity) throws IllegalAccessException { + MutableCallSite reLinker = new MutableCallSite(genericMethodType(arity)); + return relinkOn(IllegalStateException.class, reLinker.dynamicInvoker(), linker(reLinker, toBytecodeName(name))); + } + + public static CallSite invokeBSM(Lookup lookup, String name, MethodType type) throws IllegalAccessException { + if (isOverloadedInternalFunction(name)) return invokeCallSite(name, type); + return sites.computeIfAbsent(name + type, key -> invokeCallSite(name, type)); + } + + static boolean isOverloadedInternalFunction(String name) { + return Primitives.intern(toSourceName(name)).fn.size() > 1; + } + + static CallSite invokeCallSite(String name, MethodType type) { + MutableCallSite site = new MutableCallSite(type); + site.setTarget(linker(site, name).asType(type)); + return site; + } + + public static CallSite symbolBSM(Lookup lookup, String name, MethodType type) { + return sites.computeIfAbsent(name, key -> new ConstantCallSite(constant(Symbol.class, Primitives.intern(toSourceName(name))))); + } + + public static CallSite applyBSM(Lookup lookup, String name, MethodType type) throws Exception { + return sites.computeIfAbsent(name + type, key -> applyCallSite(type)); + } + + public static Object partial(MethodHandle target, Object... args) throws Throwable { + if (args.length > target.type().parameterCount()) return uncurry(target, args); + return insertArguments(target, 0, args); + } + + public static boolean arityCheck(int arity, MethodHandle target) throws Throwable { + return target.type().parameterCount() == arity; + } + + static CallSite applyCallSite(MethodType type) { + MethodHandle apply = invoker(type.dropParameterTypes(0, 1)); + MethodHandle test = insertArguments(arityCheck, 0, type.parameterCount() - 1); + return new ConstantCallSite(guardWithTest(test, apply, partial.asType(type)).asType(type)); + } + + static MethodHandle mh(Class aClass, String name, Class... types) { + try { + return lookup.unreflect(Shen.find(stream(aClass.getMethods()), m -> m.getName().equals(name) + && (types.length == 0 || deepEquals(m.getParameterTypes(), types)))); + } catch (IllegalAccessException e) { + throw Shen.uncheck(e); + } + } + + static MethodHandle field(Class aClass, String name) { + try { + return lookup.unreflectGetter(aClass.getField(name)); + } catch (Exception e) { + throw Shen.uncheck(e); + } + } + + static boolean canCast(Class a, Class b) { + return a == Object.class || b == Object.class || canCastStrict(a, b); + } + + static boolean canCastStrict(Class a, Class b) { + return a == b || b.isAssignableFrom(a) || canWiden(a, b); + } + + static boolean canWiden(Class a, Class b) { + return wrapper(b).isNumeric() && wrapper(b).isConvertibleFrom(wrapper(a)); + } + + static Wrapper wrapper(Class type) { + if (isPrimitiveType(type)) return forPrimitiveType(type); + if (isWrapperType(type)) return forWrapperType(type); + return forBasicType(type); + } + + public static Symbol defun(Symbol name, MethodHandle fn) throws Throwable { + if (overrides.contains(name)) return name; + synchronized (name.symbol) { + SwitchPoint guard = name.fnGuard; + name.fn.clear(); + name.fn.add(fn); + if (guard != null) { + name.fnGuard = new SwitchPoint(); + invalidateAll(new SwitchPoint[]{guard}); + } + return name; + } + } + + static void register(Class aClass, Consumer hook) { + stream(aClass.getDeclaredMethods()).filter(m -> isPublic(m.getModifiers())).forEach(hook); + } + + static void override(Method m) { + overrides.add(defun(m)); + } + + static Symbol defun(Method m) { + try { + Symbol name = Primitives.intern(unscramble(m.getName())); + name.fn.add(lookup.unreflect(m)); + return name; + } catch (IllegalAccessException e) { + throw Shen.uncheck(e); + } + } + + static Object uncurry(Object chain, Object... args) throws Throwable { + for (Object arg : args) + chain = ((MethodHandle) chain).invokeExact(arg); + return chain; + } + + public static MethodHandle bindTo(MethodHandle fn, Object arg) { + return insertArguments(fn, 0, arg); + } + + static String unscramble(String s) { + return toSourceName(s).replaceAll("_", "-").replaceAll("^KL-", "").replaceAll("GT", ">").replaceAll("EQ", "=") + .replaceAll("LT", "<").replaceAll("EX$", "!").replaceAll("P$", "?").replaceAll("^AT", "@"); + } + + static MethodHandle findSAM(Object lambda) { + try { + return lookup.unreflect(findSAM(lambda.getClass())).bindTo(lambda); + } catch (IllegalAccessException e) { + throw Shen.uncheck(e); + } + } + + static Method findSAM(Class lambda) { + List methods = Shen.vec(stream(lambda.getDeclaredMethods()).filter(m -> !m.isSynthetic())); + return methods.size() == 1 ? methods.get(0) : null; + } + + static boolean isSAM(Class aClass) { + return findSAM(aClass) != null; + } +} \ No newline at end of file diff --git a/src/shen/Symbol.java b/src/shen/Symbol.java index e69de29..2c0250e 100644 --- a/src/shen/Symbol.java +++ b/src/shen/Symbol.java @@ -0,0 +1,44 @@ +package shen; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.SwitchPoint; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class Symbol implements Shen.Invokable { + public final String symbol; + public List fn = new ArrayList<>(); + public SwitchPoint fnGuard; + public Object var; + public Collection source; + + Symbol(String symbol) { + this.symbol = symbol.intern(); + } + + public String toString() { + return symbol; + } + + public T value() { + if (var == null) throw new IllegalArgumentException("variable " + this + " has no value"); + //noinspection unchecked + return (T) var; + } + + public boolean equals(Object o) { //noinspection StringEquality + return o instanceof Symbol && symbol == ((Symbol) o).symbol; + } + + public int hashCode() { + return symbol.hashCode(); + } + + public MethodHandle invoker() throws IllegalAccessException { + if (fn.isEmpty()) return RT.reLinker(symbol, 0); + MethodHandle mh = fn.get(0); + if (fn.size() > 1) return RT.reLinker(symbol, mh.type().parameterCount()); + return mh; + } +} \ No newline at end of file From 52c57f8f6d4ce37df4e16ef66ecb22713e85e34e Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 22 Feb 2014 13:37:40 +0000 Subject: [PATCH 49/57] fixing bug in compiler which yields errors with prolog tests --- src/shen/RT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shen/RT.java b/src/shen/RT.java index 3878e26..b615395 100644 --- a/src/shen/RT.java +++ b/src/shen/RT.java @@ -87,7 +87,7 @@ public static Object link(MutableCallSite site, String name, Object... args) thr Object result = match.invokeWithArguments(args); //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); try { - maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); } catch (Exception e) { } return result; From 6921f98b4fd521fa1d998762d494cdbc464af492 Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 22 Feb 2014 13:42:48 +0000 Subject: [PATCH 50/57] updating README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 60910ed..cf72a03 100644 --- a/README.md +++ b/README.md @@ -111,14 +111,14 @@ Subsequent invocations runs the repl. ### The Shen Test Suite -Passes all but one. It is run at the end of the build: +Passes all tests. It is run at the end of the build: ./build # or ./tests if the jar already exists. [... loads of output ...] - passed ... 127 - failed ...1 - pass rate ...99.21875% + passed ... 128 + failed ...0 + pass rate ...100.0% ok 0 From 03bf4c89f1e6e258557624079294f4c9848746d1 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 23 Feb 2014 09:45:50 +0000 Subject: [PATCH 51/57] documenting --- src/shen/RT.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/shen/RT.java b/src/shen/RT.java index b615395..e8cc7de 100644 --- a/src/shen/RT.java +++ b/src/shen/RT.java @@ -85,11 +85,65 @@ public static Object link(MutableCallSite site, String name, Object... args) thr site.setTarget(symbol.fnGuard.guardWithTest(match.asType(type), fallback)); } Object result = match.invokeWithArguments(args); + + /* + + TODO : + + Originally the code was : + + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + + However if we have this then loading the following into the repl gives : + + (0-) + (define funcLetAndRecurse + X -> (let Z (- X 1) + (if (= Z 1) (* 3 X) (funcLetAndRecurse Z)))) + + (1-)(funcLetAndRecurse 5) + -1 + + Then changed the code to : + + try { + maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); + } catch (Exception e) { + } + + Now running the code above gives : + + (0-) + (define funcLetAndRecurse + X -> (let Z (- X 1) + (if (= Z 1) (* 3 X) (funcLetAndRecurse Z)))) + + (1-)(funcLetAndRecurse 5) + 6 + + which is the correct result. However the following piece of code now breaks (under Shen 14 onwards) : + + (defprolog mem + X (mode [X | _] -) <--; + X (mode [_ | Y] -) <-- (mem X Y);) + + (prolog? (mem 1 [X | 2]) (return X)) + + in that an ASM exception is thrown. Commenting out this code seems to eliminate the prolog bug. + + Need to reinvestigate this maybeRecompile function at later stage + */ + + /* + //See comments above + //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); try { //maybeRecompile(type, symbol, result == null ? Object.class : result.getClass()); } catch (Exception e) { } + */ + return result; } From 689f0836618956872064f41240b86a6e401c42a1 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 23 Feb 2014 09:53:44 +0000 Subject: [PATCH 52/57] documenting --- src/shen/RT.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/shen/RT.java b/src/shen/RT.java index e8cc7de..4d71fb3 100644 --- a/src/shen/RT.java +++ b/src/shen/RT.java @@ -131,7 +131,19 @@ which is the correct result. However the following piece of code now breaks (und in that an ASM exception is thrown. Commenting out this code seems to eliminate the prolog bug. - Need to reinvestigate this maybeRecompile function at later stage + The place where the let recursive bug was addressed was : + + https://github.com/artella-coding/Shen.java/commit/bdb0cc112f7d7482ba41c024f8f2f8d60237f1c1 + + and the transition to Shen 14 (which causes the problems with the prolog code) is from + + https://github.com/artella-coding/Shen.java/commit/bdb0cc112f7d7482ba41c024f8f2f8d60237f1c1 + + to + + https://github.com/artella-coding/Shen.java/commit/ff6d45d9f0793554d034760336c822db7afff00e + + Need to reinvestigate the maybeRecompile function at later stage */ /* From 412f0f9256206c98e6b1cf6ea1e057d31c51bd01 Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 1 Jun 2014 10:07:31 +0100 Subject: [PATCH 53/57] updating README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf72a03..31b8910 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8 Early Access Release](https://jdk8.java.net/download.html). Tested with b128. +* [JDK 8 Early Access Release](https://jdk8.java.net/archive/8u20-b14.html). Tested with 8u20 Build b14. Does NOT work with b15 or b16. * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). From f3c9028a81504985fd3f4d3b229c6b0070b2eacc Mon Sep 17 00:00:00 2001 From: artella Date: Sun, 1 Jun 2014 10:14:57 +0100 Subject: [PATCH 54/57] updating README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31b8910..a9522ad 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8 Early Access Release](https://jdk8.java.net/archive/8u20-b14.html). Tested with 8u20 Build b14. Does NOT work with b15 or b16. +* [JDK 8u20 Build b14](https://jdk8.java.net/archive/8u20-b14.html). Does NOT work with b15 or b16. * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). From eb90a2b8a0cab809937725472c91ebe0a9d7aa5d Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 26 Aug 2014 12:55:00 +0100 Subject: [PATCH 55/57] updating readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a9522ad..e20e902 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8u20 Build b14](https://jdk8.java.net/archive/8u20-b14.html). Does NOT work with b15 or b16. +* [JDK 8u40 Build b04](https://jdk8.java.net/download.html). Thanks to Vicente Arturo Romero Zaldivar of Oracle Corporation for fixing [bug JDK-8046357](https://bugs.openjdk.java.net/browse/JDK-8046357) * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). @@ -70,7 +70,7 @@ Optional requirements : There's an IntelliJ project, which requires [IDEA 12](ht (/. X (integer? (/ X 3)))) [0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60... etc] -#### In Windows XP : +#### In Windows XP & 7 : * Click "Download ZIP" button at https://github.com/artella-coding/Shen.java. Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip. @@ -79,7 +79,7 @@ Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip. Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. * Download jdk8 from https://jdk8.java.net/download.html - + To extract in Windows 7 simply unzip. To extract in Windows XP : * Right click on jdk-8-fcs-bin-b129-windows-i586-07_feb_2014.exe From 4b6453557cfe739a5b2a23ef48692e27ebd2faec Mon Sep 17 00:00:00 2001 From: artella Date: Tue, 26 Aug 2014 12:57:31 +0100 Subject: [PATCH 56/57] updating readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e20e902..5e88f47 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,9 @@ Alternatively : https://github.com/artella-coding/Shen.java/archive/master.zip. Suppose extracted directory is C:\Program Files\maven\apache-maven-2.2.1. * Download jdk8 from https://jdk8.java.net/download.html + To extract in Windows 7 simply unzip. + To extract in Windows XP : * Right click on jdk-8-fcs-bin-b129-windows-i586-07_feb_2014.exe From 9dd5b108c35f72fca081470a872a8be5fa749bac Mon Sep 17 00:00:00 2001 From: artella Date: Sat, 20 Sep 2014 11:42:18 +0100 Subject: [PATCH 57/57] Shen 16 --- README.md | 4 +- shen/Test Programs/einstein.shen | 5 +- shen/Test Programs/qmachine.shen | 6 +- shen/benchmarks/jnk.shen | 194 +++++++++++++++++++ shen/klambda/declarations.kl | 6 +- shen/klambda/macros.kl | 16 -- shen/klambda/prolog.kl | 2 +- shen/klambda/reader.kl | 168 +++++++++-------- shen/klambda/sequent.kl | 110 +++++------ shen/klambda/sys.kl | 196 +++++++++---------- shen/klambda/t-star.kl | 109 ++++------- shen/klambda/toplevel.kl | 42 ++--- shen/klambda/track.kl | 50 ++--- shen/klambda/types.kl | 18 +- shen/klambda/writer.kl | 50 ++--- shen/klambda/yacc.kl | 56 +++--- shen/src/backend.shen | 311 +++++++++++++++---------------- shen/src/declarations.shen | 12 +- shen/src/macros.shen | 16 -- shen/src/prolog.shen | 2 +- shen/src/reader.shen | 31 ++- shen/src/sequent.shen | 11 +- shen/src/sys.shen | 2 +- shen/src/t-star.shen | 96 +--------- shen/src/toplevel.shen | 2 +- shen/src/track.shen | 2 +- shen/src/types.shen | 9 +- 27 files changed, 801 insertions(+), 725 deletions(-) create mode 100644 shen/benchmarks/jnk.shen diff --git a/README.md b/README.md index 5e88f47..19cd68b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 神.java | Shen for Java (Shen 15) +# 神.java | Shen for Java (Shen 16) http://shenlanguage.org/ @@ -23,7 +23,7 @@ This port is loosely based on [`shen.clj`](https://github.com/hraberg/shen.clj), Started as an [interpreter](https://github.com/hraberg/Shen.java/blob/2359095c59435597e5761c72dbe9f0246fad0864/src/shen/Shen.java) using [MethodHandles](http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html) as a primitive. It's about 2x faster than `shen.clj`. Core requirements : -* [JDK 8u40 Build b04](https://jdk8.java.net/download.html). Thanks to Vicente Arturo Romero Zaldivar of Oracle Corporation for fixing [bug JDK-8046357](https://bugs.openjdk.java.net/browse/JDK-8046357) +* [JDK 8u40 Build b06](https://jdk8.java.net/download.html). Thanks to Vicente Arturo Romero Zaldivar of Oracle Corporation for fixing [bug JDK-8046357](https://bugs.openjdk.java.net/browse/JDK-8046357) * [Maven](http://maven.apache.org/). See [Maven project file](https://github.com/artella-coding/Shen.java/blob/master/pom.xml). Optional requirements : There's an IntelliJ project, which requires [IDEA 12](http://www.jetbrains.com/idea/download/index.html). diff --git a/shen/Test Programs/einstein.shen b/shen/Test Programs/einstein.shen index 51a7363..ad1d4a5 100644 --- a/shen/Test Programs/einstein.shen +++ b/shen/Test Programs/einstein.shen @@ -29,5 +29,6 @@ X Y List <-- (iright Y X List);) (defprolog iright - L R [L | [R | _]] <--; - L R [_ | Rest] <-- (iright L R Rest);) \ No newline at end of file + L R (mode [L | [R | _]] -) <--; + L R (mode [_ | Rest] -) <-- (iright L R Rest);) + diff --git a/shen/Test Programs/qmachine.shen b/shen/Test Programs/qmachine.shen index 50122ed..e68ea08 100644 --- a/shen/Test Programs/qmachine.shen +++ b/shen/Test Programs/qmachine.shen @@ -34,15 +34,15 @@ (define forall {(progression A) --> (A --> boolean) --> boolean} - Progression P -> (super Progression P and true)) + Progression P -> (super Progression P (function and) true)) (define exists {(progression A) --> (A --> boolean) --> boolean} - Progression P -> (super Progression P or false)) + Progression P -> (super Progression P (function or) false)) (define for {(progression A) --> (A --> B) --> number} - Progression P -> (super Progression P progn 0)) + Progression P -> (super Progression P (function progn) 0)) (define progn {A --> B --> B} diff --git a/shen/benchmarks/jnk.shen b/shen/benchmarks/jnk.shen new file mode 100644 index 0000000..37c0d6d --- /dev/null +++ b/shen/benchmarks/jnk.shen @@ -0,0 +1,194 @@ +(define kl-to-lisp + Params Param -> Param where (element? Param Params) + Params [type X _] -> (kl-to-lisp Params X) + Params [lambda X Y] -> [FUNCTION [LAMBDA [X] (kl-to-lisp [X | Params] Y)]] + Params [let X Y Z] -> [LET [[X (kl-to-lisp Params Y)]] + (kl-to-lisp [X | Params] Z)] + _ [defun F Params Code] -> [DEFUN F Params (kl-to-lisp Params Code)] + Params [cond | Cond] -> [COND | (map (/. C (cond_code Params C)) (insert-default Cond))] + Params [Param | X] -> (higher-order-code Param + (map (/. Y (kl-to-lisp Params Y)) X)) + where (element? Param Params) + Params [[X | Y] | Z] -> (higher-order-code (kl-to-lisp Params [X | Y]) + (map (/. W (kl-to-lisp Params W)) Z)) + Params [F | X] -> (assemble-application F + (map (/. Y (kl-to-lisp Params Y)) X)) + where (symbol? F) + _ [] -> [] + _ S -> [QUOTE S] where (or (symbol? S) (boolean? S)) + _ X -> X) + +(define insert-default + [] -> [[true [ERROR "error: cond failure~%"]]] + [[true X] | Y] -> [[true X] | Y] + [Case | Cases] -> [Case | (insert-default Cases)]) + +(define higher-order-code + F X -> [let Args [LIST | X] + [let NewF [maplispsym F] + [trap-error [APPLY NewF Args] + [lambda E [COND [[arity-error? F Args] + [funcall [EVAL [nest-lambda F NewF]] Args]] + [[EQ NewF [QUOTE or]] + [funcall [lambda X1 [lambda X2 [or X1 X2]]] Args]] + [[EQ NewF [QUOTE and]] + [funcall [lambda X1 [lambda X2 [and X1 X2]]] Args]] + [[EQ NewF [QUOTE trap-error]] + [funcall [lambda X1 [lambda X2 [trap-error X1 X2]]] Args]] + [[bad-lambda-call? NewF Args] + [funcall NewF Args]] + [T [relay-error E]]]]]]]) + +(define bad-lambda-call? + F Args -> (AND (FUNCTIONP F) (NOT (= (LIST-LENGTH Args) 1)))) + +(define relay-error + E -> (ERROR (error-to-string E))) + +(define funcall + Lambda [] -> Lambda + Lambda [X | Y] -> (funcall (FUNCALL Lambda X) Y)) + +(define arity-error? + F Args -> (AND (SYMBOLP F) + (> (trap-error (arity F) (/. E -1)) (LIST-LENGTH Args))) + +(define nest-lambda + F NewF -> (nest-lambda-help NewF (trap-error (arity F) (/. E -1)))) + +(define nest-lambda-help + F -1 -> F + F 0 -> F + F N -> (let X (gensym (protect Y)) + [lambda X (nest-lambda-help (add-p F X) (- N 1))])) + +(define add-p + [F | X] Y -> (append [F | X] [Y]) + F X -> [F X]) + +(define cond_code + Params [Test Result] -> [(lisp_test Params Test) + (kl-to-lisp Params Result)]) + +(define lisp_test + _ true -> T + Params [and | Tests] -> [AND | (map (/. X (wrap (kl-to-lisp Params X))) Tests)] + Params Test -> (wrap (kl-to-lisp Params Test))) + + (define wrap + [cons? X] -> [CONSP X] + [string? X] -> [STRINGP X] + [number? X] -> [NUMBERP X] + [empty? X] -> [NULL X] + [and P Q] -> [AND (wrap P) (wrap Q)] + [or P Q] -> [OR (wrap P) (wrap Q)] + [not P] -> [NOT (wrap P)] + [equal? X []] -> [NULL X] + [equal? [] X] -> [NULL X] + [equal? X [Quote Y]] -> [EQ X [Quote Y]] + where (and (= (SYMBOLP Y) T) (= Quote QUOTE)) + [equal? [Quote Y] X] -> [EQ [Quote Y] X] + where (and (= (SYMBOLP Y) T) (= Quote QUOTE)) + [equal? [fail] X] -> [EQ [fail] X] + [equal? X [fail]] -> [EQ X [fail]] + [equal? S X] -> [EQUAL S X] where (string? S) + [equal? X S] -> [EQUAL X S] where (string? S) + [equal? X Y] -> [shen-ABSEQUAL X Y] + [shen-+string? [tlstr X]] -> [NOT [STRING-EQUAL [tlstr X] ""]] + [shen-pvar? X] -> [AND [ARRAYP X] [NOT [STRINGP X]] [EQ [AREF X 0] [QUOTE shen-pvar]]] + [tuple? X] -> [AND [ARRAYP X] [NOT [STRINGP X]] [EQ [AREF X 0] [QUOTE shen-tuple]]] + [greater? X Y] -> [> X Y] + [greater-than-or-equal-to? X Y] -> [>= X Y] + [less? X Y] -> [< X Y] + [less-than-or-equal-to? X Y] -> [<= X Y] + X -> [wrapper X]) + + (define wrapper + true -> T + false -> [] + X -> (error "boolean expected: not ~S~%" X)) + + (define assemble-application + hd [X] -> (protect [CAR X]) + tl [X] -> (protect [CDR X]) + cons [X Y] -> (protect [CONS X Y]) + append [X Y] -> (protect [APPEND X Y]) + reverse [X] -> (protect [REVERSE X]) + if [P Q R] -> (protect [IF (wrap P) Q R]) + + [1 X] -> [1+ X] + + [X 1] -> [1+ X] + - [X 1] -> [1- X] + value [[Quote X]] -> X where (= Quote (protect QUOTE)) + set [[Quote X] [1+ X]] -> [INCF X] where (= Quote (protect QUOTE)) + set [[Quote X] [1- X]] -> [DECF X] where (= Quote (protect QUOTE)) + F X -> (let NewF (maplispsym F) + Arity (trap-error (arity F) (/. E -1)) + (if (or (= Arity (length X)) (= Arity -1)) + [NewF | X] + [funcall (nest-lambda F NewF) [(protect LIST) | X]]))) + +(define maplispsym + = -> equal? + > -> greater? + < -> less? + >= -> greater-than-or-equal-to? + <= -> less-than-or-equal-to? + + -> add + - -> subtract + / -> divide + * -> multiply + F -> F) + + (define factorh + [Defun F Params [Cond | Code]] -> [Defun F Params [BLOCK [] (process-tree (tree (map returns Code)))]] + where (and (= Cond COND) (= Defun DEFUN)) + Code -> Code) + +(define returns + [Test Result] -> [Test [RETURN Result]]) + +(define process-tree + (@p P Q R no-tag) -> [IF P (optimise-selectors P (process-tree Q)) (process-tree R)] + (@p P Q R Tag) -> [TAGBODY [IF P (optimise-selectors P (process-tree Q))] Tag (process-tree R)] + Q -> Q where (not (tuple? Q))) + +(define optimise-selectors + Test Code -> (optimise-selectors-help (selectors-from Test) Code)) + +(define selectors-from + [Consp X] -> [[CAR X] [CDR X]] where (= Consp CONSP) + [tuple? X] -> [[fst X] [snd X]] + _ -> []) + +(define optimise-selectors-help + [] Code -> Code + [S1 S2] Code -> (let O1 (occurrences S1 Code) + O2 (occurrences S2 Code) + V1 (gensym V) + V2 (gensym V) + (if (and (> O1 1) (> O2 1)) + [LET [[V1 S1] [V2 S2]] + (subst V1 S1 (subst V2 S2 Code))] + (if (> O1 1) + [LET [[V1 S1]] (subst V1 S1 Code)] + (if (> O2 1) + [LET [[V2 S2]] (subst V2 S2 Code)] + Code))))) + +(define tree + [[[And P Q] R] | S] -> (let Tag (gensym tag) + Left (tree (append (branch-by P [[[And P Q] R] | S]) [[T [GO Tag]]])) + Right (tree (branch-by-not P [[[And P Q] R] | S])) + (@p P Left Right Tag)) where (= And AND) + [[True Q] | _] -> Q where (= True T) + [[P Q] | R] -> (@p P Q (tree R) no-tag)) + +(define branch-by + P [[[And P Q] R] | S] -> [[Q R] | (branch-by P S)] where (= And AND) + P [[P R] | S] -> [[T R]] + _ Code -> []) + +(define branch-by-not + P [[[And P Q] R] | S] -> (branch-by-not P S) where (= And AND) + P [[P R] | S] -> S + _ Code -> Code) \ No newline at end of file diff --git a/shen/klambda/declarations.kl b/shen/klambda/declarations.kl index 6479d56..65f3a7c 100644 --- a/shen/klambda/declarations.kl +++ b/shen/klambda/declarations.kl @@ -109,19 +109,19 @@ (set shen.*optimise* false) -(set *version* "version 15") +(set *version* "version 16") (defun shen.initialise_arity_table (V827) (cond ((= () V827) ()) ((and (cons? V827) (cons? (tl V827))) (let DecArity (put (hd V827) arity (hd (tl V827)) (value *property-vector*)) (shen.initialise_arity_table (tl (tl V827))))) (true (shen.sys-error shen.initialise_arity_table)))) (defun arity (V828) (trap-error (get V828 arity (value *property-vector*)) (lambda E -1))) -(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 1 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 1 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(shen.initialise_arity_table (cons absvector (cons 1 (cons adjoin (cons 2 (cons and (cons 2 (cons append (cons 2 (cons arity (cons 1 (cons assoc (cons 2 (cons boolean? (cons 1 (cons cd (cons 1 (cons compile (cons 3 (cons concat (cons 2 (cons cons (cons 2 (cons cons? (cons 1 (cons cn (cons 2 (cons declare (cons 2 (cons destroy (cons 1 (cons difference (cons 2 (cons do (cons 2 (cons element? (cons 2 (cons empty? (cons 1 (cons enable-type-theory (cons 1 (cons interror (cons 2 (cons eval (cons 1 (cons eval-kl (cons 1 (cons explode (cons 1 (cons external (cons 1 (cons fail-if (cons 2 (cons fail (cons 0 (cons fix (cons 2 (cons findall (cons 5 (cons freeze (cons 1 (cons fst (cons 1 (cons gensym (cons 1 (cons get (cons 3 (cons get-time (cons 1 (cons address-> (cons 3 (cons <-address (cons 2 (cons <-vector (cons 2 (cons > (cons 2 (cons >= (cons 2 (cons = (cons 2 (cons hd (cons 1 (cons hdv (cons 1 (cons hdstr (cons 1 (cons head (cons 1 (cons if (cons 3 (cons integer? (cons 1 (cons intern (cons 1 (cons identical (cons 4 (cons inferences (cons 0 (cons input (cons 1 (cons input+ (cons 2 (cons implementation (cons 0 (cons intersection (cons 2 (cons it (cons 0 (cons kill (cons 0 (cons language (cons 0 (cons length (cons 1 (cons lineread (cons 1 (cons load (cons 1 (cons < (cons 2 (cons <= (cons 2 (cons vector (cons 1 (cons macroexpand (cons 1 (cons map (cons 2 (cons mapcan (cons 2 (cons maxinferences (cons 1 (cons not (cons 1 (cons nth (cons 2 (cons n->string (cons 1 (cons number? (cons 1 (cons occurs-check (cons 1 (cons occurrences (cons 2 (cons occurs-check (cons 1 (cons optimise (cons 1 (cons or (cons 2 (cons os (cons 0 (cons package (cons 3 (cons port (cons 0 (cons porters (cons 0 (cons pos (cons 2 (cons print (cons 1 (cons profile (cons 1 (cons profile-results (cons 1 (cons pr (cons 2 (cons ps (cons 1 (cons preclude (cons 1 (cons preclude-all-but (cons 1 (cons protect (cons 1 (cons address-> (cons 3 (cons put (cons 4 (cons shen.reassemble (cons 2 (cons read-file-as-string (cons 1 (cons read-file (cons 1 (cons read (cons 1 (cons read-byte (cons 1 (cons read-from-string (cons 1 (cons release (cons 0 (cons remove (cons 2 (cons reverse (cons 1 (cons set (cons 2 (cons simple-error (cons 1 (cons snd (cons 1 (cons specialise (cons 1 (cons spy (cons 1 (cons step (cons 1 (cons stinput (cons 0 (cons stoutput (cons 0 (cons string->n (cons 1 (cons string->symbol (cons 1 (cons string? (cons 1 (cons shen.strong-warning (cons 1 (cons subst (cons 3 (cons sum (cons 1 (cons symbol? (cons 1 (cons tail (cons 1 (cons tl (cons 1 (cons tc (cons 1 (cons tc? (cons 0 (cons thaw (cons 1 (cons tlstr (cons 1 (cons track (cons 1 (cons trap-error (cons 2 (cons tuple? (cons 1 (cons type (cons 2 (cons return (cons 3 (cons undefmacro (cons 1 (cons unprofile (cons 1 (cons unify (cons 4 (cons unify! (cons 4 (cons union (cons 2 (cons untrack (cons 1 (cons unspecialise (cons 1 (cons undefmacro (cons 1 (cons vector (cons 1 (cons vector-> (cons 3 (cons value (cons 1 (cons variable? (cons 1 (cons version (cons 0 (cons warn (cons 1 (cons write-byte (cons 2 (cons write-to-file (cons 2 (cons y-or-n? (cons 1 (cons + (cons 2 (cons * (cons 2 (cons / (cons 2 (cons - (cons 2 (cons == (cons 2 (cons (cons 1 (cons @p (cons 2 (cons @v (cons 2 (cons @s (cons 2 (cons preclude (cons 1 (cons include (cons 1 (cons preclude-all-but (cons 1 (cons include-all-but (cons 1 (cons where (cons 2 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (defun systemf (V829) (let Shen (intern "shen") (let External (get Shen shen.external-symbols (value *property-vector*)) (put Shen shen.external-symbols (adjoin V829 External) (value *property-vector*))))) (defun adjoin (V830 V831) (if (element? V830 V831) V831 (cons V830 V831))) -(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read+ (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) +(put (intern "shen") shen.external-symbols (cons ! (cons } (cons { (cons --> (cons <-- (cons && (cons : (cons ; (cons :- (cons := (cons _ (cons *language* (cons *implementation* (cons *stinput* (cons *home-directory* (cons *version* (cons *maximum-print-sequence-size* (cons *macros* (cons *os* (cons *release* (cons *property-vector* (cons @v (cons @p (cons @s (cons *port* (cons *porters* (cons *hush* (cons <- (cons -> (cons (cons == (cons = (cons >= (cons > (cons /. (cons =! (cons $ (cons - (cons / (cons * (cons + (cons <= (cons < (cons >> (cons (vector 0) (cons ==> (cons y-or-n? (cons write-to-file (cons write-byte (cons where (cons when (cons warn (cons version (cons verified (cons variable? (cons value (cons vector-> (cons <-vector (cons vector (cons vector? (cons unspecialise (cons untrack (cons unit (cons shen.unix (cons union (cons unify (cons unify! (cons unprofile (cons undefmacro (cons return (cons type (cons tuple? (cons true (cons trap-error (cons track (cons time (cons thaw (cons tc? (cons tc (cons tl (cons tlstr (cons tlv (cons tail (cons systemf (cons synonyms (cons symbol (cons symbol? (cons string->symbol (cons subst (cons string? (cons string->n (cons stream (cons string (cons stinput (cons stoutput (cons step (cons spy (cons specialise (cons snd (cons simple-error (cons set (cons save (cons str (cons run (cons reverse (cons remove (cons release (cons read (cons read-file (cons read-file-as-bytelist (cons read-file-as-string (cons read-byte (cons read-from-string (cons quit (cons put (cons preclude (cons preclude-all-but (cons ps (cons prolog? (cons protect (cons profile-results (cons profile (cons print (cons pr (cons pos (cons porters (cons port (cons package (cons output (cons out (cons os (cons or (cons optimise (cons open (cons occurrences (cons occurs-check (cons n->string (cons number? (cons number (cons null (cons nth (cons not (cons nl (cons mode (cons macro (cons macroexpand (cons maxinferences (cons mapcan (cons map (cons make-string (cons load (cons loaded (cons list (cons lineread (cons limit (cons length (cons let (cons lazy (cons lambda (cons language (cons kill (cons is (cons intersection (cons inferences (cons intern (cons integer? (cons input (cons input+ (cons include (cons include-all-but (cons it (cons in (cons implementation (cons if (cons identical (cons head (cons hd (cons hdv (cons hdstr (cons hash (cons get (cons get-time (cons gensym (cons function (cons fst (cons freeze (cons fix (cons file (cons fail (cons fail-if (cons fwhen (cons findall (cons false (cons enable-type-theory (cons explode (cons external (cons exception (cons eval-kl (cons eval (cons error-to-string (cons error (cons empty? (cons element? (cons do (cons difference (cons destroy (cons defun (cons define (cons defmacro (cons defcc (cons defprolog (cons declare (cons datatype (cons cut (cons cn (cons cons? (cons cons (cons cond (cons concat (cons compile (cons cd (cons cases (cons call (cons close (cons bind (cons bound? (cons boolean? (cons boolean (cons bar! (cons assoc (cons arity (cons append (cons and (cons adjoin (cons <-address (cons address-> (cons absvector? (cons absvector (cons abort ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (value *property-vector*)) (defun specialise (V832) (do (set shen.*special* (cons V832 (value shen.*special*))) V832)) diff --git a/shen/klambda/macros.kl b/shen/klambda/macros.kl index c6a8f24..16fa210 100644 --- a/shen/klambda/macros.kl +++ b/shen/klambda/macros.kl @@ -75,22 +75,6 @@ (defun shen.intern-type (V901) (intern (cn "type#" (str V901)))) -"(defcc - := [define | ];) - -(defcc - ; - := (append [(protect X) -> (protect X)]);) - -(defcc - -> where ; - -> ; - <- where ; - <- ;) - -(defcc - := [[walk [function macroexpand] ]];)" - (defun shen.@s-macro (V902) (cond ((and (cons? V902) (and (= @s (hd V902)) (and (cons? (tl V902)) (and (cons? (tl (tl V902))) (cons? (tl (tl (tl V902)))))))) (cons @s (cons (hd (tl V902)) (cons (shen.@s-macro (cons @s (tl (tl V902)))) ())))) ((and (cons? V902) (and (= @s (hd V902)) (and (cons? (tl V902)) (and (cons? (tl (tl V902))) (and (= () (tl (tl (tl V902)))) (string? (hd (tl V902)))))))) (let E (explode (hd (tl V902))) (if (> (length E) 1) (shen.@s-macro (cons @s (append E (tl (tl V902))))) V902))) (true V902))) (defun shen.synonyms-macro (V903) (cond ((and (cons? V903) (= synonyms (hd V903))) (cons shen.synonyms-help (cons (shen.rcons_form (shen.curry-synonyms (tl V903))) ()))) (true V903))) diff --git a/shen/klambda/prolog.kl b/shen/klambda/prolog.kl index 57be073..a08a4d7 100644 --- a/shen/klambda/prolog.kl +++ b/shen/klambda/prolog.kl @@ -185,7 +185,7 @@ (defun shen.mk-pvar (V1155) (address-> (address-> (absvector 2) 0 shen.pvar) 1 V1155)) -(defun shen.pvar? (V1156) (and (absvector? V1156) (= (<-address V1156 0) shen.pvar))) +(defun shen.pvar? (V1156) (trap-error (and (absvector? V1156) (= (<-address V1156 0) shen.pvar)) (lambda E false))) (defun shen.bindv (V1157 V1158 V1159) (let Vector (<-address (value shen.*prologvectors*) V1159) (address-> Vector (<-address V1157 1) V1158))) diff --git a/shen/klambda/reader.kl b/shen/klambda/reader.kl index d904197..eec450f 100644 --- a/shen/klambda/reader.kl +++ b/shen/klambda/reader.kl @@ -47,166 +47,176 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun read-file-as-bytelist (V1347) (let Stream (open V1347 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) +"(defun read-file-as-bytelist (V1348) (let Stream (open V1348 in) (let Byte (read-byte Stream) (let Bytes (shen.read-file-as-bytelist-help Stream Byte ()) (let Close (close Stream) (reverse Bytes)))))) -(defun shen.read-file-as-bytelist-help (V1348 V1349 V1350) (cond ((= -1 V1349) V1350) (true (shen.read-file-as-bytelist-help V1348 (read-byte V1348) (cons V1349 V1350))))) +(defun shen.read-file-as-bytelist-help (V1349 V1350 V1351) (cond ((= -1 V1350) V1351) (true (shen.read-file-as-bytelist-help V1349 (read-byte V1349) (cons V1350 V1351))))) -(defun read-file-as-string (V1351) (let Stream (open V1351 in) (shen.rfas-h Stream (read-byte Stream) ""))) +(defun read-file-as-string (V1352) (let Stream (open V1352 in) (shen.rfas-h Stream (read-byte Stream) ""))) -(defun shen.rfas-h (V1352 V1353 V1354) (cond ((= -1 V1353) (do (close V1352) V1354)) (true (shen.rfas-h V1352 (read-byte V1352) (cn V1354 (n->string V1353)))))) +(defun shen.rfas-h (V1353 V1354 V1355) (cond ((= -1 V1354) (do (close V1353) V1355)) (true (shen.rfas-h V1353 (read-byte V1353) (cn V1355 (n->string V1354)))))) -(defun input (V1355) (eval-kl (read V1355))) +(defun input (V1356) (eval-kl (read V1356))) -(defun input+ (V1356 V1357) (let Mono? (shen.monotype V1356) (let Input (read V1357) (if (= false (shen.typecheck Input V1356)) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1356 " +(defun input+ (V1357 V1358) (let Mono? (shen.monotype V1357) (let Input (read V1358) (if (= false (shen.typecheck Input (shen.demodulate V1357))) (simple-error (cn "type error: " (shen.app Input (cn " is not of type " (shen.app V1357 " " shen.r)) shen.r))) (eval-kl Input))))) -(defun shen.monotype (V1358) (cond ((cons? V1358) (map (lambda X1337 (shen.monotype X1337)) V1358)) (true (if (variable? V1358) (simple-error (cn "input+ expects a monotype: not " (shen.app V1358 " -" shen.a))) V1358)))) +(defun shen.monotype (V1359) (cond ((cons? V1359) (map (lambda X1337 (shen.monotype X1337)) V1359)) (true (if (variable? V1359) (simple-error (cn "input+ expects a monotype: not " (shen.app V1359 " +" shen.a))) V1359)))) -(defun read (V1359) (hd (shen.read-loop V1359 (read-byte V1359) ()))) +(defun read (V1360) (hd (shen.read-loop V1360 (read-byte V1360) ()))) -(defun shen.read-loop (V1362 V1363 V1364) (cond ((= -1 V1363) (if (empty? V1364) (simple-error "error: empty stream") (compile (lambda X1338 (shen. X1338)) V1364 (lambda E E)))) ((shen.terminator? V1363) (let AllBytes (append V1364 (cons V1363 ())) (let Read (compile (lambda X1339 (shen. X1339)) AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1362 (read-byte V1362) AllBytes) Read)))) (true (shen.read-loop V1362 (read-byte V1362) (append V1364 (cons V1363 ())))))) +(defun it () (value shen.*it*)) -(defun shen.terminator? (V1365) (element? V1365 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) +(defun shen.read-loop (V1365 V1366 V1367) (cond ((= 94 V1366) (simple-error "read aborted")) ((= -1 V1366) (if (empty? V1367) (simple-error "error: empty stream") (compile (lambda X1338 (shen. X1338)) V1367 (lambda E E)))) ((shen.terminator? V1366) (let AllBytes (append V1367 (cons V1366 ())) (let It (shen.record-it AllBytes) (let Read (compile (lambda X1339 (shen. X1339)) AllBytes (lambda E shen.nextbyte)) (if (or (= Read shen.nextbyte) (empty? Read)) (shen.read-loop V1365 (read-byte V1365) AllBytes) Read))))) (true (shen.read-loop V1365 (read-byte V1365) (append V1367 (cons V1366 ())))))) -(defun lineread (V1366) (shen.lineread-loop (read-byte V1366) () V1366)) +(defun shen.terminator? (V1368) (element? V1368 (cons 9 (cons 10 (cons 13 (cons 32 (cons 34 (cons 41 (cons 93 ()))))))))) -(defun shen.lineread-loop (V1368 V1369 V1370) (cond ((= -1 V1368) (if (empty? V1369) (simple-error "empty stream") (compile (lambda X1340 (shen. X1340)) V1369 (lambda E E)))) ((= V1368 (shen.hat)) (simple-error "line read aborted")) ((element? V1368 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X1341 (shen. X1341)) V1369 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1370) (append V1369 (cons V1368 ())) V1370) Line))) (true (shen.lineread-loop (read-byte V1370) (append V1369 (cons V1368 ())) V1370)))) +(defun lineread (V1369) (shen.lineread-loop (read-byte V1369) () V1369)) -(defun read-file (V1371) (let Bytelist (read-file-as-bytelist V1371) (compile (lambda X1342 (shen. X1342)) Bytelist (lambda X1343 (shen.read-error X1343))))) +(defun shen.lineread-loop (V1371 V1372 V1373) (cond ((= -1 V1371) (if (empty? V1372) (simple-error "empty stream") (compile (lambda X1340 (shen. X1340)) V1372 (lambda E E)))) ((= V1371 (shen.hat)) (simple-error "line read aborted")) ((element? V1371 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X1341 (shen. X1341)) V1372 (lambda E shen.nextline)) (let It (shen.record-it V1372) (if (or (= Line shen.nextline) (empty? Line)) (shen.lineread-loop (read-byte V1373) (append V1372 (cons V1371 ())) V1373) Line)))) (true (shen.lineread-loop (read-byte V1373) (append V1372 (cons V1371 ())) V1373)))) -(defun read-from-string (V1372) (let Ns (map (lambda X1344 (string->n X1344)) (explode V1372)) (compile (lambda X1345 (shen. X1345)) Ns (lambda X1346 (shen.read-error X1346))))) +(defun shen.record-it (V1374) (let TrimLeft (shen.trim-whitespace V1374) (let TrimRight (shen.trim-whitespace (reverse TrimLeft)) (let Trimmed (reverse TrimRight) (shen.record-it-h Trimmed))))) -(defun shen.read-error (V1379) (cond ((and (cons? V1379) (and (cons? (hd V1379)) (and (cons? (tl V1379)) (= () (tl (tl V1379)))))) (simple-error (cn "read error here: +(defun shen.trim-whitespace (V1375) (cond ((and (cons? V1375) (element? (hd V1375) (cons 9 (cons 10 (cons 13 (cons 32 ())))))) (shen.trim-whitespace (tl V1375))) (true V1375))) - " (shen.app (shen.compress-50 50 (hd V1379)) " +(defun shen.record-it-h (V1376) (do (set shen.*it* (shen.cn-all (map (lambda X1342 (n->string X1342)) V1376))) V1376)) + +(defun shen.cn-all (V1377) (cond ((= () V1377) "") ((cons? V1377) (cn (hd V1377) (shen.cn-all (tl V1377)))) (true (shen.sys-error shen.cn-all)))) + +(defun read-file (V1378) (let Bytelist (read-file-as-bytelist V1378) (compile (lambda X1343 (shen. X1343)) Bytelist (lambda X1344 (shen.read-error X1344))))) + +(defun read-from-string (V1379) (let Ns (map (lambda X1345 (string->n X1345)) (explode V1379)) (compile (lambda X1346 (shen. X1346)) Ns (lambda X1347 (shen.read-error X1347))))) + +(defun shen.read-error (V1386) (cond ((and (cons? V1386) (and (cons? (hd V1386)) (and (cons? (tl V1386)) (= () (tl (tl V1386)))))) (simple-error (cn "read error here: + + " (shen.app (shen.compress-50 50 (hd V1386)) " " shen.a)))) (true (simple-error "read error ")))) -(defun shen.compress-50 (V1384 V1385) (cond ((= () V1385) "") ((= 0 V1384) "") ((cons? V1385) (cn (n->string (hd V1385)) (shen.compress-50 (- V1384 1) (tl V1385)))) (true (shen.sys-error shen.compress-50)))) +(defun shen.compress-50 (V1391 V1392) (cond ((= () V1392) "") ((= 0 V1391) "") ((cons? V1392) (cn (n->string (hd V1392)) (shen.compress-50 (- V1391 1) (tl V1392)))) (true (shen.sys-error shen.compress-50)))) -(defun shen. (V1390) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1390) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1390) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1397) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.cons_form (shen.hdtl Parse_shen.))) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.package-macro (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons { (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons } (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons bar! (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons ; (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons := (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons :- (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons : (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (intern ",") (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (macroexpand (shen.hdtl Parse_shen.)) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1397) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1397) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1395) (let Result (if (and (cons? (hd V1395)) (= 91 (hd (hd V1395)))) (shen.pair (hd (shen.pair (tl (hd V1395)) (shen.hdtl V1395))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1402) (let Result (if (and (cons? (hd V1402)) (= 91 (hd (hd V1402)))) (shen.pair (hd (shen.pair (tl (hd V1402)) (shen.hdtl V1402))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1400) (let Result (if (and (cons? (hd V1400)) (= 93 (hd (hd V1400)))) (shen.pair (hd (shen.pair (tl (hd V1400)) (shen.hdtl V1400))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1407) (let Result (if (and (cons? (hd V1407)) (= 93 (hd (hd V1407)))) (shen.pair (hd (shen.pair (tl (hd V1407)) (shen.hdtl V1407))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1405) (let Result (if (and (cons? (hd V1405)) (= 123 (hd (hd V1405)))) (shen.pair (hd (shen.pair (tl (hd V1405)) (shen.hdtl V1405))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1412) (let Result (if (and (cons? (hd V1412)) (= 123 (hd (hd V1412)))) (shen.pair (hd (shen.pair (tl (hd V1412)) (shen.hdtl V1412))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1410) (let Result (if (and (cons? (hd V1410)) (= 125 (hd (hd V1410)))) (shen.pair (hd (shen.pair (tl (hd V1410)) (shen.hdtl V1410))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1417) (let Result (if (and (cons? (hd V1417)) (= 125 (hd (hd V1417)))) (shen.pair (hd (shen.pair (tl (hd V1417)) (shen.hdtl V1417))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1415) (let Result (if (and (cons? (hd V1415)) (= 124 (hd (hd V1415)))) (shen.pair (hd (shen.pair (tl (hd V1415)) (shen.hdtl V1415))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1422) (let Result (if (and (cons? (hd V1422)) (= 124 (hd (hd V1422)))) (shen.pair (hd (shen.pair (tl (hd V1422)) (shen.hdtl V1422))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1420) (let Result (if (and (cons? (hd V1420)) (= 59 (hd (hd V1420)))) (shen.pair (hd (shen.pair (tl (hd V1420)) (shen.hdtl V1420))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1427) (let Result (if (and (cons? (hd V1427)) (= 59 (hd (hd V1427)))) (shen.pair (hd (shen.pair (tl (hd V1427)) (shen.hdtl V1427))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1425) (let Result (if (and (cons? (hd V1425)) (= 58 (hd (hd V1425)))) (shen.pair (hd (shen.pair (tl (hd V1425)) (shen.hdtl V1425))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1432) (let Result (if (and (cons? (hd V1432)) (= 58 (hd (hd V1432)))) (shen.pair (hd (shen.pair (tl (hd V1432)) (shen.hdtl V1432))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1430) (let Result (if (and (cons? (hd V1430)) (= 44 (hd (hd V1430)))) (shen.pair (hd (shen.pair (tl (hd V1430)) (shen.hdtl V1430))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1437) (let Result (if (and (cons? (hd V1437)) (= 44 (hd (hd V1437)))) (shen.pair (hd (shen.pair (tl (hd V1437)) (shen.hdtl V1437))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1435) (let Result (if (and (cons? (hd V1435)) (= 61 (hd (hd V1435)))) (shen.pair (hd (shen.pair (tl (hd V1435)) (shen.hdtl V1435))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1442) (let Result (if (and (cons? (hd V1442)) (= 61 (hd (hd V1442)))) (shen.pair (hd (shen.pair (tl (hd V1442)) (shen.hdtl V1442))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1440) (let Result (if (and (cons? (hd V1440)) (= 45 (hd (hd V1440)))) (shen.pair (hd (shen.pair (tl (hd V1440)) (shen.hdtl V1440))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1447) (let Result (if (and (cons? (hd V1447)) (= 45 (hd (hd V1447)))) (shen.pair (hd (shen.pair (tl (hd V1447)) (shen.hdtl V1447))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1445) (let Result (if (and (cons? (hd V1445)) (= 40 (hd (hd V1445)))) (shen.pair (hd (shen.pair (tl (hd V1445)) (shen.hdtl V1445))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1452) (let Result (if (and (cons? (hd V1452)) (= 40 (hd (hd V1452)))) (shen.pair (hd (shen.pair (tl (hd V1452)) (shen.hdtl V1452))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1450) (let Result (if (and (cons? (hd V1450)) (= 41 (hd (hd V1450)))) (shen.pair (hd (shen.pair (tl (hd V1450)) (shen.hdtl V1450))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1457) (let Result (if (and (cons? (hd V1457)) (= 41 (hd (hd V1457)))) (shen.pair (hd (shen.pair (tl (hd V1457)) (shen.hdtl V1457))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1455) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1455) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1462) (let Result (let Parse_shen. (shen. V1462) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.control-chars (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1462) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1462) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (if (= (shen.hdtl Parse_shen.) "<>") (cons vector (cons 0 ())) (intern (shen.hdtl Parse_shen.)))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen.control-chars (V1456) (cond ((= () V1456) "") ((and (cons? V1456) (and (= "c" (hd V1456)) (and (cons? (tl V1456)) (= "#" (hd (tl V1456)))))) (let CodePoint (shen.code-point (tl (tl V1456))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1456))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1456) (@s (hd V1456) (shen.control-chars (tl V1456)))) (true (shen.sys-error shen.control-chars)))) +(defun shen.control-chars (V1463) (cond ((= () V1463) "") ((and (cons? V1463) (and (= "c" (hd V1463)) (and (cons? (tl V1463)) (= "#" (hd (tl V1463)))))) (let CodePoint (shen.code-point (tl (tl V1463))) (let AfterCodePoint (shen.after-codepoint (tl (tl V1463))) (@s (n->string (shen.decimalise CodePoint)) (shen.control-chars AfterCodePoint))))) ((cons? V1463) (@s (hd V1463) (shen.control-chars (tl V1463)))) (true (shen.sys-error shen.control-chars)))) -(defun shen.code-point (V1459) (cond ((and (cons? V1459) (= ";" (hd V1459))) "") ((and (cons? V1459) (element? (hd V1459) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1459) (shen.code-point (tl V1459)))) (true (simple-error (cn "code point parse error " (shen.app V1459 " +(defun shen.code-point (V1466) (cond ((and (cons? V1466) (= ";" (hd V1466))) "") ((and (cons? V1466) (element? (hd V1466) (cons "0" (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ()))))))))))))) (cons (hd V1466) (shen.code-point (tl V1466)))) (true (simple-error (cn "code point parse error " (shen.app V1466 " " shen.a)))))) -(defun shen.after-codepoint (V1464) (cond ((= () V1464) ()) ((and (cons? V1464) (= ";" (hd V1464))) (tl V1464)) ((cons? V1464) (shen.after-codepoint (tl V1464))) (true (shen.sys-error shen.after-codepoint)))) +(defun shen.after-codepoint (V1471) (cond ((= () V1471) ()) ((and (cons? V1471) (= ";" (hd V1471))) (tl V1471)) ((cons? V1471) (shen.after-codepoint (tl V1471))) (true (shen.sys-error shen.after-codepoint)))) -(defun shen.decimalise (V1465) (shen.pre (reverse (shen.digits->integers V1465)) 0)) +(defun shen.decimalise (V1472) (shen.pre (reverse (shen.digits->integers V1472)) 0)) -(defun shen.digits->integers (V1470) (cond ((and (cons? V1470) (= "0" (hd V1470))) (cons 0 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "1" (hd V1470))) (cons 1 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "2" (hd V1470))) (cons 2 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "3" (hd V1470))) (cons 3 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "4" (hd V1470))) (cons 4 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "5" (hd V1470))) (cons 5 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "6" (hd V1470))) (cons 6 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "7" (hd V1470))) (cons 7 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "8" (hd V1470))) (cons 8 (shen.digits->integers (tl V1470)))) ((and (cons? V1470) (= "9" (hd V1470))) (cons 9 (shen.digits->integers (tl V1470)))) (true ()))) +(defun shen.digits->integers (V1477) (cond ((and (cons? V1477) (= "0" (hd V1477))) (cons 0 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "1" (hd V1477))) (cons 1 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "2" (hd V1477))) (cons 2 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "3" (hd V1477))) (cons 3 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "4" (hd V1477))) (cons 4 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "5" (hd V1477))) (cons 5 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "6" (hd V1477))) (cons 6 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "7" (hd V1477))) (cons 7 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "8" (hd V1477))) (cons 8 (shen.digits->integers (tl V1477)))) ((and (cons? V1477) (= "9" (hd V1477))) (cons 9 (shen.digits->integers (tl V1477)))) (true ()))) -(defun shen. (V1475) (let Result (let Parse_shen. (shen. V1475) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1482) (let Result (let Parse_shen. (shen. V1482) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1480) (let Result (let Parse_shen. (shen. V1480) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1480) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1487) (let Result (let Parse_shen. (shen. V1487) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (@s (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1487) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) "") (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1485) (let Result (let Parse_shen. (shen. V1485) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1485) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1492) (let Result (let Parse_shen. (shen. V1492) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1492) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1490) (let Result (if (cons? (hd V1490)) (let Parse_Byte (hd (hd V1490)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1490)) (shen.hdtl V1490))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1497) (let Result (if (cons? (hd V1497)) (let Parse_Byte (hd (hd V1497)) (if (shen.numbyte? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1497)) (shen.hdtl V1497))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.numbyte? (V1495) (cond ((= 48 V1495) true) ((= 49 V1495) true) ((= 50 V1495) true) ((= 51 V1495) true) ((= 52 V1495) true) ((= 53 V1495) true) ((= 54 V1495) true) ((= 55 V1495) true) ((= 56 V1495) true) ((= 57 V1495) true) (true false))) +(defun shen.numbyte? (V1502) (cond ((= 48 V1502) true) ((= 49 V1502) true) ((= 50 V1502) true) ((= 51 V1502) true) ((= 52 V1502) true) ((= 53 V1502) true) ((= 54 V1502) true) ((= 55 V1502) true) ((= 56 V1502) true) ((= 57 V1502) true) (true false))) -(defun shen. (V1500) (let Result (if (cons? (hd V1500)) (let Parse_Byte (hd (hd V1500)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1500)) (shen.hdtl V1500))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1507) (let Result (if (cons? (hd V1507)) (let Parse_Byte (hd (hd V1507)) (if (shen.symbol-code? Parse_Byte) (shen.pair (hd (shen.pair (tl (hd V1507)) (shen.hdtl V1507))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.symbol-code? (V1501) (or (= V1501 126) (or (and (> V1501 94) (< V1501 123)) (or (and (> V1501 59) (< V1501 91)) (or (and (> V1501 41) (and (< V1501 58) (not (= V1501 44)))) (or (and (> V1501 34) (< V1501 40)) (= V1501 33))))))) +(defun shen.symbol-code? (V1508) (or (= V1508 126) (or (and (> V1508 94) (< V1508 123)) (or (and (> V1508 59) (< V1508 91)) (or (and (> V1508 41) (and (< V1508 58) (not (= V1508 44)))) (or (and (> V1508 34) (< V1508 40)) (= V1508 33))))))) -(defun shen. (V1506) (let Result (let Parse_shen. (shen. V1506) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1513) (let Result (let Parse_shen. (shen. V1513) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1511) (let Result (if (cons? (hd V1511)) (let Parse_Byte (hd (hd V1511)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1511)) (shen.hdtl V1511))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1518) (let Result (if (cons? (hd V1518)) (let Parse_Byte (hd (hd V1518)) (if (= Parse_Byte 34) (shen.pair (hd (shen.pair (tl (hd V1518)) (shen.hdtl V1518))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1516) (let Result (let Parse_shen. (shen. V1516) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1516) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1523) (let Result (let Parse_shen. (shen. V1523) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1523) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1521) (let Result (if (cons? (hd V1521)) (let Parse_Byte (hd (hd V1521)) (shen.pair (hd (shen.pair (tl (hd V1521)) (shen.hdtl V1521))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1528) (let Result (if (cons? (hd V1528)) (let Parse_Byte (hd (hd V1528)) (shen.pair (hd (shen.pair (tl (hd V1528)) (shen.hdtl V1528))) (n->string Parse_Byte))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1526) (let Result (if (cons? (hd V1526)) (let Parse_Byte (hd (hd V1526)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1526)) (shen.hdtl V1526))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1533) (let Result (if (cons? (hd V1533)) (let Parse_Byte (hd (hd V1533)) (if (not (= Parse_Byte 34)) (shen.pair (hd (shen.pair (tl (hd V1533)) (shen.hdtl V1533))) (n->string Parse_Byte)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1531) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1531) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) +(defun shen. (V1538) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1)))) (fail))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (* (shen.expt 10 (shen.hdtl Parse_shen.)) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (+ (shen.pre (reverse (shen.hdtl Parse_shen.)) 0) (shen.post (shen.hdtl Parse_shen.) 1))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1538) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result)) Result)) Result)) Result))) -(defun shen. (V1536) (let Result (if (and (cons? (hd V1536)) (= 101 (hd (hd V1536)))) (shen.pair (hd (shen.pair (tl (hd V1536)) (shen.hdtl V1536))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1543) (let Result (if (and (cons? (hd V1543)) (= 101 (hd (hd V1543)))) (shen.pair (hd (shen.pair (tl (hd V1543)) (shen.hdtl V1543))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1541) (let Result (let Parse_shen. (shen. V1541) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1541) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1548) (let Result (let Parse_shen. (shen. V1548) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (- 0 (shen.pre (reverse (shen.hdtl Parse_shen.)) 0))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1548) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.pre (reverse (shen.hdtl Parse_shen.)) 0)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1546) (let Result (if (cons? (hd V1546)) (let Parse_Byte (hd (hd V1546)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1546)) (shen.hdtl V1546))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1553) (let Result (if (cons? (hd V1553)) (let Parse_Byte (hd (hd V1553)) (if (= Parse_Byte 43) (shen.pair (hd (shen.pair (tl (hd V1553)) (shen.hdtl V1553))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1551) (let Result (if (cons? (hd V1551)) (let Parse_Byte (hd (hd V1551)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1551)) (shen.hdtl V1551))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1558) (let Result (if (cons? (hd V1558)) (let Parse_Byte (hd (hd V1558)) (if (= Parse_Byte 46) (shen.pair (hd (shen.pair (tl (hd V1558)) (shen.hdtl V1558))) Parse_Byte) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1556) (let Result (let Parse_shen. (shen. V1556) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1556) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1563) (let Result (let Parse_shen. (shen. V1563) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1563) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1561) (let Result (let Parse_shen. (shen. V1561) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1568) (let Result (let Parse_shen. (shen. V1568) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1566) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1566) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1573) (let Result (let Parse_shen. (shen. V1573) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1573) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1571) (let Result (if (cons? (hd V1571)) (let Parse_X (hd (hd V1571)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1571)) (shen.hdtl V1571))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1578) (let Result (if (cons? (hd V1578)) (let Parse_X (hd (hd V1578)) (if (shen.numbyte? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1578)) (shen.hdtl V1578))) (shen.byte->digit Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.byte->digit (V1572) (cond ((= 48 V1572) 0) ((= 49 V1572) 1) ((= 50 V1572) 2) ((= 51 V1572) 3) ((= 52 V1572) 4) ((= 53 V1572) 5) ((= 54 V1572) 6) ((= 55 V1572) 7) ((= 56 V1572) 8) ((= 57 V1572) 9) (true (shen.sys-error shen.byte->digit)))) +(defun shen.byte->digit (V1579) (cond ((= 48 V1579) 0) ((= 49 V1579) 1) ((= 50 V1579) 2) ((= 51 V1579) 3) ((= 52 V1579) 4) ((= 53 V1579) 5) ((= 54 V1579) 6) ((= 55 V1579) 7) ((= 56 V1579) 8) ((= 57 V1579) 9) (true (shen.sys-error shen.byte->digit)))) -(defun shen.pre (V1575 V1576) (cond ((= () V1575) 0) ((cons? V1575) (+ (* (shen.expt 10 V1576) (hd V1575)) (shen.pre (tl V1575) (+ V1576 1)))) (true (shen.sys-error shen.pre)))) +(defun shen.pre (V1582 V1583) (cond ((= () V1582) 0) ((cons? V1582) (+ (* (shen.expt 10 V1583) (hd V1582)) (shen.pre (tl V1582) (+ V1583 1)))) (true (shen.sys-error shen.pre)))) -(defun shen.post (V1579 V1580) (cond ((= () V1579) 0) ((cons? V1579) (+ (* (shen.expt 10 (- 0 V1580)) (hd V1579)) (shen.post (tl V1579) (+ V1580 1)))) (true (shen.sys-error shen.post)))) +(defun shen.post (V1586 V1587) (cond ((= () V1586) 0) ((cons? V1586) (+ (* (shen.expt 10 (- 0 V1587)) (hd V1586)) (shen.post (tl V1586) (+ V1587 1)))) (true (shen.sys-error shen.post)))) -(defun shen.expt (V1583 V1584) (cond ((= 0 V1584) 1) ((> V1584 0) (* V1583 (shen.expt V1583 (- V1584 1)))) (true (* 1 (/ (shen.expt V1583 (+ V1584 1)) V1583))))) +(defun shen.expt (V1590 V1591) (cond ((= 0 V1591) 1) ((> V1591 0) (* V1590 (shen.expt V1590 (- V1591 1)))) (true (* 1 (/ (shen.expt V1590 (+ V1591 1)) V1590))))) -(defun shen. (V1589) (let Result (let Parse_shen. (shen. V1589) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1596) (let Result (let Parse_shen. (shen. V1596) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1594) (let Result (let Parse_shen. (shen. V1594) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1601) (let Result (let Parse_shen. (shen. V1601) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1599) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1599) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1606) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1606) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1604) (let Result (let Parse_shen. (shen. V1604) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1611) (let Result (let Parse_shen. (shen. V1611) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1609) (let Result (if (and (cons? (hd V1609)) (= 92 (hd (hd V1609)))) (shen.pair (hd (shen.pair (tl (hd V1609)) (shen.hdtl V1609))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1616) (let Result (if (and (cons? (hd V1616)) (= 92 (hd (hd V1616)))) (shen.pair (hd (shen.pair (tl (hd V1616)) (shen.hdtl V1616))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1614) (let Result (let Parse_shen. (shen. V1614) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1614) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1621) (let Result (let Parse_shen. (shen. V1621) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1621) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1619) (let Result (if (cons? (hd V1619)) (let Parse_X (hd (hd V1619)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1619)) (shen.hdtl V1619))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1626) (let Result (if (cons? (hd V1626)) (let Parse_X (hd (hd V1626)) (if (not (element? Parse_X (cons 10 (cons 13 ())))) (shen.pair (hd (shen.pair (tl (hd V1626)) (shen.hdtl V1626))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1624) (let Result (if (cons? (hd V1624)) (let Parse_X (hd (hd V1624)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1624)) (shen.hdtl V1624))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1631) (let Result (if (cons? (hd V1631)) (let Parse_X (hd (hd V1631)) (if (element? Parse_X (cons 10 (cons 13 ()))) (shen.pair (hd (shen.pair (tl (hd V1631)) (shen.hdtl V1631))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1629) (let Result (let Parse_shen. (shen. V1629) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1636) (let Result (let Parse_shen. (shen. V1636) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1634) (let Result (if (and (cons? (hd V1634)) (= 42 (hd (hd V1634)))) (shen.pair (hd (shen.pair (tl (hd V1634)) (shen.hdtl V1634))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1641) (let Result (if (and (cons? (hd V1641)) (= 42 (hd (hd V1641)))) (shen.pair (hd (shen.pair (tl (hd V1641)) (shen.hdtl V1641))) shen.skip) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1639) (let Result (let Parse_shen. (shen. V1639) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1639) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1639)) (let Parse_X (hd (hd V1639)) (let Parse_shen. (shen. (shen.pair (tl (hd V1639)) (shen.hdtl V1639))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1646) (let Result (let Parse_shen. (shen. V1646) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1646) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (if (cons? (hd V1646)) (let Parse_X (hd (hd V1646)) (let Parse_shen. (shen. (shen.pair (tl (hd V1646)) (shen.hdtl V1646))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail)))) (fail)) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1644) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1644) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1651) (let Result (let Parse_shen. (shen. V1651) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1651) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) shen.skip) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1649) (let Result (if (cons? (hd V1649)) (let Parse_X (hd (hd V1649)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1649)) (shen.hdtl V1649))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1656) (let Result (if (cons? (hd V1656)) (let Parse_X (hd (hd V1656)) (if (let Parse_Case Parse_X (or (= Parse_Case 32) (or (= Parse_Case 13) (or (= Parse_Case 10) (= Parse_Case 9))))) (shen.pair (hd (shen.pair (tl (hd V1656)) (shen.hdtl V1656))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.cons_form (V1650) (cond ((= () V1650) ()) ((and (cons? V1650) (and (cons? (tl V1650)) (and (cons? (tl (tl V1650))) (and (= () (tl (tl (tl V1650)))) (= (hd (tl V1650)) bar!))))) (cons cons (cons (hd V1650) (tl (tl V1650))))) ((cons? V1650) (cons cons (cons (hd V1650) (cons (shen.cons_form (tl V1650)) ())))) (true (shen.sys-error shen.cons_form)))) +(defun shen.cons_form (V1657) (cond ((= () V1657) ()) ((and (cons? V1657) (and (cons? (tl V1657)) (and (cons? (tl (tl V1657))) (and (= () (tl (tl (tl V1657)))) (= (hd (tl V1657)) bar!))))) (cons cons (cons (hd V1657) (tl (tl V1657))))) ((cons? V1657) (cons cons (cons (hd V1657) (cons (shen.cons_form (tl V1657)) ())))) (true (shen.sys-error shen.cons_form)))) -(defun shen.package-macro (V1653 V1654) (cond ((and (cons? V1653) (and (= $ (hd V1653)) (and (cons? (tl V1653)) (= () (tl (tl V1653)))))) (append (explode (hd (tl V1653))) V1654)) ((and (cons? V1653) (and (= package (hd V1653)) (and (cons? (tl V1653)) (and (= null (hd (tl V1653))) (cons? (tl (tl V1653))))))) (append (tl (tl (tl V1653))) V1654)) ((and (cons? V1653) (and (= package (hd V1653)) (and (cons? (tl V1653)) (cons? (tl (tl V1653)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1653)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1653))) (let PackageNameDot (intern (cn (str (hd (tl V1653))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1653)))) V1654))))) (true (cons V1653 V1654)))) +(defun shen.package-macro (V1660 V1661) (cond ((and (cons? V1660) (and (= $ (hd V1660)) (and (cons? (tl V1660)) (= () (tl (tl V1660)))))) (append (explode (hd (tl V1660))) V1661)) ((and (cons? V1660) (and (= package (hd V1660)) (and (cons? (tl V1660)) (and (= null (hd (tl V1660))) (cons? (tl (tl V1660))))))) (append (tl (tl (tl V1660))) V1661)) ((and (cons? V1660) (and (= package (hd V1660)) (and (cons? (tl V1660)) (cons? (tl (tl V1660)))))) (let ListofExceptions (shen.eval-without-macros (hd (tl (tl V1660)))) (let Record (shen.record-exceptions ListofExceptions (hd (tl V1660))) (let PackageNameDot (intern (cn (str (hd (tl V1660))) ".")) (append (shen.packageh PackageNameDot ListofExceptions (tl (tl (tl V1660)))) V1661))))) (true (cons V1660 V1661)))) -(defun shen.record-exceptions (V1655 V1656) (let CurrExceptions (trap-error (get V1656 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1655 CurrExceptions) (put V1656 shen.external-symbols AllExceptions (value *property-vector*))))) +(defun shen.record-exceptions (V1662 V1663) (let CurrExceptions (trap-error (get V1663 shen.external-symbols (value *property-vector*)) (lambda E ())) (let AllExceptions (union V1662 CurrExceptions) (put V1663 shen.external-symbols AllExceptions (value *property-vector*))))) -(defun shen.packageh (V1665 V1666 V1667) (cond ((cons? V1667) (cons (shen.packageh V1665 V1666 (hd V1667)) (shen.packageh V1665 V1666 (tl V1667)))) ((or (shen.sysfunc? V1667) (or (variable? V1667) (or (element? V1667 V1666) (or (shen.doubleunderline? V1667) (shen.singleunderline? V1667))))) V1667) ((and (symbol? V1667) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1667)))) (concat V1665 V1667)) (true V1667))) +(defun shen.packageh (V1672 V1673 V1674) (cond ((cons? V1674) (cons (shen.packageh V1672 V1673 (hd V1674)) (shen.packageh V1672 V1673 (tl V1674)))) ((or (shen.sysfunc? V1674) (or (variable? V1674) (or (element? V1674 V1673) (or (shen.doubleunderline? V1674) (shen.singleunderline? V1674))))) V1674) ((and (symbol? V1674) (not (shen.prefix? (cons "s" (cons "h" (cons "e" (cons "n" (cons "." ()))))) (explode V1674)))) (concat V1672 V1674)) (true V1674))) diff --git a/shen/klambda/sequent.kl b/shen/klambda/sequent.kl index 2698c7c..5be3183 100644 --- a/shen/klambda/sequent.kl +++ b/shen/klambda/sequent.kl @@ -47,118 +47,118 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.datatype-error (V1679) (cond ((and (cons? V1679) (and (cons? (tl V1679)) (= () (tl (tl V1679))))) (simple-error (cn "datatype syntax error here: +"(defun shen.datatype-error (V1686) (cond ((and (cons? V1686) (and (cons? (tl V1686)) (= () (tl (tl V1686))))) (simple-error (cn "datatype syntax error here: - " (shen.app (shen.next-50 50 (hd V1679)) " + " (shen.app (shen.next-50 50 (hd V1686)) " " shen.a)))) (true (shen.sys-error shen.datatype-error)))) -(defun shen. (V1684) (let Result (let Parse_shen. (shen. V1684) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1684) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1691) (let Result (let Parse_shen. (shen. V1691) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1691) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1689) (let Result (let Parse_shen. (shen. V1689) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1689) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1696) (let Result (let Parse_shen. (shen. V1696) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.single (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1696) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent shen.double (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ()))))) (fail))) (fail))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1694) (let Result (let Parse_shen. (shen. V1694) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1694) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1701) (let Result (let Parse_shen. (shen. V1701) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1701) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1699) (let Result (if (and (cons? (hd V1699)) (= if (hd (hd V1699)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1699)) (shen.hdtl V1699))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1699)) (= let (hd (hd V1699)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1699)) (shen.hdtl V1699))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1706) (let Result (if (and (cons? (hd V1706)) (= if (hd (hd V1706)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1706)) (shen.hdtl V1706))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons if (cons (shen.hdtl Parse_shen.) ()))) (fail))) (fail)) (if (= Result (fail)) (let Result (if (and (cons? (hd V1706)) (= let (hd (hd V1706)))) (let Parse_shen. (shen. (shen.pair (tl (hd V1706)) (shen.hdtl V1706))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons let (cons (shen.hdtl Parse_shen.) (cons (shen.hdtl Parse_shen.) ())))) (fail))) (fail))) (fail)) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1704) (let Result (if (cons? (hd V1704)) (let Parse_X (hd (hd V1704)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1704)) (shen.hdtl V1704))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1711) (let Result (if (cons? (hd V1711)) (let Parse_X (hd (hd V1711)) (if (variable? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1711)) (shen.hdtl V1711))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1709) (let Result (if (cons? (hd V1709)) (let Parse_X (hd (hd V1709)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1709)) (shen.hdtl V1709))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1716) (let Result (if (cons? (hd V1716)) (let Parse_X (hd (hd V1716)) (if (not (or (element? Parse_X (cons >> (cons ; ()))) (or (shen.singleunderline? Parse_X) (shen.doubleunderline? Parse_X)))) (shen.pair (hd (shen.pair (tl (hd V1716)) (shen.hdtl V1716))) (shen.remove-bar Parse_X)) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.remove-bar (V1710) (cond ((and (cons? V1710) (and (cons? (tl V1710)) (and (cons? (tl (tl V1710))) (and (= () (tl (tl (tl V1710)))) (= (hd (tl V1710)) bar!))))) (cons (hd V1710) (hd (tl (tl V1710))))) ((cons? V1710) (cons (shen.remove-bar (hd V1710)) (shen.remove-bar (tl V1710)))) (true V1710))) +(defun shen.remove-bar (V1717) (cond ((and (cons? V1717) (and (cons? (tl V1717)) (and (cons? (tl (tl V1717))) (and (= () (tl (tl (tl V1717)))) (= (hd (tl V1717)) bar!))))) (cons (hd V1717) (hd (tl (tl V1717))))) ((cons? V1717) (cons (shen.remove-bar (hd V1717)) (shen.remove-bar (tl V1717)))) (true V1717))) -(defun shen. (V1715) (let Result (let Parse_shen. (shen. V1715) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1715) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1722) (let Result (let Parse_shen. (shen. V1722) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1722) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1720) (let Result (if (cons? (hd V1720)) (let Parse_X (hd (hd V1720)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1720)) (shen.hdtl V1720))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1727) (let Result (if (cons? (hd V1727)) (let Parse_X (hd (hd V1727)) (if (= Parse_X ;) (shen.pair (hd (shen.pair (tl (hd V1727)) (shen.hdtl V1727))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1725) (let Result (if (and (cons? (hd V1725)) (= ! (hd (hd V1725)))) (shen.pair (hd (shen.pair (tl (hd V1725)) (shen.hdtl V1725))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1725) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1725) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1732) (let Result (if (and (cons? (hd V1732)) (= ! (hd (hd V1732)))) (shen.pair (hd (shen.pair (tl (hd V1732)) (shen.hdtl V1732))) !) (fail)) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1732) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1732) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1730) (let Result (let Parse_shen. (shen. V1730) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1730) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1737) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= >> (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.sequent () (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen.sequent (V1731 V1732) (@p V1731 V1732)) +(defun shen.sequent (V1738 V1739) (@p V1738 V1739)) -(defun shen. (V1737) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1737) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1737) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) +(defun shen. (V1744) (let Result (let Parse_shen. (shen. V1744) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1744) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) ())) (fail))) (if (= Result (fail)) (let Result (let Parse_ ( V1744) (if (not (= (fail) Parse_)) (shen.pair (hd Parse_) ()) (fail))) (if (= Result (fail)) (fail) Result)) Result)) Result))) -(defun shen. (V1742) (let Result (if (cons? (hd V1742)) (let Parse_X (hd (hd V1742)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1742)) (shen.hdtl V1742))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1749) (let Result (if (cons? (hd V1749)) (let Parse_X (hd (hd V1749)) (if (= Parse_X (intern ",")) (shen.pair (hd (shen.pair (tl (hd V1749)) (shen.hdtl V1749))) shen.skip) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1747) (let Result (let Parse_shen. (shen. V1747) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1747) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) +(defun shen. (V1754) (let Result (let Parse_shen. (shen. V1754) (if (not (= (fail) Parse_shen.)) (if (and (cons? (hd Parse_shen.)) (= : (hd (hd Parse_shen.)))) (let Parse_shen. (shen. (shen.pair (tl (hd Parse_shen.)) (shen.hdtl Parse_shen.))) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.curry (shen.hdtl Parse_shen.)) (cons : (cons (shen.demodulate (shen.hdtl Parse_shen.)) ())))) (fail))) (fail)) (fail))) (if (= Result (fail)) (let Result (let Parse_shen. (shen. V1754) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.hdtl Parse_shen.)) (fail))) (if (= Result (fail)) (fail) Result)) Result))) -(defun shen. (V1752) (let Result (let Parse_shen. (shen. V1752) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1759) (let Result (let Parse_shen. (shen. V1759) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (shen.curry-type (shen.hdtl Parse_shen.))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1757) (let Result (if (cons? (hd V1757)) (let Parse_X (hd (hd V1757)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1757)) (shen.hdtl V1757))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1764) (let Result (if (cons? (hd V1764)) (let Parse_X (hd (hd V1764)) (if (shen.doubleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1764)) (shen.hdtl V1764))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen. (V1762) (let Result (if (cons? (hd V1762)) (let Parse_X (hd (hd V1762)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1762)) (shen.hdtl V1762))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) +(defun shen. (V1769) (let Result (if (cons? (hd V1769)) (let Parse_X (hd (hd V1769)) (if (shen.singleunderline? Parse_X) (shen.pair (hd (shen.pair (tl (hd V1769)) (shen.hdtl V1769))) Parse_X) (fail))) (fail)) (if (= Result (fail)) (fail) Result))) -(defun shen.singleunderline? (V1763) (and (symbol? V1763) (shen.sh? (str V1763)))) +(defun shen.singleunderline? (V1770) (and (symbol? V1770) (shen.sh? (str V1770)))) -(defun shen.sh? (V1764) (cond ((= "_" V1764) true) (true (and (= (pos V1764 0) "_") (shen.sh? (tlstr V1764)))))) +(defun shen.sh? (V1771) (cond ((= "_" V1771) true) (true (and (= (pos V1771 0) "_") (shen.sh? (tlstr V1771)))))) -(defun shen.doubleunderline? (V1765) (and (symbol? V1765) (shen.dh? (str V1765)))) +(defun shen.doubleunderline? (V1772) (and (symbol? V1772) (shen.dh? (str V1772)))) -(defun shen.dh? (V1766) (cond ((= "=" V1766) true) (true (and (= (pos V1766 0) "=") (shen.dh? (tlstr V1766)))))) +(defun shen.dh? (V1773) (cond ((= "=" V1773) true) (true (and (= (pos V1773 0) "=") (shen.dh? (tlstr V1773)))))) -(defun shen.process-datatype (V1767 V1768) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1767 V1768)))) +(defun shen.process-datatype (V1774 V1775) (shen.remember-datatype (shen.s-prolog (shen.rules->horn-clauses V1774 V1775)))) -(defun shen.remember-datatype (V1773) (cond ((cons? V1773) (do (set shen.*datatypes* (adjoin (hd V1773) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1773) (value shen.*alldatatypes*))) (hd V1773)))) (true (shen.sys-error shen.remember-datatype)))) +(defun shen.remember-datatype (V1780) (cond ((cons? V1780) (do (set shen.*datatypes* (adjoin (hd V1780) (value shen.*datatypes*))) (do (set shen.*alldatatypes* (adjoin (hd V1780) (value shen.*alldatatypes*))) (hd V1780)))) (true (shen.sys-error shen.remember-datatype)))) -(defun shen.rules->horn-clauses (V1776 V1777) (cond ((= () V1777) ()) ((and (cons? V1777) (and (tuple? (hd V1777)) (= shen.single (fst (hd V1777))))) (cons (shen.rule->horn-clause V1776 (snd (hd V1777))) (shen.rules->horn-clauses V1776 (tl V1777)))) ((and (cons? V1777) (and (tuple? (hd V1777)) (= shen.double (fst (hd V1777))))) (shen.rules->horn-clauses V1776 (append (shen.double->singles (snd (hd V1777))) (tl V1777)))) (true (shen.sys-error shen.rules->horn-clauses)))) +(defun shen.rules->horn-clauses (V1783 V1784) (cond ((= () V1784) ()) ((and (cons? V1784) (and (tuple? (hd V1784)) (= shen.single (fst (hd V1784))))) (cons (shen.rule->horn-clause V1783 (snd (hd V1784))) (shen.rules->horn-clauses V1783 (tl V1784)))) ((and (cons? V1784) (and (tuple? (hd V1784)) (= shen.double (fst (hd V1784))))) (shen.rules->horn-clauses V1783 (append (shen.double->singles (snd (hd V1784))) (tl V1784)))) (true (shen.sys-error shen.rules->horn-clauses)))) -(defun shen.double->singles (V1778) (cons (shen.right-rule V1778) (cons (shen.left-rule V1778) ()))) +(defun shen.double->singles (V1785) (cons (shen.right-rule V1785) (cons (shen.left-rule V1785) ()))) -(defun shen.right-rule (V1779) (@p shen.single V1779)) +(defun shen.right-rule (V1786) (@p shen.single V1786)) -(defun shen.left-rule (V1780) (cond ((and (cons? V1780) (and (cons? (tl V1780)) (and (cons? (tl (tl V1780))) (and (tuple? (hd (tl (tl V1780)))) (and (= () (fst (hd (tl (tl V1780))))) (= () (tl (tl (tl V1780))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1780)))) ()) Q) (let NewPremises (cons (@p (map (lambda X1668 (shen.right->left X1668)) (hd (tl V1780))) Q) ()) (@p shen.single (cons (hd V1780) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) +(defun shen.left-rule (V1787) (cond ((and (cons? V1787) (and (cons? (tl V1787)) (and (cons? (tl (tl V1787))) (and (tuple? (hd (tl (tl V1787)))) (and (= () (fst (hd (tl (tl V1787))))) (= () (tl (tl (tl V1787))))))))) (let Q (gensym Qv) (let NewConclusion (@p (cons (snd (hd (tl (tl V1787)))) ()) Q) (let NewPremises (cons (@p (map (lambda X1675 (shen.right->left X1675)) (hd (tl V1787))) Q) ()) (@p shen.single (cons (hd V1787) (cons NewPremises (cons NewConclusion ())))))))) (true (shen.sys-error shen.left-rule)))) -(defun shen.right->left (V1785) (cond ((and (tuple? V1785) (= () (fst V1785))) (snd V1785)) (true (simple-error "syntax error with ========== +(defun shen.right->left (V1792) (cond ((and (tuple? V1792) (= () (fst V1792))) (snd V1792)) (true (simple-error "syntax error with ========== ")))) -(defun shen.rule->horn-clause (V1786 V1787) (cond ((and (cons? V1787) (and (cons? (tl V1787)) (and (cons? (tl (tl V1787))) (and (tuple? (hd (tl (tl V1787)))) (= () (tl (tl (tl V1787)))))))) (cons (shen.rule->horn-clause-head V1786 (snd (hd (tl (tl V1787))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1787) (hd (tl V1787)) (fst (hd (tl (tl V1787))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) +(defun shen.rule->horn-clause (V1793 V1794) (cond ((and (cons? V1794) (and (cons? (tl V1794)) (and (cons? (tl (tl V1794))) (and (tuple? (hd (tl (tl V1794)))) (= () (tl (tl (tl V1794)))))))) (cons (shen.rule->horn-clause-head V1793 (snd (hd (tl (tl V1794))))) (cons :- (cons (shen.rule->horn-clause-body (hd V1794) (hd (tl V1794)) (fst (hd (tl (tl V1794))))) ())))) (true (shen.sys-error shen.rule->horn-clause)))) -(defun shen.rule->horn-clause-head (V1788 V1789) (cons V1788 (cons (shen.mode-ify V1789) (cons Context_1957 ())))) +(defun shen.rule->horn-clause-head (V1795 V1796) (cons V1795 (cons (shen.mode-ify V1796) (cons Context_1957 ())))) -(defun shen.mode-ify (V1790) (cond ((and (cons? V1790) (and (cons? (tl V1790)) (and (= : (hd (tl V1790))) (and (cons? (tl (tl V1790))) (= () (tl (tl (tl V1790)))))))) (cons mode (cons (cons (hd V1790) (cons : (cons (cons mode (cons (hd (tl (tl V1790))) (cons + ()))) ()))) (cons - ())))) (true V1790))) +(defun shen.mode-ify (V1797) (cond ((and (cons? V1797) (and (cons? (tl V1797)) (and (= : (hd (tl V1797))) (and (cons? (tl (tl V1797))) (= () (tl (tl (tl V1797)))))))) (cons mode (cons (cons (hd V1797) (cons : (cons (cons mode (cons (hd (tl (tl V1797))) (cons + ()))) ()))) (cons - ())))) (true V1797))) -(defun shen.rule->horn-clause-body (V1791 V1792 V1793) (let Variables (map (lambda X1669 (shen.extract_vars X1669)) V1793) (let Predicates (map (lambda X (gensym shen.cl)) V1793) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1793 Variables) (let SideLiterals (shen.construct-side-literals V1791) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1793))) V1792) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) +(defun shen.rule->horn-clause-body (V1798 V1799 V1800) (let Variables (map (lambda X1676 (shen.extract_vars X1676)) V1800) (let Predicates (map (lambda X (gensym shen.cl)) V1800) (let SearchLiterals (shen.construct-search-literals Predicates Variables Context_1957 Context1_1957) (let SearchClauses (shen.construct-search-clauses Predicates V1800 Variables) (let SideLiterals (shen.construct-side-literals V1798) (let PremissLiterals (map (lambda X (shen.construct-premiss-literal X (empty? V1800))) V1799) (append SearchLiterals (append SideLiterals PremissLiterals))))))))) -(defun shen.construct-search-literals (V1798 V1799 V1800 V1801) (cond ((and (= () V1798) (= () V1799)) ()) (true (shen.csl-help V1798 V1799 V1800 V1801)))) +(defun shen.construct-search-literals (V1805 V1806 V1807 V1808) (cond ((and (= () V1805) (= () V1806)) ()) (true (shen.csl-help V1805 V1806 V1807 V1808)))) -(defun shen.csl-help (V1804 V1805 V1806 V1807) (cond ((and (= () V1804) (= () V1805)) (cons (cons bind (cons ContextOut_1957 (cons V1806 ()))) ())) ((and (cons? V1804) (cons? V1805)) (cons (cons (hd V1804) (cons V1806 (cons V1807 (hd V1805)))) (shen.csl-help (tl V1804) (tl V1805) V1807 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) +(defun shen.csl-help (V1811 V1812 V1813 V1814) (cond ((and (= () V1811) (= () V1812)) (cons (cons bind (cons ContextOut_1957 (cons V1813 ()))) ())) ((and (cons? V1811) (cons? V1812)) (cons (cons (hd V1811) (cons V1813 (cons V1814 (hd V1812)))) (shen.csl-help (tl V1811) (tl V1812) V1814 (gensym Context)))) (true (shen.sys-error shen.csl-help)))) -(defun shen.construct-search-clauses (V1808 V1809 V1810) (cond ((and (= () V1808) (and (= () V1809) (= () V1810))) shen.skip) ((and (cons? V1808) (and (cons? V1809) (cons? V1810))) (do (shen.construct-search-clause (hd V1808) (hd V1809) (hd V1810)) (shen.construct-search-clauses (tl V1808) (tl V1809) (tl V1810)))) (true (shen.sys-error shen.construct-search-clauses)))) +(defun shen.construct-search-clauses (V1815 V1816 V1817) (cond ((and (= () V1815) (and (= () V1816) (= () V1817))) shen.skip) ((and (cons? V1815) (and (cons? V1816) (cons? V1817))) (do (shen.construct-search-clause (hd V1815) (hd V1816) (hd V1817)) (shen.construct-search-clauses (tl V1815) (tl V1816) (tl V1817)))) (true (shen.sys-error shen.construct-search-clauses)))) -(defun shen.construct-search-clause (V1811 V1812 V1813) (shen.s-prolog (cons (shen.construct-base-search-clause V1811 V1812 V1813) (cons (shen.construct-recursive-search-clause V1811 V1812 V1813) ())))) +(defun shen.construct-search-clause (V1818 V1819 V1820) (shen.s-prolog (cons (shen.construct-base-search-clause V1818 V1819 V1820) (cons (shen.construct-recursive-search-clause V1818 V1819 V1820) ())))) -(defun shen.construct-base-search-clause (V1814 V1815 V1816) (cons (cons V1814 (cons (cons (shen.mode-ify V1815) In_1957) (cons In_1957 V1816))) (cons :- (cons () ())))) +(defun shen.construct-base-search-clause (V1821 V1822 V1823) (cons (cons V1821 (cons (cons (shen.mode-ify V1822) In_1957) (cons In_1957 V1823))) (cons :- (cons () ())))) -(defun shen.construct-recursive-search-clause (V1817 V1818 V1819) (cons (cons V1817 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1819))) (cons :- (cons (cons (cons V1817 (cons Assumptions_1957 (cons Out_1957 V1819))) ()) ())))) +(defun shen.construct-recursive-search-clause (V1824 V1825 V1826) (cons (cons V1824 (cons (cons Assumption_1957 Assumptions_1957) (cons (cons Assumption_1957 Out_1957) V1826))) (cons :- (cons (cons (cons V1824 (cons Assumptions_1957 (cons Out_1957 V1826))) ()) ())))) -(defun shen.construct-side-literals (V1824) (cond ((= () V1824) ()) ((and (cons? V1824) (and (cons? (hd V1824)) (and (= if (hd (hd V1824))) (and (cons? (tl (hd V1824))) (= () (tl (tl (hd V1824)))))))) (cons (cons when (tl (hd V1824))) (shen.construct-side-literals (tl V1824)))) ((and (cons? V1824) (and (cons? (hd V1824)) (and (= let (hd (hd V1824))) (and (cons? (tl (hd V1824))) (and (cons? (tl (tl (hd V1824)))) (= () (tl (tl (tl (hd V1824)))))))))) (cons (cons is (tl (hd V1824))) (shen.construct-side-literals (tl V1824)))) ((cons? V1824) (shen.construct-side-literals (tl V1824))) (true (shen.sys-error shen.construct-side-literals)))) +(defun shen.construct-side-literals (V1831) (cond ((= () V1831) ()) ((and (cons? V1831) (and (cons? (hd V1831)) (and (= if (hd (hd V1831))) (and (cons? (tl (hd V1831))) (= () (tl (tl (hd V1831)))))))) (cons (cons when (tl (hd V1831))) (shen.construct-side-literals (tl V1831)))) ((and (cons? V1831) (and (cons? (hd V1831)) (and (= let (hd (hd V1831))) (and (cons? (tl (hd V1831))) (and (cons? (tl (tl (hd V1831)))) (= () (tl (tl (tl (hd V1831)))))))))) (cons (cons is (tl (hd V1831))) (shen.construct-side-literals (tl V1831)))) ((cons? V1831) (shen.construct-side-literals (tl V1831))) (true (shen.sys-error shen.construct-side-literals)))) -(defun shen.construct-premiss-literal (V1829 V1830) (cond ((tuple? V1829) (cons shen.t* (cons (shen.recursive_cons_form (snd V1829)) (cons (shen.construct-context V1830 (fst V1829)) ())))) ((= ! V1829) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) +(defun shen.construct-premiss-literal (V1836 V1837) (cond ((tuple? V1836) (cons shen.t* (cons (shen.recursive_cons_form (snd V1836)) (cons (shen.construct-context V1837 (fst V1836)) ())))) ((= ! V1836) (cons cut (cons Throwcontrol ()))) (true (shen.sys-error shen.construct-premiss-literal)))) -(defun shen.construct-context (V1831 V1832) (cond ((and (= true V1831) (= () V1832)) Context_1957) ((and (= false V1831) (= () V1832)) ContextOut_1957) ((cons? V1832) (cons cons (cons (shen.recursive_cons_form (hd V1832)) (cons (shen.construct-context V1831 (tl V1832)) ())))) (true (shen.sys-error shen.construct-context)))) +(defun shen.construct-context (V1838 V1839) (cond ((and (= true V1838) (= () V1839)) Context_1957) ((and (= false V1838) (= () V1839)) ContextOut_1957) ((cons? V1839) (cons cons (cons (shen.recursive_cons_form (hd V1839)) (cons (shen.construct-context V1838 (tl V1839)) ())))) (true (shen.sys-error shen.construct-context)))) -(defun shen.recursive_cons_form (V1833) (cond ((cons? V1833) (cons cons (cons (shen.recursive_cons_form (hd V1833)) (cons (shen.recursive_cons_form (tl V1833)) ())))) (true V1833))) +(defun shen.recursive_cons_form (V1840) (cond ((cons? V1840) (cons cons (cons (shen.recursive_cons_form (hd V1840)) (cons (shen.recursive_cons_form (tl V1840)) ())))) (true V1840))) -(defun preclude (V1834) (shen.preclude-h (map (lambda X1670 (shen.intern-type X1670)) V1834))) +(defun preclude (V1841) (shen.preclude-h (map (lambda X1677 (shen.intern-type X1677)) V1841))) -(defun shen.preclude-h (V1835) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1835)) (value shen.*datatypes*))) +(defun shen.preclude-h (V1842) (let FilterDatatypes (set shen.*datatypes* (difference (value shen.*datatypes*) V1842)) (value shen.*datatypes*))) -(defun include (V1836) (shen.include-h (map (lambda X1671 (shen.intern-type X1671)) V1836))) +(defun include (V1843) (shen.include-h (map (lambda X1678 (shen.intern-type X1678)) V1843))) -(defun shen.include-h (V1837) (let ValidTypes (intersection V1837 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) +(defun shen.include-h (V1844) (let ValidTypes (intersection V1844 (value shen.*alldatatypes*)) (let NewDatatypes (set shen.*datatypes* (union ValidTypes (value shen.*datatypes*))) (value shen.*datatypes*)))) -(defun preclude-all-but (V1838) (shen.preclude-h (difference (value shen.*alldatatypes*) (map (lambda X1672 (shen.intern-type X1672)) V1838)))) +(defun preclude-all-but (V1845) (shen.preclude-h (difference (value shen.*alldatatypes*) (map (lambda X1679 (shen.intern-type X1679)) V1845)))) -(defun include-all-but (V1839) (shen.include-h (difference (value shen.*alldatatypes*) (map (lambda X1673 (shen.intern-type X1673)) V1839)))) +(defun include-all-but (V1846) (shen.include-h (difference (value shen.*alldatatypes*) (map (lambda X1680 (shen.intern-type X1680)) V1846)))) -(defun shen.synonyms-help (V1844) (cond ((= () V1844) (shen.demodulation-function (value shen.*tc*) (mapcan (lambda X1674 (shen.demod-rule X1674)) (value shen.*synonyms*)))) ((and (cons? V1844) (cons? (tl V1844))) (do (shen.pushnew (cons (hd V1844) (cons (hd (tl V1844)) ())) shen.*synonyms*) (shen.synonyms-help (tl (tl V1844))))) (true (simple-error "odd number of synonyms +(defun shen.synonyms-help (V1851) (cond ((= () V1851) (shen.demodulation-function (value shen.*tc*) (mapcan (lambda X1681 (shen.demod-rule X1681)) (value shen.*synonyms*)))) ((and (cons? V1851) (cons? (tl V1851))) (let Vs (difference (shen.extract_vars (hd (tl V1851))) (shen.extract_vars (hd V1851))) (if (empty? Vs) (do (shen.pushnew (cons (hd V1851) (cons (hd (tl V1851)) ())) shen.*synonyms*) (shen.synonyms-help (tl (tl V1851)))) (shen.free_variable_warnings (hd (tl V1851)) Vs)))) (true (simple-error "odd number of synonyms ")))) -(defun shen.pushnew (V1845 V1846) (if (element? V1845 (value V1846)) (value V1846) (set V1846 (cons V1845 (value V1846))))) +(defun shen.pushnew (V1852 V1853) (if (element? V1852 (value V1853)) (value V1853) (set V1853 (cons V1852 (value V1853))))) -(defun shen.demod-rule (V1847) (cond ((and (cons? V1847) (and (cons? (tl V1847)) (= () (tl (tl V1847))))) (cons (shen.rcons_form (hd V1847)) (cons -> (cons (shen.rcons_form (hd (tl V1847))) ())))) (true (shen.sys-error shen.demod-rule)))) +(defun shen.demod-rule (V1854) (cond ((and (cons? V1854) (and (cons? (tl V1854)) (= () (tl (tl V1854))))) (cons (shen.rcons_form (hd V1854)) (cons -> (cons (shen.rcons_form (hd (tl V1854))) ())))) (true (shen.sys-error shen.demod-rule)))) -(defun shen.demodulation-function (V1848 V1849) (do (tc -) (do (eval (cons define (cons shen.demod (append V1849 (shen.default-rule))))) (do (if V1848 (tc +) shen.skip) synonyms)))) +(defun shen.demodulation-function (V1855 V1856) (do (tc -) (do (eval (cons define (cons shen.demod (append V1856 (shen.default-rule))))) (do (if V1855 (tc +) shen.skip) synonyms)))) (defun shen.default-rule () (cons X (cons -> (cons X ())))) diff --git a/shen/klambda/sys.kl b/shen/klambda/sys.kl index ec2c17c..a3a64cb 100644 --- a/shen/klambda/sys.kl +++ b/shen/klambda/sys.kl @@ -47,210 +47,210 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun thaw (V1855) (V1855)) +"(defun thaw (V1862) (V1862)) -(defun eval (V1856) (let Macroexpand (shen.walk (lambda X1850 (macroexpand X1850)) V1856) (if (shen.packaged? Macroexpand) (map (lambda X1851 (shen.eval-without-macros X1851)) (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) +(defun eval (V1863) (let Macroexpand (shen.walk (lambda X1857 (macroexpand X1857)) V1863) (if (shen.packaged? Macroexpand) (map (lambda X1858 (shen.eval-without-macros X1858)) (shen.package-contents Macroexpand)) (shen.eval-without-macros Macroexpand)))) -(defun shen.eval-without-macros (V1857) (eval-kl (shen.elim-def (shen.proc-input+ V1857)))) +(defun shen.eval-without-macros (V1864) (eval-kl (shen.elim-def (shen.proc-input+ V1864)))) -(defun shen.proc-input+ (V1858) (cond ((and (cons? V1858) (and (= input+ (hd V1858)) (and (cons? (tl V1858)) (and (cons? (tl (tl V1858))) (= () (tl (tl (tl V1858)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1858))) (tl (tl V1858))))) ((and (cons? V1858) (and (= read+ (hd V1858)) (and (cons? (tl V1858)) (and (cons? (tl (tl V1858))) (= () (tl (tl (tl V1858)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1858))) (tl (tl V1858))))) ((cons? V1858) (map (lambda X1852 (shen.proc-input+ X1852)) V1858)) (true V1858))) +(defun shen.proc-input+ (V1865) (cond ((and (cons? V1865) (and (= input+ (hd V1865)) (and (cons? (tl V1865)) (and (cons? (tl (tl V1865))) (= () (tl (tl (tl V1865)))))))) (cons input+ (cons (shen.rcons_form (hd (tl V1865))) (tl (tl V1865))))) ((and (cons? V1865) (and (= read+ (hd V1865)) (and (cons? (tl V1865)) (and (cons? (tl (tl V1865))) (= () (tl (tl (tl V1865)))))))) (cons read+ (cons (shen.rcons_form (hd (tl V1865))) (tl (tl V1865))))) ((cons? V1865) (map (lambda X1859 (shen.proc-input+ X1859)) V1865)) (true V1865))) -(defun shen.elim-def (V1859) (cond ((and (cons? V1859) (and (= define (hd V1859)) (cons? (tl V1859)))) (shen.shen->kl (hd (tl V1859)) (tl (tl V1859)))) ((and (cons? V1859) (and (= defmacro (hd V1859)) (cons? (tl V1859)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1859)) (append (tl (tl V1859)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1859))) Def)))) ((and (cons? V1859) (and (= defcc (hd V1859)) (cons? (tl V1859)))) (shen.elim-def (shen.yacc V1859))) ((cons? V1859) (map (lambda X1853 (shen.elim-def X1853)) V1859)) (true V1859))) +(defun shen.elim-def (V1866) (cond ((and (cons? V1866) (and (= define (hd V1866)) (cons? (tl V1866)))) (shen.shen->kl (hd (tl V1866)) (tl (tl V1866)))) ((and (cons? V1866) (and (= defmacro (hd V1866)) (cons? (tl V1866)))) (let Default (cons X (cons -> (cons X ()))) (let Def (shen.elim-def (cons define (cons (hd (tl V1866)) (append (tl (tl V1866)) Default)))) (let MacroAdd (shen.add-macro (hd (tl V1866))) Def)))) ((and (cons? V1866) (and (= defcc (hd V1866)) (cons? (tl V1866)))) (shen.elim-def (shen.yacc V1866))) ((cons? V1866) (map (lambda X1860 (shen.elim-def X1860)) V1866)) (true V1866))) -(defun shen.add-macro (V1860) (set *macros* (adjoin V1860 (value *macros*)))) +(defun shen.add-macro (V1867) (set *macros* (adjoin V1867 (value *macros*)))) -(defun shen.packaged? (V1867) (cond ((and (cons? V1867) (and (= package (hd V1867)) (and (cons? (tl V1867)) (cons? (tl (tl V1867)))))) true) (true false))) +(defun shen.packaged? (V1874) (cond ((and (cons? V1874) (and (= package (hd V1874)) (and (cons? (tl V1874)) (cons? (tl (tl V1874)))))) true) (true false))) -(defun external (V1868) (trap-error (get V1868 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1868 " has not been used. +(defun external (V1875) (trap-error (get V1875 shen.external-symbols (value *property-vector*)) (lambda E (simple-error (cn "package " (shen.app V1875 " has not been used. " shen.a)))))) -(defun shen.package-contents (V1871) (cond ((and (cons? V1871) (and (= package (hd V1871)) (and (cons? (tl V1871)) (and (= null (hd (tl V1871))) (cons? (tl (tl V1871))))))) (tl (tl (tl V1871)))) ((and (cons? V1871) (and (= package (hd V1871)) (and (cons? (tl V1871)) (cons? (tl (tl V1871)))))) (shen.packageh (hd (tl V1871)) (hd (tl (tl V1871))) (tl (tl (tl V1871))))) (true (shen.sys-error shen.package-contents)))) +(defun shen.package-contents (V1878) (cond ((and (cons? V1878) (and (= package (hd V1878)) (and (cons? (tl V1878)) (and (= null (hd (tl V1878))) (cons? (tl (tl V1878))))))) (tl (tl (tl V1878)))) ((and (cons? V1878) (and (= package (hd V1878)) (and (cons? (tl V1878)) (cons? (tl (tl V1878)))))) (shen.packageh (hd (tl V1878)) (hd (tl (tl V1878))) (tl (tl (tl V1878))))) (true (shen.sys-error shen.package-contents)))) -(defun shen.walk (V1872 V1873) (cond ((cons? V1873) (V1872 (map (lambda Z (shen.walk V1872 Z)) V1873))) (true (V1872 V1873)))) +(defun shen.walk (V1879 V1880) (cond ((cons? V1880) (V1879 (map (lambda Z (shen.walk V1879 Z)) V1880))) (true (V1879 V1880)))) -(defun compile (V1874 V1875 V1876) (let O (V1874 (cons V1875 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1876 O) (shen.hdtl O)))) +(defun compile (V1881 V1882 V1883) (let O (V1881 (cons V1882 (cons () ()))) (if (or (= (fail) O) (not (empty? (hd O)))) (V1883 O) (shen.hdtl O)))) -(defun fail-if (V1877 V1878) (if (V1877 V1878) (fail) V1878)) +(defun fail-if (V1884 V1885) (if (V1884 V1885) (fail) V1885)) -(defun @s (V1879 V1880) (cn V1879 V1880)) +(defun @s (V1886 V1887) (cn V1886 V1887)) (defun tc? () (value shen.*tc*)) -(defun ps (V1881) (trap-error (get V1881 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1881 " not found. +(defun ps (V1888) (trap-error (get V1888 shen.source (value *property-vector*)) (lambda E (simple-error (shen.app V1888 " not found. " shen.a))))) (defun stinput () (value *stinput*)) -(defun shen.+vector? (V1882) (and (absvector? V1882) (> (<-address V1882 0) 0))) +(defun shen.+vector? (V1889) (and (absvector? V1889) (> (<-address V1889 0) 0))) -(defun vector (V1883) (let Vector (absvector (+ V1883 1)) (let ZeroStamp (address-> Vector 0 V1883) (let Standard (if (= V1883 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1883 (fail))) Standard)))) +(defun vector (V1890) (let Vector (absvector (+ V1890 1)) (let ZeroStamp (address-> Vector 0 V1890) (let Standard (if (= V1890 0) ZeroStamp (shen.fillvector ZeroStamp 1 V1890 (fail))) Standard)))) -(defun shen.fillvector (V1884 V1885 V1886 V1887) (cond ((= V1886 V1885) (address-> V1884 V1886 V1887)) (true (shen.fillvector (address-> V1884 V1885 V1887) (+ 1 V1885) V1886 V1887)))) +(defun shen.fillvector (V1891 V1892 V1893 V1894) (cond ((= V1893 V1892) (address-> V1891 V1893 V1894)) (true (shen.fillvector (address-> V1891 V1892 V1894) (+ 1 V1892) V1893 V1894)))) -(defun vector? (V1889) (and (absvector? V1889) (trap-error (>= (<-address V1889 0) 0) (lambda E false)))) +(defun vector? (V1896) (and (absvector? V1896) (trap-error (>= (<-address V1896 0) 0) (lambda E false)))) -(defun vector-> (V1890 V1891 V1892) (if (= V1891 0) (simple-error "cannot access 0th element of a vector -") (address-> V1890 V1891 V1892))) +(defun vector-> (V1897 V1898 V1899) (if (= V1898 0) (simple-error "cannot access 0th element of a vector +") (address-> V1897 V1898 V1899))) -(defun <-vector (V1893 V1894) (if (= V1894 0) (simple-error "cannot access 0th element of a vector -") (let VectorElement (<-address V1893 V1894) (if (= VectorElement (fail)) (simple-error "vector element not found +(defun <-vector (V1900 V1901) (if (= V1901 0) (simple-error "cannot access 0th element of a vector +") (let VectorElement (<-address V1900 V1901) (if (= VectorElement (fail)) (simple-error "vector element not found ") VectorElement)))) -(defun shen.posint? (V1895) (and (integer? V1895) (>= V1895 0))) +(defun shen.posint? (V1902) (and (integer? V1902) (>= V1902 0))) -(defun limit (V1896) (<-address V1896 0)) +(defun limit (V1903) (<-address V1903 0)) -(defun symbol? (V1897) (cond ((or (boolean? V1897) (or (number? V1897) (string? V1897))) false) (true (trap-error (let String (str V1897) (shen.analyse-symbol? String)) (lambda E false))))) +(defun symbol? (V1904) (cond ((or (boolean? V1904) (or (number? V1904) (string? V1904))) false) (true (trap-error (let String (str V1904) (shen.analyse-symbol? String)) (lambda E false))))) -(defun shen.analyse-symbol? (V1898) (cond ((shen.+string? V1898) (and (shen.alpha? (pos V1898 0)) (shen.alphanums? (tlstr V1898)))) (true (shen.sys-error shen.analyse-symbol?)))) +(defun shen.analyse-symbol? (V1905) (cond ((shen.+string? V1905) (and (shen.alpha? (pos V1905 0)) (shen.alphanums? (tlstr V1905)))) (true (shen.sys-error shen.analyse-symbol?)))) -(defun shen.alpha? (V1899) (element? V1899 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(defun shen.alpha? (V1906) (element? V1906 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" (cons "a" (cons "b" (cons "c" (cons "d" (cons "e" (cons "f" (cons "g" (cons "h" (cons "i" (cons "j" (cons "k" (cons "l" (cons "m" (cons "n" (cons "o" (cons "p" (cons "q" (cons "r" (cons "s" (cons "t" (cons "u" (cons "v" (cons "w" (cons "x" (cons "y" (cons "z" (cons "=" (cons "*" (cons "/" (cons "+" (cons "-" (cons "_" (cons "?" (cons "$" (cons "!" (cons "@" (cons "~" (cons ">" (cons "<" (cons "&" (cons "%" (cons "{" (cons "}" (cons ":" (cons ";" (cons "`" (cons "#" (cons "'" (cons "." ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -(defun shen.alphanums? (V1900) (cond ((= "" V1900) true) ((shen.+string? V1900) (and (shen.alphanum? (pos V1900 0)) (shen.alphanums? (tlstr V1900)))) (true (shen.sys-error shen.alphanums?)))) +(defun shen.alphanums? (V1907) (cond ((= "" V1907) true) ((shen.+string? V1907) (and (shen.alphanum? (pos V1907 0)) (shen.alphanums? (tlstr V1907)))) (true (shen.sys-error shen.alphanums?)))) -(defun shen.alphanum? (V1901) (or (shen.alpha? V1901) (shen.digit? V1901))) +(defun shen.alphanum? (V1908) (or (shen.alpha? V1908) (shen.digit? V1908))) -(defun shen.digit? (V1902) (element? V1902 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) +(defun shen.digit? (V1909) (element? V1909 (cons "1" (cons "2" (cons "3" (cons "4" (cons "5" (cons "6" (cons "7" (cons "8" (cons "9" (cons "0" ())))))))))))) -(defun variable? (V1903) (cond ((or (boolean? V1903) (or (number? V1903) (string? V1903))) false) (true (trap-error (let String (str V1903) (shen.analyse-variable? String)) (lambda E false))))) +(defun variable? (V1910) (cond ((or (boolean? V1910) (or (number? V1910) (string? V1910))) false) (true (trap-error (let String (str V1910) (shen.analyse-variable? String)) (lambda E false))))) -(defun shen.analyse-variable? (V1904) (cond ((shen.+string? V1904) (and (shen.uppercase? (pos V1904 0)) (shen.alphanums? (tlstr V1904)))) (true (shen.sys-error shen.analyse-variable?)))) +(defun shen.analyse-variable? (V1911) (cond ((shen.+string? V1911) (and (shen.uppercase? (pos V1911 0)) (shen.alphanums? (tlstr V1911)))) (true (shen.sys-error shen.analyse-variable?)))) -(defun shen.uppercase? (V1905) (element? V1905 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) +(defun shen.uppercase? (V1912) (element? V1912 (cons "A" (cons "B" (cons "C" (cons "D" (cons "E" (cons "F" (cons "G" (cons "H" (cons "I" (cons "J" (cons "K" (cons "L" (cons "M" (cons "N" (cons "O" (cons "P" (cons "Q" (cons "R" (cons "S" (cons "T" (cons "U" (cons "V" (cons "W" (cons "X" (cons "Y" (cons "Z" ())))))))))))))))))))))))))))) -(defun gensym (V1906) (concat V1906 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) +(defun gensym (V1913) (concat V1913 (set shen.*gensym* (+ 1 (value shen.*gensym*))))) -(defun concat (V1907 V1908) (intern (cn (str V1907) (str V1908)))) +(defun concat (V1914 V1915) (intern (cn (str V1914) (str V1915)))) -(defun @p (V1909 V1910) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1909) (let Snd (address-> Vector 2 V1910) Vector))))) +(defun @p (V1916 V1917) (let Vector (absvector 3) (let Tag (address-> Vector 0 shen.tuple) (let Fst (address-> Vector 1 V1916) (let Snd (address-> Vector 2 V1917) Vector))))) -(defun fst (V1911) (<-address V1911 1)) +(defun fst (V1918) (<-address V1918 1)) -(defun snd (V1912) (<-address V1912 2)) +(defun snd (V1919) (<-address V1919 2)) -(defun tuple? (V1913) (trap-error (and (absvector? V1913) (= shen.tuple (<-address V1913 0))) (lambda E false))) +(defun tuple? (V1920) (trap-error (and (absvector? V1920) (= shen.tuple (<-address V1920 0))) (lambda E false))) -(defun append (V1914 V1915) (cond ((= () V1914) V1915) ((cons? V1914) (cons (hd V1914) (append (tl V1914) V1915))) (true (shen.sys-error append)))) +(defun append (V1921 V1922) (cond ((= () V1921) V1922) ((cons? V1921) (cons (hd V1921) (append (tl V1921) V1922))) (true (shen.sys-error append)))) -(defun @v (V1916 V1917) (let Limit (limit V1917) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1916) (if (= Limit 0) X+NewVector (shen.@v-help V1917 1 Limit X+NewVector)))))) +(defun @v (V1923 V1924) (let Limit (limit V1924) (let NewVector (vector (+ Limit 1)) (let X+NewVector (vector-> NewVector 1 V1923) (if (= Limit 0) X+NewVector (shen.@v-help V1924 1 Limit X+NewVector)))))) -(defun shen.@v-help (V1918 V1919 V1920 V1921) (cond ((= V1920 V1919) (shen.copyfromvector V1918 V1921 V1920 (+ V1920 1))) (true (shen.@v-help V1918 (+ V1919 1) V1920 (shen.copyfromvector V1918 V1921 V1919 (+ V1919 1)))))) +(defun shen.@v-help (V1925 V1926 V1927 V1928) (cond ((= V1927 V1926) (shen.copyfromvector V1925 V1928 V1927 (+ V1927 1))) (true (shen.@v-help V1925 (+ V1926 1) V1927 (shen.copyfromvector V1925 V1928 V1926 (+ V1926 1)))))) -(defun shen.copyfromvector (V1923 V1924 V1925 V1926) (trap-error (vector-> V1924 V1926 (<-vector V1923 V1925)) (lambda E V1924))) +(defun shen.copyfromvector (V1930 V1931 V1932 V1933) (trap-error (vector-> V1931 V1933 (<-vector V1930 V1932)) (lambda E V1931))) -(defun hdv (V1927) (trap-error (<-vector V1927 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1927 " +(defun hdv (V1934) (trap-error (<-vector V1934 1) (lambda E (simple-error (cn "hdv needs a non-empty vector as an argument; not " (shen.app V1934 " " shen.s)))))) -(defun tlv (V1928) (let Limit (limit V1928) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector -") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1928 2 Limit (vector (- Limit 1)))))))) +(defun tlv (V1935) (let Limit (limit V1935) (if (= Limit 0) (simple-error "cannot take the tail of the empty vector +") (if (= Limit 1) (vector 0) (let NewVector (vector (- Limit 1)) (shen.tlv-help V1935 2 Limit (vector (- Limit 1)))))))) -(defun shen.tlv-help (V1929 V1930 V1931 V1932) (cond ((= V1931 V1930) (shen.copyfromvector V1929 V1932 V1931 (- V1931 1))) (true (shen.tlv-help V1929 (+ V1930 1) V1931 (shen.copyfromvector V1929 V1932 V1930 (- V1930 1)))))) +(defun shen.tlv-help (V1936 V1937 V1938 V1939) (cond ((= V1938 V1937) (shen.copyfromvector V1936 V1939 V1938 (- V1938 1))) (true (shen.tlv-help V1936 (+ V1937 1) V1938 (shen.copyfromvector V1936 V1939 V1937 (- V1937 1)))))) -(defun assoc (V1942 V1943) (cond ((= () V1943) ()) ((and (cons? V1943) (and (cons? (hd V1943)) (= (hd (hd V1943)) V1942))) (hd V1943)) ((cons? V1943) (assoc V1942 (tl V1943))) (true (shen.sys-error assoc)))) +(defun assoc (V1949 V1950) (cond ((= () V1950) ()) ((and (cons? V1950) (and (cons? (hd V1950)) (= (hd (hd V1950)) V1949))) (hd V1950)) ((cons? V1950) (assoc V1949 (tl V1950))) (true (shen.sys-error assoc)))) -(defun boolean? (V1949) (cond ((= true V1949) true) ((= false V1949) true) (true false))) +(defun boolean? (V1956) (cond ((= true V1956) true) ((= false V1956) true) (true false))) -(defun nl (V1950) (cond ((= 0 V1950) 0) (true (do (shen.prhush " -" (stoutput)) (nl (- V1950 1)))))) +(defun nl (V1957) (cond ((= 0 V1957) 0) (true (do (shen.prhush " +" (stoutput)) (nl (- V1957 1)))))) -(defun difference (V1953 V1954) (cond ((= () V1953) ()) ((cons? V1953) (if (element? (hd V1953) V1954) (difference (tl V1953) V1954) (cons (hd V1953) (difference (tl V1953) V1954)))) (true (shen.sys-error difference)))) +(defun difference (V1960 V1961) (cond ((= () V1960) ()) ((cons? V1960) (if (element? (hd V1960) V1961) (difference (tl V1960) V1961) (cons (hd V1960) (difference (tl V1960) V1961)))) (true (shen.sys-error difference)))) -(defun do (V1955 V1956) V1956) +(defun do (V1962 V1963) V1963) -(defun element? (V1965 V1966) (cond ((= () V1966) false) ((and (cons? V1966) (= (hd V1966) V1965)) true) ((cons? V1966) (element? V1965 (tl V1966))) (true (shen.sys-error element?)))) +(defun element? (V1972 V1973) (cond ((= () V1973) false) ((and (cons? V1973) (= (hd V1973) V1972)) true) ((cons? V1973) (element? V1972 (tl V1973))) (true (shen.sys-error element?)))) -(defun empty? (V1972) (cond ((= () V1972) true) (true false))) +(defun empty? (V1979) (cond ((= () V1979) true) (true false))) -(defun fix (V1973 V1974) (shen.fix-help V1973 V1974 (V1973 V1974))) +(defun fix (V1980 V1981) (shen.fix-help V1980 V1981 (V1980 V1981))) -(defun shen.fix-help (V1981 V1982 V1983) (cond ((= V1983 V1982) V1983) (true (shen.fix-help V1981 V1983 (V1981 V1983))))) +(defun shen.fix-help (V1988 V1989 V1990) (cond ((= V1990 V1989) V1990) (true (shen.fix-help V1988 V1990 (V1988 V1990))))) -(defun put (V1985 V1986 V1987 V1988) (let N (hash V1985 (limit V1988)) (let Entry (trap-error (<-vector V1988 N) (lambda E ())) (let Change (vector-> V1988 N (shen.change-pointer-value V1985 V1986 V1987 Entry)) V1987)))) +(defun put (V1992 V1993 V1994 V1995) (let N (hash V1992 (limit V1995)) (let Entry (trap-error (<-vector V1995 N) (lambda E ())) (let Change (vector-> V1995 N (shen.change-pointer-value V1992 V1993 V1994 Entry)) V1994)))) -(defun shen.change-pointer-value (V1991 V1992 V1993 V1994) (cond ((= () V1994) (cons (cons (cons V1991 (cons V1992 ())) V1993) ())) ((and (cons? V1994) (and (cons? (hd V1994)) (and (cons? (hd (hd V1994))) (and (cons? (tl (hd (hd V1994)))) (and (= () (tl (tl (hd (hd V1994))))) (and (= (hd (tl (hd (hd V1994)))) V1992) (= (hd (hd (hd V1994))) V1991))))))) (cons (cons (hd (hd V1994)) V1993) (tl V1994))) ((cons? V1994) (cons (hd V1994) (shen.change-pointer-value V1991 V1992 V1993 (tl V1994)))) (true (shen.sys-error shen.change-pointer-value)))) +(defun shen.change-pointer-value (V1998 V1999 V2000 V2001) (cond ((= () V2001) (cons (cons (cons V1998 (cons V1999 ())) V2000) ())) ((and (cons? V2001) (and (cons? (hd V2001)) (and (cons? (hd (hd V2001))) (and (cons? (tl (hd (hd V2001)))) (and (= () (tl (tl (hd (hd V2001))))) (and (= (hd (tl (hd (hd V2001)))) V1999) (= (hd (hd (hd V2001))) V1998))))))) (cons (cons (hd (hd V2001)) V2000) (tl V2001))) ((cons? V2001) (cons (hd V2001) (shen.change-pointer-value V1998 V1999 V2000 (tl V2001)))) (true (shen.sys-error shen.change-pointer-value)))) -(defun get (V1997 V1998 V1999) (let N (hash V1997 (limit V1999)) (let Entry (trap-error (<-vector V1999 N) (lambda E (simple-error "pointer not found -"))) (let Result (assoc (cons V1997 (cons V1998 ())) Entry) (if (empty? Result) (simple-error "value not found +(defun get (V2004 V2005 V2006) (let N (hash V2004 (limit V2006)) (let Entry (trap-error (<-vector V2006 N) (lambda E (simple-error "pointer not found +"))) (let Result (assoc (cons V2004 (cons V2005 ())) Entry) (if (empty? Result) (simple-error "value not found ") (tl Result)))))) -(defun hash (V2000 V2001) (let Hash (shen.mod (sum (map (lambda X1854 (string->n X1854)) (explode V2000))) V2001) (if (= 0 Hash) 1 Hash))) +(defun hash (V2007 V2008) (let Hash (shen.mod (sum (map (lambda X1861 (string->n X1861)) (explode V2007))) V2008) (if (= 0 Hash) 1 Hash))) -(defun shen.mod (V2002 V2003) (shen.modh V2002 (shen.multiples V2002 (cons V2003 ())))) +(defun shen.mod (V2009 V2010) (shen.modh V2009 (shen.multiples V2009 (cons V2010 ())))) -(defun shen.multiples (V2004 V2005) (cond ((and (cons? V2005) (> (hd V2005) V2004)) (tl V2005)) ((cons? V2005) (shen.multiples V2004 (cons (* 2 (hd V2005)) V2005))) (true (shen.sys-error shen.multiples)))) +(defun shen.multiples (V2011 V2012) (cond ((and (cons? V2012) (> (hd V2012) V2011)) (tl V2012)) ((cons? V2012) (shen.multiples V2011 (cons (* 2 (hd V2012)) V2012))) (true (shen.sys-error shen.multiples)))) -(defun shen.modh (V2008 V2009) (cond ((= 0 V2008) 0) ((= () V2009) V2008) ((and (cons? V2009) (> (hd V2009) V2008)) (if (empty? (tl V2009)) V2008 (shen.modh V2008 (tl V2009)))) ((cons? V2009) (shen.modh (- V2008 (hd V2009)) V2009)) (true (shen.sys-error shen.modh)))) +(defun shen.modh (V2015 V2016) (cond ((= 0 V2015) 0) ((= () V2016) V2015) ((and (cons? V2016) (> (hd V2016) V2015)) (if (empty? (tl V2016)) V2015 (shen.modh V2015 (tl V2016)))) ((cons? V2016) (shen.modh (- V2015 (hd V2016)) V2016)) (true (shen.sys-error shen.modh)))) -(defun sum (V2010) (cond ((= () V2010) 0) ((cons? V2010) (+ (hd V2010) (sum (tl V2010)))) (true (shen.sys-error sum)))) +(defun sum (V2017) (cond ((= () V2017) 0) ((cons? V2017) (+ (hd V2017) (sum (tl V2017)))) (true (shen.sys-error sum)))) -(defun head (V2017) (cond ((cons? V2017) (hd V2017)) (true (simple-error "head expects a non-empty list")))) +(defun head (V2024) (cond ((cons? V2024) (hd V2024)) (true (simple-error "head expects a non-empty list")))) -(defun tail (V2024) (cond ((cons? V2024) (tl V2024)) (true (simple-error "tail expects a non-empty list")))) +(defun tail (V2031) (cond ((cons? V2031) (tl V2031)) (true (simple-error "tail expects a non-empty list")))) -(defun hdstr (V2025) (pos V2025 0)) +(defun hdstr (V2032) (pos V2032 0)) -(defun intersection (V2028 V2029) (cond ((= () V2028) ()) ((cons? V2028) (if (element? (hd V2028) V2029) (cons (hd V2028) (intersection (tl V2028) V2029)) (intersection (tl V2028) V2029))) (true (shen.sys-error intersection)))) +(defun intersection (V2035 V2036) (cond ((= () V2035) ()) ((cons? V2035) (if (element? (hd V2035) V2036) (cons (hd V2035) (intersection (tl V2035) V2036)) (intersection (tl V2035) V2036))) (true (shen.sys-error intersection)))) -(defun reverse (V2030) (shen.reverse_help V2030 ())) +(defun reverse (V2037) (shen.reverse_help V2037 ())) -(defun shen.reverse_help (V2031 V2032) (cond ((= () V2031) V2032) ((cons? V2031) (shen.reverse_help (tl V2031) (cons (hd V2031) V2032))) (true (shen.sys-error shen.reverse_help)))) +(defun shen.reverse_help (V2038 V2039) (cond ((= () V2038) V2039) ((cons? V2038) (shen.reverse_help (tl V2038) (cons (hd V2038) V2039))) (true (shen.sys-error shen.reverse_help)))) -(defun union (V2033 V2034) (cond ((= () V2033) V2034) ((cons? V2033) (if (element? (hd V2033) V2034) (union (tl V2033) V2034) (cons (hd V2033) (union (tl V2033) V2034)))) (true (shen.sys-error union)))) +(defun union (V2040 V2041) (cond ((= () V2040) V2041) ((cons? V2040) (if (element? (hd V2040) V2041) (union (tl V2040) V2041) (cons (hd V2040) (union (tl V2040) V2041)))) (true (shen.sys-error union)))) -(defun y-or-n? (V2035) (let Message (shen.prhush (shen.proc-nl V2035) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n -" (stoutput)) (y-or-n? V2035)))))))) +(defun y-or-n? (V2042) (let Message (shen.prhush (shen.proc-nl V2042) (stoutput)) (let Y-or-N (shen.prhush " (y/n) " (stoutput)) (let Input (shen.app (read (stinput)) "" shen.s) (if (= "y" Input) true (if (= "n" Input) false (do (shen.prhush "please answer y or n +" (stoutput)) (y-or-n? V2042)))))))) -(defun not (V2036) (if V2036 false true)) +(defun not (V2043) (if V2043 false true)) -(defun subst (V2045 V2046 V2047) (cond ((= V2047 V2046) V2045) ((cons? V2047) (cons (subst V2045 V2046 (hd V2047)) (subst V2045 V2046 (tl V2047)))) (true V2047))) +(defun subst (V2052 V2053 V2054) (cond ((= V2054 V2053) V2052) ((cons? V2054) (map (lambda W (subst V2052 V2053 W)) V2054)) (true V2054))) -(defun explode (V2049) (shen.explode-h (shen.app V2049 "" shen.a))) +(defun explode (V2056) (shen.explode-h (shen.app V2056 "" shen.a))) -(defun shen.explode-h (V2050) (cond ((= "" V2050) ()) ((shen.+string? V2050) (cons (pos V2050 0) (shen.explode-h (tlstr V2050)))) (true (shen.sys-error shen.explode-h)))) +(defun shen.explode-h (V2057) (cond ((= "" V2057) ()) ((shen.+string? V2057) (cons (pos V2057 0) (shen.explode-h (tlstr V2057)))) (true (shen.sys-error shen.explode-h)))) -(defun cd (V2051) (set *home-directory* (if (= V2051 "") "" (shen.app V2051 "/" shen.a)))) +(defun cd (V2058) (set *home-directory* (if (= V2058 "") "" (shen.app V2058 "/" shen.a)))) -(defun map (V2052 V2053) (shen.map-h V2052 V2053 ())) +(defun map (V2059 V2060) (shen.map-h V2059 V2060 ())) -(defun shen.map-h (V2056 V2057 V2058) (cond ((= () V2057) (reverse V2058)) ((cons? V2057) (shen.map-h V2056 (tl V2057) (cons (V2056 (hd V2057)) V2058))) (true (shen.sys-error shen.map-h)))) +(defun shen.map-h (V2063 V2064 V2065) (cond ((= () V2064) (reverse V2065)) ((cons? V2064) (shen.map-h V2063 (tl V2064) (cons (V2063 (hd V2064)) V2065))) (true (shen.sys-error shen.map-h)))) -(defun length (V2059) (shen.length-h V2059 0)) +(defun length (V2066) (shen.length-h V2066 0)) -(defun shen.length-h (V2060 V2061) (cond ((= () V2060) V2061) (true (shen.length-h (tl V2060) (+ V2061 1))))) +(defun shen.length-h (V2067 V2068) (cond ((= () V2067) V2068) (true (shen.length-h (tl V2067) (+ V2068 1))))) -(defun occurrences (V2070 V2071) (cond ((= V2071 V2070) 1) ((cons? V2071) (+ (occurrences V2070 (hd V2071)) (occurrences V2070 (tl V2071)))) (true 0))) +(defun occurrences (V2077 V2078) (cond ((= V2078 V2077) 1) ((cons? V2078) (+ (occurrences V2077 (hd V2078)) (occurrences V2077 (tl V2078)))) (true 0))) -(defun nth (V2079 V2080) (cond ((and (= 1 V2079) (cons? V2080)) (hd V2080)) ((cons? V2080) (nth (- V2079 1) (tl V2080))) (true (shen.sys-error nth)))) +(defun nth (V2086 V2087) (cond ((and (= 1 V2086) (cons? V2087)) (hd V2087)) ((cons? V2087) (nth (- V2086 1) (tl V2087))) (true (shen.sys-error nth)))) -(defun integer? (V2081) (and (number? V2081) (let Abs (shen.abs V2081) (shen.integer-test? Abs (shen.magless Abs 1))))) +(defun integer? (V2088) (and (number? V2088) (let Abs (shen.abs V2088) (shen.integer-test? Abs (shen.magless Abs 1))))) -(defun shen.abs (V2082) (if (> V2082 0) V2082 (- 0 V2082))) +(defun shen.abs (V2089) (if (> V2089 0) V2089 (- 0 V2089))) -(defun shen.magless (V2083 V2084) (let Nx2 (* V2084 2) (if (> Nx2 V2083) V2084 (shen.magless V2083 Nx2)))) +(defun shen.magless (V2090 V2091) (let Nx2 (* V2091 2) (if (> Nx2 V2090) V2091 (shen.magless V2090 Nx2)))) -(defun shen.integer-test? (V2088 V2089) (cond ((= 0 V2088) true) ((> 1 V2088) false) (true (let Abs-N (- V2088 V2089) (if (> 0 Abs-N) (integer? V2088) (shen.integer-test? Abs-N V2089)))))) +(defun shen.integer-test? (V2095 V2096) (cond ((= 0 V2095) true) ((> 1 V2095) false) (true (let Abs-N (- V2095 V2096) (if (> 0 Abs-N) (integer? V2095) (shen.integer-test? Abs-N V2096)))))) -(defun mapcan (V2092 V2093) (cond ((= () V2093) ()) ((cons? V2093) (append (V2092 (hd V2093)) (mapcan V2092 (tl V2093)))) (true (shen.sys-error mapcan)))) +(defun mapcan (V2099 V2100) (cond ((= () V2100) ()) ((cons? V2100) (append (V2099 (hd V2100)) (mapcan V2099 (tl V2100)))) (true (shen.sys-error mapcan)))) -(defun == (V2102 V2103) (cond ((= V2103 V2102) true) (true false))) +(defun == (V2109 V2110) (cond ((= V2110 V2109) true) (true false))) (defun abort () (simple-error "")) -(defun bound? (V2105) (and (symbol? V2105) (let Val (trap-error (value V2105) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) +(defun bound? (V2112) (and (symbol? V2112) (let Val (trap-error (value V2112) (lambda E shen.this-symbol-is-unbound)) (if (= Val shen.this-symbol-is-unbound) false true)))) -(defun shen.string->bytes (V2106) (cond ((= "" V2106) ()) (true (cons (string->n (pos V2106 0)) (shen.string->bytes (tlstr V2106)))))) +(defun shen.string->bytes (V2113) (cond ((= "" V2113) ()) (true (cons (string->n (pos V2113 0)) (shen.string->bytes (tlstr V2113)))))) -(defun maxinferences (V2107) (set shen.*maxinferences* V2107)) +(defun maxinferences (V2114) (set shen.*maxinferences* V2114)) (defun inferences () (value shen.*infs*)) -(defun protect (V2108) V2108) +(defun protect (V2115) V2115) (defun stoutput () (value *stoutput*)) -(defun string->symbol (V2109) (let Symbol (intern V2109) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2109 " to a symbol" shen.s)))))) +(defun string->symbol (V2116) (let Symbol (intern V2116) (if (symbol? Symbol) Symbol (simple-error (cn "cannot intern " (shen.app V2116 " to a symbol" shen.s)))))) -(defun shen.optimise (V2114) (cond ((= + V2114) (set shen.*optimise* true)) ((= - V2114) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. +(defun shen.optimise (V2121) (cond ((= + V2121) (set shen.*optimise* true)) ((= - V2121) (set shen.*optimise* false)) (true (simple-error "optimise expects a + or a -. ")))) (defun os () (value *os*)) diff --git a/shen/klambda/t-star.kl b/shen/klambda/t-star.kl index 1b3a3ae..6d6e494 100644 --- a/shen/klambda/t-star.kl +++ b/shen/klambda/t-star.kl @@ -47,128 +47,93 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.typecheck (V2882 V2883) (let Curry (shen.curry V2882) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2883)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) +"(defun shen.typecheck (V2790 V2791) (let Curry (shen.curry V2790) (let ProcessN (shen.start-new-prolog-process) (let Type (shen.insert-prolog-variables (shen.demodulate (shen.curry-type V2791)) ProcessN) (let Continuation (freeze (return Type ProcessN shen.void)) (shen.t* (cons Curry (cons : (cons Type ()))) () ProcessN Continuation)))))) -(defun shen.curry (V2884) (cond ((and (cons? V2884) (shen.special? (hd V2884))) (cons (hd V2884) (map (lambda X2877 (shen.curry X2877)) (tl V2884)))) ((and (cons? V2884) (and (cons? (tl V2884)) (shen.extraspecial? (hd V2884)))) V2884) ((and (cons? V2884) (and (= type (hd V2884)) (and (cons? (tl V2884)) (and (cons? (tl (tl V2884))) (= () (tl (tl (tl V2884)))))))) (cons type (cons (shen.curry (hd (tl V2884))) (tl (tl V2884))))) ((and (cons? V2884) (and (cons? (tl V2884)) (cons? (tl (tl V2884))))) (shen.curry (cons (cons (hd V2884) (cons (hd (tl V2884)) ())) (tl (tl V2884))))) ((and (cons? V2884) (and (cons? (tl V2884)) (= () (tl (tl V2884))))) (cons (shen.curry (hd V2884)) (cons (shen.curry (hd (tl V2884))) ()))) (true V2884))) +(defun shen.curry (V2792) (cond ((and (cons? V2792) (shen.special? (hd V2792))) (cons (hd V2792) (map (lambda X2786 (shen.curry X2786)) (tl V2792)))) ((and (cons? V2792) (and (cons? (tl V2792)) (shen.extraspecial? (hd V2792)))) V2792) ((and (cons? V2792) (and (= type (hd V2792)) (and (cons? (tl V2792)) (and (cons? (tl (tl V2792))) (= () (tl (tl (tl V2792)))))))) (cons type (cons (shen.curry (hd (tl V2792))) (tl (tl V2792))))) ((and (cons? V2792) (and (cons? (tl V2792)) (cons? (tl (tl V2792))))) (shen.curry (cons (cons (hd V2792) (cons (hd (tl V2792)) ())) (tl (tl V2792))))) ((and (cons? V2792) (and (cons? (tl V2792)) (= () (tl (tl V2792))))) (cons (shen.curry (hd V2792)) (cons (shen.curry (hd (tl V2792))) ()))) (true V2792))) -(defun shen.special? (V2885) (element? V2885 (value shen.*special*))) +(defun shen.special? (V2793) (element? V2793 (value shen.*special*))) -(defun shen.extraspecial? (V2886) (element? V2886 (value shen.*extraspecial*))) +(defun shen.extraspecial? (V2794) (element? V2794 (value shen.*extraspecial*))) -(defun shen.t* (V2887 V2888 V2889 V2890) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2889) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2889 (freeze (bind Error (shen.errormaxinfs) V2889 V2890))))) (if (= Case false) (let Case (let V2871 (shen.lazyderef V2887 V2889) (if (= fail V2871) (do (shen.incinfs) (cut Throwcontrol V2889 (freeze (shen.prolog-failure V2889 V2890)))) false)) (if (= Case false) (let Case (let V2872 (shen.lazyderef V2887 V2889) (if (cons? V2872) (let X (hd V2872) (let V2873 (shen.lazyderef (tl V2872) V2889) (if (cons? V2873) (let V2874 (shen.lazyderef (hd V2873) V2889) (if (= : V2874) (let V2875 (shen.lazyderef (tl V2873) V2889) (if (cons? V2875) (let A (hd V2875) (let V2876 (shen.lazyderef (tl V2875) V2889) (if (= () V2876) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2889 (freeze (cut Throwcontrol V2889 (freeze (shen.th* X A V2888 V2889 V2890)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2889) (do (shen.incinfs) (shen.show V2887 V2888 V2889 (freeze (bind Datatypes (value shen.*datatypes*) V2889 (freeze (shen.udefs* V2887 V2888 Datatypes V2889 V2890))))))) Case)) Case)) Case))))) +(defun shen.t* (V2795 V2796 V2797 V2798) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let Error (shen.newpv V2797) (do (shen.incinfs) (fwhen (shen.maxinfexceeded?) V2797 (freeze (bind Error (shen.errormaxinfs) V2797 V2798))))) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2795 V2797) (if (= fail V2780) (do (shen.incinfs) (cut Throwcontrol V2797 (freeze (shen.prolog-failure V2797 V2798)))) false)) (if (= Case false) (let Case (let V2781 (shen.lazyderef V2795 V2797) (if (cons? V2781) (let X (hd V2781) (let V2782 (shen.lazyderef (tl V2781) V2797) (if (cons? V2782) (let V2783 (shen.lazyderef (hd V2782) V2797) (if (= : V2783) (let V2784 (shen.lazyderef (tl V2782) V2797) (if (cons? V2784) (let A (hd V2784) (let V2785 (shen.lazyderef (tl V2784) V2797) (if (= () V2785) (do (shen.incinfs) (fwhen (shen.type-theory-enabled?) V2797 (freeze (cut Throwcontrol V2797 (freeze (shen.th* X A V2796 V2797 V2798)))))) false))) false)) false)) false))) false)) (if (= Case false) (let Datatypes (shen.newpv V2797) (do (shen.incinfs) (shen.show V2795 V2796 V2797 (freeze (bind Datatypes (value shen.*datatypes*) V2797 (freeze (shen.udefs* V2795 V2796 Datatypes V2797 V2798))))))) Case)) Case)) Case))))) (defun shen.type-theory-enabled? () (value shen.*shen-type-theory-enabled?*)) -(defun enable-type-theory (V2895) (cond ((= + V2895) (set shen.*shen-type-theory-enabled?* true)) ((= - V2895) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - +(defun enable-type-theory (V2803) (cond ((= + V2803) (set shen.*shen-type-theory-enabled?* true)) ((= - V2803) (set shen.*shen-type-theory-enabled?* false)) (true (simple-error "enable-type-theory expects a + or a - ")))) -(defun shen.prolog-failure (V2904 V2905) false) +(defun shen.prolog-failure (V2812 V2813) false) (defun shen.maxinfexceeded? () (> (inferences) (value shen.*maxinferences*))) (defun shen.errormaxinfs () (simple-error "maximum inferences exceeded~%")) -(defun shen.udefs* (V2906 V2907 V2908 V2909 V2910) (let Case (let V2867 (shen.lazyderef V2908 V2909) (if (cons? V2867) (let D (hd V2867) (do (shen.incinfs) (call (cons D (cons V2906 (cons V2907 ()))) V2909 V2910))) false)) (if (= Case false) (let V2868 (shen.lazyderef V2908 V2909) (if (cons? V2868) (let Ds (tl V2868) (do (shen.incinfs) (shen.udefs* V2906 V2907 Ds V2909 V2910))) false)) Case))) +(defun shen.udefs* (V2814 V2815 V2816 V2817 V2818) (let Case (let V2776 (shen.lazyderef V2816 V2817) (if (cons? V2776) (let D (hd V2776) (do (shen.incinfs) (call (cons D (cons V2814 (cons V2815 ()))) V2817 V2818))) false)) (if (= Case false) (let V2777 (shen.lazyderef V2816 V2817) (if (cons? V2777) (let Ds (tl V2777) (do (shen.incinfs) (shen.udefs* V2814 V2815 Ds V2817 V2818))) false)) Case))) -(defun shen.th* (V2911 V2912 V2913 V2914 V2915) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2911 (cons : (cons V2912 ()))) V2913 V2914 (freeze (fwhen false V2914 V2915)))) (if (= Case false) (let Case (let F (shen.newpv V2914) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2911 V2914)) V2914 (freeze (bind F (shen.sigf (shen.lazyderef V2911 V2914)) V2914 (freeze (call (cons F (cons V2912 ())) V2914 V2915))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2911 V2912 V2914 V2915)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2911 V2912 V2913 V2914 V2915)) (if (= Case false) (let Case (let V2752 (shen.lazyderef V2911 V2914) (if (cons? V2752) (let F (hd V2752) (let V2753 (shen.lazyderef (tl V2752) V2914) (if (= () V2753) (do (shen.incinfs) (shen.th* F (cons --> (cons V2912 ())) V2913 V2914 V2915)) false))) false)) (if (= Case false) (let Case (let V2754 (shen.lazyderef V2911 V2914) (if (cons? V2754) (let F (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2914) (if (cons? V2755) (let X (hd V2755) (let V2756 (shen.lazyderef (tl V2755) V2914) (if (= () V2756) (let B (shen.newpv V2914) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2912 ()))) V2913 V2914 (freeze (shen.th* X B V2913 V2914 V2915))))) false))) false))) false)) (if (= Case false) (let Case (let V2757 (shen.lazyderef V2911 V2914) (if (cons? V2757) (let V2758 (shen.lazyderef (hd V2757) V2914) (if (= cons V2758) (let V2759 (shen.lazyderef (tl V2757) V2914) (if (cons? V2759) (let X (hd V2759) (let V2760 (shen.lazyderef (tl V2759) V2914) (if (cons? V2760) (let Y (hd V2760) (let V2761 (shen.lazyderef (tl V2760) V2914) (if (= () V2761) (let V2762 (shen.lazyderef V2912 V2914) (if (cons? V2762) (let V2763 (shen.lazyderef (hd V2762) V2914) (if (= list V2763) (let V2764 (shen.lazyderef (tl V2762) V2914) (if (cons? V2764) (let A (hd V2764) (let V2765 (shen.lazyderef (tl V2764) V2914) (if (= () V2765) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2765) (do (shen.bindv V2765 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2765 V2914) Result))) false)))) (if (shen.pvar? V2764) (let A (shen.newpv V2914) (do (shen.bindv V2764 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2764 V2914) Result)))) false))) (if (shen.pvar? V2763) (do (shen.bindv V2763 list V2914) (let Result (let V2766 (shen.lazyderef (tl V2762) V2914) (if (cons? V2766) (let A (hd V2766) (let V2767 (shen.lazyderef (tl V2766) V2914) (if (= () V2767) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2767) (do (shen.bindv V2767 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2767 V2914) Result))) false)))) (if (shen.pvar? V2766) (let A (shen.newpv V2914) (do (shen.bindv V2766 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2766 V2914) Result)))) false))) (do (shen.unbindv V2763 V2914) Result))) false))) (if (shen.pvar? V2762) (let A (shen.newpv V2914) (do (shen.bindv V2762 (cons list (cons A ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons list (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2762 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2768 (shen.lazyderef V2911 V2914) (if (cons? V2768) (let V2769 (shen.lazyderef (hd V2768) V2914) (if (= @p V2769) (let V2770 (shen.lazyderef (tl V2768) V2914) (if (cons? V2770) (let X (hd V2770) (let V2771 (shen.lazyderef (tl V2770) V2914) (if (cons? V2771) (let Y (hd V2771) (let V2772 (shen.lazyderef (tl V2771) V2914) (if (= () V2772) (let V2773 (shen.lazyderef V2912 V2914) (if (cons? V2773) (let A (hd V2773) (let V2774 (shen.lazyderef (tl V2773) V2914) (if (cons? V2774) (let V2775 (shen.lazyderef (hd V2774) V2914) (if (= * V2775) (let V2776 (shen.lazyderef (tl V2774) V2914) (if (cons? V2776) (let B (hd V2776) (let V2777 (shen.lazyderef (tl V2776) V2914) (if (= () V2777) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (if (shen.pvar? V2777) (do (shen.bindv V2777 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2777 V2914) Result))) false)))) (if (shen.pvar? V2776) (let B (shen.newpv V2914) (do (shen.bindv V2776 (cons B ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2776 V2914) Result)))) false))) (if (shen.pvar? V2775) (do (shen.bindv V2775 * V2914) (let Result (let V2778 (shen.lazyderef (tl V2774) V2914) (if (cons? V2778) (let B (hd V2778) (let V2779 (shen.lazyderef (tl V2778) V2914) (if (= () V2779) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (if (shen.pvar? V2779) (do (shen.bindv V2779 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2779 V2914) Result))) false)))) (if (shen.pvar? V2778) (let B (shen.newpv V2914) (do (shen.bindv V2778 (cons B ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2778 V2914) Result)))) false))) (do (shen.unbindv V2775 V2914) Result))) false))) (if (shen.pvar? V2774) (let B (shen.newpv V2914) (do (shen.bindv V2774 (cons * (cons B ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2774 V2914) Result)))) false)))) (if (shen.pvar? V2773) (let A (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.bindv V2773 (cons A (cons * (cons B ()))) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y B V2913 V2914 V2915)))) (do (shen.unbindv V2773 V2914) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2780 (shen.lazyderef V2911 V2914) (if (cons? V2780) (let V2781 (shen.lazyderef (hd V2780) V2914) (if (= @v V2781) (let V2782 (shen.lazyderef (tl V2780) V2914) (if (cons? V2782) (let X (hd V2782) (let V2783 (shen.lazyderef (tl V2782) V2914) (if (cons? V2783) (let Y (hd V2783) (let V2784 (shen.lazyderef (tl V2783) V2914) (if (= () V2784) (let V2785 (shen.lazyderef V2912 V2914) (if (cons? V2785) (let V2786 (shen.lazyderef (hd V2785) V2914) (if (= vector V2786) (let V2787 (shen.lazyderef (tl V2785) V2914) (if (cons? V2787) (let A (hd V2787) (let V2788 (shen.lazyderef (tl V2787) V2914) (if (= () V2788) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2788) (do (shen.bindv V2788 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2788 V2914) Result))) false)))) (if (shen.pvar? V2787) (let A (shen.newpv V2914) (do (shen.bindv V2787 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2787 V2914) Result)))) false))) (if (shen.pvar? V2786) (do (shen.bindv V2786 vector V2914) (let Result (let V2789 (shen.lazyderef (tl V2785) V2914) (if (cons? V2789) (let A (hd V2789) (let V2790 (shen.lazyderef (tl V2789) V2914) (if (= () V2790) (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (if (shen.pvar? V2790) (do (shen.bindv V2790 () V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2790 V2914) Result))) false)))) (if (shen.pvar? V2789) (let A (shen.newpv V2914) (do (shen.bindv V2789 (cons A ()) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2789 V2914) Result)))) false))) (do (shen.unbindv V2786 V2914) Result))) false))) (if (shen.pvar? V2785) (let A (shen.newpv V2914) (do (shen.bindv V2785 (cons vector (cons A ())) V2914) (let Result (do (shen.incinfs) (shen.th* X A V2913 V2914 (freeze (shen.th* Y (cons vector (cons A ())) V2913 V2914 V2915)))) (do (shen.unbindv V2785 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2791 (shen.lazyderef V2911 V2914) (if (cons? V2791) (let V2792 (shen.lazyderef (hd V2791) V2914) (if (= @s V2792) (let V2793 (shen.lazyderef (tl V2791) V2914) (if (cons? V2793) (let X (hd V2793) (let V2794 (shen.lazyderef (tl V2793) V2914) (if (cons? V2794) (let Y (hd V2794) (let V2795 (shen.lazyderef (tl V2794) V2914) (if (= () V2795) (let V2796 (shen.lazyderef V2912 V2914) (if (= string V2796) (do (shen.incinfs) (shen.th* X string V2913 V2914 (freeze (shen.th* Y string V2913 V2914 V2915)))) (if (shen.pvar? V2796) (do (shen.bindv V2796 string V2914) (let Result (do (shen.incinfs) (shen.th* X string V2913 V2914 (freeze (shen.th* Y string V2913 V2914 V2915)))) (do (shen.unbindv V2796 V2914) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2797 (shen.lazyderef V2911 V2914) (if (cons? V2797) (let V2798 (shen.lazyderef (hd V2797) V2914) (if (= lambda V2798) (let V2799 (shen.lazyderef (tl V2797) V2914) (if (cons? V2799) (let X (hd V2799) (let V2800 (shen.lazyderef (tl V2799) V2914) (if (cons? V2800) (let Y (hd V2800) (let V2801 (shen.lazyderef (tl V2800) V2914) (if (= () V2801) (let V2802 (shen.lazyderef V2912 V2914) (if (cons? V2802) (let A (hd V2802) (let V2803 (shen.lazyderef (tl V2802) V2914) (if (cons? V2803) (let V2804 (shen.lazyderef (hd V2803) V2914) (if (= --> V2804) (let V2805 (shen.lazyderef (tl V2803) V2914) (if (cons? V2805) (let B (hd V2805) (let V2806 (shen.lazyderef (tl V2805) V2914) (if (= () V2806) (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (if (shen.pvar? V2806) (do (shen.bindv V2806 () V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2806 V2914) Result))) false)))) (if (shen.pvar? V2805) (let B (shen.newpv V2914) (do (shen.bindv V2805 (cons B ()) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2805 V2914) Result)))) false))) (if (shen.pvar? V2804) (do (shen.bindv V2804 --> V2914) (let Result (let V2807 (shen.lazyderef (tl V2803) V2914) (if (cons? V2807) (let B (hd V2807) (let V2808 (shen.lazyderef (tl V2807) V2914) (if (= () V2808) (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (if (shen.pvar? V2808) (do (shen.bindv V2808 () V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2808 V2914) Result))) false)))) (if (shen.pvar? V2807) (let B (shen.newpv V2914) (do (shen.bindv V2807 (cons B ()) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2807 V2914) Result)))) false))) (do (shen.unbindv V2804 V2914) Result))) false))) (if (shen.pvar? V2803) (let B (shen.newpv V2914) (do (shen.bindv V2803 (cons --> (cons B ())) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2803 V2914) Result)))) false)))) (if (shen.pvar? V2802) (let A (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.bindv V2802 (cons A (cons --> (cons B ()))) V2914) (let Result (let Z (shen.newpv V2914) (let X&& (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Y V2914)) V2914 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2913) V2914 V2915)))))))))) (do (shen.unbindv V2802 V2914) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2809 (shen.lazyderef V2911 V2914) (if (cons? V2809) (let V2810 (shen.lazyderef (hd V2809) V2914) (if (= let V2810) (let V2811 (shen.lazyderef (tl V2809) V2914) (if (cons? V2811) (let X (hd V2811) (let V2812 (shen.lazyderef (tl V2811) V2914) (if (cons? V2812) (let Y (hd V2812) (let V2813 (shen.lazyderef (tl V2812) V2914) (if (cons? V2813) (let Z (hd V2813) (let V2814 (shen.lazyderef (tl V2813) V2914) (if (= () V2814) (let W (shen.newpv V2914) (let X&& (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.incinfs) (shen.th* Y B V2913 V2914 (freeze (bind X&& (shen.placeholder) V2914 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2914) (shen.lazyderef X V2914) (shen.lazyderef Z V2914)) V2914 (freeze (shen.th* W V2912 (cons (cons X&& (cons : (cons B ()))) V2913) V2914 V2915))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2815 (shen.lazyderef V2911 V2914) (if (cons? V2815) (let V2816 (shen.lazyderef (hd V2815) V2914) (if (= open V2816) (let V2817 (shen.lazyderef (tl V2815) V2914) (if (cons? V2817) (let FileName (hd V2817) (let V2818 (shen.lazyderef (tl V2817) V2914) (if (cons? V2818) (let Direction2748 (hd V2818) (let V2819 (shen.lazyderef (tl V2818) V2914) (if (= () V2819) (let V2820 (shen.lazyderef V2912 V2914) (if (cons? V2820) (let V2821 (shen.lazyderef (hd V2820) V2914) (if (= stream V2821) (let V2822 (shen.lazyderef (tl V2820) V2914) (if (cons? V2822) (let Direction (hd V2822) (let V2823 (shen.lazyderef (tl V2822) V2914) (if (= () V2823) (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (if (shen.pvar? V2823) (do (shen.bindv V2823 () V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2823 V2914) Result))) false)))) (if (shen.pvar? V2822) (let Direction (shen.newpv V2914) (do (shen.bindv V2822 (cons Direction ()) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2822 V2914) Result)))) false))) (if (shen.pvar? V2821) (do (shen.bindv V2821 stream V2914) (let Result (let V2824 (shen.lazyderef (tl V2820) V2914) (if (cons? V2824) (let Direction (hd V2824) (let V2825 (shen.lazyderef (tl V2824) V2914) (if (= () V2825) (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (if (shen.pvar? V2825) (do (shen.bindv V2825 () V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2825 V2914) Result))) false)))) (if (shen.pvar? V2824) (let Direction (shen.newpv V2914) (do (shen.bindv V2824 (cons Direction ()) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2824 V2914) Result)))) false))) (do (shen.unbindv V2821 V2914) Result))) false))) (if (shen.pvar? V2820) (let Direction (shen.newpv V2914) (do (shen.bindv V2820 (cons stream (cons Direction ())) V2914) (let Result (do (shen.incinfs) (unify! Direction Direction2748 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* FileName string V2913 V2914 V2915)))))) (do (shen.unbindv V2820 V2914) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2826 (shen.lazyderef V2911 V2914) (if (cons? V2826) (let V2827 (shen.lazyderef (hd V2826) V2914) (if (= type V2827) (let V2828 (shen.lazyderef (tl V2826) V2914) (if (cons? V2828) (let X (hd V2828) (let V2829 (shen.lazyderef (tl V2828) V2914) (if (cons? V2829) (let A (hd V2829) (let V2830 (shen.lazyderef (tl V2829) V2914) (if (= () V2830) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (unify A V2912 V2914 (freeze (shen.th* X A V2913 V2914 V2915)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2831 (shen.lazyderef V2911 V2914) (if (cons? V2831) (let V2832 (shen.lazyderef (hd V2831) V2914) (if (= input+ V2832) (let V2833 (shen.lazyderef (tl V2831) V2914) (if (cons? V2833) (let A (hd V2833) (let V2834 (shen.lazyderef (tl V2833) V2914) (if (cons? V2834) (let Stream (hd V2834) (let V2835 (shen.lazyderef (tl V2834) V2914) (if (= () V2835) (let C (shen.newpv V2914) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2914)) V2914 (freeze (unify V2912 C V2914 (freeze (shen.th* Stream (cons stream (cons in ())) V2913 V2914 V2915))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2836 (shen.lazyderef V2911 V2914) (if (cons? V2836) (let V2837 (shen.lazyderef (hd V2836) V2914) (if (= set V2837) (let V2838 (shen.lazyderef (tl V2836) V2914) (if (cons? V2838) (let Var (hd V2838) (let V2839 (shen.lazyderef (tl V2838) V2914) (if (cons? V2839) (let Val (hd V2839) (let V2840 (shen.lazyderef (tl V2839) V2914) (if (= () V2840) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.th* Var symbol V2913 V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* (cons value (cons Var ())) V2912 V2913 V2914 (freeze (shen.th* Val V2912 V2913 V2914 V2915)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2841 (shen.lazyderef V2911 V2914) (if (cons? V2841) (let V2842 (shen.lazyderef (hd V2841) V2914) (if (= shen.<-sem V2842) (let V2843 (shen.lazyderef (tl V2841) V2914) (if (cons? V2843) (let F (hd V2843) (let V2844 (shen.lazyderef (tl V2843) V2914) (if (= () V2844) (let A (shen.newpv V2914) (let F&& (shen.newpv V2914) (let B (shen.newpv V2914) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.th* F (cons A (cons ==> (cons B ()))) V2913 V2914 (freeze (cut Throwcontrol V2914 (freeze (bind F&& (concat && (shen.lazyderef F V2914)) V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.th* F&& V2912 (cons (cons F&& (cons : (cons B ()))) V2913) V2914 V2915))))))))))))))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2845 (shen.lazyderef V2911 V2914) (if (cons? V2845) (let V2846 (shen.lazyderef (hd V2845) V2914) (if (= fail V2846) (let V2847 (shen.lazyderef (tl V2845) V2914) (if (= () V2847) (let V2848 (shen.lazyderef V2912 V2914) (if (= symbol V2848) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2848) (do (shen.bindv V2848 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2848 V2914) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2914) (do (shen.incinfs) (shen.t*-hyps V2913 NewHyp V2914 (freeze (shen.th* V2911 V2912 NewHyp V2914 V2915))))) (if (= Case false) (let Case (let V2849 (shen.lazyderef V2911 V2914) (if (cons? V2849) (let V2850 (shen.lazyderef (hd V2849) V2914) (if (= define V2850) (let V2851 (shen.lazyderef (tl V2849) V2914) (if (cons? V2851) (let F (hd V2851) (let X (tl V2851) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.t*-def (cons define (cons F X)) V2912 V2913 V2914 V2915)))))) false)) false)) false)) (if (= Case false) (let Case (let V2852 (shen.lazyderef V2911 V2914) (if (cons? V2852) (let V2853 (shen.lazyderef (hd V2852) V2914) (if (= defcc V2853) (let V2854 (shen.lazyderef (tl V2852) V2914) (if (cons? V2854) (let F (hd V2854) (let X (tl V2854) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.t*-defcc (cons defcc (cons F X)) V2912 V2913 V2914 V2915)))))) false)) false)) false)) (if (= Case false) (let Case (let V2855 (shen.lazyderef V2911 V2914) (if (cons? V2855) (let V2856 (shen.lazyderef (hd V2855) V2914) (if (= defmacro V2856) (let V2857 (shen.lazyderef V2912 V2914) (if (= unit V2857) (do (shen.incinfs) (cut Throwcontrol V2914 V2915)) (if (shen.pvar? V2857) (do (shen.bindv V2857 unit V2914) (let Result (do (shen.incinfs) (cut Throwcontrol V2914 V2915)) (do (shen.unbindv V2857 V2914) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2858 (shen.lazyderef V2911 V2914) (if (cons? V2858) (let V2859 (shen.lazyderef (hd V2858) V2914) (if (= shen.process-datatype V2859) (let V2860 (shen.lazyderef V2912 V2914) (if (= symbol V2860) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2860) (do (shen.bindv V2860 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2860 V2914) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2861 (shen.lazyderef V2911 V2914) (if (cons? V2861) (let V2862 (shen.lazyderef (hd V2861) V2914) (if (= shen.synonyms-help V2862) (let V2863 (shen.lazyderef V2912 V2914) (if (= symbol V2863) (do (shen.incinfs) (thaw V2915)) (if (shen.pvar? V2863) (do (shen.bindv V2863 symbol V2914) (let Result (do (shen.incinfs) (thaw V2915)) (do (shen.unbindv V2863 V2914) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2914) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2914 (freeze (shen.udefs* (cons V2911 (cons : (cons V2912 ()))) V2913 Datatypes V2914 V2915))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) +(defun shen.th* (V2819 V2820 V2821 V2822 V2823) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (do (shen.incinfs) (shen.show (cons V2819 (cons : (cons V2820 ()))) V2821 V2822 (freeze (fwhen false V2822 V2823)))) (if (= Case false) (let Case (let F (shen.newpv V2822) (do (shen.incinfs) (fwhen (shen.typedf? (shen.lazyderef V2819 V2822)) V2822 (freeze (bind F (shen.sigf (shen.lazyderef V2819 V2822)) V2822 (freeze (call (cons F (cons V2820 ())) V2822 V2823))))))) (if (= Case false) (let Case (do (shen.incinfs) (shen.base V2819 V2820 V2822 V2823)) (if (= Case false) (let Case (do (shen.incinfs) (shen.by_hypothesis V2819 V2820 V2821 V2822 V2823)) (if (= Case false) (let Case (let V2668 (shen.lazyderef V2819 V2822) (if (cons? V2668) (let F (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2822) (if (= () V2669) (do (shen.incinfs) (shen.th* F (cons --> (cons V2820 ())) V2821 V2822 V2823)) false))) false)) (if (= Case false) (let Case (let V2670 (shen.lazyderef V2819 V2822) (if (cons? V2670) (let F (hd V2670) (let V2671 (shen.lazyderef (tl V2670) V2822) (if (cons? V2671) (let X (hd V2671) (let V2672 (shen.lazyderef (tl V2671) V2822) (if (= () V2672) (let B (shen.newpv V2822) (do (shen.incinfs) (shen.th* F (cons B (cons --> (cons V2820 ()))) V2821 V2822 (freeze (shen.th* X B V2821 V2822 V2823))))) false))) false))) false)) (if (= Case false) (let Case (let V2673 (shen.lazyderef V2819 V2822) (if (cons? V2673) (let V2674 (shen.lazyderef (hd V2673) V2822) (if (= cons V2674) (let V2675 (shen.lazyderef (tl V2673) V2822) (if (cons? V2675) (let X (hd V2675) (let V2676 (shen.lazyderef (tl V2675) V2822) (if (cons? V2676) (let Y (hd V2676) (let V2677 (shen.lazyderef (tl V2676) V2822) (if (= () V2677) (let V2678 (shen.lazyderef V2820 V2822) (if (cons? V2678) (let V2679 (shen.lazyderef (hd V2678) V2822) (if (= list V2679) (let V2680 (shen.lazyderef (tl V2678) V2822) (if (cons? V2680) (let A (hd V2680) (let V2681 (shen.lazyderef (tl V2680) V2822) (if (= () V2681) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2681 V2822) Result))) false)))) (if (shen.pvar? V2680) (let A (shen.newpv V2822) (do (shen.bindv V2680 (cons A ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2680 V2822) Result)))) false))) (if (shen.pvar? V2679) (do (shen.bindv V2679 list V2822) (let Result (let V2682 (shen.lazyderef (tl V2678) V2822) (if (cons? V2682) (let A (hd V2682) (let V2683 (shen.lazyderef (tl V2682) V2822) (if (= () V2683) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (if (shen.pvar? V2683) (do (shen.bindv V2683 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2683 V2822) Result))) false)))) (if (shen.pvar? V2682) (let A (shen.newpv V2822) (do (shen.bindv V2682 (cons A ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2682 V2822) Result)))) false))) (do (shen.unbindv V2679 V2822) Result))) false))) (if (shen.pvar? V2678) (let A (shen.newpv V2822) (do (shen.bindv V2678 (cons list (cons A ())) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons list (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2678 V2822) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2684 (shen.lazyderef V2819 V2822) (if (cons? V2684) (let V2685 (shen.lazyderef (hd V2684) V2822) (if (= @p V2685) (let V2686 (shen.lazyderef (tl V2684) V2822) (if (cons? V2686) (let X (hd V2686) (let V2687 (shen.lazyderef (tl V2686) V2822) (if (cons? V2687) (let Y (hd V2687) (let V2688 (shen.lazyderef (tl V2687) V2822) (if (= () V2688) (let V2689 (shen.lazyderef V2820 V2822) (if (cons? V2689) (let A (hd V2689) (let V2690 (shen.lazyderef (tl V2689) V2822) (if (cons? V2690) (let V2691 (shen.lazyderef (hd V2690) V2822) (if (= * V2691) (let V2692 (shen.lazyderef (tl V2690) V2822) (if (cons? V2692) (let B (hd V2692) (let V2693 (shen.lazyderef (tl V2692) V2822) (if (= () V2693) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (if (shen.pvar? V2693) (do (shen.bindv V2693 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2693 V2822) Result))) false)))) (if (shen.pvar? V2692) (let B (shen.newpv V2822) (do (shen.bindv V2692 (cons B ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2692 V2822) Result)))) false))) (if (shen.pvar? V2691) (do (shen.bindv V2691 * V2822) (let Result (let V2694 (shen.lazyderef (tl V2690) V2822) (if (cons? V2694) (let B (hd V2694) (let V2695 (shen.lazyderef (tl V2694) V2822) (if (= () V2695) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (if (shen.pvar? V2695) (do (shen.bindv V2695 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2695 V2822) Result))) false)))) (if (shen.pvar? V2694) (let B (shen.newpv V2822) (do (shen.bindv V2694 (cons B ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2694 V2822) Result)))) false))) (do (shen.unbindv V2691 V2822) Result))) false))) (if (shen.pvar? V2690) (let B (shen.newpv V2822) (do (shen.bindv V2690 (cons * (cons B ())) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2690 V2822) Result)))) false)))) (if (shen.pvar? V2689) (let A (shen.newpv V2822) (let B (shen.newpv V2822) (do (shen.bindv V2689 (cons A (cons * (cons B ()))) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y B V2821 V2822 V2823)))) (do (shen.unbindv V2689 V2822) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2696 (shen.lazyderef V2819 V2822) (if (cons? V2696) (let V2697 (shen.lazyderef (hd V2696) V2822) (if (= @v V2697) (let V2698 (shen.lazyderef (tl V2696) V2822) (if (cons? V2698) (let X (hd V2698) (let V2699 (shen.lazyderef (tl V2698) V2822) (if (cons? V2699) (let Y (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2822) (if (= () V2700) (let V2701 (shen.lazyderef V2820 V2822) (if (cons? V2701) (let V2702 (shen.lazyderef (hd V2701) V2822) (if (= vector V2702) (let V2703 (shen.lazyderef (tl V2701) V2822) (if (cons? V2703) (let A (hd V2703) (let V2704 (shen.lazyderef (tl V2703) V2822) (if (= () V2704) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (if (shen.pvar? V2704) (do (shen.bindv V2704 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2704 V2822) Result))) false)))) (if (shen.pvar? V2703) (let A (shen.newpv V2822) (do (shen.bindv V2703 (cons A ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2703 V2822) Result)))) false))) (if (shen.pvar? V2702) (do (shen.bindv V2702 vector V2822) (let Result (let V2705 (shen.lazyderef (tl V2701) V2822) (if (cons? V2705) (let A (hd V2705) (let V2706 (shen.lazyderef (tl V2705) V2822) (if (= () V2706) (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (if (shen.pvar? V2706) (do (shen.bindv V2706 () V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2706 V2822) Result))) false)))) (if (shen.pvar? V2705) (let A (shen.newpv V2822) (do (shen.bindv V2705 (cons A ()) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2705 V2822) Result)))) false))) (do (shen.unbindv V2702 V2822) Result))) false))) (if (shen.pvar? V2701) (let A (shen.newpv V2822) (do (shen.bindv V2701 (cons vector (cons A ())) V2822) (let Result (do (shen.incinfs) (shen.th* X A V2821 V2822 (freeze (shen.th* Y (cons vector (cons A ())) V2821 V2822 V2823)))) (do (shen.unbindv V2701 V2822) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2707 (shen.lazyderef V2819 V2822) (if (cons? V2707) (let V2708 (shen.lazyderef (hd V2707) V2822) (if (= @s V2708) (let V2709 (shen.lazyderef (tl V2707) V2822) (if (cons? V2709) (let X (hd V2709) (let V2710 (shen.lazyderef (tl V2709) V2822) (if (cons? V2710) (let Y (hd V2710) (let V2711 (shen.lazyderef (tl V2710) V2822) (if (= () V2711) (let V2712 (shen.lazyderef V2820 V2822) (if (= string V2712) (do (shen.incinfs) (shen.th* X string V2821 V2822 (freeze (shen.th* Y string V2821 V2822 V2823)))) (if (shen.pvar? V2712) (do (shen.bindv V2712 string V2822) (let Result (do (shen.incinfs) (shen.th* X string V2821 V2822 (freeze (shen.th* Y string V2821 V2822 V2823)))) (do (shen.unbindv V2712 V2822) Result))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2713 (shen.lazyderef V2819 V2822) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2822) (if (= lambda V2714) (let V2715 (shen.lazyderef (tl V2713) V2822) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2822) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2822) (if (= () V2717) (let V2718 (shen.lazyderef V2820 V2822) (if (cons? V2718) (let A (hd V2718) (let V2719 (shen.lazyderef (tl V2718) V2822) (if (cons? V2719) (let V2720 (shen.lazyderef (hd V2719) V2822) (if (= --> V2720) (let V2721 (shen.lazyderef (tl V2719) V2822) (if (cons? V2721) (let B (hd V2721) (let V2722 (shen.lazyderef (tl V2721) V2822) (if (= () V2722) (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (if (shen.pvar? V2722) (do (shen.bindv V2722 () V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2722 V2822) Result))) false)))) (if (shen.pvar? V2721) (let B (shen.newpv V2822) (do (shen.bindv V2721 (cons B ()) V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2721 V2822) Result)))) false))) (if (shen.pvar? V2720) (do (shen.bindv V2720 --> V2822) (let Result (let V2723 (shen.lazyderef (tl V2719) V2822) (if (cons? V2723) (let B (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2822) (if (= () V2724) (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2724 V2822) Result))) false)))) (if (shen.pvar? V2723) (let B (shen.newpv V2822) (do (shen.bindv V2723 (cons B ()) V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2723 V2822) Result)))) false))) (do (shen.unbindv V2720 V2822) Result))) false))) (if (shen.pvar? V2719) (let B (shen.newpv V2822) (do (shen.bindv V2719 (cons --> (cons B ())) V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2719 V2822) Result)))) false)))) (if (shen.pvar? V2718) (let A (shen.newpv V2822) (let B (shen.newpv V2822) (do (shen.bindv V2718 (cons A (cons --> (cons B ()))) V2822) (let Result (let Z (shen.newpv V2822) (let X&& (shen.newpv V2822) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind Z (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Y V2822)) V2822 (freeze (shen.th* Z B (cons (cons X&& (cons : (cons A ()))) V2821) V2822 V2823)))))))))) (do (shen.unbindv V2718 V2822) Result))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2725 (shen.lazyderef V2819 V2822) (if (cons? V2725) (let V2726 (shen.lazyderef (hd V2725) V2822) (if (= let V2726) (let V2727 (shen.lazyderef (tl V2725) V2822) (if (cons? V2727) (let X (hd V2727) (let V2728 (shen.lazyderef (tl V2727) V2822) (if (cons? V2728) (let Y (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2822) (if (cons? V2729) (let Z (hd V2729) (let V2730 (shen.lazyderef (tl V2729) V2822) (if (= () V2730) (let W (shen.newpv V2822) (let X&& (shen.newpv V2822) (let B (shen.newpv V2822) (do (shen.incinfs) (shen.th* Y B V2821 V2822 (freeze (bind X&& (shen.placeholder) V2822 (freeze (bind W (shen.ebr (shen.lazyderef X&& V2822) (shen.lazyderef X V2822) (shen.lazyderef Z V2822)) V2822 (freeze (shen.th* W V2820 (cons (cons X&& (cons : (cons B ()))) V2821) V2822 V2823))))))))))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2731 (shen.lazyderef V2819 V2822) (if (cons? V2731) (let V2732 (shen.lazyderef (hd V2731) V2822) (if (= open V2732) (let V2733 (shen.lazyderef (tl V2731) V2822) (if (cons? V2733) (let FileName (hd V2733) (let V2734 (shen.lazyderef (tl V2733) V2822) (if (cons? V2734) (let Direction2664 (hd V2734) (let V2735 (shen.lazyderef (tl V2734) V2822) (if (= () V2735) (let V2736 (shen.lazyderef V2820 V2822) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2822) (if (= stream V2737) (let V2738 (shen.lazyderef (tl V2736) V2822) (if (cons? V2738) (let Direction (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2822) (if (= () V2739) (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (if (shen.pvar? V2739) (do (shen.bindv V2739 () V2822) (let Result (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (do (shen.unbindv V2739 V2822) Result))) false)))) (if (shen.pvar? V2738) (let Direction (shen.newpv V2822) (do (shen.bindv V2738 (cons Direction ()) V2822) (let Result (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (do (shen.unbindv V2738 V2822) Result)))) false))) (if (shen.pvar? V2737) (do (shen.bindv V2737 stream V2822) (let Result (let V2740 (shen.lazyderef (tl V2736) V2822) (if (cons? V2740) (let Direction (hd V2740) (let V2741 (shen.lazyderef (tl V2740) V2822) (if (= () V2741) (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (if (shen.pvar? V2741) (do (shen.bindv V2741 () V2822) (let Result (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (do (shen.unbindv V2741 V2822) Result))) false)))) (if (shen.pvar? V2740) (let Direction (shen.newpv V2822) (do (shen.bindv V2740 (cons Direction ()) V2822) (let Result (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (do (shen.unbindv V2740 V2822) Result)))) false))) (do (shen.unbindv V2737 V2822) Result))) false))) (if (shen.pvar? V2736) (let Direction (shen.newpv V2822) (do (shen.bindv V2736 (cons stream (cons Direction ())) V2822) (let Result (do (shen.incinfs) (unify! Direction Direction2664 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* FileName string V2821 V2822 V2823)))))) (do (shen.unbindv V2736 V2822) Result)))) false))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2742 (shen.lazyderef V2819 V2822) (if (cons? V2742) (let V2743 (shen.lazyderef (hd V2742) V2822) (if (= type V2743) (let V2744 (shen.lazyderef (tl V2742) V2822) (if (cons? V2744) (let X (hd V2744) (let V2745 (shen.lazyderef (tl V2744) V2822) (if (cons? V2745) (let A (hd V2745) (let V2746 (shen.lazyderef (tl V2745) V2822) (if (= () V2746) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (unify A V2820 V2822 (freeze (shen.th* X A V2821 V2822 V2823)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2747 (shen.lazyderef V2819 V2822) (if (cons? V2747) (let V2748 (shen.lazyderef (hd V2747) V2822) (if (= input+ V2748) (let V2749 (shen.lazyderef (tl V2747) V2822) (if (cons? V2749) (let A (hd V2749) (let V2750 (shen.lazyderef (tl V2749) V2822) (if (cons? V2750) (let Stream (hd V2750) (let V2751 (shen.lazyderef (tl V2750) V2822) (if (= () V2751) (let C (shen.newpv V2822) (do (shen.incinfs) (bind C (shen.demodulate (shen.lazyderef A V2822)) V2822 (freeze (unify V2820 C V2822 (freeze (shen.th* Stream (cons stream (cons in ())) V2821 V2822 V2823))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2752 (shen.lazyderef V2819 V2822) (if (cons? V2752) (let V2753 (shen.lazyderef (hd V2752) V2822) (if (= set V2753) (let V2754 (shen.lazyderef (tl V2752) V2822) (if (cons? V2754) (let Var (hd V2754) (let V2755 (shen.lazyderef (tl V2754) V2822) (if (cons? V2755) (let Val (hd V2755) (let V2756 (shen.lazyderef (tl V2755) V2822) (if (= () V2756) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (shen.th* Var symbol V2821 V2822 (freeze (cut Throwcontrol V2822 (freeze (shen.th* (cons value (cons Var ())) V2820 V2821 V2822 (freeze (shen.th* Val V2820 V2821 V2822 V2823)))))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2757 (shen.lazyderef V2819 V2822) (if (cons? V2757) (let V2758 (shen.lazyderef (hd V2757) V2822) (if (= fail V2758) (let V2759 (shen.lazyderef (tl V2757) V2822) (if (= () V2759) (let V2760 (shen.lazyderef V2820 V2822) (if (= symbol V2760) (do (shen.incinfs) (thaw V2823)) (if (shen.pvar? V2760) (do (shen.bindv V2760 symbol V2822) (let Result (do (shen.incinfs) (thaw V2823)) (do (shen.unbindv V2760 V2822) Result))) false))) false)) false)) false)) (if (= Case false) (let Case (let NewHyp (shen.newpv V2822) (do (shen.incinfs) (shen.t*-hyps V2821 NewHyp V2822 (freeze (shen.th* V2819 V2820 NewHyp V2822 V2823))))) (if (= Case false) (let Case (let V2761 (shen.lazyderef V2819 V2822) (if (cons? V2761) (let V2762 (shen.lazyderef (hd V2761) V2822) (if (= define V2762) (let V2763 (shen.lazyderef (tl V2761) V2822) (if (cons? V2763) (let F (hd V2763) (let X (tl V2763) (do (shen.incinfs) (cut Throwcontrol V2822 (freeze (shen.t*-def (cons define (cons F X)) V2820 V2821 V2822 V2823)))))) false)) false)) false)) (if (= Case false) (let Case (let V2764 (shen.lazyderef V2819 V2822) (if (cons? V2764) (let V2765 (shen.lazyderef (hd V2764) V2822) (if (= defmacro V2765) (let V2766 (shen.lazyderef V2820 V2822) (if (= unit V2766) (do (shen.incinfs) (cut Throwcontrol V2822 V2823)) (if (shen.pvar? V2766) (do (shen.bindv V2766 unit V2822) (let Result (do (shen.incinfs) (cut Throwcontrol V2822 V2823)) (do (shen.unbindv V2766 V2822) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2767 (shen.lazyderef V2819 V2822) (if (cons? V2767) (let V2768 (shen.lazyderef (hd V2767) V2822) (if (= shen.process-datatype V2768) (let V2769 (shen.lazyderef V2820 V2822) (if (= symbol V2769) (do (shen.incinfs) (thaw V2823)) (if (shen.pvar? V2769) (do (shen.bindv V2769 symbol V2822) (let Result (do (shen.incinfs) (thaw V2823)) (do (shen.unbindv V2769 V2822) Result))) false))) false)) false)) (if (= Case false) (let Case (let V2770 (shen.lazyderef V2819 V2822) (if (cons? V2770) (let V2771 (shen.lazyderef (hd V2770) V2822) (if (= shen.synonyms-help V2771) (let V2772 (shen.lazyderef V2820 V2822) (if (= symbol V2772) (do (shen.incinfs) (thaw V2823)) (if (shen.pvar? V2772) (do (shen.bindv V2772 symbol V2822) (let Result (do (shen.incinfs) (thaw V2823)) (do (shen.unbindv V2772 V2822) Result))) false))) false)) false)) (if (= Case false) (let Datatypes (shen.newpv V2822) (do (shen.incinfs) (bind Datatypes (value shen.*datatypes*) V2822 (freeze (shen.udefs* (cons V2819 (cons : (cons V2820 ()))) V2821 Datatypes V2822 V2823))))) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case)) Case))))) -(defun shen.t*-hyps (V2916 V2917 V2918 V2919) (let Case (let V2663 (shen.lazyderef V2916 V2918) (if (cons? V2663) (let V2664 (shen.lazyderef (hd V2663) V2918) (if (cons? V2664) (let V2665 (shen.lazyderef (hd V2664) V2918) (if (cons? V2665) (let V2666 (shen.lazyderef (hd V2665) V2918) (if (= cons V2666) (let V2667 (shen.lazyderef (tl V2665) V2918) (if (cons? V2667) (let X (hd V2667) (let V2668 (shen.lazyderef (tl V2667) V2918) (if (cons? V2668) (let Y (hd V2668) (let V2669 (shen.lazyderef (tl V2668) V2918) (if (= () V2669) (let V2670 (shen.lazyderef (tl V2664) V2918) (if (cons? V2670) (let V2671 (shen.lazyderef (hd V2670) V2918) (if (= : V2671) (let V2672 (shen.lazyderef (tl V2670) V2918) (if (cons? V2672) (let V2673 (shen.lazyderef (hd V2672) V2918) (if (cons? V2673) (let V2674 (shen.lazyderef (hd V2673) V2918) (if (= list V2674) (let V2675 (shen.lazyderef (tl V2673) V2918) (if (cons? V2675) (let A (hd V2675) (let V2676 (shen.lazyderef (tl V2675) V2918) (if (= () V2676) (let V2677 (shen.lazyderef (tl V2672) V2918) (if (= () V2677) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2677) (do (shen.bindv V2677 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2677 V2918) Result))) false))) (if (shen.pvar? V2676) (do (shen.bindv V2676 () V2918) (let Result (let V2678 (shen.lazyderef (tl V2672) V2918) (if (= () V2678) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2678) (do (shen.bindv V2678 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2678 V2918) Result))) false))) (do (shen.unbindv V2676 V2918) Result))) false)))) (if (shen.pvar? V2675) (let A (shen.newpv V2918) (do (shen.bindv V2675 (cons A ()) V2918) (let Result (let V2679 (shen.lazyderef (tl V2672) V2918) (if (= () V2679) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2679) (do (shen.bindv V2679 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2679 V2918) Result))) false))) (do (shen.unbindv V2675 V2918) Result)))) false))) (if (shen.pvar? V2674) (do (shen.bindv V2674 list V2918) (let Result (let V2680 (shen.lazyderef (tl V2673) V2918) (if (cons? V2680) (let A (hd V2680) (let V2681 (shen.lazyderef (tl V2680) V2918) (if (= () V2681) (let V2682 (shen.lazyderef (tl V2672) V2918) (if (= () V2682) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2682) (do (shen.bindv V2682 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2682 V2918) Result))) false))) (if (shen.pvar? V2681) (do (shen.bindv V2681 () V2918) (let Result (let V2683 (shen.lazyderef (tl V2672) V2918) (if (= () V2683) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2683) (do (shen.bindv V2683 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2683 V2918) Result))) false))) (do (shen.unbindv V2681 V2918) Result))) false)))) (if (shen.pvar? V2680) (let A (shen.newpv V2918) (do (shen.bindv V2680 (cons A ()) V2918) (let Result (let V2684 (shen.lazyderef (tl V2672) V2918) (if (= () V2684) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2684) (do (shen.bindv V2684 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2684 V2918) Result))) false))) (do (shen.unbindv V2680 V2918) Result)))) false))) (do (shen.unbindv V2674 V2918) Result))) false))) (if (shen.pvar? V2673) (let A (shen.newpv V2918) (do (shen.bindv V2673 (cons list (cons A ())) V2918) (let Result (let V2685 (shen.lazyderef (tl V2672) V2918) (if (= () V2685) (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2685) (do (shen.bindv V2685 () V2918) (let Result (let Hyp (tl V2663) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons list (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2685 V2918) Result))) false))) (do (shen.unbindv V2673 V2918) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2686 (shen.lazyderef V2916 V2918) (if (cons? V2686) (let V2687 (shen.lazyderef (hd V2686) V2918) (if (cons? V2687) (let V2688 (shen.lazyderef (hd V2687) V2918) (if (cons? V2688) (let V2689 (shen.lazyderef (hd V2688) V2918) (if (= @p V2689) (let V2690 (shen.lazyderef (tl V2688) V2918) (if (cons? V2690) (let X (hd V2690) (let V2691 (shen.lazyderef (tl V2690) V2918) (if (cons? V2691) (let Y (hd V2691) (let V2692 (shen.lazyderef (tl V2691) V2918) (if (= () V2692) (let V2693 (shen.lazyderef (tl V2687) V2918) (if (cons? V2693) (let V2694 (shen.lazyderef (hd V2693) V2918) (if (= : V2694) (let V2695 (shen.lazyderef (tl V2693) V2918) (if (cons? V2695) (let V2696 (shen.lazyderef (hd V2695) V2918) (if (cons? V2696) (let A (hd V2696) (let V2697 (shen.lazyderef (tl V2696) V2918) (if (cons? V2697) (let V2698 (shen.lazyderef (hd V2697) V2918) (if (= * V2698) (let V2699 (shen.lazyderef (tl V2697) V2918) (if (cons? V2699) (let B (hd V2699) (let V2700 (shen.lazyderef (tl V2699) V2918) (if (= () V2700) (let V2701 (shen.lazyderef (tl V2695) V2918) (if (= () V2701) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2701) (do (shen.bindv V2701 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2701 V2918) Result))) false))) (if (shen.pvar? V2700) (do (shen.bindv V2700 () V2918) (let Result (let V2702 (shen.lazyderef (tl V2695) V2918) (if (= () V2702) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2702) (do (shen.bindv V2702 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2702 V2918) Result))) false))) (do (shen.unbindv V2700 V2918) Result))) false)))) (if (shen.pvar? V2699) (let B (shen.newpv V2918) (do (shen.bindv V2699 (cons B ()) V2918) (let Result (let V2703 (shen.lazyderef (tl V2695) V2918) (if (= () V2703) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2703) (do (shen.bindv V2703 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2703 V2918) Result))) false))) (do (shen.unbindv V2699 V2918) Result)))) false))) (if (shen.pvar? V2698) (do (shen.bindv V2698 * V2918) (let Result (let V2704 (shen.lazyderef (tl V2697) V2918) (if (cons? V2704) (let B (hd V2704) (let V2705 (shen.lazyderef (tl V2704) V2918) (if (= () V2705) (let V2706 (shen.lazyderef (tl V2695) V2918) (if (= () V2706) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2706) (do (shen.bindv V2706 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2706 V2918) Result))) false))) (if (shen.pvar? V2705) (do (shen.bindv V2705 () V2918) (let Result (let V2707 (shen.lazyderef (tl V2695) V2918) (if (= () V2707) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2707) (do (shen.bindv V2707 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2707 V2918) Result))) false))) (do (shen.unbindv V2705 V2918) Result))) false)))) (if (shen.pvar? V2704) (let B (shen.newpv V2918) (do (shen.bindv V2704 (cons B ()) V2918) (let Result (let V2708 (shen.lazyderef (tl V2695) V2918) (if (= () V2708) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2708) (do (shen.bindv V2708 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2708 V2918) Result))) false))) (do (shen.unbindv V2704 V2918) Result)))) false))) (do (shen.unbindv V2698 V2918) Result))) false))) (if (shen.pvar? V2697) (let B (shen.newpv V2918) (do (shen.bindv V2697 (cons * (cons B ())) V2918) (let Result (let V2709 (shen.lazyderef (tl V2695) V2918) (if (= () V2709) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2709) (do (shen.bindv V2709 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2709 V2918) Result))) false))) (do (shen.unbindv V2697 V2918) Result)))) false)))) (if (shen.pvar? V2696) (let A (shen.newpv V2918) (let B (shen.newpv V2918) (do (shen.bindv V2696 (cons A (cons * (cons B ()))) V2918) (let Result (let V2710 (shen.lazyderef (tl V2695) V2918) (if (= () V2710) (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2710) (do (shen.bindv V2710 () V2918) (let Result (let Hyp (tl V2686) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (shen.lazyderef B V2918) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2710 V2918) Result))) false))) (do (shen.unbindv V2696 V2918) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2711 (shen.lazyderef V2916 V2918) (if (cons? V2711) (let V2712 (shen.lazyderef (hd V2711) V2918) (if (cons? V2712) (let V2713 (shen.lazyderef (hd V2712) V2918) (if (cons? V2713) (let V2714 (shen.lazyderef (hd V2713) V2918) (if (= @v V2714) (let V2715 (shen.lazyderef (tl V2713) V2918) (if (cons? V2715) (let X (hd V2715) (let V2716 (shen.lazyderef (tl V2715) V2918) (if (cons? V2716) (let Y (hd V2716) (let V2717 (shen.lazyderef (tl V2716) V2918) (if (= () V2717) (let V2718 (shen.lazyderef (tl V2712) V2918) (if (cons? V2718) (let V2719 (shen.lazyderef (hd V2718) V2918) (if (= : V2719) (let V2720 (shen.lazyderef (tl V2718) V2918) (if (cons? V2720) (let V2721 (shen.lazyderef (hd V2720) V2918) (if (cons? V2721) (let V2722 (shen.lazyderef (hd V2721) V2918) (if (= vector V2722) (let V2723 (shen.lazyderef (tl V2721) V2918) (if (cons? V2723) (let A (hd V2723) (let V2724 (shen.lazyderef (tl V2723) V2918) (if (= () V2724) (let V2725 (shen.lazyderef (tl V2720) V2918) (if (= () V2725) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2725) (do (shen.bindv V2725 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2725 V2918) Result))) false))) (if (shen.pvar? V2724) (do (shen.bindv V2724 () V2918) (let Result (let V2726 (shen.lazyderef (tl V2720) V2918) (if (= () V2726) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2726) (do (shen.bindv V2726 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2726 V2918) Result))) false))) (do (shen.unbindv V2724 V2918) Result))) false)))) (if (shen.pvar? V2723) (let A (shen.newpv V2918) (do (shen.bindv V2723 (cons A ()) V2918) (let Result (let V2727 (shen.lazyderef (tl V2720) V2918) (if (= () V2727) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2727) (do (shen.bindv V2727 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2727 V2918) Result))) false))) (do (shen.unbindv V2723 V2918) Result)))) false))) (if (shen.pvar? V2722) (do (shen.bindv V2722 vector V2918) (let Result (let V2728 (shen.lazyderef (tl V2721) V2918) (if (cons? V2728) (let A (hd V2728) (let V2729 (shen.lazyderef (tl V2728) V2918) (if (= () V2729) (let V2730 (shen.lazyderef (tl V2720) V2918) (if (= () V2730) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2730) (do (shen.bindv V2730 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2730 V2918) Result))) false))) (if (shen.pvar? V2729) (do (shen.bindv V2729 () V2918) (let Result (let V2731 (shen.lazyderef (tl V2720) V2918) (if (= () V2731) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2731) (do (shen.bindv V2731 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2731 V2918) Result))) false))) (do (shen.unbindv V2729 V2918) Result))) false)))) (if (shen.pvar? V2728) (let A (shen.newpv V2918) (do (shen.bindv V2728 (cons A ()) V2918) (let Result (let V2732 (shen.lazyderef (tl V2720) V2918) (if (= () V2732) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2732) (do (shen.bindv V2732 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2732 V2918) Result))) false))) (do (shen.unbindv V2728 V2918) Result)))) false))) (do (shen.unbindv V2722 V2918) Result))) false))) (if (shen.pvar? V2721) (let A (shen.newpv V2918) (do (shen.bindv V2721 (cons vector (cons A ())) V2918) (let Result (let V2733 (shen.lazyderef (tl V2720) V2918) (if (= () V2733) (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2733) (do (shen.bindv V2733 () V2918) (let Result (let Hyp (tl V2711) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons (shen.lazyderef A V2918) ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons (cons vector (cons (shen.lazyderef A V2918) ())) ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2733 V2918) Result))) false))) (do (shen.unbindv V2721 V2918) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2734 (shen.lazyderef V2916 V2918) (if (cons? V2734) (let V2735 (shen.lazyderef (hd V2734) V2918) (if (cons? V2735) (let V2736 (shen.lazyderef (hd V2735) V2918) (if (cons? V2736) (let V2737 (shen.lazyderef (hd V2736) V2918) (if (= @s V2737) (let V2738 (shen.lazyderef (tl V2736) V2918) (if (cons? V2738) (let X (hd V2738) (let V2739 (shen.lazyderef (tl V2738) V2918) (if (cons? V2739) (let Y (hd V2739) (let V2740 (shen.lazyderef (tl V2739) V2918) (if (= () V2740) (let V2741 (shen.lazyderef (tl V2735) V2918) (if (cons? V2741) (let V2742 (shen.lazyderef (hd V2741) V2918) (if (= : V2742) (let V2743 (shen.lazyderef (tl V2741) V2918) (if (cons? V2743) (let V2744 (shen.lazyderef (hd V2743) V2918) (if (= string V2744) (let V2745 (shen.lazyderef (tl V2743) V2918) (if (= () V2745) (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2745) (do (shen.bindv V2745 () V2918) (let Result (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2745 V2918) Result))) false))) (if (shen.pvar? V2744) (do (shen.bindv V2744 string V2918) (let Result (let V2746 (shen.lazyderef (tl V2743) V2918) (if (= () V2746) (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (if (shen.pvar? V2746) (do (shen.bindv V2746 () V2918) (let Result (let Hyp (tl V2734) (do (shen.incinfs) (bind V2917 (cons (cons (shen.lazyderef X V2918) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2918) (cons : (cons string ()))) (shen.lazyderef Hyp V2918))) V2918 V2919))) (do (shen.unbindv V2746 V2918) Result))) false))) (do (shen.unbindv V2744 V2918) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2747 (shen.lazyderef V2916 V2918) (if (cons? V2747) (let X (hd V2747) (let Hyp (tl V2747) (let NewHyps (shen.newpv V2918) (do (shen.incinfs) (bind V2917 (cons (shen.lazyderef X V2918) (shen.lazyderef NewHyps V2918)) V2918 (freeze (shen.t*-hyps Hyp NewHyps V2918 V2919))))))) false)) Case)) Case)) Case)) Case))) +(defun shen.t*-hyps (V2824 V2825 V2826 V2827) (let Case (let V2579 (shen.lazyderef V2824 V2826) (if (cons? V2579) (let V2580 (shen.lazyderef (hd V2579) V2826) (if (cons? V2580) (let V2581 (shen.lazyderef (hd V2580) V2826) (if (cons? V2581) (let V2582 (shen.lazyderef (hd V2581) V2826) (if (= cons V2582) (let V2583 (shen.lazyderef (tl V2581) V2826) (if (cons? V2583) (let X (hd V2583) (let V2584 (shen.lazyderef (tl V2583) V2826) (if (cons? V2584) (let Y (hd V2584) (let V2585 (shen.lazyderef (tl V2584) V2826) (if (= () V2585) (let V2586 (shen.lazyderef (tl V2580) V2826) (if (cons? V2586) (let V2587 (shen.lazyderef (hd V2586) V2826) (if (= : V2587) (let V2588 (shen.lazyderef (tl V2586) V2826) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V2826) (if (cons? V2589) (let V2590 (shen.lazyderef (hd V2589) V2826) (if (= list V2590) (let V2591 (shen.lazyderef (tl V2589) V2826) (if (cons? V2591) (let A (hd V2591) (let V2592 (shen.lazyderef (tl V2591) V2826) (if (= () V2592) (let V2593 (shen.lazyderef (tl V2588) V2826) (if (= () V2593) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2593) (do (shen.bindv V2593 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2593 V2826) Result))) false))) (if (shen.pvar? V2592) (do (shen.bindv V2592 () V2826) (let Result (let V2594 (shen.lazyderef (tl V2588) V2826) (if (= () V2594) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2594) (do (shen.bindv V2594 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2594 V2826) Result))) false))) (do (shen.unbindv V2592 V2826) Result))) false)))) (if (shen.pvar? V2591) (let A (shen.newpv V2826) (do (shen.bindv V2591 (cons A ()) V2826) (let Result (let V2595 (shen.lazyderef (tl V2588) V2826) (if (= () V2595) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2595) (do (shen.bindv V2595 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2595 V2826) Result))) false))) (do (shen.unbindv V2591 V2826) Result)))) false))) (if (shen.pvar? V2590) (do (shen.bindv V2590 list V2826) (let Result (let V2596 (shen.lazyderef (tl V2589) V2826) (if (cons? V2596) (let A (hd V2596) (let V2597 (shen.lazyderef (tl V2596) V2826) (if (= () V2597) (let V2598 (shen.lazyderef (tl V2588) V2826) (if (= () V2598) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2598) (do (shen.bindv V2598 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2598 V2826) Result))) false))) (if (shen.pvar? V2597) (do (shen.bindv V2597 () V2826) (let Result (let V2599 (shen.lazyderef (tl V2588) V2826) (if (= () V2599) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2599) (do (shen.bindv V2599 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2599 V2826) Result))) false))) (do (shen.unbindv V2597 V2826) Result))) false)))) (if (shen.pvar? V2596) (let A (shen.newpv V2826) (do (shen.bindv V2596 (cons A ()) V2826) (let Result (let V2600 (shen.lazyderef (tl V2588) V2826) (if (= () V2600) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2600) (do (shen.bindv V2600 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2600 V2826) Result))) false))) (do (shen.unbindv V2596 V2826) Result)))) false))) (do (shen.unbindv V2590 V2826) Result))) false))) (if (shen.pvar? V2589) (let A (shen.newpv V2826) (do (shen.bindv V2589 (cons list (cons A ())) V2826) (let Result (let V2601 (shen.lazyderef (tl V2588) V2826) (if (= () V2601) (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2601) (do (shen.bindv V2601 () V2826) (let Result (let Hyp (tl V2579) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons list (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2601 V2826) Result))) false))) (do (shen.unbindv V2589 V2826) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2602 (shen.lazyderef V2824 V2826) (if (cons? V2602) (let V2603 (shen.lazyderef (hd V2602) V2826) (if (cons? V2603) (let V2604 (shen.lazyderef (hd V2603) V2826) (if (cons? V2604) (let V2605 (shen.lazyderef (hd V2604) V2826) (if (= @p V2605) (let V2606 (shen.lazyderef (tl V2604) V2826) (if (cons? V2606) (let X (hd V2606) (let V2607 (shen.lazyderef (tl V2606) V2826) (if (cons? V2607) (let Y (hd V2607) (let V2608 (shen.lazyderef (tl V2607) V2826) (if (= () V2608) (let V2609 (shen.lazyderef (tl V2603) V2826) (if (cons? V2609) (let V2610 (shen.lazyderef (hd V2609) V2826) (if (= : V2610) (let V2611 (shen.lazyderef (tl V2609) V2826) (if (cons? V2611) (let V2612 (shen.lazyderef (hd V2611) V2826) (if (cons? V2612) (let A (hd V2612) (let V2613 (shen.lazyderef (tl V2612) V2826) (if (cons? V2613) (let V2614 (shen.lazyderef (hd V2613) V2826) (if (= * V2614) (let V2615 (shen.lazyderef (tl V2613) V2826) (if (cons? V2615) (let B (hd V2615) (let V2616 (shen.lazyderef (tl V2615) V2826) (if (= () V2616) (let V2617 (shen.lazyderef (tl V2611) V2826) (if (= () V2617) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2617) (do (shen.bindv V2617 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2617 V2826) Result))) false))) (if (shen.pvar? V2616) (do (shen.bindv V2616 () V2826) (let Result (let V2618 (shen.lazyderef (tl V2611) V2826) (if (= () V2618) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2618) (do (shen.bindv V2618 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2618 V2826) Result))) false))) (do (shen.unbindv V2616 V2826) Result))) false)))) (if (shen.pvar? V2615) (let B (shen.newpv V2826) (do (shen.bindv V2615 (cons B ()) V2826) (let Result (let V2619 (shen.lazyderef (tl V2611) V2826) (if (= () V2619) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2619) (do (shen.bindv V2619 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2619 V2826) Result))) false))) (do (shen.unbindv V2615 V2826) Result)))) false))) (if (shen.pvar? V2614) (do (shen.bindv V2614 * V2826) (let Result (let V2620 (shen.lazyderef (tl V2613) V2826) (if (cons? V2620) (let B (hd V2620) (let V2621 (shen.lazyderef (tl V2620) V2826) (if (= () V2621) (let V2622 (shen.lazyderef (tl V2611) V2826) (if (= () V2622) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2622) (do (shen.bindv V2622 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2622 V2826) Result))) false))) (if (shen.pvar? V2621) (do (shen.bindv V2621 () V2826) (let Result (let V2623 (shen.lazyderef (tl V2611) V2826) (if (= () V2623) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2623) (do (shen.bindv V2623 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2623 V2826) Result))) false))) (do (shen.unbindv V2621 V2826) Result))) false)))) (if (shen.pvar? V2620) (let B (shen.newpv V2826) (do (shen.bindv V2620 (cons B ()) V2826) (let Result (let V2624 (shen.lazyderef (tl V2611) V2826) (if (= () V2624) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2624) (do (shen.bindv V2624 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2624 V2826) Result))) false))) (do (shen.unbindv V2620 V2826) Result)))) false))) (do (shen.unbindv V2614 V2826) Result))) false))) (if (shen.pvar? V2613) (let B (shen.newpv V2826) (do (shen.bindv V2613 (cons * (cons B ())) V2826) (let Result (let V2625 (shen.lazyderef (tl V2611) V2826) (if (= () V2625) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2625) (do (shen.bindv V2625 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2625 V2826) Result))) false))) (do (shen.unbindv V2613 V2826) Result)))) false)))) (if (shen.pvar? V2612) (let A (shen.newpv V2826) (let B (shen.newpv V2826) (do (shen.bindv V2612 (cons A (cons * (cons B ()))) V2826) (let Result (let V2626 (shen.lazyderef (tl V2611) V2826) (if (= () V2626) (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2626) (do (shen.bindv V2626 () V2826) (let Result (let Hyp (tl V2602) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (shen.lazyderef B V2826) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2626 V2826) Result))) false))) (do (shen.unbindv V2612 V2826) Result))))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2627 (shen.lazyderef V2824 V2826) (if (cons? V2627) (let V2628 (shen.lazyderef (hd V2627) V2826) (if (cons? V2628) (let V2629 (shen.lazyderef (hd V2628) V2826) (if (cons? V2629) (let V2630 (shen.lazyderef (hd V2629) V2826) (if (= @v V2630) (let V2631 (shen.lazyderef (tl V2629) V2826) (if (cons? V2631) (let X (hd V2631) (let V2632 (shen.lazyderef (tl V2631) V2826) (if (cons? V2632) (let Y (hd V2632) (let V2633 (shen.lazyderef (tl V2632) V2826) (if (= () V2633) (let V2634 (shen.lazyderef (tl V2628) V2826) (if (cons? V2634) (let V2635 (shen.lazyderef (hd V2634) V2826) (if (= : V2635) (let V2636 (shen.lazyderef (tl V2634) V2826) (if (cons? V2636) (let V2637 (shen.lazyderef (hd V2636) V2826) (if (cons? V2637) (let V2638 (shen.lazyderef (hd V2637) V2826) (if (= vector V2638) (let V2639 (shen.lazyderef (tl V2637) V2826) (if (cons? V2639) (let A (hd V2639) (let V2640 (shen.lazyderef (tl V2639) V2826) (if (= () V2640) (let V2641 (shen.lazyderef (tl V2636) V2826) (if (= () V2641) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2641) (do (shen.bindv V2641 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2641 V2826) Result))) false))) (if (shen.pvar? V2640) (do (shen.bindv V2640 () V2826) (let Result (let V2642 (shen.lazyderef (tl V2636) V2826) (if (= () V2642) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2642) (do (shen.bindv V2642 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2642 V2826) Result))) false))) (do (shen.unbindv V2640 V2826) Result))) false)))) (if (shen.pvar? V2639) (let A (shen.newpv V2826) (do (shen.bindv V2639 (cons A ()) V2826) (let Result (let V2643 (shen.lazyderef (tl V2636) V2826) (if (= () V2643) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2643) (do (shen.bindv V2643 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2643 V2826) Result))) false))) (do (shen.unbindv V2639 V2826) Result)))) false))) (if (shen.pvar? V2638) (do (shen.bindv V2638 vector V2826) (let Result (let V2644 (shen.lazyderef (tl V2637) V2826) (if (cons? V2644) (let A (hd V2644) (let V2645 (shen.lazyderef (tl V2644) V2826) (if (= () V2645) (let V2646 (shen.lazyderef (tl V2636) V2826) (if (= () V2646) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2646) (do (shen.bindv V2646 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2646 V2826) Result))) false))) (if (shen.pvar? V2645) (do (shen.bindv V2645 () V2826) (let Result (let V2647 (shen.lazyderef (tl V2636) V2826) (if (= () V2647) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2647) (do (shen.bindv V2647 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2647 V2826) Result))) false))) (do (shen.unbindv V2645 V2826) Result))) false)))) (if (shen.pvar? V2644) (let A (shen.newpv V2826) (do (shen.bindv V2644 (cons A ()) V2826) (let Result (let V2648 (shen.lazyderef (tl V2636) V2826) (if (= () V2648) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2648) (do (shen.bindv V2648 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2648 V2826) Result))) false))) (do (shen.unbindv V2644 V2826) Result)))) false))) (do (shen.unbindv V2638 V2826) Result))) false))) (if (shen.pvar? V2637) (let A (shen.newpv V2826) (do (shen.bindv V2637 (cons vector (cons A ())) V2826) (let Result (let V2649 (shen.lazyderef (tl V2636) V2826) (if (= () V2649) (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2649) (do (shen.bindv V2649 () V2826) (let Result (let Hyp (tl V2627) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons (shen.lazyderef A V2826) ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons (cons vector (cons (shen.lazyderef A V2826) ())) ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2649 V2826) Result))) false))) (do (shen.unbindv V2637 V2826) Result)))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2650 (shen.lazyderef V2824 V2826) (if (cons? V2650) (let V2651 (shen.lazyderef (hd V2650) V2826) (if (cons? V2651) (let V2652 (shen.lazyderef (hd V2651) V2826) (if (cons? V2652) (let V2653 (shen.lazyderef (hd V2652) V2826) (if (= @s V2653) (let V2654 (shen.lazyderef (tl V2652) V2826) (if (cons? V2654) (let X (hd V2654) (let V2655 (shen.lazyderef (tl V2654) V2826) (if (cons? V2655) (let Y (hd V2655) (let V2656 (shen.lazyderef (tl V2655) V2826) (if (= () V2656) (let V2657 (shen.lazyderef (tl V2651) V2826) (if (cons? V2657) (let V2658 (shen.lazyderef (hd V2657) V2826) (if (= : V2658) (let V2659 (shen.lazyderef (tl V2657) V2826) (if (cons? V2659) (let V2660 (shen.lazyderef (hd V2659) V2826) (if (= string V2660) (let V2661 (shen.lazyderef (tl V2659) V2826) (if (= () V2661) (let Hyp (tl V2650) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons string ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2661) (do (shen.bindv V2661 () V2826) (let Result (let Hyp (tl V2650) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons string ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2661 V2826) Result))) false))) (if (shen.pvar? V2660) (do (shen.bindv V2660 string V2826) (let Result (let V2662 (shen.lazyderef (tl V2659) V2826) (if (= () V2662) (let Hyp (tl V2650) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons string ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (if (shen.pvar? V2662) (do (shen.bindv V2662 () V2826) (let Result (let Hyp (tl V2650) (do (shen.incinfs) (bind V2825 (cons (cons (shen.lazyderef X V2826) (cons : (cons string ()))) (cons (cons (shen.lazyderef Y V2826) (cons : (cons string ()))) (shen.lazyderef Hyp V2826))) V2826 V2827))) (do (shen.unbindv V2662 V2826) Result))) false))) (do (shen.unbindv V2660 V2826) Result))) false))) false)) false)) false)) false))) false))) false)) false)) false)) false)) false)) (if (= Case false) (let V2663 (shen.lazyderef V2824 V2826) (if (cons? V2663) (let X (hd V2663) (let Hyp (tl V2663) (let NewHyps (shen.newpv V2826) (do (shen.incinfs) (bind V2825 (cons (shen.lazyderef X V2826) (shen.lazyderef NewHyps V2826)) V2826 (freeze (shen.t*-hyps Hyp NewHyps V2826 V2827))))))) false)) Case)) Case)) Case)) Case))) -(defun shen.show (V2932 V2933 V2934 V2935) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2932 V2934)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2933 V2934) 1) (do (shen.prhush " -> " (stoutput)) (do (shen.pause-for-user) (thaw V2935))))))))) (true (thaw V2935)))) +(defun shen.show (V2840 V2841 V2842 V2843) (cond ((value shen.*spy*) (do (shen.line) (do (shen.show-p (shen.deref V2840 V2842)) (do (nl 1) (do (nl 1) (do (shen.show-assumptions (shen.deref V2841 V2842) 1) (do (shen.prhush " +> " (stoutput)) (do (shen.pause-for-user) (thaw V2843))))))))) (true (thaw V2843)))) (defun shen.line () (let Infs (inferences) (shen.prhush (cn "____________________________________________________________ " (shen.app Infs (cn " inference" (shen.app (if (= 1 Infs) "" "s") " ?- " shen.a)) shen.a)) (stoutput)))) -(defun shen.show-p (V2936) (cond ((and (cons? V2936) (and (cons? (tl V2936)) (and (= : (hd (tl V2936))) (and (cons? (tl (tl V2936))) (= () (tl (tl (tl V2936)))))))) (shen.prhush (shen.app (hd V2936) (cn " : " (shen.app (hd (tl (tl V2936))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2936 "" shen.r) (stoutput))))) +(defun shen.show-p (V2844) (cond ((and (cons? V2844) (and (cons? (tl V2844)) (and (= : (hd (tl V2844))) (and (cons? (tl (tl V2844))) (= () (tl (tl (tl V2844)))))))) (shen.prhush (shen.app (hd V2844) (cn " : " (shen.app (hd (tl (tl V2844))) "" shen.r)) shen.r) (stoutput))) (true (shen.prhush (shen.app V2844 "" shen.r) (stoutput))))) -(defun shen.show-assumptions (V2939 V2940) (cond ((= () V2939) shen.skip) ((cons? V2939) (do (shen.prhush (shen.app V2940 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2939)) (do (nl 1) (shen.show-assumptions (tl V2939) (+ V2940 1)))))) (true (shen.sys-error shen.show-assumptions)))) +(defun shen.show-assumptions (V2847 V2848) (cond ((= () V2847) shen.skip) ((cons? V2847) (do (shen.prhush (shen.app V2848 ". " shen.a) (stoutput)) (do (shen.show-p (hd V2847)) (do (nl 1) (shen.show-assumptions (tl V2847) (+ V2848 1)))))) (true (shen.sys-error shen.show-assumptions)))) (defun shen.pause-for-user () (let Byte (read-byte (stinput)) (if (= Byte 94) (simple-error "input aborted ") (nl 1)))) -(defun shen.typedf? (V2941) (cons? (assoc V2941 (value shen.*signedfuncs*)))) +(defun shen.typedf? (V2849) (cons? (assoc V2849 (value shen.*signedfuncs*)))) -(defun shen.sigf (V2942) (concat shen.type-signature-of- V2942)) +(defun shen.sigf (V2850) (concat shen.type-signature-of- V2850)) (defun shen.placeholder () (gensym &&)) -(defun shen.base (V2943 V2944 V2945 V2946) (let Case (let V2650 (shen.lazyderef V2944 V2945) (if (= number V2650) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2650) (do (shen.bindv V2650 number V2945) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2650 V2945) Result))) false))) (if (= Case false) (let Case (let V2651 (shen.lazyderef V2944 V2945) (if (= boolean V2651) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2651) (do (shen.bindv V2651 boolean V2945) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2651 V2945) Result))) false))) (if (= Case false) (let Case (let V2652 (shen.lazyderef V2944 V2945) (if (= string V2652) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2943 V2945)) V2945 V2946)) (if (shen.pvar? V2652) (do (shen.bindv V2652 string V2945) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2943 V2945)) V2945 V2946)) (do (shen.unbindv V2652 V2945) Result))) false))) (if (= Case false) (let Case (let V2653 (shen.lazyderef V2944 V2945) (if (= symbol V2653) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2943 V2945)) V2945 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2943 V2945))) V2945 V2946)))) (if (shen.pvar? V2653) (do (shen.bindv V2653 symbol V2945) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2943 V2945)) V2945 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2943 V2945))) V2945 V2946)))) (do (shen.unbindv V2653 V2945) Result))) false))) (if (= Case false) (let V2654 (shen.lazyderef V2943 V2945) (if (= () V2654) (let V2655 (shen.lazyderef V2944 V2945) (if (cons? V2655) (let V2656 (shen.lazyderef (hd V2655) V2945) (if (= list V2656) (let V2657 (shen.lazyderef (tl V2655) V2945) (if (cons? V2657) (let A (hd V2657) (let V2658 (shen.lazyderef (tl V2657) V2945) (if (= () V2658) (do (shen.incinfs) (thaw V2946)) (if (shen.pvar? V2658) (do (shen.bindv V2658 () V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2658 V2945) Result))) false)))) (if (shen.pvar? V2657) (let A (shen.newpv V2945) (do (shen.bindv V2657 (cons A ()) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2657 V2945) Result)))) false))) (if (shen.pvar? V2656) (do (shen.bindv V2656 list V2945) (let Result (let V2659 (shen.lazyderef (tl V2655) V2945) (if (cons? V2659) (let A (hd V2659) (let V2660 (shen.lazyderef (tl V2659) V2945) (if (= () V2660) (do (shen.incinfs) (thaw V2946)) (if (shen.pvar? V2660) (do (shen.bindv V2660 () V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2660 V2945) Result))) false)))) (if (shen.pvar? V2659) (let A (shen.newpv V2945) (do (shen.bindv V2659 (cons A ()) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2659 V2945) Result)))) false))) (do (shen.unbindv V2656 V2945) Result))) false))) (if (shen.pvar? V2655) (let A (shen.newpv V2945) (do (shen.bindv V2655 (cons list (cons A ())) V2945) (let Result (do (shen.incinfs) (thaw V2946)) (do (shen.unbindv V2655 V2945) Result)))) false))) false)) Case)) Case)) Case)) Case))) +(defun shen.base (V2851 V2852 V2853 V2854) (let Case (let V2566 (shen.lazyderef V2852 V2853) (if (= number V2566) (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2851 V2853)) V2853 V2854)) (if (shen.pvar? V2566) (do (shen.bindv V2566 number V2853) (let Result (do (shen.incinfs) (fwhen (number? (shen.lazyderef V2851 V2853)) V2853 V2854)) (do (shen.unbindv V2566 V2853) Result))) false))) (if (= Case false) (let Case (let V2567 (shen.lazyderef V2852 V2853) (if (= boolean V2567) (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2851 V2853)) V2853 V2854)) (if (shen.pvar? V2567) (do (shen.bindv V2567 boolean V2853) (let Result (do (shen.incinfs) (fwhen (boolean? (shen.lazyderef V2851 V2853)) V2853 V2854)) (do (shen.unbindv V2567 V2853) Result))) false))) (if (= Case false) (let Case (let V2568 (shen.lazyderef V2852 V2853) (if (= string V2568) (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2851 V2853)) V2853 V2854)) (if (shen.pvar? V2568) (do (shen.bindv V2568 string V2853) (let Result (do (shen.incinfs) (fwhen (string? (shen.lazyderef V2851 V2853)) V2853 V2854)) (do (shen.unbindv V2568 V2853) Result))) false))) (if (= Case false) (let Case (let V2569 (shen.lazyderef V2852 V2853) (if (= symbol V2569) (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2851 V2853)) V2853 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2851 V2853))) V2853 V2854)))) (if (shen.pvar? V2569) (do (shen.bindv V2569 symbol V2853) (let Result (do (shen.incinfs) (fwhen (symbol? (shen.lazyderef V2851 V2853)) V2853 (freeze (fwhen (not (shen.ue? (shen.lazyderef V2851 V2853))) V2853 V2854)))) (do (shen.unbindv V2569 V2853) Result))) false))) (if (= Case false) (let V2570 (shen.lazyderef V2851 V2853) (if (= () V2570) (let V2571 (shen.lazyderef V2852 V2853) (if (cons? V2571) (let V2572 (shen.lazyderef (hd V2571) V2853) (if (= list V2572) (let V2573 (shen.lazyderef (tl V2571) V2853) (if (cons? V2573) (let A (hd V2573) (let V2574 (shen.lazyderef (tl V2573) V2853) (if (= () V2574) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2574) (do (shen.bindv V2574 () V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2574 V2853) Result))) false)))) (if (shen.pvar? V2573) (let A (shen.newpv V2853) (do (shen.bindv V2573 (cons A ()) V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2573 V2853) Result)))) false))) (if (shen.pvar? V2572) (do (shen.bindv V2572 list V2853) (let Result (let V2575 (shen.lazyderef (tl V2571) V2853) (if (cons? V2575) (let A (hd V2575) (let V2576 (shen.lazyderef (tl V2575) V2853) (if (= () V2576) (do (shen.incinfs) (thaw V2854)) (if (shen.pvar? V2576) (do (shen.bindv V2576 () V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2576 V2853) Result))) false)))) (if (shen.pvar? V2575) (let A (shen.newpv V2853) (do (shen.bindv V2575 (cons A ()) V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2575 V2853) Result)))) false))) (do (shen.unbindv V2572 V2853) Result))) false))) (if (shen.pvar? V2571) (let A (shen.newpv V2853) (do (shen.bindv V2571 (cons list (cons A ())) V2853) (let Result (do (shen.incinfs) (thaw V2854)) (do (shen.unbindv V2571 V2853) Result)))) false))) false)) Case)) Case)) Case)) Case))) -(defun shen.by_hypothesis (V2947 V2948 V2949 V2950 V2951) (let Case (let V2641 (shen.lazyderef V2949 V2950) (if (cons? V2641) (let V2642 (shen.lazyderef (hd V2641) V2950) (if (cons? V2642) (let Y (hd V2642) (let V2643 (shen.lazyderef (tl V2642) V2950) (if (cons? V2643) (let V2644 (shen.lazyderef (hd V2643) V2950) (if (= : V2644) (let V2645 (shen.lazyderef (tl V2643) V2950) (if (cons? V2645) (let B (hd V2645) (let V2646 (shen.lazyderef (tl V2645) V2950) (if (= () V2646) (do (shen.incinfs) (identical V2947 Y V2950 (freeze (unify! V2948 B V2950 V2951)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2647 (shen.lazyderef V2949 V2950) (if (cons? V2647) (let Hyp (tl V2647) (do (shen.incinfs) (shen.by_hypothesis V2947 V2948 Hyp V2950 V2951))) false)) Case))) +(defun shen.by_hypothesis (V2855 V2856 V2857 V2858 V2859) (let Case (let V2557 (shen.lazyderef V2857 V2858) (if (cons? V2557) (let V2558 (shen.lazyderef (hd V2557) V2858) (if (cons? V2558) (let Y (hd V2558) (let V2559 (shen.lazyderef (tl V2558) V2858) (if (cons? V2559) (let V2560 (shen.lazyderef (hd V2559) V2858) (if (= : V2560) (let V2561 (shen.lazyderef (tl V2559) V2858) (if (cons? V2561) (let B (hd V2561) (let V2562 (shen.lazyderef (tl V2561) V2858) (if (= () V2562) (do (shen.incinfs) (identical V2855 Y V2858 (freeze (unify! V2856 B V2858 V2859)))) false))) false)) false)) false))) false)) false)) (if (= Case false) (let V2563 (shen.lazyderef V2857 V2858) (if (cons? V2563) (let Hyp (tl V2563) (do (shen.incinfs) (shen.by_hypothesis V2855 V2856 Hyp V2858 V2859))) false)) Case))) -(defun shen.t*-def (V2952 V2953 V2954 V2955 V2956) (let V2635 (shen.lazyderef V2952 V2955) (if (cons? V2635) (let V2636 (shen.lazyderef (hd V2635) V2955) (if (= define V2636) (let V2637 (shen.lazyderef (tl V2635) V2955) (if (cons? V2637) (let F (hd V2637) (let X (tl V2637) (let E (shen.newpv V2955) (do (shen.incinfs) (shen.t*-defh (compile (lambda X2878 (shen. X2878)) X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.t*-def (V2860 V2861 V2862 V2863 V2864) (let V2551 (shen.lazyderef V2860 V2863) (if (cons? V2551) (let V2552 (shen.lazyderef (hd V2551) V2863) (if (= define V2552) (let V2553 (shen.lazyderef (tl V2551) V2863) (if (cons? V2553) (let F (hd V2553) (let X (tl V2553) (let E (shen.newpv V2863) (do (shen.incinfs) (shen.t*-defh (compile (lambda X2787 (shen. X2787)) X (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -")))) F V2953 V2954 V2955 V2956))))) false)) false)) false))) +")))) F V2861 V2862 V2863 V2864))))) false)) false)) false))) -(defun shen.t*-defh (V2957 V2958 V2959 V2960 V2961 V2962) (let V2631 (shen.lazyderef V2957 V2961) (if (cons? V2631) (let Sig (hd V2631) (let Rules (tl V2631) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2958 V2959 V2960 Rules V2961 V2962)))) false))) +(defun shen.t*-defh (V2865 V2866 V2867 V2868 V2869 V2870) (let V2547 (shen.lazyderef V2865 V2869) (if (cons? V2547) (let Sig (hd V2547) (let Rules (tl V2547) (do (shen.incinfs) (shen.t*-defhh Sig (shen.ue-sig Sig) V2866 V2867 V2868 Rules V2869 V2870)))) false))) -(defun shen.t*-defhh (V2963 V2964 V2965 V2966 V2967 V2968 V2969 V2970) (do (shen.incinfs) (shen.t*-rules V2968 V2964 1 V2965 (cons (cons V2965 (cons : (cons V2964 ()))) V2967) V2969 (freeze (shen.memo V2965 V2963 V2966 V2969 V2970))))) +(defun shen.t*-defhh (V2871 V2872 V2873 V2874 V2875 V2876 V2877 V2878) (do (shen.incinfs) (shen.t*-rules V2876 V2872 1 V2873 (cons (cons V2873 (cons : (cons V2872 ()))) V2875) V2877 (freeze (shen.memo V2873 V2871 V2874 V2877 V2878))))) -(defun shen.memo (V2971 V2972 V2973 V2974 V2975) (let Jnk (shen.newpv V2974) (do (shen.incinfs) (unify! V2973 V2972 V2974 (freeze (bind Jnk (declare (shen.lazyderef V2971 V2974) (shen.lazyderef V2973 V2974)) V2974 V2975)))))) +(defun shen.memo (V2879 V2880 V2881 V2882 V2883) (let Jnk (shen.newpv V2882) (do (shen.incinfs) (unify! V2881 V2880 V2882 (freeze (bind Jnk (declare (shen.lazyderef V2879 V2882) (shen.lazyderef V2881 V2882)) V2882 V2883)))))) -(defun shen. (V2980) (let Result (let Parse_shen. (shen. V2980) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) +(defun shen. (V2888) (let Result (let Parse_shen. (shen. V2888) (if (not (= (fail) Parse_shen.)) (let Parse_shen. (shen. Parse_shen.) (if (not (= (fail) Parse_shen.)) (shen.pair (hd Parse_shen.) (cons (shen.hdtl Parse_shen.) (shen.hdtl Parse_shen.))) (fail))) (fail))) (if (= Result (fail)) (fail) Result))) -(defun shen.ue (V2981) (cond ((and (cons? V2981) (and (cons? (tl V2981)) (and (= () (tl (tl V2981))) (= (hd V2981) protect)))) V2981) ((cons? V2981) (map (lambda X2879 (shen.ue X2879)) V2981)) ((variable? V2981) (concat && V2981)) (true V2981))) +(defun shen.ue (V2889) (cond ((and (cons? V2889) (and (cons? (tl V2889)) (and (= () (tl (tl V2889))) (= (hd V2889) protect)))) V2889) ((cons? V2889) (map (lambda X2788 (shen.ue X2788)) V2889)) ((variable? V2889) (concat && V2889)) (true V2889))) -(defun shen.ue-sig (V2982) (cond ((cons? V2982) (map (lambda X2880 (shen.ue-sig X2880)) V2982)) ((variable? V2982) (concat &&& V2982)) (true V2982))) +(defun shen.ue-sig (V2890) (cond ((cons? V2890) (map (lambda X2789 (shen.ue-sig X2789)) V2890)) ((variable? V2890) (concat &&& V2890)) (true V2890))) -(defun shen.ues (V2987) (cond ((shen.ue? V2987) (cons V2987 ())) ((cons? V2987) (union (shen.ues (hd V2987)) (shen.ues (tl V2987)))) (true ()))) +(defun shen.ues (V2895) (cond ((shen.ue? V2895) (cons V2895 ())) ((cons? V2895) (union (shen.ues (hd V2895)) (shen.ues (tl V2895)))) (true ()))) -(defun shen.ue? (V2988) (and (symbol? V2988) (shen.ue-h? (str V2988)))) +(defun shen.ue? (V2896) (and (symbol? V2896) (shen.ue-h? (str V2896)))) -(defun shen.ue-h? (V2995) (cond ((and (shen.+string? V2995) (and (= "&" (pos V2995 0)) (and (shen.+string? (tlstr V2995)) (= "&" (pos (tlstr V2995) 0))))) true) (true false))) +(defun shen.ue-h? (V2903) (cond ((and (shen.+string? V2903) (and (= "&" (pos V2903 0)) (and (shen.+string? (tlstr V2903)) (= "&" (pos (tlstr V2903) 0))))) true) (true false))) -(defun shen.t*-rules (V2996 V2997 V2998 V2999 V3000 V3001 V3002) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2606 (shen.lazyderef V2996 V3001) (if (= () V2606) (do (shen.incinfs) (thaw V3002)) false)) (if (= Case false) (let Case (let V2607 (shen.lazyderef V2996 V3001) (if (cons? V2607) (let V2608 (shen.lazyderef (hd V2607) V3001) (if (cons? V2608) (let V2609 (shen.lazyderef (hd V2608) V3001) (if (= () V2609) (let V2610 (shen.lazyderef (tl V2608) V3001) (if (cons? V2610) (let Action (hd V2610) (let V2611 (shen.lazyderef (tl V2610) V3001) (if (= () V2611) (let Rules (tl V2607) (let V2612 (shen.lazyderef V2997 V3001) (if (cons? V2612) (let V2613 (shen.lazyderef (hd V2612) V3001) (if (= --> V2613) (let V2614 (shen.lazyderef (tl V2612) V3001) (if (cons? V2614) (let A (hd V2614) (let V2615 (shen.lazyderef (tl V2614) V3001) (if (= () V2615) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V3000 V3001 (freeze (cut Throwcontrol V3001 (freeze (shen.t*-rules Rules A (+ V2998 1) V2999 V3000 V3001 V3002)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2616 (shen.lazyderef V2996 V3001) (if (cons? V2616) (let Rule (hd V2616) (let Rules (tl V2616) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2997 V3000 V3001 (freeze (cut Throwcontrol V3001 (freeze (shen.t*-rules Rules V2997 (+ V2998 1) V2999 V3000 V3001 V3002)))))))) false)) (if (= Case false) (let Err (shen.newpv V3001) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2998 V3001) (cn " of " (shen.app (shen.lazyderef V2999 V3001) "" shen.a)) shen.a))) V3001 V3002))) Case)) Case)) Case))))) +(defun shen.t*-rules (V2904 V2905 V2906 V2907 V2908 V2909 V2910) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2522 (shen.lazyderef V2904 V2909) (if (= () V2522) (do (shen.incinfs) (thaw V2910)) false)) (if (= Case false) (let Case (let V2523 (shen.lazyderef V2904 V2909) (if (cons? V2523) (let V2524 (shen.lazyderef (hd V2523) V2909) (if (cons? V2524) (let V2525 (shen.lazyderef (hd V2524) V2909) (if (= () V2525) (let V2526 (shen.lazyderef (tl V2524) V2909) (if (cons? V2526) (let Action (hd V2526) (let V2527 (shen.lazyderef (tl V2526) V2909) (if (= () V2527) (let Rules (tl V2523) (let V2528 (shen.lazyderef V2905 V2909) (if (cons? V2528) (let V2529 (shen.lazyderef (hd V2528) V2909) (if (= --> V2529) (let V2530 (shen.lazyderef (tl V2528) V2909) (if (cons? V2530) (let A (hd V2530) (let V2531 (shen.lazyderef (tl V2530) V2909) (if (= () V2531) (do (shen.incinfs) (shen.t*-rule (cons () (cons (shen.ue Action) ())) A V2908 V2909 (freeze (cut Throwcontrol V2909 (freeze (shen.t*-rules Rules A (+ V2906 1) V2907 V2908 V2909 V2910)))))) false))) false)) false)) false))) false))) false)) false)) false)) false)) (if (= Case false) (let Case (let V2532 (shen.lazyderef V2904 V2909) (if (cons? V2532) (let Rule (hd V2532) (let Rules (tl V2532) (do (shen.incinfs) (shen.t*-rule (shen.ue Rule) V2905 V2908 V2909 (freeze (cut Throwcontrol V2909 (freeze (shen.t*-rules Rules V2905 (+ V2906 1) V2907 V2908 V2909 V2910)))))))) false)) (if (= Case false) (let Err (shen.newpv V2909) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V2906 V2909) (cn " of " (shen.app (shen.lazyderef V2907 V2909) "" shen.a)) shen.a))) V2909 V2910))) Case)) Case)) Case))))) -(defun shen.t*-rule (V3003 V3004 V3005 V3006 V3007) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2588 (shen.lazyderef V3003 V3006) (if (cons? V2588) (let V2589 (shen.lazyderef (hd V2588) V3006) (if (= () V2589) (let V2590 (shen.lazyderef (tl V2588) V3006) (if (cons? V2590) (let Action (hd V2590) (let V2591 (shen.lazyderef (tl V2590) V3006) (if (= () V2591) (do (shen.incinfs) (cut Throwcontrol V3006 (freeze (shen.t*-action (shen.curry Action) V3004 V3005 V3006 V3007)))) false))) false)) false)) false)) (if (= Case false) (let V2592 (shen.lazyderef V3003 V3006) (if (cons? V2592) (let V2593 (shen.lazyderef (hd V2592) V3006) (if (cons? V2593) (let Pattern (hd V2593) (let Patterns (tl V2593) (let V2594 (shen.lazyderef (tl V2592) V3006) (if (cons? V2594) (let Action (hd V2594) (let V2595 (shen.lazyderef (tl V2594) V3006) (if (= () V2595) (let V2596 (shen.lazyderef V3004 V3006) (if (cons? V2596) (let A (hd V2596) (let V2597 (shen.lazyderef (tl V2596) V3006) (if (cons? V2597) (let V2598 (shen.lazyderef (hd V2597) V3006) (if (= --> V2598) (let V2599 (shen.lazyderef (tl V2597) V3006) (if (cons? V2599) (let B (hd V2599) (let V2600 (shen.lazyderef (tl V2599) V3006) (if (= () V2600) (do (shen.incinfs) (shen.t*-pattern Pattern A V3006 (freeze (cut Throwcontrol V3006 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V3005) V3006 V3007)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) +(defun shen.t*-rule (V2911 V2912 V2913 V2914 V2915) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2504 (shen.lazyderef V2911 V2914) (if (cons? V2504) (let V2505 (shen.lazyderef (hd V2504) V2914) (if (= () V2505) (let V2506 (shen.lazyderef (tl V2504) V2914) (if (cons? V2506) (let Action (hd V2506) (let V2507 (shen.lazyderef (tl V2506) V2914) (if (= () V2507) (do (shen.incinfs) (cut Throwcontrol V2914 (freeze (shen.t*-action (shen.curry Action) V2912 V2913 V2914 V2915)))) false))) false)) false)) false)) (if (= Case false) (let V2508 (shen.lazyderef V2911 V2914) (if (cons? V2508) (let V2509 (shen.lazyderef (hd V2508) V2914) (if (cons? V2509) (let Pattern (hd V2509) (let Patterns (tl V2509) (let V2510 (shen.lazyderef (tl V2508) V2914) (if (cons? V2510) (let Action (hd V2510) (let V2511 (shen.lazyderef (tl V2510) V2914) (if (= () V2511) (let V2512 (shen.lazyderef V2912 V2914) (if (cons? V2512) (let A (hd V2512) (let V2513 (shen.lazyderef (tl V2512) V2914) (if (cons? V2513) (let V2514 (shen.lazyderef (hd V2513) V2914) (if (= --> V2514) (let V2515 (shen.lazyderef (tl V2513) V2914) (if (cons? V2515) (let B (hd V2515) (let V2516 (shen.lazyderef (tl V2515) V2914) (if (= () V2516) (do (shen.incinfs) (shen.t*-pattern Pattern A V2914 (freeze (cut Throwcontrol V2914 (freeze (shen.t*-rule (cons Patterns (cons Action ())) B (cons (cons Pattern (cons : (cons A ()))) V2913) V2914 V2915)))))) false))) false)) false)) false))) false)) false))) false)))) false)) false)) Case))))) -(defun shen.t*-action (V3008 V3009 V3010 V3011 V3012) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2565 (shen.lazyderef V3008 V3011) (if (cons? V2565) (let V2566 (shen.lazyderef (hd V2565) V3011) (if (= where V2566) (let V2567 (shen.lazyderef (tl V2565) V3011) (if (cons? V2567) (let P (hd V2567) (let V2568 (shen.lazyderef (tl V2567) V3011) (if (cons? V2568) (let Action (hd V2568) (let V2569 (shen.lazyderef (tl V2568) V3011) (if (= () V2569) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V3010 V3011 (freeze (cut Throwcontrol V3011 (freeze (shen.t*-action Action V3009 (cons (cons P (cons : (cons verified ()))) V3010) V3011 V3012)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2570 (shen.lazyderef V3008 V3011) (if (cons? V2570) (let V2571 (shen.lazyderef (hd V2570) V3011) (if (= shen.choicepoint! V2571) (let V2572 (shen.lazyderef (tl V2570) V3011) (if (cons? V2572) (let V2573 (shen.lazyderef (hd V2572) V3011) (if (cons? V2573) (let V2574 (shen.lazyderef (hd V2573) V3011) (if (cons? V2574) (let V2575 (shen.lazyderef (hd V2574) V3011) (if (= fail-if V2575) (let V2576 (shen.lazyderef (tl V2574) V3011) (if (cons? V2576) (let F (hd V2576) (let V2577 (shen.lazyderef (tl V2576) V3011) (if (= () V2577) (let V2578 (shen.lazyderef (tl V2573) V3011) (if (cons? V2578) (let Action (hd V2578) (let V2579 (shen.lazyderef (tl V2578) V3011) (if (= () V2579) (let V2580 (shen.lazyderef (tl V2572) V3011) (if (= () V2580) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V3009 V3010 V3011 V3012)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2581 (shen.lazyderef V3008 V3011) (if (cons? V2581) (let V2582 (shen.lazyderef (hd V2581) V3011) (if (= shen.choicepoint! V2582) (let V2583 (shen.lazyderef (tl V2581) V3011) (if (cons? V2583) (let Action (hd V2583) (let V2584 (shen.lazyderef (tl V2583) V3011) (if (= () V2584) (do (shen.incinfs) (cut Throwcontrol V3011 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V3009 V3010 V3011 V3012)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V3008 (cons : (cons V3009 ()))) V3010 V3011 V3012)) Case)) Case)) Case))))) +(defun shen.t*-action (V2916 V2917 V2918 V2919 V2920) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2481 (shen.lazyderef V2916 V2919) (if (cons? V2481) (let V2482 (shen.lazyderef (hd V2481) V2919) (if (= where V2482) (let V2483 (shen.lazyderef (tl V2481) V2919) (if (cons? V2483) (let P (hd V2483) (let V2484 (shen.lazyderef (tl V2483) V2919) (if (cons? V2484) (let Action (hd V2484) (let V2485 (shen.lazyderef (tl V2484) V2919) (if (= () V2485) (do (shen.incinfs) (cut Throwcontrol V2919 (freeze (shen.t* (cons P (cons : (cons boolean ()))) V2918 V2919 (freeze (cut Throwcontrol V2919 (freeze (shen.t*-action Action V2917 (cons (cons P (cons : (cons verified ()))) V2918) V2919 V2920)))))))) false))) false))) false)) false)) false)) (if (= Case false) (let Case (let V2486 (shen.lazyderef V2916 V2919) (if (cons? V2486) (let V2487 (shen.lazyderef (hd V2486) V2919) (if (= shen.choicepoint! V2487) (let V2488 (shen.lazyderef (tl V2486) V2919) (if (cons? V2488) (let V2489 (shen.lazyderef (hd V2488) V2919) (if (cons? V2489) (let V2490 (shen.lazyderef (hd V2489) V2919) (if (cons? V2490) (let V2491 (shen.lazyderef (hd V2490) V2919) (if (= fail-if V2491) (let V2492 (shen.lazyderef (tl V2490) V2919) (if (cons? V2492) (let F (hd V2492) (let V2493 (shen.lazyderef (tl V2492) V2919) (if (= () V2493) (let V2494 (shen.lazyderef (tl V2489) V2919) (if (cons? V2494) (let Action (hd V2494) (let V2495 (shen.lazyderef (tl V2494) V2919) (if (= () V2495) (let V2496 (shen.lazyderef (tl V2488) V2919) (if (= () V2496) (do (shen.incinfs) (cut Throwcontrol V2919 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons F (cons Action ())) ())) (cons Action ()))) V2917 V2918 V2919 V2920)))) false)) false))) false)) false))) false)) false)) false)) false)) false)) false)) false)) (if (= Case false) (let Case (let V2497 (shen.lazyderef V2916 V2919) (if (cons? V2497) (let V2498 (shen.lazyderef (hd V2497) V2919) (if (= shen.choicepoint! V2498) (let V2499 (shen.lazyderef (tl V2497) V2919) (if (cons? V2499) (let Action (hd V2499) (let V2500 (shen.lazyderef (tl V2499) V2919) (if (= () V2500) (do (shen.incinfs) (cut Throwcontrol V2919 (freeze (shen.t*-action (cons where (cons (cons not (cons (cons (cons = (cons Action ())) (cons (cons fail ()) ())) ())) (cons Action ()))) V2917 V2918 V2919 V2920)))) false))) false)) false)) false)) (if (= Case false) (do (shen.incinfs) (shen.t* (cons V2916 (cons : (cons V2917 ()))) V2918 V2919 V2920)) Case)) Case)) Case))))) -(defun shen.t*-pattern (V3013 V3014 V3015 V3016) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V3015) (do (shen.incinfs) (shen.tms->hyp (shen.ues V3013) Hyp V3015 (freeze (cut Throwcontrol V3015 (freeze (shen.t* (cons V3013 (cons : (cons V3014 ()))) Hyp V3015 V3016)))))))))) +(defun shen.t*-pattern (V2921 V2922 V2923 V2924) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Hyp (shen.newpv V2923) (do (shen.incinfs) (shen.tms->hyp (shen.ues V2921) Hyp V2923 (freeze (cut Throwcontrol V2923 (freeze (shen.t* (cons V2921 (cons : (cons V2922 ()))) Hyp V2923 V2924)))))))))) -(defun shen.tms->hyp (V3017 V3018 V3019 V3020) (let Case (let V2549 (shen.lazyderef V3017 V3019) (if (= () V2549) (let V2550 (shen.lazyderef V3018 V3019) (if (= () V2550) (do (shen.incinfs) (thaw V3020)) (if (shen.pvar? V2550) (do (shen.bindv V2550 () V3019) (let Result (do (shen.incinfs) (thaw V3020)) (do (shen.unbindv V2550 V3019) Result))) false))) false)) (if (= Case false) (let V2551 (shen.lazyderef V3017 V3019) (if (cons? V2551) (let Tm2546 (hd V2551) (let Tms (tl V2551) (let V2552 (shen.lazyderef V3018 V3019) (if (cons? V2552) (let V2553 (shen.lazyderef (hd V2552) V3019) (if (cons? V2553) (let Tm (hd V2553) (let V2554 (shen.lazyderef (tl V2553) V3019) (if (cons? V2554) (let V2555 (shen.lazyderef (hd V2554) V3019) (if (= : V2555) (let V2556 (shen.lazyderef (tl V2554) V3019) (if (cons? V2556) (let A (hd V2556) (let V2557 (shen.lazyderef (tl V2556) V3019) (if (= () V2557) (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (if (shen.pvar? V2557) (do (shen.bindv V2557 () V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2557 V3019) Result))) false)))) (if (shen.pvar? V2556) (let A (shen.newpv V3019) (do (shen.bindv V2556 (cons A ()) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2556 V3019) Result)))) false))) (if (shen.pvar? V2555) (do (shen.bindv V2555 : V3019) (let Result (let V2558 (shen.lazyderef (tl V2554) V3019) (if (cons? V2558) (let A (hd V2558) (let V2559 (shen.lazyderef (tl V2558) V3019) (if (= () V2559) (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (if (shen.pvar? V2559) (do (shen.bindv V2559 () V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2559 V3019) Result))) false)))) (if (shen.pvar? V2558) (let A (shen.newpv V3019) (do (shen.bindv V2558 (cons A ()) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2558 V3019) Result)))) false))) (do (shen.unbindv V2555 V3019) Result))) false))) (if (shen.pvar? V2554) (let A (shen.newpv V3019) (do (shen.bindv V2554 (cons : (cons A ())) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2554 V3019) Result)))) false)))) (if (shen.pvar? V2553) (let Tm (shen.newpv V3019) (let A (shen.newpv V3019) (do (shen.bindv V2553 (cons Tm (cons : (cons A ()))) V3019) (let Result (let Hyp (tl V2552) (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020))))) (do (shen.unbindv V2553 V3019) Result))))) false))) (if (shen.pvar? V2552) (let Tm (shen.newpv V3019) (let A (shen.newpv V3019) (let Hyp (shen.newpv V3019) (do (shen.bindv V2552 (cons (cons Tm (cons : (cons A ()))) Hyp) V3019) (let Result (do (shen.incinfs) (unify! Tm Tm2546 V3019 (freeze (shen.tms->hyp Tms Hyp V3019 V3020)))) (do (shen.unbindv V2552 V3019) Result)))))) false))))) false)) Case))) +(defun shen.tms->hyp (V2925 V2926 V2927 V2928) (let Case (let V2465 (shen.lazyderef V2925 V2927) (if (= () V2465) (let V2466 (shen.lazyderef V2926 V2927) (if (= () V2466) (do (shen.incinfs) (thaw V2928)) (if (shen.pvar? V2466) (do (shen.bindv V2466 () V2927) (let Result (do (shen.incinfs) (thaw V2928)) (do (shen.unbindv V2466 V2927) Result))) false))) false)) (if (= Case false) (let V2467 (shen.lazyderef V2925 V2927) (if (cons? V2467) (let Tm2462 (hd V2467) (let Tms (tl V2467) (let V2468 (shen.lazyderef V2926 V2927) (if (cons? V2468) (let V2469 (shen.lazyderef (hd V2468) V2927) (if (cons? V2469) (let Tm (hd V2469) (let V2470 (shen.lazyderef (tl V2469) V2927) (if (cons? V2470) (let V2471 (shen.lazyderef (hd V2470) V2927) (if (= : V2471) (let V2472 (shen.lazyderef (tl V2470) V2927) (if (cons? V2472) (let A (hd V2472) (let V2473 (shen.lazyderef (tl V2472) V2927) (if (= () V2473) (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (if (shen.pvar? V2473) (do (shen.bindv V2473 () V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2473 V2927) Result))) false)))) (if (shen.pvar? V2472) (let A (shen.newpv V2927) (do (shen.bindv V2472 (cons A ()) V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2472 V2927) Result)))) false))) (if (shen.pvar? V2471) (do (shen.bindv V2471 : V2927) (let Result (let V2474 (shen.lazyderef (tl V2470) V2927) (if (cons? V2474) (let A (hd V2474) (let V2475 (shen.lazyderef (tl V2474) V2927) (if (= () V2475) (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (if (shen.pvar? V2475) (do (shen.bindv V2475 () V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2475 V2927) Result))) false)))) (if (shen.pvar? V2474) (let A (shen.newpv V2927) (do (shen.bindv V2474 (cons A ()) V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2474 V2927) Result)))) false))) (do (shen.unbindv V2471 V2927) Result))) false))) (if (shen.pvar? V2470) (let A (shen.newpv V2927) (do (shen.bindv V2470 (cons : (cons A ())) V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2470 V2927) Result)))) false)))) (if (shen.pvar? V2469) (let Tm (shen.newpv V2927) (let A (shen.newpv V2927) (do (shen.bindv V2469 (cons Tm (cons : (cons A ()))) V2927) (let Result (let Hyp (tl V2468) (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928))))) (do (shen.unbindv V2469 V2927) Result))))) false))) (if (shen.pvar? V2468) (let Tm (shen.newpv V2927) (let A (shen.newpv V2927) (let Hyp (shen.newpv V2927) (do (shen.bindv V2468 (cons (cons Tm (cons : (cons A ()))) Hyp) V2927) (let Result (do (shen.incinfs) (unify! Tm Tm2462 V2927 (freeze (shen.tms->hyp Tms Hyp V2927 V2928)))) (do (shen.unbindv V2468 V2927) Result)))))) false))))) false)) Case))) -(defun findall (V3021 V3022 V3023 V3024 V3025) (let B (shen.newpv V3024) (let A (shen.newpv V3024) (do (shen.incinfs) (bind A (gensym shen.a) V3024 (freeze (bind B (set (shen.lazyderef A V3024) ()) V3024 (freeze (shen.findallhelp V3021 V3022 V3023 A V3024 V3025))))))))) +(defun findall (V2929 V2930 V2931 V2932 V2933) (let B (shen.newpv V2932) (let A (shen.newpv V2932) (do (shen.incinfs) (bind A (gensym shen.a) V2932 (freeze (bind B (set (shen.lazyderef A V2932) ()) V2932 (freeze (shen.findallhelp V2929 V2930 V2931 A V2932 V2933))))))))) -(defun shen.findallhelp (V3026 V3027 V3028 V3029 V3030 V3031) (let Case (do (shen.incinfs) (call V3027 V3030 (freeze (shen.remember V3029 V3026 V3030 (freeze (fwhen false V3030 V3031)))))) (if (= Case false) (do (shen.incinfs) (bind V3028 (value (shen.lazyderef V3029 V3030)) V3030 V3031)) Case))) +(defun shen.findallhelp (V2934 V2935 V2936 V2937 V2938 V2939) (let Case (do (shen.incinfs) (call V2935 V2938 (freeze (shen.remember V2937 V2934 V2938 (freeze (fwhen false V2938 V2939)))))) (if (= Case false) (do (shen.incinfs) (bind V2936 (value (shen.lazyderef V2937 V2938)) V2938 V2939)) Case))) -(defun shen.remember (V3032 V3033 V3034 V3035) (let B (shen.newpv V3034) (do (shen.incinfs) (bind B (set (shen.deref V3032 V3034) (cons (shen.deref V3033 V3034) (value (shen.deref V3032 V3034)))) V3034 V3035)))) - -(defun shen.t*-defcc (V3036 V3037 V3038 V3039 V3040) (let V2522 (shen.lazyderef V3036 V3039) (if (cons? V2522) (let V2523 (shen.lazyderef (hd V2522) V3039) (if (= defcc V2523) (let V2524 (shen.lazyderef (tl V2522) V3039) (if (cons? V2524) (let F (hd V2524) (let V2525 (shen.lazyderef (tl V2524) V3039) (if (cons? V2525) (let V2526 (shen.lazyderef (hd V2525) V3039) (if (= { V2526) (let V2527 (shen.lazyderef (tl V2525) V3039) (if (cons? V2527) (let V2528 (shen.lazyderef (hd V2527) V3039) (if (cons? V2528) (let V2529 (shen.lazyderef (hd V2528) V3039) (if (= list V2529) (let V2530 (shen.lazyderef (tl V2528) V3039) (if (cons? V2530) (let A (hd V2530) (let V2531 (shen.lazyderef (tl V2530) V3039) (if (= () V2531) (let V2532 (shen.lazyderef (tl V2527) V3039) (if (cons? V2532) (let V2533 (shen.lazyderef (hd V2532) V3039) (if (= ==> V2533) (let V2534 (shen.lazyderef (tl V2532) V3039) (if (cons? V2534) (let B (hd V2534) (let V2535 (shen.lazyderef (tl V2534) V3039) (if (cons? V2535) (let V2536 (shen.lazyderef (hd V2535) V3039) (if (= } V2536) (let Rest (tl V2535) (do (shen.incinfs) (shen.t*-defcc-h (cons defcc (cons F (cons (shen.ue (shen.demodulate (cons (cons list (cons A ())) (cons ==> (cons B ()))))) (shen.ue (shen.split_cc_rules false (shen.plug-wildcards Rest) ()))))) V3037 V3038 V3039 V3040))) false)) false))) false)) false)) false)) false))) false)) false)) false)) false)) false)) false))) false)) false)) false))) - -(defun shen.plug-wildcards (V3041) (cond ((cons? V3041) (map (lambda X2881 (shen.plug-wildcards X2881)) V3041)) ((= V3041 _) (gensym (intern "X"))) (true V3041))) - -(defun shen.t*-defcc-h (V3042 V3043 V3044 V3045 V3046) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2506 (shen.lazyderef V3042 V3045) (if (cons? V2506) (let V2507 (shen.lazyderef (hd V2506) V3045) (if (= defcc V2507) (let V2508 (shen.lazyderef (tl V2506) V3045) (if (cons? V2508) (let F (hd V2508) (let V2509 (shen.lazyderef (tl V2508) V3045) (if (cons? V2509) (let V2510 (shen.lazyderef (hd V2509) V3045) (if (cons? V2510) (let V2511 (shen.lazyderef (hd V2510) V3045) (if (cons? V2511) (let V2512 (shen.lazyderef (hd V2511) V3045) (if (= list V2512) (let V2513 (shen.lazyderef (tl V2511) V3045) (if (cons? V2513) (let A (hd V2513) (let V2514 (shen.lazyderef (tl V2513) V3045) (if (= () V2514) (let V2515 (shen.lazyderef (tl V2510) V3045) (if (cons? V2515) (let V2516 (shen.lazyderef (hd V2515) V3045) (if (= ==> V2516) (let V2517 (shen.lazyderef (tl V2515) V3045) (if (cons? V2517) (let B (hd V2517) (let V2518 (shen.lazyderef (tl V2517) V3045) (if (= () V2518) (let Rules (tl V2509) (let Declare (shen.newpv V3045) (do (shen.incinfs) (cut Throwcontrol V3045 (freeze (shen.tc-rules F Rules (cons list (cons A ())) B (cons (cons F (cons : (cons (cons (cons list (cons A ())) (cons ==> (cons B ()))) ()))) V3044) 1 V3045 (freeze (unify V3043 (cons (cons list (cons A ())) (cons ==> (cons B ()))) V3045 (freeze (bind Declare (declare (shen.lazyderef F V3045) (cons (cons list (cons (shen.lazyderef A V3045) ())) (cons ==> (cons (shen.lazyderef B V3045) ())))) V3045 V3046)))))))))) false))) false)) false)) false)) false))) false)) false)) false)) false)) false))) false)) false)) false))))) - -(defun shen.tc-rules (V3047 V3048 V3049 V3050 V3051 V3052 V3053 V3054) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2497 (shen.lazyderef V3048 V3053) (if (= () V2497) (do (shen.incinfs) (thaw V3054)) false)) (if (= Case false) (let V2498 (shen.lazyderef V3048 V3053) (if (cons? V2498) (let Rule (hd V2498) (let Rules (tl V2498) (let V2499 (shen.lazyderef V3049 V3053) (if (cons? V2499) (let V2500 (shen.lazyderef (hd V2499) V3053) (if (= list V2500) (let V2501 (shen.lazyderef (tl V2499) V3053) (if (cons? V2501) (let A (hd V2501) (let V2502 (shen.lazyderef (tl V2501) V3053) (if (= () V2502) (let M (shen.newpv V3053) (do (shen.incinfs) (shen.tc-rule V3047 Rule A V3050 V3051 V3052 V3053 (freeze (bind M (+ (shen.deref V3052 V3053) 1) V3053 (freeze (cut Throwcontrol V3053 (freeze (shen.tc-rules V3047 Rules (cons list (cons A ())) V3050 V3051 M V3053 V3054))))))))) false))) false)) false)) false)))) false)) Case))))) - -(defun shen.tc-rule (V3055 V3056 V3057 V3058 V3059 V3060 V3061 V3062) (let Case (do (shen.incinfs) (shen.check-defcc-rule V3056 V3057 V3058 V3059 V3061 V3062)) (if (= Case false) (let Err (shen.newpv V3061) (do (shen.incinfs) (bind Err (simple-error (cn "type error in rule " (shen.app (shen.lazyderef V3060 V3061) (cn " of " (shen.app (shen.lazyderef V3055 V3061) "" shen.a)) shen.a))) V3061 V3062))) Case))) - -(defun shen.check-defcc-rule (V3063 V3064 V3065 V3066 V3067 V3068) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let V2482 (shen.lazyderef V3063 V3067) (if (cons? V2482) (let Syntax (hd V2482) (let V2483 (shen.lazyderef (tl V2482) V3067) (if (cons? V2483) (let Semantics (hd V2483) (let V2484 (shen.lazyderef (tl V2483) V3067) (if (= () V2484) (let SynHyps (shen.newpv V3067) (do (shen.incinfs) (shen.syntax-hyps Syntax V3066 SynHyps V3064 V3067 (freeze (cut Throwcontrol V3067 (freeze (shen.syntax-check Syntax V3064 SynHyps V3067 (freeze (cut Throwcontrol V3067 (freeze (shen.semantics-check Semantics V3065 SynHyps V3067 V3068))))))))))) false))) false))) false))))) - -(defun shen.syntax-hyps (V3069 V3070 V3071 V3072 V3073 V3074) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2467 (shen.lazyderef V3069 V3073) (if (= () V2467) (do (shen.incinfs) (unify! V3071 V3070 V3073 V3074)) false)) (if (= Case false) (let Case (let V2468 (shen.lazyderef V3069 V3073) (if (cons? V2468) (let X2461 (hd V2468) (let Y (tl V2468) (let V2469 (shen.lazyderef V3071 V3073) (if (cons? V2469) (let V2470 (shen.lazyderef (hd V2469) V3073) (if (cons? V2470) (let X (hd V2470) (let V2471 (shen.lazyderef (tl V2470) V3073) (if (cons? V2471) (let V2472 (shen.lazyderef (hd V2471) V3073) (if (= : V2472) (let V2473 (shen.lazyderef (tl V2471) V3073) (if (cons? V2473) (let A2462 (hd V2473) (let V2474 (shen.lazyderef (tl V2473) V3073) (if (= () V2474) (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (if (shen.pvar? V2474) (do (shen.bindv V2474 () V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2474 V3073) Result))) false)))) (if (shen.pvar? V2473) (let A2462 (shen.newpv V3073) (do (shen.bindv V2473 (cons A2462 ()) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2473 V3073) Result)))) false))) (if (shen.pvar? V2472) (do (shen.bindv V2472 : V3073) (let Result (let V2475 (shen.lazyderef (tl V2471) V3073) (if (cons? V2475) (let A2462 (hd V2475) (let V2476 (shen.lazyderef (tl V2475) V3073) (if (= () V2476) (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (if (shen.pvar? V2476) (do (shen.bindv V2476 () V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2476 V3073) Result))) false)))) (if (shen.pvar? V2475) (let A2462 (shen.newpv V3073) (do (shen.bindv V2475 (cons A2462 ()) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2475 V3073) Result)))) false))) (do (shen.unbindv V2472 V3073) Result))) false))) (if (shen.pvar? V2471) (let A2462 (shen.newpv V3073) (do (shen.bindv V2471 (cons : (cons A2462 ())) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2471 V3073) Result)))) false)))) (if (shen.pvar? V2470) (let X (shen.newpv V3073) (let A2462 (shen.newpv V3073) (do (shen.bindv V2470 (cons X (cons : (cons A2462 ()))) V3073) (let Result (let SynHyps (tl V2469) (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074))))))))))) (do (shen.unbindv V2470 V3073) Result))))) false))) (if (shen.pvar? V2469) (let X (shen.newpv V3073) (let A2462 (shen.newpv V3073) (let SynHyps (shen.newpv V3073) (do (shen.bindv V2469 (cons (cons X (cons : (cons A2462 ()))) SynHyps) V3073) (let Result (do (shen.incinfs) (unify! V3072 A2462 V3073 (freeze (unify! X X2461 V3073 (freeze (fwhen (shen.ue? (shen.deref X V3073)) V3073 (freeze (cut Throwcontrol V3073 (freeze (shen.syntax-hyps Y V3070 SynHyps V3072 V3073 V3074)))))))))) (do (shen.unbindv V2469 V3073) Result)))))) false))))) false)) (if (= Case false) (let V2477 (shen.lazyderef V3069 V3073) (if (cons? V2477) (let Y (tl V2477) (do (shen.incinfs) (shen.syntax-hyps Y V3070 V3071 V3072 V3073 V3074))) false)) Case)) Case))))) - -(defun shen.syntax-check (V3075 V3076 V3077 V3078 V3079) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2457 (shen.lazyderef V3075 V3078) (if (= () V2457) (do (shen.incinfs) (thaw V3079)) false)) (if (= Case false) (let Case (let V2458 (shen.lazyderef V3075 V3078) (if (cons? V2458) (let X (hd V2458) (let Syntax (tl V2458) (let C (shen.newpv V3078) (do (shen.incinfs) (fwhen (shen.grammar_symbol? (shen.lazyderef X V3078)) V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.t* (cons X (cons : (cons (cons (cons list (cons V3076 ())) (cons ==> (cons C ()))) ()))) V3077 V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.syntax-check Syntax V3076 V3077 V3078 V3079))))))))))))) false)) (if (= Case false) (let V2459 (shen.lazyderef V3075 V3078) (if (cons? V2459) (let X (hd V2459) (let Syntax (tl V2459) (do (shen.incinfs) (shen.t* (cons X (cons : (cons V3076 ()))) V3077 V3078 (freeze (cut Throwcontrol V3078 (freeze (shen.syntax-check Syntax V3076 V3077 V3078 V3079)))))))) false)) Case)) Case))))) - -(defun shen.semantics-check (V3080 V3081 V3082 V3083 V3084) (let Throwcontrol (shen.catchpoint) (shen.cutpoint Throwcontrol (let Case (let V2449 (shen.lazyderef V3080 V3083) (if (cons? V2449) (let V2450 (shen.lazyderef (hd V2449) V3083) (if (= where V2450) (let V2451 (shen.lazyderef (tl V2449) V3083) (if (cons? V2451) (let P (hd V2451) (let V2452 (shen.lazyderef (tl V2451) V3083) (if (cons? V2452) (let Q (hd V2452) (let V2453 (shen.lazyderef (tl V2452) V3083) (if (= () V2453) (do (shen.incinfs) (cut Throwcontrol V3083 (freeze (shen.t* (cons (shen.curry P) (cons : (cons boolean ()))) V3082 V3083 (freeze (shen.t* (cons (shen.curry Q) (cons : (cons V3081 ()))) V3082 V3083 V3084)))))) false))) false))) false)) false)) false)) (if (= Case false) (let Semantics* (shen.newpv V3083) (do (shen.incinfs) (bind Semantics* (shen.curry (shen.rename-semantics (shen.deref V3080 V3083))) V3083 (freeze (shen.t* (cons Semantics* (cons : (cons V3081 ()))) V3082 V3083 V3084))))) Case))))) - -(defun shen.rename-semantics (V3085) (cond ((cons? V3085) (cons (shen.rename-semantics (hd V3085)) (shen.rename-semantics (tl V3085)))) ((shen.grammar_symbol? V3085) (cons shen.<-sem (cons V3085 ()))) (true V3085))) - -"(defprolog syntax-check - (mode [] -) _ _ <--; - (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) - ! - (t* [X : [[list B] ==> C]] Hyps) - ! - (bind X&& (concat && X)) - ! - (t* [X&& : [list A]] [[X&& : [list B]] | Hyps]) - ! - (syntax-check Syntax A Hyps); - (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) - ! - (syntax-check Syntax A Hyps);)" +(defun shen.remember (V2940 V2941 V2942 V2943) (let B (shen.newpv V2942) (do (shen.incinfs) (bind B (set (shen.deref V2940 V2942) (cons (shen.deref V2941 V2942) (value (shen.deref V2940 V2942)))) V2942 V2943)))) diff --git a/shen/klambda/toplevel.kl b/shen/klambda/toplevel.kl index bba8bbe..9f7a37a 100644 --- a/shen/klambda/toplevel.kl +++ b/shen/klambda/toplevel.kl @@ -61,27 +61,27 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.initialise_environment () (shen.multiple-set (cons shen.*call* (cons 0 (cons shen.*infs* (cons 0 (cons shen.*process-counter* (cons 0 (cons shen.*catch* (cons 0 ())))))))))) -(defun shen.multiple-set (V2367) (cond ((= () V2367) ()) ((and (cons? V2367) (cons? (tl V2367))) (do (set (hd V2367) (hd (tl V2367))) (shen.multiple-set (tl (tl V2367))))) (true (shen.sys-error shen.multiple-set)))) +(defun shen.multiple-set (V2374) (cond ((= () V2374) ()) ((and (cons? V2374) (cons? (tl V2374))) (do (set (hd V2374) (hd (tl V2374))) (shen.multiple-set (tl (tl V2374))))) (true (shen.sys-error shen.multiple-set)))) -(defun destroy (V2368) (declare V2368 symbol)) +(defun destroy (V2375) (declare V2375 symbol)) (set shen.*history* ()) (defun shen.read-evaluate-print () (let Lineread (shen.toplineread) (let History (value shen.*history*) (let NewLineread (shen.retrieve-from-history-if-needed Lineread History) (let NewHistory (shen.update_history NewLineread History) (let Parsed (fst NewLineread) (shen.toplevel Parsed))))))) -(defun shen.retrieve-from-history-if-needed (V2378 V2379) (cond ((and (tuple? V2378) (and (cons? (snd V2378)) (element? (hd (snd V2378)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2378) (tl (snd V2378))) V2379)) ((and (tuple? V2378) (and (cons? (snd V2378)) (and (cons? (tl (snd V2378))) (and (= () (tl (tl (snd V2378)))) (and (cons? V2379) (and (= (hd (snd V2378)) (shen.exclamation)) (= (hd (tl (snd V2378))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2379))) (hd V2379))) ((and (tuple? V2378) (and (cons? (snd V2378)) (= (hd (snd V2378)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2378)) V2379) (let Find (head (shen.find-past-inputs Key? V2379)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2378) (and (cons? (snd V2378)) (and (= () (tl (snd V2378))) (= (hd (snd V2378)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2379) 0) (abort))) ((and (tuple? V2378) (and (cons? (snd V2378)) (= (hd (snd V2378)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2378)) V2379) (let Pastprint (shen.print-past-inputs Key? (reverse V2379) 0) (abort)))) (true V2378))) +(defun shen.retrieve-from-history-if-needed (V2385 V2386) (cond ((and (tuple? V2385) (and (cons? (snd V2385)) (element? (hd (snd V2385)) (cons (shen.space) (cons (shen.newline) ()))))) (shen.retrieve-from-history-if-needed (@p (fst V2385) (tl (snd V2385))) V2386)) ((and (tuple? V2385) (and (cons? (snd V2385)) (and (cons? (tl (snd V2385))) (and (= () (tl (tl (snd V2385)))) (and (cons? V2386) (and (= (hd (snd V2385)) (shen.exclamation)) (= (hd (tl (snd V2385))) (shen.exclamation)))))))) (let PastPrint (shen.prbytes (snd (hd V2386))) (hd V2386))) ((and (tuple? V2385) (and (cons? (snd V2385)) (= (hd (snd V2385)) (shen.exclamation)))) (let Key? (shen.make-key (tl (snd V2385)) V2386) (let Find (head (shen.find-past-inputs Key? V2386)) (let PastPrint (shen.prbytes (snd Find)) Find)))) ((and (tuple? V2385) (and (cons? (snd V2385)) (and (= () (tl (snd V2385))) (= (hd (snd V2385)) (shen.percent))))) (do (shen.print-past-inputs (lambda X true) (reverse V2386) 0) (abort))) ((and (tuple? V2385) (and (cons? (snd V2385)) (= (hd (snd V2385)) (shen.percent)))) (let Key? (shen.make-key (tl (snd V2385)) V2386) (let Pastprint (shen.print-past-inputs Key? (reverse V2386) 0) (abort)))) (true V2385))) (defun shen.percent () 37) (defun shen.exclamation () 33) -(defun shen.prbytes (V2380) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2380) (nl 1))) +(defun shen.prbytes (V2387) (do (map (lambda Byte (pr (n->string Byte) (stoutput))) V2387) (nl 1))) -(defun shen.update_history (V2381 V2382) (set shen.*history* (cons V2381 V2382))) +(defun shen.update_history (V2388 V2389) (set shen.*history* (cons V2388 V2389))) (defun shen.toplineread () (shen.toplineread_loop (read-byte (stinput)) ())) -(defun shen.toplineread_loop (V2384 V2385) (cond ((= V2384 (shen.hat)) (simple-error "line read aborted")) ((element? V2384 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X2365 (shen. X2365)) V2385 (lambda E shen.nextline)) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2385 (cons V2384 ()))) (@p Line V2385)))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2385 (cons V2384 ())))))) +(defun shen.toplineread_loop (V2391 V2392) (cond ((= V2391 (shen.hat)) (simple-error "line read aborted")) ((element? V2391 (cons (shen.newline) (cons (shen.carriage-return) ()))) (let Line (compile (lambda X2372 (shen. X2372)) V2392 (lambda E shen.nextline)) (let It (shen.record-it V2392) (if (or (= Line shen.nextline) (empty? Line)) (shen.toplineread_loop (read-byte (stinput)) (append V2392 (cons V2391 ()))) (@p Line V2392))))) (true (shen.toplineread_loop (read-byte (stinput)) (append V2392 (cons V2391 ())))))) (defun shen.hat () 94) @@ -89,7 +89,7 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.carriage-return () 13) -(defun tc (V2390) (cond ((= + V2390) (set shen.*tc* true)) ((= - V2390) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) +(defun tc (V2397) (cond ((= + V2397) (set shen.*tc* true)) ((= - V2397) (set shen.*tc* false)) (true (simple-error "tc expects a + or -")))) (defun shen.prompt () (if (value shen.*tc*) (shen.prhush (cn " @@ -97,16 +97,16 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (" (shen.app (length (value shen.*history*)) "-) " shen.a)) (stoutput)))) -(defun shen.toplevel (V2391) (shen.toplevel_evaluate V2391 (value shen.*tc*))) +(defun shen.toplevel (V2398) (shen.toplevel_evaluate V2398 (value shen.*tc*))) -(defun shen.find-past-inputs (V2392 V2393) (let F (shen.find V2392 V2393) (if (empty? F) (simple-error "input not found +(defun shen.find-past-inputs (V2399 V2400) (let F (shen.find V2399 V2400) (if (empty? F) (simple-error "input not found ") F))) -(defun shen.make-key (V2394 V2395) (let Atom (hd (compile (lambda X2366 (shen. X2366)) V2394 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " +(defun shen.make-key (V2401 V2402) (let Atom (hd (compile (lambda X2373 (shen. X2373)) V2401 (lambda E (if (cons? E) (simple-error (cn "parse error here: " (shen.app E " " shen.s))) (simple-error "parse error -"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2395)))) (lambda X (shen.prefix? V2394 (shen.trim-gubbins (snd X))))))) +"))))) (if (integer? Atom) (lambda X (= X (nth (+ Atom 1) (reverse V2402)))) (lambda X (shen.prefix? V2401 (shen.trim-gubbins (snd X))))))) -(defun shen.trim-gubbins (V2396) (cond ((and (cons? V2396) (= (hd V2396) (shen.space))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.newline))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.carriage-return))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.tab))) (shen.trim-gubbins (tl V2396))) ((and (cons? V2396) (= (hd V2396) (shen.left-round))) (shen.trim-gubbins (tl V2396))) (true V2396))) +(defun shen.trim-gubbins (V2403) (cond ((and (cons? V2403) (= (hd V2403) (shen.space))) (shen.trim-gubbins (tl V2403))) ((and (cons? V2403) (= (hd V2403) (shen.newline))) (shen.trim-gubbins (tl V2403))) ((and (cons? V2403) (= (hd V2403) (shen.carriage-return))) (shen.trim-gubbins (tl V2403))) ((and (cons? V2403) (= (hd V2403) (shen.tab))) (shen.trim-gubbins (tl V2403))) ((and (cons? V2403) (= (hd V2403) (shen.left-round))) (shen.trim-gubbins (tl V2403))) (true V2403))) (defun shen.space () 32) @@ -114,22 +114,22 @@ port " (shen.app (value *port*) (cn " ported by " (shen.app (value *porters*) " (defun shen.left-round () 40) -(defun shen.find (V2403 V2404) (cond ((= () V2404) ()) ((and (cons? V2404) (V2403 (hd V2404))) (cons (hd V2404) (shen.find V2403 (tl V2404)))) ((cons? V2404) (shen.find V2403 (tl V2404))) (true (shen.sys-error shen.find)))) +(defun shen.find (V2410 V2411) (cond ((= () V2411) ()) ((and (cons? V2411) (V2410 (hd V2411))) (cons (hd V2411) (shen.find V2410 (tl V2411)))) ((cons? V2411) (shen.find V2410 (tl V2411))) (true (shen.sys-error shen.find)))) -(defun shen.prefix? (V2415 V2416) (cond ((= () V2415) true) ((and (cons? V2415) (and (cons? V2416) (= (hd V2416) (hd V2415)))) (shen.prefix? (tl V2415) (tl V2416))) (true false))) +(defun shen.prefix? (V2422 V2423) (cond ((= () V2422) true) ((and (cons? V2422) (and (cons? V2423) (= (hd V2423) (hd V2422)))) (shen.prefix? (tl V2422) (tl V2423))) (true false))) -(defun shen.print-past-inputs (V2426 V2427 V2428) (cond ((= () V2427) _) ((and (cons? V2427) (not (V2426 (hd V2427)))) (shen.print-past-inputs V2426 (tl V2427) (+ V2428 1))) ((and (cons? V2427) (tuple? (hd V2427))) (do (shen.prhush (shen.app V2428 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2427))) (shen.print-past-inputs V2426 (tl V2427) (+ V2428 1))))) (true (shen.sys-error shen.print-past-inputs)))) +(defun shen.print-past-inputs (V2433 V2434 V2435) (cond ((= () V2434) _) ((and (cons? V2434) (not (V2433 (hd V2434)))) (shen.print-past-inputs V2433 (tl V2434) (+ V2435 1))) ((and (cons? V2434) (tuple? (hd V2434))) (do (shen.prhush (shen.app V2435 ". " shen.a) (stoutput)) (do (shen.prbytes (snd (hd V2434))) (shen.print-past-inputs V2433 (tl V2434) (+ V2435 1))))) (true (shen.sys-error shen.print-past-inputs)))) -(defun shen.toplevel_evaluate (V2429 V2430) (cond ((and (cons? V2429) (and (cons? (tl V2429)) (and (= : (hd (tl V2429))) (and (cons? (tl (tl V2429))) (and (= () (tl (tl (tl V2429)))) (= true V2430)))))) (shen.typecheck-and-evaluate (hd V2429) (hd (tl (tl V2429))))) ((and (cons? V2429) (cons? (tl V2429))) (do (shen.toplevel_evaluate (cons (hd V2429) ()) V2430) (do (nl 1) (shen.toplevel_evaluate (tl V2429) V2430)))) ((and (cons? V2429) (and (= () (tl V2429)) (= true V2430))) (shen.typecheck-and-evaluate (hd V2429) (gensym A))) ((and (cons? V2429) (and (= () (tl V2429)) (= false V2430))) (let Eval (shen.eval-without-macros (hd V2429)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) +(defun shen.toplevel_evaluate (V2436 V2437) (cond ((and (cons? V2436) (and (cons? (tl V2436)) (and (= : (hd (tl V2436))) (and (cons? (tl (tl V2436))) (and (= () (tl (tl (tl V2436)))) (= true V2437)))))) (shen.typecheck-and-evaluate (hd V2436) (hd (tl (tl V2436))))) ((and (cons? V2436) (cons? (tl V2436))) (do (shen.toplevel_evaluate (cons (hd V2436) ()) V2437) (do (nl 1) (shen.toplevel_evaluate (tl V2436) V2437)))) ((and (cons? V2436) (and (= () (tl V2436)) (= true V2437))) (shen.typecheck-and-evaluate (hd V2436) (gensym A))) ((and (cons? V2436) (and (= () (tl V2436)) (= false V2437))) (let Eval (shen.eval-without-macros (hd V2436)) (print Eval))) (true (shen.sys-error shen.toplevel_evaluate)))) -(defun shen.typecheck-and-evaluate (V2431 V2432) (let Typecheck (shen.typecheck V2431 V2432) (if (= Typecheck false) (simple-error "type error -") (let Eval (shen.eval-without-macros V2431) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) +(defun shen.typecheck-and-evaluate (V2438 V2439) (let Typecheck (shen.typecheck V2438 V2439) (if (= Typecheck false) (simple-error "type error +") (let Eval (shen.eval-without-macros V2438) (let Type (shen.pretty-type Typecheck) (shen.prhush (shen.app Eval (cn " : " (shen.app Type "" shen.r)) shen.s) (stoutput))))))) -(defun shen.pretty-type (V2433) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2433) V2433)) +(defun shen.pretty-type (V2440) (shen.mult_subst (value shen.*alphabet*) (shen.extract-pvars V2440) V2440)) -(defun shen.extract-pvars (V2438) (cond ((shen.pvar? V2438) (cons V2438 ())) ((cons? V2438) (union (shen.extract-pvars (hd V2438)) (shen.extract-pvars (tl V2438)))) (true ()))) +(defun shen.extract-pvars (V2445) (cond ((shen.pvar? V2445) (cons V2445 ())) ((cons? V2445) (union (shen.extract-pvars (hd V2445)) (shen.extract-pvars (tl V2445)))) (true ()))) -(defun shen.mult_subst (V2443 V2444 V2445) (cond ((= () V2443) V2445) ((= () V2444) V2445) ((and (cons? V2443) (cons? V2444)) (shen.mult_subst (tl V2443) (tl V2444) (subst (hd V2443) (hd V2444) V2445))) (true (shen.sys-error shen.mult_subst)))) +(defun shen.mult_subst (V2450 V2451 V2452) (cond ((= () V2450) V2452) ((= () V2451) V2452) ((and (cons? V2450) (cons? V2451)) (shen.mult_subst (tl V2450) (tl V2451) (subst (hd V2450) (hd V2451) V2452))) (true (shen.sys-error shen.mult_subst)))) diff --git a/shen/klambda/track.kl b/shen/klambda/track.kl index 1d660c7..7139779 100644 --- a/shen/klambda/track.kl +++ b/shen/klambda/track.kl @@ -47,57 +47,57 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.f_error (V2115) (do (shen.prhush (cn "partial function " (shen.app V2115 "; -" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2115)) (y-or-n? (cn "track " (shen.app V2115 "? " shen.a)))) (shen.track-function (ps V2115)) shen.ok) (simple-error "aborted")))) +"(defun shen.f_error (V2122) (do (shen.prhush (cn "partial function " (shen.app V2122 "; +" shen.a)) (stoutput)) (do (if (and (not (shen.tracked? V2122)) (y-or-n? (cn "track " (shen.app V2122 "? " shen.a)))) (shen.track-function (ps V2122)) shen.ok) (simple-error "aborted")))) -(defun shen.tracked? (V2116) (element? V2116 (value shen.*tracking*))) +(defun shen.tracked? (V2123) (element? V2123 (value shen.*tracking*))) -(defun track (V2117) (let Source (ps V2117) (shen.track-function Source))) +(defun track (V2124) (let Source (ps V2124) (shen.track-function Source))) -(defun shen.track-function (V2118) (cond ((and (cons? V2118) (and (= defun (hd V2118)) (and (cons? (tl V2118)) (and (cons? (tl (tl V2118))) (and (cons? (tl (tl (tl V2118)))) (= () (tl (tl (tl (tl V2118)))))))))) (let KL (cons defun (cons (hd (tl V2118)) (cons (hd (tl (tl V2118))) (cons (shen.insert-tracking-code (hd (tl V2118)) (hd (tl (tl V2118))) (hd (tl (tl (tl V2118))))) ())))) (let Ob (eval KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) +(defun shen.track-function (V2125) (cond ((and (cons? V2125) (and (= defun (hd V2125)) (and (cons? (tl V2125)) (and (cons? (tl (tl V2125))) (and (cons? (tl (tl (tl V2125)))) (= () (tl (tl (tl (tl V2125)))))))))) (let KL (cons defun (cons (hd (tl V2125)) (cons (hd (tl (tl V2125))) (cons (shen.insert-tracking-code (hd (tl V2125)) (hd (tl (tl V2125))) (hd (tl (tl (tl V2125))))) ())))) (let Ob (eval-kl KL) (let Tr (set shen.*tracking* (cons Ob (value shen.*tracking*))) Ob)))) (true (shen.sys-error shen.track-function)))) -(defun shen.insert-tracking-code (V2119 V2120 V2121) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2119 (cons (shen.cons_form V2120) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2121 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2119 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) +(defun shen.insert-tracking-code (V2126 V2127 V2128) (cons do (cons (cons set (cons shen.*call* (cons (cons + (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.input-track (cons (cons value (cons shen.*call* ())) (cons V2126 (cons (shen.cons_form V2127) ())))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons (cons let (cons Result (cons V2128 (cons (cons do (cons (cons shen.output-track (cons (cons value (cons shen.*call* ())) (cons V2126 (cons Result ())))) (cons (cons do (cons (cons set (cons shen.*call* (cons (cons - (cons (cons value (cons shen.*call* ())) (cons 1 ()))) ()))) (cons (cons do (cons (cons shen.terpri-or-read-char ()) (cons Result ()))) ()))) ()))) ())))) ()))) ()))) ())))) (set shen.*step* false) -(defun step (V2126) (cond ((= + V2126) (set shen.*step* true)) ((= - V2126) (set shen.*step* false)) (true (simple-error "step expects a + or a -. +(defun step (V2133) (cond ((= + V2133) (set shen.*step* true)) ((= - V2133) (set shen.*step* false)) (true (simple-error "step expects a + or a -. ")))) -(defun spy (V2131) (cond ((= + V2131) (set shen.*spy* true)) ((= - V2131) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. +(defun spy (V2138) (cond ((= + V2138) (set shen.*spy* true)) ((= - V2138) (set shen.*spy* false)) (true (simple-error "spy expects a + or a -. ")))) (defun shen.terpri-or-read-char () (if (value shen.*step*) (shen.check-byte (read-byte (value *stinput*))) (nl 1))) -(defun shen.check-byte (V2136) (cond ((= V2136 (shen.hat)) (simple-error "aborted")) (true true))) +(defun shen.check-byte (V2143) (cond ((= V2143 (shen.hat)) (simple-error "aborted")) (true true))) -(defun shen.input-track (V2137 V2138 V2139) (do (shen.prhush (cn " -" (shen.app (shen.spaces V2137) (cn "<" (shen.app V2137 (cn "> Inputs to " (shen.app V2138 (cn " -" (shen.app (shen.spaces V2137) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2139))) +(defun shen.input-track (V2144 V2145 V2146) (do (shen.prhush (cn " +" (shen.app (shen.spaces V2144) (cn "<" (shen.app V2144 (cn "> Inputs to " (shen.app V2145 (cn " +" (shen.app (shen.spaces V2144) "" shen.a)) shen.a)) shen.a)) shen.a)) (stoutput)) (shen.recursively-print V2146))) -(defun shen.recursively-print (V2140) (cond ((= () V2140) (shen.prhush " ==>" (stoutput))) ((cons? V2140) (do (print (hd V2140)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2140))))) (true (shen.sys-error shen.recursively-print)))) +(defun shen.recursively-print (V2147) (cond ((= () V2147) (shen.prhush " ==>" (stoutput))) ((cons? V2147) (do (print (hd V2147)) (do (shen.prhush ", " (stoutput)) (shen.recursively-print (tl V2147))))) (true (shen.sys-error shen.recursively-print)))) -(defun shen.spaces (V2141) (cond ((= 0 V2141) "") (true (cn " " (shen.spaces (- V2141 1)))))) +(defun shen.spaces (V2148) (cond ((= 0 V2148) "") (true (cn " " (shen.spaces (- V2148 1)))))) -(defun shen.output-track (V2142 V2143 V2144) (shen.prhush (cn " -" (shen.app (shen.spaces V2142) (cn "<" (shen.app V2142 (cn "> Output from " (shen.app V2143 (cn " -" (shen.app (shen.spaces V2142) (cn "==> " (shen.app V2144 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) +(defun shen.output-track (V2149 V2150 V2151) (shen.prhush (cn " +" (shen.app (shen.spaces V2149) (cn "<" (shen.app V2149 (cn "> Output from " (shen.app V2150 (cn " +" (shen.app (shen.spaces V2149) (cn "==> " (shen.app V2151 "" shen.s)) shen.a)) shen.a)) shen.a)) shen.a)) (stoutput))) -(defun untrack (V2145) (eval (ps V2145))) +(defun untrack (V2152) (eval (ps V2152))) -(defun profile (V2146) (shen.profile-help (ps V2146))) +(defun profile (V2153) (shen.profile-help (ps V2153))) -(defun shen.profile-help (V2151) (cond ((and (cons? V2151) (and (= defun (hd V2151)) (and (cons? (tl V2151)) (and (cons? (tl (tl V2151))) (and (cons? (tl (tl (tl V2151)))) (= () (tl (tl (tl (tl V2151)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2151)) (cons (hd (tl (tl V2151))) (cons (shen.profile-func (hd (tl V2151)) (hd (tl (tl V2151))) (cons G (hd (tl (tl V2151))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2151))) (cons (subst G (hd (tl V2151)) (hd (tl (tl (tl V2151))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2151)))))))) (true (simple-error "Cannot profile. +(defun shen.profile-help (V2158) (cond ((and (cons? V2158) (and (= defun (hd V2158)) (and (cons? (tl V2158)) (and (cons? (tl (tl V2158))) (and (cons? (tl (tl (tl V2158)))) (= () (tl (tl (tl (tl V2158)))))))))) (let G (gensym shen.f) (let Profile (cons defun (cons (hd (tl V2158)) (cons (hd (tl (tl V2158))) (cons (shen.profile-func (hd (tl V2158)) (hd (tl (tl V2158))) (cons G (hd (tl (tl V2158))))) ())))) (let Def (cons defun (cons G (cons (hd (tl (tl V2158))) (cons (subst G (hd (tl V2158)) (hd (tl (tl (tl V2158))))) ())))) (let CompileProfile (shen.eval-without-macros Profile) (let CompileG (shen.eval-without-macros Def) (hd (tl V2158)))))))) (true (simple-error "Cannot profile. ")))) -(defun unprofile (V2152) (untrack V2152)) +(defun unprofile (V2159) (untrack V2159)) -(defun shen.profile-func (V2153 V2154 V2155) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2155 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2153 (cons (cons + (cons (cons shen.get-profile (cons V2153 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) +(defun shen.profile-func (V2160 V2161 V2162) (cons let (cons Start (cons (cons get-time (cons run ())) (cons (cons let (cons Result (cons V2162 (cons (cons let (cons Finish (cons (cons - (cons (cons get-time (cons run ())) (cons Start ()))) (cons (cons let (cons Record (cons (cons shen.put-profile (cons V2160 (cons (cons + (cons (cons shen.get-profile (cons V2160 ())) (cons Finish ()))) ()))) (cons Result ())))) ())))) ())))) ()))))) -(defun profile-results (V2156) (let Results (shen.get-profile V2156) (let Initialise (shen.put-profile V2156 0) (@p V2156 Results)))) +(defun profile-results (V2163) (let Results (shen.get-profile V2163) (let Initialise (shen.put-profile V2163 0) (@p V2163 Results)))) -(defun shen.get-profile (V2157) (trap-error (get V2157 profile (value *property-vector*)) (lambda E 0))) +(defun shen.get-profile (V2164) (trap-error (get V2164 profile (value *property-vector*)) (lambda E 0))) -(defun shen.put-profile (V2158 V2159) (put V2158 profile V2159 (value *property-vector*))) +(defun shen.put-profile (V2165 V2166) (put V2165 profile V2166 (value *property-vector*))) diff --git a/shen/klambda/types.kl b/shen/klambda/types.kl index 5013348..3da7970 100644 --- a/shen/klambda/types.kl +++ b/shen/klambda/types.kl @@ -47,14 +47,14 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun declare (V2161 V2162) (let Record (set shen.*signedfuncs* (cons (cons V2161 V2162) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2161 V2162) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2162)) (let F* (concat shen.type-signature-of- V2161) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2161))))))))))) +"(defun declare (V2168 V2169) (let Record (set shen.*signedfuncs* (cons (cons V2168 V2169) (value shen.*signedfuncs*))) (let Variancy (trap-error (shen.variancy-test V2168 V2169) (lambda E shen.skip)) (let Type (shen.rcons_form (shen.demodulate V2169)) (let F* (concat shen.type-signature-of- V2168) (let Parameters (shen.parameters 1) (let Clause (cons (cons F* (cons X ())) (cons :- (cons (cons (cons unify! (cons X (cons Type ()))) ()) ()))) (let AUM_instruction (shen.aum Clause Parameters) (let Code (shen.aum_to_shen AUM_instruction) (let ShenDef (cons define (cons F* (append Parameters (append (cons ProcessN (cons Continuation ())) (cons -> (cons Code ())))))) (let Eval (shen.eval-without-macros ShenDef) V2168))))))))))) -(defun shen.demodulate (V2163) (trap-error (let Demod (shen.walk (lambda X2160 (shen.demod X2160)) V2163) (if (= Demod V2163) V2163 (shen.demodulate Demod))) (lambda E V2163))) +(defun shen.demodulate (V2170) (trap-error (let Demod (shen.walk (lambda X2167 (shen.demod X2167)) V2170) (if (= Demod V2170) V2170 (shen.demodulate Demod))) (lambda E V2170))) -(defun shen.variancy-test (V2164 V2165) (let TypeF (shen.typecheck V2164 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2165) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2164 " may create errors +(defun shen.variancy-test (V2171 V2172) (let TypeF (shen.typecheck V2171 B) (let Check (if (= symbol TypeF) shen.skip (if (shen.variant? TypeF V2172) shen.skip (shen.prhush (cn "warning: changing the type of " (shen.app V2171 " may create errors " shen.a)) (stoutput)))) shen.skip))) -(defun shen.variant? (V2174 V2175) (cond ((= V2175 V2174) true) ((and (cons? V2174) (and (cons? V2175) (= (hd V2175) (hd V2174)))) (shen.variant? (tl V2174) (tl V2175))) ((and (cons? V2174) (and (cons? V2175) (and (shen.pvar? (hd V2174)) (variable? (hd V2175))))) (shen.variant? (subst shen.a (hd V2174) (tl V2174)) (subst shen.a (hd V2175) (tl V2175)))) ((and (cons? V2174) (and (cons? (hd V2174)) (and (cons? V2175) (cons? (hd V2175))))) (shen.variant? (append (hd V2174) (tl V2174)) (append (hd V2175) (tl V2175)))) (true false))) +(defun shen.variant? (V2181 V2182) (cond ((= V2182 V2181) true) ((and (cons? V2181) (and (cons? V2182) (= (hd V2182) (hd V2181)))) (shen.variant? (tl V2181) (tl V2182))) ((and (cons? V2181) (and (cons? V2182) (and (shen.pvar? (hd V2181)) (variable? (hd V2182))))) (shen.variant? (subst shen.a (hd V2181) (tl V2181)) (subst shen.a (hd V2182) (tl V2182)))) ((and (cons? V2181) (and (cons? (hd V2181)) (and (cons? V2182) (cons? (hd V2182))))) (shen.variant? (append (hd V2181) (tl V2181)) (append (hd V2182) (tl V2182)))) (true false))) (declare absvector? (cons A (cons --> (cons boolean ())))) @@ -80,7 +80,7 @@ (declare cn (cons string (cons --> (cons (cons string (cons --> (cons string ()))) ())))) -(declare compile (cons (cons (cons list (cons A ())) (cons ==> (cons B ()))) (cons --> (cons (cons (cons list (cons A ())) (cons --> (cons (cons (cons (cons list (cons A ())) (cons --> (cons B ()))) (cons --> (cons B ()))) ()))) ())))) +(declare compile (cons (cons A (cons ==> (cons B ()))) (cons --> (cons (cons A (cons --> (cons (cons (cons A (cons --> (cons B ()))) (cons --> (cons B ()))) ()))) ())))) (declare cons? (cons A (cons --> (cons boolean ())))) @@ -134,6 +134,8 @@ (declare if (cons boolean (cons --> (cons (cons A (cons --> (cons (cons A (cons --> (cons A ()))) ()))) ())))) +(declare it (cons --> (cons string ()))) + (declare implementation (cons --> (cons string ()))) (declare include (cons (cons list (cons symbol ())) (cons --> (cons (cons list (cons symbol ())) ())))) @@ -148,6 +150,8 @@ (declare intersection (cons (cons list (cons A ())) (cons --> (cons (cons (cons list (cons A ())) (cons --> (cons (cons list (cons A ())) ()))) ())))) +(declare kill (cons --> (cons A ()))) + (declare language (cons --> (cons string ()))) (declare length (cons (cons list (cons A ())) (cons --> (cons number ())))) @@ -312,5 +316,9 @@ (declare == (cons A (cons --> (cons (cons B (cons --> (cons boolean ()))) ())))) +(declare shen.in-> (cons (cons A (cons ==> (cons B ()))) (cons --> (cons A ())))) + +(declare shen.<-out (cons (cons A (cons ==> (cons B ()))) (cons --> (cons B ())))) + diff --git a/shen/klambda/writer.kl b/shen/klambda/writer.kl index 917fb0b..bd98b31 100644 --- a/shen/klambda/writer.kl +++ b/shen/klambda/writer.kl @@ -47,59 +47,59 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun pr (V2287 V2288) (trap-error (shen.prh V2287 V2288 0) (lambda E V2287))) +"(defun pr (V2294 V2295) (trap-error (shen.prh V2294 V2295 0) (lambda E V2294))) -(defun shen.prh (V2289 V2290 V2291) (shen.prh V2289 V2290 (shen.write-char-and-inc V2289 V2290 V2291))) +(defun shen.prh (V2296 V2297 V2298) (shen.prh V2296 V2297 (shen.write-char-and-inc V2296 V2297 V2298))) -(defun shen.write-char-and-inc (V2292 V2293 V2294) (do (write-byte (string->n (pos V2292 V2294)) V2293) (+ V2294 1))) +(defun shen.write-char-and-inc (V2299 V2300 V2301) (do (write-byte (string->n (pos V2299 V2301)) V2300) (+ V2301 1))) -(defun print (V2295) (let String (shen.insert V2295 "~S") (let Print (shen.prhush String (stoutput)) V2295))) +(defun print (V2302) (let String (shen.insert V2302 "~S") (let Print (shen.prhush String (stoutput)) V2302))) -(defun shen.prhush (V2296 V2297) (if (value *hush*) V2296 (pr V2296 V2297))) +(defun shen.prhush (V2303 V2304) (if (value *hush*) V2303 (pr V2303 V2304))) -(defun shen.mkstr (V2298 V2299) (cond ((string? V2298) (shen.mkstr-l (shen.proc-nl V2298) V2299)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2298 ())) V2299)))) +(defun shen.mkstr (V2305 V2306) (cond ((string? V2305) (shen.mkstr-l (shen.proc-nl V2305) V2306)) (true (shen.mkstr-r (cons shen.proc-nl (cons V2305 ())) V2306)))) -(defun shen.mkstr-l (V2300 V2301) (cond ((= () V2301) V2300) ((cons? V2301) (shen.mkstr-l (shen.insert-l (hd V2301) V2300) (tl V2301))) (true (shen.sys-error shen.mkstr-l)))) +(defun shen.mkstr-l (V2307 V2308) (cond ((= () V2308) V2307) ((cons? V2308) (shen.mkstr-l (shen.insert-l (hd V2308) V2307) (tl V2308))) (true (shen.sys-error shen.mkstr-l)))) -(defun shen.insert-l (V2304 V2305) (cond ((= "" V2305) "") ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "A" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.a ()))))) ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "R" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.r ()))))) ((and (shen.+string? V2305) (and (= "~" (pos V2305 0)) (and (shen.+string? (tlstr V2305)) (= "S" (pos (tlstr V2305) 0))))) (cons shen.app (cons V2304 (cons (tlstr (tlstr V2305)) (cons shen.s ()))))) ((shen.+string? V2305) (shen.factor-cn (cons cn (cons (pos V2305 0) (cons (shen.insert-l V2304 (tlstr V2305)) ()))))) ((and (cons? V2305) (and (= cn (hd V2305)) (and (cons? (tl V2305)) (and (cons? (tl (tl V2305))) (= () (tl (tl (tl V2305)))))))) (cons cn (cons (hd (tl V2305)) (cons (shen.insert-l V2304 (hd (tl (tl V2305)))) ())))) ((and (cons? V2305) (and (= shen.app (hd V2305)) (and (cons? (tl V2305)) (and (cons? (tl (tl V2305))) (and (cons? (tl (tl (tl V2305)))) (= () (tl (tl (tl (tl V2305)))))))))) (cons shen.app (cons (hd (tl V2305)) (cons (shen.insert-l V2304 (hd (tl (tl V2305)))) (tl (tl (tl V2305))))))) (true (shen.sys-error shen.insert-l)))) +(defun shen.insert-l (V2311 V2312) (cond ((= "" V2312) "") ((and (shen.+string? V2312) (and (= "~" (pos V2312 0)) (and (shen.+string? (tlstr V2312)) (= "A" (pos (tlstr V2312) 0))))) (cons shen.app (cons V2311 (cons (tlstr (tlstr V2312)) (cons shen.a ()))))) ((and (shen.+string? V2312) (and (= "~" (pos V2312 0)) (and (shen.+string? (tlstr V2312)) (= "R" (pos (tlstr V2312) 0))))) (cons shen.app (cons V2311 (cons (tlstr (tlstr V2312)) (cons shen.r ()))))) ((and (shen.+string? V2312) (and (= "~" (pos V2312 0)) (and (shen.+string? (tlstr V2312)) (= "S" (pos (tlstr V2312) 0))))) (cons shen.app (cons V2311 (cons (tlstr (tlstr V2312)) (cons shen.s ()))))) ((shen.+string? V2312) (shen.factor-cn (cons cn (cons (pos V2312 0) (cons (shen.insert-l V2311 (tlstr V2312)) ()))))) ((and (cons? V2312) (and (= cn (hd V2312)) (and (cons? (tl V2312)) (and (cons? (tl (tl V2312))) (= () (tl (tl (tl V2312)))))))) (cons cn (cons (hd (tl V2312)) (cons (shen.insert-l V2311 (hd (tl (tl V2312)))) ())))) ((and (cons? V2312) (and (= shen.app (hd V2312)) (and (cons? (tl V2312)) (and (cons? (tl (tl V2312))) (and (cons? (tl (tl (tl V2312)))) (= () (tl (tl (tl (tl V2312)))))))))) (cons shen.app (cons (hd (tl V2312)) (cons (shen.insert-l V2311 (hd (tl (tl V2312)))) (tl (tl (tl V2312))))))) (true (shen.sys-error shen.insert-l)))) -(defun shen.factor-cn (V2306) (cond ((and (cons? V2306) (and (= cn (hd V2306)) (and (cons? (tl V2306)) (and (cons? (tl (tl V2306))) (and (cons? (hd (tl (tl V2306)))) (and (= cn (hd (hd (tl (tl V2306))))) (and (cons? (tl (hd (tl (tl V2306))))) (and (cons? (tl (tl (hd (tl (tl V2306)))))) (and (= () (tl (tl (tl (hd (tl (tl V2306))))))) (and (= () (tl (tl (tl V2306)))) (and (string? (hd (tl V2306))) (string? (hd (tl (hd (tl (tl V2306))))))))))))))))) (cons cn (cons (cn (hd (tl V2306)) (hd (tl (hd (tl (tl V2306)))))) (tl (tl (hd (tl (tl V2306)))))))) (true V2306))) +(defun shen.factor-cn (V2313) (cond ((and (cons? V2313) (and (= cn (hd V2313)) (and (cons? (tl V2313)) (and (cons? (tl (tl V2313))) (and (cons? (hd (tl (tl V2313)))) (and (= cn (hd (hd (tl (tl V2313))))) (and (cons? (tl (hd (tl (tl V2313))))) (and (cons? (tl (tl (hd (tl (tl V2313)))))) (and (= () (tl (tl (tl (hd (tl (tl V2313))))))) (and (= () (tl (tl (tl V2313)))) (and (string? (hd (tl V2313))) (string? (hd (tl (hd (tl (tl V2313))))))))))))))))) (cons cn (cons (cn (hd (tl V2313)) (hd (tl (hd (tl (tl V2313)))))) (tl (tl (hd (tl (tl V2313)))))))) (true V2313))) -(defun shen.proc-nl (V2307) (cond ((= "" V2307) "") ((and (shen.+string? V2307) (and (= "~" (pos V2307 0)) (and (shen.+string? (tlstr V2307)) (= "%" (pos (tlstr V2307) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2307))))) ((shen.+string? V2307) (cn (pos V2307 0) (shen.proc-nl (tlstr V2307)))) (true (shen.sys-error shen.proc-nl)))) +(defun shen.proc-nl (V2314) (cond ((= "" V2314) "") ((and (shen.+string? V2314) (and (= "~" (pos V2314 0)) (and (shen.+string? (tlstr V2314)) (= "%" (pos (tlstr V2314) 0))))) (cn (n->string 10) (shen.proc-nl (tlstr (tlstr V2314))))) ((shen.+string? V2314) (cn (pos V2314 0) (shen.proc-nl (tlstr V2314)))) (true (shen.sys-error shen.proc-nl)))) -(defun shen.mkstr-r (V2308 V2309) (cond ((= () V2309) V2308) ((cons? V2309) (shen.mkstr-r (cons shen.insert (cons (hd V2309) (cons V2308 ()))) (tl V2309))) (true (shen.sys-error shen.mkstr-r)))) +(defun shen.mkstr-r (V2315 V2316) (cond ((= () V2316) V2315) ((cons? V2316) (shen.mkstr-r (cons shen.insert (cons (hd V2316) (cons V2315 ()))) (tl V2316))) (true (shen.sys-error shen.mkstr-r)))) -(defun shen.insert (V2310 V2311) (shen.insert-h V2310 V2311 "")) +(defun shen.insert (V2317 V2318) (shen.insert-h V2317 V2318 "")) -(defun shen.insert-h (V2314 V2315 V2316) (cond ((= "" V2315) V2316) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "A" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.a))) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "R" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.r))) ((and (shen.+string? V2315) (and (= "~" (pos V2315 0)) (and (shen.+string? (tlstr V2315)) (= "S" (pos (tlstr V2315) 0))))) (cn V2316 (shen.app V2314 (tlstr (tlstr V2315)) shen.s))) ((shen.+string? V2315) (shen.insert-h V2314 (tlstr V2315) (cn V2316 (pos V2315 0)))) (true (shen.sys-error shen.insert-h)))) +(defun shen.insert-h (V2321 V2322 V2323) (cond ((= "" V2322) V2323) ((and (shen.+string? V2322) (and (= "~" (pos V2322 0)) (and (shen.+string? (tlstr V2322)) (= "A" (pos (tlstr V2322) 0))))) (cn V2323 (shen.app V2321 (tlstr (tlstr V2322)) shen.a))) ((and (shen.+string? V2322) (and (= "~" (pos V2322 0)) (and (shen.+string? (tlstr V2322)) (= "R" (pos (tlstr V2322) 0))))) (cn V2323 (shen.app V2321 (tlstr (tlstr V2322)) shen.r))) ((and (shen.+string? V2322) (and (= "~" (pos V2322 0)) (and (shen.+string? (tlstr V2322)) (= "S" (pos (tlstr V2322) 0))))) (cn V2323 (shen.app V2321 (tlstr (tlstr V2322)) shen.s))) ((shen.+string? V2322) (shen.insert-h V2321 (tlstr V2322) (cn V2323 (pos V2322 0)))) (true (shen.sys-error shen.insert-h)))) -(defun shen.app (V2317 V2318 V2319) (cn (shen.arg->str V2317 V2319) V2318)) +(defun shen.app (V2324 V2325 V2326) (cn (shen.arg->str V2324 V2326) V2325)) -(defun shen.arg->str (V2325 V2326) (cond ((= V2325 (fail)) "...") ((shen.list? V2325) (shen.list->str V2325 V2326)) ((string? V2325) (shen.str->str V2325 V2326)) ((absvector? V2325) (shen.vector->str V2325 V2326)) (true (shen.atom->str V2325)))) +(defun shen.arg->str (V2332 V2333) (cond ((= V2332 (fail)) "...") ((shen.list? V2332) (shen.list->str V2332 V2333)) ((string? V2332) (shen.str->str V2332 V2333)) ((absvector? V2332) (shen.vector->str V2332 V2333)) (true (shen.atom->str V2332)))) -(defun shen.list->str (V2327 V2328) (cond ((= shen.r V2328) (@s "(" (@s (shen.iter-list V2327 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2327 V2328 (shen.maxseq)) "]"))))) +(defun shen.list->str (V2334 V2335) (cond ((= shen.r V2335) (@s "(" (@s (shen.iter-list V2334 shen.r (shen.maxseq)) ")"))) (true (@s "[" (@s (shen.iter-list V2334 V2335 (shen.maxseq)) "]"))))) (defun shen.maxseq () (value *maximum-print-sequence-size*)) -(defun shen.iter-list (V2339 V2340 V2341) (cond ((= () V2339) "") ((= 0 V2341) "... etc") ((and (cons? V2339) (= () (tl V2339))) (shen.arg->str (hd V2339) V2340)) ((cons? V2339) (@s (shen.arg->str (hd V2339) V2340) (@s " " (shen.iter-list (tl V2339) V2340 (- V2341 1))))) (true (@s "|" (@s " " (shen.arg->str V2339 V2340)))))) +(defun shen.iter-list (V2346 V2347 V2348) (cond ((= () V2346) "") ((= 0 V2348) "... etc") ((and (cons? V2346) (= () (tl V2346))) (shen.arg->str (hd V2346) V2347)) ((cons? V2346) (@s (shen.arg->str (hd V2346) V2347) (@s " " (shen.iter-list (tl V2346) V2347 (- V2348 1))))) (true (@s "|" (@s " " (shen.arg->str V2346 V2347)))))) -(defun shen.str->str (V2346 V2347) (cond ((= shen.a V2347) V2346) (true (@s (n->string 34) (@s V2346 (n->string 34)))))) +(defun shen.str->str (V2353 V2354) (cond ((= shen.a V2354) V2353) (true (@s (n->string 34) (@s V2353 (n->string 34)))))) -(defun shen.vector->str (V2348 V2349) (if (shen.print-vector? V2348) ((<-address V2348 0) V2348) (if (vector? V2348) (@s "<" (@s (shen.iter-vector V2348 1 V2349 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2348 0 V2349 (shen.maxseq)) ">>")))))) +(defun shen.vector->str (V2355 V2356) (if (shen.print-vector? V2355) ((<-address V2355 0) V2355) (if (vector? V2355) (@s "<" (@s (shen.iter-vector V2355 1 V2356 (shen.maxseq)) ">")) (@s "<" (@s "<" (@s (shen.iter-vector V2355 0 V2356 (shen.maxseq)) ">>")))))) -(defun shen.print-vector? (V2350) (let Zero (<-address V2350 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) +(defun shen.print-vector? (V2357) (let Zero (<-address V2357 0) (if (= Zero shen.tuple) true (if (= Zero shen.pvar) true (if (not (number? Zero)) (shen.fbound? Zero) false))))) -(defun shen.fbound? (V2351) (trap-error (do (ps V2351) true) (lambda E false))) +(defun shen.fbound? (V2358) (trap-error (do (ps V2358) true) (lambda E false))) -(defun shen.tuple (V2352) (cn "(@p " (shen.app (<-address V2352 1) (cn " " (shen.app (<-address V2352 2) ")" shen.s)) shen.s))) +(defun shen.tuple (V2359) (cn "(@p " (shen.app (<-address V2359 1) (cn " " (shen.app (<-address V2359 2) ")" shen.s)) shen.s))) -(defun shen.iter-vector (V2359 V2360 V2361 V2362) (cond ((= 0 V2362) "... etc") (true (let Item (trap-error (<-address V2359 V2360) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2359 (+ V2360 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2361) (@s (shen.arg->str Item V2361) (@s " " (shen.iter-vector V2359 (+ V2360 1) V2361 (- V2362 1))))))))))) +(defun shen.iter-vector (V2366 V2367 V2368 V2369) (cond ((= 0 V2369) "... etc") (true (let Item (trap-error (<-address V2366 V2367) (lambda E shen.out-of-bounds)) (let Next (trap-error (<-address V2366 (+ V2367 1)) (lambda E shen.out-of-bounds)) (if (= Item shen.out-of-bounds) "" (if (= Next shen.out-of-bounds) (shen.arg->str Item V2368) (@s (shen.arg->str Item V2368) (@s " " (shen.iter-vector V2366 (+ V2367 1) V2368 (- V2369 1))))))))))) -(defun shen.atom->str (V2363) (trap-error (str V2363) (lambda E (shen.funexstring)))) +(defun shen.atom->str (V2370) (trap-error (str V2370) (lambda E (shen.funexstring)))) (defun shen.funexstring () (@s "" (@s "f" (@s "u" (@s "n" (@s "e" (@s (shen.arg->str (gensym (intern "x")) shen.a) ""))))))) -(defun shen.list? (V2364) (or (empty? V2364) (cons? V2364))) +(defun shen.list? (V2371) (or (empty? V2371) (cons? V2371))) diff --git a/shen/klambda/yacc.kl b/shen/klambda/yacc.kl index b23e84f..267846e 100644 --- a/shen/klambda/yacc.kl +++ b/shen/klambda/yacc.kl @@ -47,67 +47,67 @@ * explains this license in full. * * * ***************************************************************************************** -"(defun shen.yacc (V2180) (cond ((and (cons? V2180) (and (= defcc (hd V2180)) (and (cons? (tl V2180)) (and (cons? (tl (tl V2180))) (and (= { (hd (tl (tl V2180)))) (and (cons? (tl (tl (tl V2180)))) (and (cons? (tl (tl (tl (tl V2180))))) (and (= ==> (hd (tl (tl (tl (tl V2180)))))) (and (cons? (tl (tl (tl (tl (tl V2180)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2180))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2180)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2180)) (tl (tl (tl (tl (tl (tl (tl V2180))))))))))) ((and (cons? V2180) (and (= defcc (hd V2180)) (cons? (tl V2180)))) (shen.yacc->shen (hd (tl V2180)) (tl (tl V2180)))) (true (shen.sys-error shen.yacc)))) +"(defun shen.yacc (V2187) (cond ((and (cons? V2187) (and (= defcc (hd V2187)) (and (cons? (tl V2187)) (and (cons? (tl (tl V2187))) (and (= { (hd (tl (tl V2187)))) (and (cons? (tl (tl (tl V2187)))) (and (cons? (tl (tl (tl (tl V2187))))) (and (= ==> (hd (tl (tl (tl (tl V2187)))))) (and (cons? (tl (tl (tl (tl (tl V2187)))))) (and (cons? (tl (tl (tl (tl (tl (tl V2187))))))) (= } (hd (tl (tl (tl (tl (tl (tl V2187)))))))))))))))))) (shen.yacc (cons defcc (cons (hd (tl V2187)) (tl (tl (tl (tl (tl (tl (tl V2187))))))))))) ((and (cons? V2187) (and (= defcc (hd V2187)) (cons? (tl V2187)))) (shen.yacc->shen (hd (tl V2187)) (tl (tl V2187)))) (true (shen.sys-error shen.yacc)))) -(defun shen.yacc->shen (V2181 V2182) (let CCRules (shen.split_cc_rules true V2182 ()) (let CCBody (map (lambda X2178 (shen.cc_body X2178)) CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2181 (cons Stream (cons -> (cons (shen.kill-code YaccCases) ()))))))))) +(defun shen.yacc->shen (V2188 V2189) (let CCRules (shen.split_cc_rules true V2189 ()) (let CCBody (map (lambda X2185 (shen.cc_body X2185)) CCRules) (let YaccCases (shen.yacc_cases CCBody) (cons define (cons V2188 (cons Stream (cons -> (cons (shen.kill-code YaccCases) ()))))))))) -(defun shen.kill-code (V2183) (cond ((> (occurrences kill V2183) 0) (cons trap-error (cons V2183 (cons (cons lambda (cons E (cons (cons shen.analyse-kill (cons E ())) ()))) ())))) (true V2183))) +(defun shen.kill-code (V2190) (cond ((> (occurrences kill V2190) 0) (cons trap-error (cons V2190 (cons (cons lambda (cons E (cons (cons shen.analyse-kill (cons E ())) ()))) ())))) (true V2190))) (defun kill () (simple-error "yacc kill")) -(defun shen.analyse-kill (V2184) (let String (error-to-string V2184) (if (= String "yacc kill") (fail) V2184))) +(defun shen.analyse-kill (V2191) (let String (error-to-string V2191) (if (= String "yacc kill") (fail) V2191))) -(defun shen.split_cc_rules (V2187 V2188 V2189) (cond ((and (= () V2188) (= () V2189)) ()) ((= () V2188) (cons (shen.split_cc_rule V2187 (reverse V2189) ()) ())) ((and (cons? V2188) (= ; (hd V2188))) (cons (shen.split_cc_rule V2187 (reverse V2189) ()) (shen.split_cc_rules V2187 (tl V2188) ()))) ((cons? V2188) (shen.split_cc_rules V2187 (tl V2188) (cons (hd V2188) V2189))) (true (shen.sys-error shen.split_cc_rules)))) +(defun shen.split_cc_rules (V2194 V2195 V2196) (cond ((and (= () V2195) (= () V2196)) ()) ((= () V2195) (cons (shen.split_cc_rule V2194 (reverse V2196) ()) ())) ((and (cons? V2195) (= ; (hd V2195))) (cons (shen.split_cc_rule V2194 (reverse V2196) ()) (shen.split_cc_rules V2194 (tl V2195) ()))) ((cons? V2195) (shen.split_cc_rules V2194 (tl V2195) (cons (hd V2195) V2196))) (true (shen.sys-error shen.split_cc_rules)))) -(defun shen.split_cc_rule (V2194 V2195 V2196) (cond ((and (cons? V2195) (and (= := (hd V2195)) (and (cons? (tl V2195)) (= () (tl (tl V2195)))))) (cons (reverse V2196) (tl V2195))) ((and (cons? V2195) (and (= := (hd V2195)) (and (cons? (tl V2195)) (and (cons? (tl (tl V2195))) (and (= where (hd (tl (tl V2195)))) (and (cons? (tl (tl (tl V2195)))) (= () (tl (tl (tl (tl V2195))))))))))) (cons (reverse V2196) (cons (cons where (cons (hd (tl (tl (tl V2195)))) (cons (hd (tl V2195)) ()))) ()))) ((= () V2195) (do (shen.semantic-completion-warning V2194 V2196) (shen.split_cc_rule V2194 (cons := (cons (shen.default_semantics (reverse V2196)) ())) V2196))) ((cons? V2195) (shen.split_cc_rule V2194 (tl V2195) (cons (hd V2195) V2196))) (true (shen.sys-error shen.split_cc_rule)))) +(defun shen.split_cc_rule (V2201 V2202 V2203) (cond ((and (cons? V2202) (and (= := (hd V2202)) (and (cons? (tl V2202)) (= () (tl (tl V2202)))))) (cons (reverse V2203) (tl V2202))) ((and (cons? V2202) (and (= := (hd V2202)) (and (cons? (tl V2202)) (and (cons? (tl (tl V2202))) (and (= where (hd (tl (tl V2202)))) (and (cons? (tl (tl (tl V2202)))) (= () (tl (tl (tl (tl V2202))))))))))) (cons (reverse V2203) (cons (cons where (cons (hd (tl (tl (tl V2202)))) (cons (hd (tl V2202)) ()))) ()))) ((= () V2202) (do (shen.semantic-completion-warning V2201 V2203) (shen.split_cc_rule V2201 (cons := (cons (shen.default_semantics (reverse V2203)) ())) V2203))) ((cons? V2202) (shen.split_cc_rule V2201 (tl V2202) (cons (hd V2202) V2203))) (true (shen.sys-error shen.split_cc_rule)))) -(defun shen.semantic-completion-warning (V2205 V2206) (cond ((= true V2205) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2206)) (shen.prhush "has no semantics. +(defun shen.semantic-completion-warning (V2212 V2213) (cond ((= true V2212) (do (shen.prhush "warning: " (stoutput)) (do (map (lambda X (shen.prhush (shen.app X " " shen.a) (stoutput))) (reverse V2213)) (shen.prhush "has no semantics. " (stoutput))))) (true shen.skip))) -(defun shen.default_semantics (V2207) (cond ((= () V2207) ()) ((and (cons? V2207) (and (= () (tl V2207)) (shen.grammar_symbol? (hd V2207)))) (hd V2207)) ((and (cons? V2207) (shen.grammar_symbol? (hd V2207))) (cons append (cons (hd V2207) (cons (shen.default_semantics (tl V2207)) ())))) ((cons? V2207) (cons cons (cons (hd V2207) (cons (shen.default_semantics (tl V2207)) ())))) (true (shen.sys-error shen.default_semantics)))) +(defun shen.default_semantics (V2214) (cond ((= () V2214) ()) ((and (cons? V2214) (and (= () (tl V2214)) (shen.grammar_symbol? (hd V2214)))) (hd V2214)) ((and (cons? V2214) (shen.grammar_symbol? (hd V2214))) (cons append (cons (hd V2214) (cons (shen.default_semantics (tl V2214)) ())))) ((cons? V2214) (cons cons (cons (hd V2214) (cons (shen.default_semantics (tl V2214)) ())))) (true (shen.sys-error shen.default_semantics)))) -(defun shen.grammar_symbol? (V2208) (and (symbol? V2208) (let Cs (shen.strip-pathname (explode V2208)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) +(defun shen.grammar_symbol? (V2215) (and (symbol? V2215) (let Cs (shen.strip-pathname (explode V2215)) (and (= (hd Cs) "<") (= (hd (reverse Cs)) ">"))))) -(defun shen.yacc_cases (V2209) (cond ((and (cons? V2209) (= () (tl V2209))) (hd V2209)) ((cons? V2209) (let P YaccParse (cons let (cons P (cons (hd V2209) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2209)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) +(defun shen.yacc_cases (V2216) (cond ((and (cons? V2216) (= () (tl V2216))) (hd V2216)) ((cons? V2216) (let P YaccParse (cons let (cons P (cons (hd V2216) (cons (cons if (cons (cons = (cons P (cons (cons fail ()) ()))) (cons (shen.yacc_cases (tl V2216)) (cons P ())))) ())))))) (true (shen.sys-error shen.yacc_cases)))) -(defun shen.cc_body (V2210) (cond ((and (cons? V2210) (and (cons? (tl V2210)) (= () (tl (tl V2210))))) (shen.syntax (hd V2210) Stream (hd (tl V2210)))) (true (shen.sys-error shen.cc_body)))) +(defun shen.cc_body (V2217) (cond ((and (cons? V2217) (and (cons? (tl V2217)) (= () (tl (tl V2217))))) (shen.syntax (hd V2217) Stream (hd (tl V2217)))) (true (shen.sys-error shen.cc_body)))) -(defun shen.syntax (V2211 V2212 V2213) (cond ((and (= () V2211) (and (cons? V2213) (and (= where (hd V2213)) (and (cons? (tl V2213)) (and (cons? (tl (tl V2213))) (= () (tl (tl (tl V2213))))))))) (cons if (cons (shen.semantics (hd (tl V2213))) (cons (cons shen.pair (cons (cons hd (cons V2212 ())) (cons (shen.semantics (hd (tl (tl V2213)))) ()))) (cons (cons fail ()) ()))))) ((= () V2211) (cons shen.pair (cons (cons hd (cons V2212 ())) (cons (shen.semantics V2213) ())))) ((cons? V2211) (if (shen.grammar_symbol? (hd V2211)) (shen.recursive_descent V2211 V2212 V2213) (if (variable? (hd V2211)) (shen.variable-match V2211 V2212 V2213) (if (shen.jump_stream? (hd V2211)) (shen.jump_stream V2211 V2212 V2213) (if (shen.terminal? (hd V2211)) (shen.check_stream V2211 V2212 V2213) (if (cons? (hd V2211)) (shen.list-stream (shen.decons (hd V2211)) (tl V2211) V2212 V2213) (simple-error (shen.app (hd V2211) " is not legal syntax +(defun shen.syntax (V2218 V2219 V2220) (cond ((and (= () V2218) (and (cons? V2220) (and (= where (hd V2220)) (and (cons? (tl V2220)) (and (cons? (tl (tl V2220))) (= () (tl (tl (tl V2220))))))))) (cons if (cons (shen.semantics (hd (tl V2220))) (cons (cons shen.pair (cons (cons hd (cons V2219 ())) (cons (shen.semantics (hd (tl (tl V2220)))) ()))) (cons (cons fail ()) ()))))) ((= () V2218) (cons shen.pair (cons (cons hd (cons V2219 ())) (cons (shen.semantics V2220) ())))) ((cons? V2218) (if (shen.grammar_symbol? (hd V2218)) (shen.recursive_descent V2218 V2219 V2220) (if (variable? (hd V2218)) (shen.variable-match V2218 V2219 V2220) (if (shen.jump_stream? (hd V2218)) (shen.jump_stream V2218 V2219 V2220) (if (shen.terminal? (hd V2218)) (shen.check_stream V2218 V2219 V2220) (if (cons? (hd V2218)) (shen.list-stream (shen.decons (hd V2218)) (tl V2218) V2219 V2220) (simple-error (shen.app (hd V2218) " is not legal syntax " shen.a)))))))) (true (shen.sys-error shen.syntax)))) -(defun shen.list-stream (V2214 V2215 V2216 V2217) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2216 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2216 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2215 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2216 ())) ())) (cons (cons hd (cons (cons tl (cons V2216 ())) ())) ()))) V2217) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2214 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2216 ())) ())) (cons (cons hd (cons (cons tl (cons V2216 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) +(defun shen.list-stream (V2221 V2222 V2223 V2224) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2223 ())) ())) (cons (cons cons? (cons (cons hd (cons (cons hd (cons V2223 ())) ())) ())) ()))) (let Placeholder (gensym shen.place) (let RunOn (shen.syntax V2222 (cons shen.pair (cons (cons tl (cons (cons hd (cons V2223 ())) ())) (cons (cons hd (cons (cons tl (cons V2223 ())) ())) ()))) V2224) (let Action (shen.insert-runon RunOn Placeholder (shen.syntax V2221 (cons shen.pair (cons (cons hd (cons (cons hd (cons V2223 ())) ())) (cons (cons hd (cons (cons tl (cons V2223 ())) ())) ()))) Placeholder)) (cons if (cons Test (cons Action (cons (cons fail ()) ()))))))))) -(defun shen.decons (V2218) (cond ((and (cons? V2218) (and (= cons (hd V2218)) (and (cons? (tl V2218)) (and (cons? (tl (tl V2218))) (and (= () (hd (tl (tl V2218)))) (= () (tl (tl (tl V2218))))))))) (cons (hd (tl V2218)) ())) ((and (cons? V2218) (and (= cons (hd V2218)) (and (cons? (tl V2218)) (and (cons? (tl (tl V2218))) (= () (tl (tl (tl V2218)))))))) (cons (hd (tl V2218)) (shen.decons (hd (tl (tl V2218)))))) (true V2218))) +(defun shen.decons (V2225) (cond ((and (cons? V2225) (and (= cons (hd V2225)) (and (cons? (tl V2225)) (and (cons? (tl (tl V2225))) (and (= () (hd (tl (tl V2225)))) (= () (tl (tl (tl V2225))))))))) (cons (hd (tl V2225)) ())) ((and (cons? V2225) (and (= cons (hd V2225)) (and (cons? (tl V2225)) (and (cons? (tl (tl V2225))) (= () (tl (tl (tl V2225)))))))) (cons (hd (tl V2225)) (shen.decons (hd (tl (tl V2225)))))) (true V2225))) -(defun shen.insert-runon (V2229 V2230 V2231) (cond ((and (cons? V2231) (and (= shen.pair (hd V2231)) (and (cons? (tl V2231)) (and (cons? (tl (tl V2231))) (and (= () (tl (tl (tl V2231)))) (= (hd (tl (tl V2231))) V2230)))))) V2229) ((cons? V2231) (map (lambda Z (shen.insert-runon V2229 V2230 Z)) V2231)) (true V2231))) +(defun shen.insert-runon (V2236 V2237 V2238) (cond ((and (cons? V2238) (and (= shen.pair (hd V2238)) (and (cons? (tl V2238)) (and (cons? (tl (tl V2238))) (and (= () (tl (tl (tl V2238)))) (= (hd (tl (tl V2238))) V2237)))))) V2236) ((cons? V2238) (map (lambda Z (shen.insert-runon V2236 V2237 Z)) V2238)) (true V2238))) -(defun shen.strip-pathname (V2237) (cond ((not (element? "." V2237)) V2237) ((cons? V2237) (shen.strip-pathname (tl V2237))) (true (shen.sys-error shen.strip-pathname)))) +(defun shen.strip-pathname (V2244) (cond ((not (element? "." V2244)) V2244) ((cons? V2244) (shen.strip-pathname (tl V2244))) (true (shen.sys-error shen.strip-pathname)))) -(defun shen.recursive_descent (V2238 V2239 V2240) (cond ((cons? V2238) (let Test (cons (hd V2238) (cons V2239 ())) (let Action (shen.syntax (tl V2238) (concat Parse_ (hd V2238)) V2240) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2238)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2238)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) +(defun shen.recursive_descent (V2245 V2246 V2247) (cond ((cons? V2245) (let Test (cons (hd V2245) (cons V2246 ())) (let Action (shen.syntax (tl V2245) (concat Parse_ (hd V2245)) V2247) (let Else (cons fail ()) (cons let (cons (concat Parse_ (hd V2245)) (cons Test (cons (cons if (cons (cons not (cons (cons = (cons (cons fail ()) (cons (concat Parse_ (hd V2245)) ()))) ())) (cons Action (cons Else ())))) ())))))))) (true (shen.sys-error shen.recursive_descent)))) -(defun shen.variable-match (V2241 V2242 V2243) (cond ((cons? V2241) (let Test (cons cons? (cons (cons hd (cons V2242 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2241)) (cons (cons hd (cons (cons hd (cons V2242 ())) ())) (cons (shen.syntax (tl V2241) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2242 ())) ())) (cons (cons shen.hdtl (cons V2242 ())) ()))) V2243) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) +(defun shen.variable-match (V2248 V2249 V2250) (cond ((cons? V2248) (let Test (cons cons? (cons (cons hd (cons V2249 ())) ())) (let Action (cons let (cons (concat Parse_ (hd V2248)) (cons (cons hd (cons (cons hd (cons V2249 ())) ())) (cons (shen.syntax (tl V2248) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2249 ())) ())) (cons (cons shen.hdtl (cons V2249 ())) ()))) V2250) ())))) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.variable-match)))) -(defun shen.terminal? (V2252) (cond ((cons? V2252) false) ((variable? V2252) false) (true true))) +(defun shen.terminal? (V2259) (cond ((cons? V2259) false) ((variable? V2259) false) (true true))) -(defun shen.jump_stream? (V2257) (cond ((= V2257 _) true) (true false))) +(defun shen.jump_stream? (V2264) (cond ((= V2264 _) true) (true false))) -(defun shen.check_stream (V2258 V2259 V2260) (cond ((cons? V2258) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2259 ())) ())) (cons (cons = (cons (hd V2258) (cons (cons hd (cons (cons hd (cons V2259 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2258) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2259 ())) ())) (cons (cons shen.hdtl (cons V2259 ())) ()))) V2260) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) +(defun shen.check_stream (V2265 V2266 V2267) (cond ((cons? V2265) (let Test (cons and (cons (cons cons? (cons (cons hd (cons V2266 ())) ())) (cons (cons = (cons (hd V2265) (cons (cons hd (cons (cons hd (cons V2266 ())) ())) ()))) ()))) (let Action (shen.syntax (tl V2265) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2266 ())) ())) (cons (cons shen.hdtl (cons V2266 ())) ()))) V2267) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.check_stream)))) -(defun shen.jump_stream (V2261 V2262 V2263) (cond ((cons? V2261) (let Test (cons cons? (cons (cons hd (cons V2262 ())) ())) (let Action (shen.syntax (tl V2261) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2262 ())) ())) (cons (cons shen.hdtl (cons V2262 ())) ()))) V2263) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) +(defun shen.jump_stream (V2268 V2269 V2270) (cond ((cons? V2268) (let Test (cons cons? (cons (cons hd (cons V2269 ())) ())) (let Action (shen.syntax (tl V2268) (cons shen.pair (cons (cons tl (cons (cons hd (cons V2269 ())) ())) (cons (cons shen.hdtl (cons V2269 ())) ()))) V2270) (let Else (cons fail ()) (cons if (cons Test (cons Action (cons Else ())))))))) (true (shen.sys-error shen.jump_stream)))) -(defun shen.semantics (V2264) (cond ((= () V2264) ()) ((shen.grammar_symbol? V2264) (cons shen.hdtl (cons (concat Parse_ V2264) ()))) ((variable? V2264) (concat Parse_ V2264)) ((cons? V2264) (map (lambda X2179 (shen.semantics X2179)) V2264)) (true V2264))) +(defun shen.semantics (V2271) (cond ((= () V2271) ()) ((shen.grammar_symbol? V2271) (cons shen.hdtl (cons (concat Parse_ V2271) ()))) ((variable? V2271) (concat Parse_ V2271)) ((cons? V2271) (map (lambda X2186 (shen.semantics X2186)) V2271)) (true V2271))) -(defun shen.snd-or-fail (V2271) (cond ((and (cons? V2271) (and (cons? (tl V2271)) (= () (tl (tl V2271))))) (hd (tl V2271))) (true (fail)))) +(defun shen.snd-or-fail (V2278) (cond ((and (cons? V2278) (and (cons? (tl V2278)) (= () (tl (tl V2278))))) (hd (tl V2278))) (true (fail)))) (defun fail () shen.fail!) -(defun shen.pair (V2272 V2273) (cons V2272 (cons V2273 ()))) +(defun shen.pair (V2279 V2280) (cons V2279 (cons V2280 ()))) -(defun shen.hdtl (V2274) (hd (tl V2274))) +(defun shen.hdtl (V2281) (hd (tl V2281))) -(defun (V2281) (cond ((and (cons? V2281) (and (cons? (tl V2281)) (= () (tl (tl V2281))))) (cons () (cons (hd V2281) ()))) (true (fail)))) +(defun (V2288) (cond ((and (cons? V2288) (and (cons? (tl V2288)) (= () (tl (tl V2288))))) (cons () (cons (hd V2288) ()))) (true (fail)))) -(defun (V2286) (cond ((and (cons? V2286) (and (cons? (tl V2286)) (= () (tl (tl V2286))))) (cons (hd V2286) (cons () ()))) (true (shen.sys-error )))) +(defun (V2293) (cond ((and (cons? V2293) (and (cons? (tl V2293)) (= () (tl (tl V2293))))) (cons (hd V2293) (cons () ()))) (true (shen.sys-error )))) diff --git a/shen/src/backend.shen b/shen/src/backend.shen index 826667a..c39dc46 100644 --- a/shen/src/backend.shen +++ b/shen/src/backend.shen @@ -1,102 +1,163 @@ + +\* + +********************************************************************************** +* The License * +* * +* The user is free to produce commercial applications with the software, to * +* distribute these applications in source or binary form, and to charge monies * +* for them as he sees fit and in concordance with the laws of the land subject * +* to the following license. * +* * +* 1. The license applies to all the software and all derived software and * +* must appear on such. * +* * +* 2. It is illegal to distribute the software without this license attached * +* to it and use of the software implies agreement with the license as such. * +* It is illegal for anyone who is not the copyright holder to tamper with * +* or change the license. * +* * +* 3. Neither the names of Lambda Associates or the copyright holder may be used * +* to endorse or promote products built using the software without specific * +* prior written permission from the copyright holder. * +* * +* 4. That possession of this license does not confer on the copyright holder * +* any special contractual obligation towards the user. That in no event * +* shall the copyright holder be liable for any direct, indirect, incidental, * +* special, exemplary or consequential damages (including but not limited * +* to procurement of substitute goods or services, loss of use, data, * +* interruption), however caused and on any theory of liability, whether in * +* contract, strict liability or tort (including negligence) arising in any * +* way out of the use of the software, even if advised of the possibility of * +* such damage. * +* * +* 5. It is permitted for the user to change the software, for the purpose of * +* improving performance, correcting an error, or porting to a new platform, * +* and distribute the derived version of Shen provided the resulting program * +* conforms in all respects to the Shen standard and is issued under that * +* title. The user must make it clear with his distribution that he/she is * +* the author of the changes and what these changes are and why. * +* * +* 6. Derived versions of this software in whatever form are subject to the same * +* restrictions. In particular it is not permitted to make derived copies of * +* this software which do not conform to the Shen standard or appear under a * +* different title. * +* * +* It is permitted to distribute versions of Shen which incorporate libraries,* +* graphics or other facilities which are not part of the Shen standard. * +* * +* For an explication of this license see www.shenlanguage.org/license.htm which * +* explains this license in full. +* * +********************************************************************************* + +*\ + +(package shen [] + (define kl-to-lisp Params Param -> Param where (element? Param Params) Params [type X _] -> (kl-to-lisp Params X) - Params [lambda X Y] -> [FUNCTION [LAMBDA [X] (kl-to-lisp [X | Params] Y)]] - Params [let X Y Z] -> [LET [[X (kl-to-lisp Params Y)]] - (kl-to-lisp [X | Params] Z)] - _ [defun F Params Code] -> [DEFUN F Params (kl-to-lisp Params Code)] - Params [cond | Cond] -> [COND | (map (/. C (cond_code Params C)) (insert-default Cond))] - Params [Param | X] -> (higher-order-code Param - (map (/. Y (kl-to-lisp Params Y)) X)) - where (element? Param Params) - Params [[X | Y] | Z] -> (higher-order-code (kl-to-lisp Params [X | Y]) - (map (/. W (kl-to-lisp Params W)) Z)) - Params [F | X] -> (assemble-application F - (map (/. Y (kl-to-lisp Params Y)) X)) - where (symbol? F) - _ [] -> [] - _ S -> [QUOTE S] where (or (symbol? S) (boolean? S)) - _ X -> X) - -(define insert-default - [] -> [[true [ERROR "error: cond failure~%"]]] - [[true X] | Y] -> [[true X] | Y] - [Case | Cases] -> [Case | (insert-default Cases)]) - -(define higher-order-code - F X -> [let Args [LIST | X] - [let NewF [maplispsym F] - [trap-error [APPLY NewF Args] - [lambda E [COND [[arity-error? F Args] - [funcall [EVAL [nest-lambda F NewF]] Args]] - [[EQ NewF [QUOTE or]] - [funcall [lambda X1 [lambda X2 [or X1 X2]]] Args]] - [[EQ NewF [QUOTE and]] - [funcall [lambda X1 [lambda X2 [and X1 X2]]] Args]] - [[EQ NewF [QUOTE trap-error]] - [funcall [lambda X1 [lambda X2 [trap-error X1 X2]]] Args]] - [[bad-lambda-call? NewF Args] - [funcall NewF Args]] - [T [relay-error E]]]]]]]) - -(define bad-lambda-call? - F Args -> (AND (FUNCTIONP F) (NOT (= (LIST-LENGTH Args) 1)))) - -(define relay-error - E -> (ERROR (error-to-string E))) - -(define funcall - Lambda [] -> Lambda - Lambda [X | Y] -> (funcall (FUNCALL Lambda X) Y)) - -(define arity-error? - F Args -> (AND (SYMBOLP F) - (> (trap-error (arity F) (/. E -1)) (LIST-LENGTH Args))) + Params [lambda X Y] + -> (protect [FUNCTION [LAMBDA [X] (kl-to-lisp [X | Params] Y)]]) + Params [let X Y Z] -> (protect [LET [[X (kl-to-lisp Params Y)]] + (kl-to-lisp [X | Params] Z)]) + _ [defun F Params Code] -> (protect [DEFUN F Params (kl-to-lisp Params Code)]) + Params [cond | Cond] -> (protect [COND | (map (/. C (cond_code Params C)) Cond)]) + Params [F | X] -> (let Arguments (map (/. Y (kl-to-lisp Params Y)) X) + (optimise-application + (cases (element? F Params) + [apply F [(protect LIST) | Arguments]] + (cons? F) [apply (kl-to-lisp Params F) + [(protect LIST) | Arguments]] + (partial-application? F Arguments) + (partially-apply F Arguments) + true [(maplispsym F) | Arguments]))) + _ N -> N where (number? N) + _ S -> S where (string? S) + _ X -> (protect [QUOTE X])) -(define nest-lambda - F NewF -> (nest-lambda-help NewF (trap-error (arity F) (/. E -1)))) - -(define nest-lambda-help - F -1 -> F +(define apply + F Arguments -> (trap-error ((protect APPLY) F Arguments) + (/. E (analyse-application F Arguments)))) + +\\ Very slow if higher-order partial application is used; but accurate. +(define analyse-application + F Arguments -> (let Lambda (if (partial-application? F Arguments) + ((protect EVAL) (mk-lambda F (arity F))) + F) + (curried-apply F Arguments))) + +(define curried-apply + F [] -> F + F [X | Y] -> (curried-apply (F X) Y)) + +(define partial-application? + F Arguments -> (let Arity (trap-error (arity F) (/. E -1)) + (cases (= Arity -1) false + (= Arity (length Arguments)) false + (> (length Arguments) Arity) false + true true))) + +(define partially-apply + F Arguments -> (let Arity (arity F) + Lambda (mk-lambda [(maplispsym F)] Arity) + (build-partial-application Lambda Arguments))) + +(define optimise-application + [hd X] -> (protect [CAR X]) + [tl X] -> (protect [CDR X]) + [cons X Y] -> (protect [CONS X Y]) + [append X Y] -> (protect [APPEND X Y]) + [reverse X] -> (protect [REVERSE X]) + [if P Q R] -> (protect [IF (wrap P) Q R]) + [+ 1 X] -> [1+ X] + [+ X 1] -> [1+ X] + [- X 1] -> [1- X] + [value [Quote X]] -> X where (= Quote (protect QUOTE)) + [set [Quote X] [1+ X]] -> [(protect INCF) X] where (= Quote (protect QUOTE)) + [set [Quote X] [1- X]] -> [(protect DECF) X] where (= Quote (protect QUOTE)) + X -> X) + +(define mk-lambda F 0 -> F - F N -> (let X (GENSYM "Y") - [lambda X (nest-lambda-help (add-p F X) (- N 1))])) - -(define add-p - [F | X] Y -> (append [F | X] [Y]) - F X -> [F X]) - + F N -> (let X (gensym (protect V)) + [lambda X (mk-lambda (append F [X]) (- N 1))])) + +(define build-partial-application + F [] -> F + F [Argument | Arguments] + -> (build-partial-application [(protect FUNCALL) F Argument] Arguments)) + (define cond_code Params [Test Result] -> [(lisp_test Params Test) (kl-to-lisp Params Result)]) (define lisp_test - _ true -> T - Params [and | Tests] -> [AND | (map (/. X (wrap (kl-to-lisp Params X))) Tests)] + _ true -> (protect T) + Params [and | Tests] + -> [(protect AND) | (map (/. X (wrap (kl-to-lisp Params X))) Tests)] Params Test -> (wrap (kl-to-lisp Params Test))) (define wrap - [cons? X] -> [CONSP X] - [string? X] -> [STRINGP X] - [number? X] -> [NUMBERP X] - [empty? X] -> [NULL X] - [and P Q] -> [AND (wrap P) (wrap Q)] - [or P Q] -> [OR (wrap P) (wrap Q)] - [not P] -> [NOT (wrap P)] - [equal? X []] -> [NULL X] - [equal? [] X] -> [NULL X] - [equal? X [Quote Y]] -> [EQ X [Quote Y]] - where (and (= (SYMBOLP Y) T) (= Quote QUOTE)) - [equal? [Quote Y] X] -> [EQ [Quote Y] X] - where (and (= (SYMBOLP Y) T) (= Quote QUOTE)) - [equal? [fail] X] -> [EQ [fail] X] - [equal? X [fail]] -> [EQ X [fail]] - [equal? S X] -> [EQUAL S X] where (string? S) - [equal? X S] -> [EQUAL X S] where (string? S) - [equal? X Y] -> [shen-ABSEQUAL X Y] - [shen-+string? [tlstr X]] -> [NOT [STRING-EQUAL [tlstr X] ""]] - [shen-pvar? X] -> [AND [ARRAYP X] [NOT [STRINGP X]] [EQ [AREF X 0] [QUOTE shen-pvar]]] - [tuple? X] -> [AND [ARRAYP X] [NOT [STRINGP X]] [EQ [AREF X 0] [QUOTE shen-tuple]]] + [cons? X] -> [(protect CONSP) X] + [string? X] -> [(protect STRINGP) X] + [number? X] -> [(protect NUMBERP) X] + [empty? X] -> [(protect NULL) X] + [and P Q] -> [(protect AND) (wrap P) (wrap Q)] + [or P Q] -> [(protect OR) (wrap P) (wrap Q)] + [not P] -> [(protect NOT) (wrap P)] + [equal? X []] -> [(protect NULL) X] + [equal? [] X] -> [(protect NULL) X] + [equal? X [Quote Y]] -> [(protect EQ) X [Quote Y]] + where (and (= ((protect SYMBOLP) Y) (protect T)) (= Quote (protect QUOTE))) + [equal? [Quote Y] X] -> [(protect EQ) [Quote Y] X] + where (and (= ((protect SYMBOLP) Y) (protect T)) (= Quote (protect QUOTE))) + [equal? [fail] X] -> [(protect EQ) [fail] X] + [equal? X [fail]] -> [(protect EQ) X [fail]] + [equal? S X] -> [(protect EQUAL) S X] where (string? S) + [equal? X S] -> [(protect EQUAL) X S] where (string? S) + [equal? X Y] -> [ABSEQUAL X Y] [greater? X Y] -> [> X Y] [greater-than-or-equal-to? X Y] -> [>= X Y] [less? X Y] -> [< X Y] @@ -104,30 +165,10 @@ X -> [wrapper X]) (define wrapper - true -> T + true -> (protect T) false -> [] X -> (error "boolean expected: not ~S~%" X)) - - (define assemble-application - hd [X] -> [CAR X] - tl [X] -> [CDR X] - cons [X Y] -> [CONS X Y] - append [X Y] -> [APPEND X Y] - reverse [X] -> [REVERSE X] - if [P Q R] -> [IF (wrap P) Q R] - \ do [X Y] -> [PROG2 X Y]\ - + [1 X] -> [1+ X] - + [X 1] -> [1+ X] - - [X 1] -> [1- X] - value [[Quote X]] -> X where (= Quote QUOTE) - set [[Quote X] [1+ X]] -> [INCF X] where (= Quote QUOTE) - set [[Quote X] [1- X]] -> [DECF X] where (= Quote QUOTE) - F X -> (let NewF (maplispsym F) - Arity (trap-error (arity F) (/. E -1)) - (if (or (= Arity (length X)) (= Arity -1)) - [NewF | X] - [funcall (nest-lambda F NewF) [LIST | X]]))) - + (define maplispsym = -> equal? > -> greater? @@ -139,57 +180,5 @@ / -> divide * -> multiply F -> F) - - (define factorh - [Defun F Params [Cond | Code]] -> [Defun F Params [BLOCK [] (process-tree (tree (map returns Code)))]] - where (and (= Cond COND) (= Defun DEFUN)) - Code -> Code) - -(define returns - [Test Result] -> [Test [RETURN Result]]) - -(define process-tree - (@p P Q R no-tag) -> [IF P (optimise-selectors P (process-tree Q)) (process-tree R)] - (@p P Q R Tag) -> [TAGBODY [IF P (optimise-selectors P (process-tree Q))] Tag (process-tree R)] - Q -> Q where (not (tuple? Q))) -(define optimise-selectors - Test Code -> (optimise-selectors-help (selectors-from Test) Code)) - -(define selectors-from - [Consp X] -> [[CAR X] [CDR X]] where (= Consp CONSP) - [tuple? X] -> [[fst X] [snd X]] - _ -> []) - -(define optimise-selectors-help - [] Code -> Code - [S1 S2] Code -> (let O1 (occurrences S1 Code) - O2 (occurrences S2 Code) - V1 (gensym V) - V2 (gensym V) - (if (and (> O1 1) (> O2 1)) - [LET [[V1 S1] [V2 S2]] - (subst V1 S1 (subst V2 S2 Code))] - (if (> O1 1) - [LET [[V1 S1]] (subst V1 S1 Code)] - (if (> O2 1) - [LET [[V2 S2]] (subst V2 S2 Code)] - Code))))) - -(define tree - [[[And P Q] R] | S] -> (let Tag (gensym tag) - Left (tree (append (branch-by P [[[And P Q] R] | S]) [[T [GO Tag]]])) - Right (tree (branch-by-not P [[[And P Q] R] | S])) - (@p P Left Right Tag)) where (= And AND) - [[True Q] | _] -> Q where (= True T) - [[P Q] | R] -> (@p P Q (tree R) no-tag)) - -(define branch-by - P [[[And P Q] R] | S] -> [[Q R] | (branch-by P S)] where (= And AND) - P [[P R] | S] -> [[T R]] - _ Code -> []) - -(define branch-by-not - P [[[And P Q] R] | S] -> (branch-by-not P S) where (= And AND) - P [[P R] | S] -> S - _ Code -> Code) \ No newline at end of file + ) \ No newline at end of file diff --git a/shen/src/declarations.shen b/shen/src/declarations.shen index 58cf299..49b0b32 100644 --- a/shen/src/declarations.shen +++ b/shen/src/declarations.shen @@ -85,7 +85,7 @@ (set *infs* 0) (set *hush* false) (set *optimise* false) -(set *version* "version 15") +(set *version* "version 16") (define initialise_arity_table [] -> [] @@ -101,14 +101,14 @@ cn 2 declare 2 destroy 1 difference 2 do 2 element? 2 empty? 1 enable-type-theory 1 interror 2 eval 1 eval-kl 1 explode 1 external 1 fail-if 2 fail 0 fix 2 findall 5 freeze 1 fst 1 gensym 1 get 3 get-time 1 address-> 3 <-address 2 <-vector 2 > 2 >= 2 = 2 hd 1 hdv 1 hdstr 1 head 1 if 3 integer? 1 - intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 kill 0 language 0 + intern 1 identical 4 inferences 0 input 1 input+ 2 implementation 0 intersection 2 it 0 kill 0 language 0 length 1 lineread 1 load 1 < 2 <= 2 vector 1 macroexpand 1 map 2 mapcan 2 maxinferences 1 not 1 nth 2 n->string 1 number? 1 occurs-check 1 occurrences 2 occurs-check 1 optimise 1 or 2 os 0 package 3 port 0 porters 0 pos 2 print 1 profile 1 profile-results 1 pr 2 ps 1 preclude 1 preclude-all-but 1 protect 1 address-> 3 put 4 reassemble 2 read-file-as-string 1 read-file 1 read 1 read-byte 1 read-from-string 1 release 0 remove 2 reverse 1 set 2 simple-error 1 snd 1 specialise 1 spy 1 step 1 stinput 0 stoutput 0 string->n 1 string->symbol 1 string? 1 strong-warning 1 subst 3 sum 1 symbol? 1 tail 1 tl 1 tc 1 tc? 0 - thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 1 return 3 undefmacro 1 unprofile 1 unify 4 unify! 4 + thaw 1 tlstr 1 track 1 trap-error 2 tuple? 1 type 2 return 3 undefmacro 1 unprofile 1 unify 4 unify! 4 union 2 untrack 1 unspecialise 1 undefmacro 1 vector 1 vector-> 3 value 1 variable? 1 version 0 warn 1 write-byte 2 write-to-file 2 y-or-n? 1 + 2 * 2 / 2 - 2 == 2 1 @p 2 @v 2 @s 2 preclude 1 include 1 preclude-all-but 1 include-all-but 1 where 2]) @@ -127,12 +127,12 @@ <- -> == = >= > /. =! $ - / * + <= < >> <> ==> y-or-n? write-to-file write-byte where when warn version verified variable? value vector-> <-vector vector vector? unspecialise untrack unit unix union unify unify! unprofile undefmacro return type tuple? true trap-error track time thaw tc? tc tl tlstr tlv tail systemf synonyms symbol symbol? string->symbol subst string? string->n stream string stinput - stoutput step spy specialise snd simple-error set save str run reverse remove release read read+ read-file + stoutput step spy specialise snd simple-error set save str run reverse remove release read read-file read-file-as-bytelist read-file-as-string read-byte read-from-string quit put preclude preclude-all-but ps prolog? protect profile-results profile print pr pos porters port package output out os or - open occurrences occurs-check n->string number? number null nth not nl mode macro macroexpand + optimise open occurrences occurs-check n->string number? number null nth not nl mode macro macroexpand maxinferences mapcan map make-string load loaded list lineread limit length let lazy lambda language kill is - intersection inferences intern integer? input input+ include include-all-but in implementation if identical head + intersection inferences intern integer? input input+ include include-all-but it in implementation if identical head hd hdv hdstr hash get get-time gensym function fst freeze fix file fail fail-if fwhen findall false enable-type-theory explode external exception eval-kl eval error-to-string error empty? element? do difference destroy defun define defmacro defcc defprolog declare datatype cut cn diff --git a/shen/src/macros.shen b/shen/src/macros.shen index eff2f56..975f9eb 100644 --- a/shen/src/macros.shen +++ b/shen/src/macros.shen @@ -130,22 +130,6 @@ (define intern-type F -> (intern (cn "type#" (str F)))) -"(defcc - := [define | ];) - -(defcc - ; - := (append [(protect X) -> (protect X)]);) - -(defcc - -> where ; - -> ; - <- where ; - <- ;) - -(defcc - := [[walk [function macroexpand] ]];)" - (define @s-macro [@s W X Y | Z] -> [@s W (@s-macro [@s X Y | Z])] [@s X Y] -> (let E (explode X) diff --git a/shen/src/prolog.shen b/shen/src/prolog.shen index b1131c5..15f821b 100644 --- a/shen/src/prolog.shen +++ b/shen/src/prolog.shen @@ -432,7 +432,7 @@ N -> (address-> (address-> (absvector 2) 0 pvar) 1 N)) (define pvar? - X -> (and (absvector? X) (= (<-address X 0) pvar))) + X -> (trap-error (and (absvector? X) (= (<-address X 0) pvar)) (/. E false))) (define bindv Var Val N -> (let Vector (<-address (value *prologvectors*) N) diff --git a/shen/src/reader.shen b/shen/src/reader.shen index 6c82cf6..2c67517 100644 --- a/shen/src/reader.shen +++ b/shen/src/reader.shen @@ -79,7 +79,7 @@ (define input+ Type Stream -> (let Mono? (monotype Type) Input (read Stream) - (if (= false (typecheck Input Type)) + (if (= false (typecheck Input (demodulate Type))) (error "type error: ~R is not of type ~R~%" Input Type) (eval-kl Input)))) @@ -89,12 +89,17 @@ (define read Stream -> (hd (read-loop Stream (read-byte Stream) []))) + +(define it + -> (value *it*)) (define read-loop + _ 94 Bytes -> (error "read aborted") _ -1 Bytes -> (if (empty? Bytes) (simple-error "error: empty stream") (compile (function ) Bytes (/. E E))) Stream Byte Bytes -> (let AllBytes (append Bytes [Byte]) + It (record-it AllBytes) Read (compile (function ) AllBytes (/. E nextbyte)) (if (or (= Read nextbyte) (empty? Read)) (read-loop Stream (read-byte Stream) AllBytes) @@ -113,11 +118,29 @@ (compile (function ) Bytes (/. E E))) Byte _ Stream -> (error "line read aborted") where (= Byte (hat)) Byte Bytes Stream -> (let Line (compile (function ) Bytes (/. E nextline)) - (if (or (= Line nextline) (empty? Line)) - (lineread-loop (read-byte Stream) (append Bytes [Byte]) Stream) - Line)) where (element? Byte [(newline) (carriage-return)]) + It (record-it Bytes) + (if (or (= Line nextline) (empty? Line)) + (lineread-loop (read-byte Stream) (append Bytes [Byte]) Stream) + Line)) where (element? Byte [(newline) (carriage-return)]) Byte Bytes Stream -> (lineread-loop (read-byte Stream) (append Bytes [Byte]) Stream)) +(define record-it + Bytes -> (let TrimLeft (trim-whitespace Bytes) + TrimRight (trim-whitespace (reverse TrimLeft)) + Trimmed (reverse TrimRight) + (record-it-h Trimmed))) + +(define trim-whitespace + [Byte | Bytes] -> (trim-whitespace Bytes) where (element? Byte [9 10 13 32]) + Bytes -> Bytes) + +(define record-it-h + Bytes -> (do (set *it* (cn-all (map (function n->string) Bytes))) Bytes)) + +(define cn-all + [] -> "" + [S | Ss] -> (cn S (cn-all Ss))) + (define read-file File -> (let Bytelist (read-file-as-bytelist File) (compile (function ) Bytelist (function read-error)))) diff --git a/shen/src/sequent.shen b/shen/src/sequent.shen index 2764b95..4088da2 100644 --- a/shen/src/sequent.shen +++ b/shen/src/sequent.shen @@ -147,8 +147,8 @@ (define remember-datatype [D | _] -> (do (set *datatypes* (adjoin D (value *datatypes*))) - (set *alldatatypes* (adjoin D (value *alldatatypes*))) - D)) + (set *alldatatypes* (adjoin D (value *alldatatypes*))) + D)) (define rules->horn-clauses _ [] -> [] @@ -261,8 +261,11 @@ (define synonyms-help [] -> (demodulation-function (value *tc*) (mapcan (function demod-rule) (value *synonyms*))) - [S1 S2 | S] -> (do (pushnew [S1 S2] *synonyms*) - (synonyms-help S)) + [S1 S2 | S] -> (let Vs (difference (extract_vars S2) (extract_vars S1)) + (if (empty? Vs) + (do (pushnew [S1 S2] *synonyms*) + (synonyms-help S)) + (free_variable_warnings S2 Vs))) _ -> (error "odd number of synonyms~%")) (define pushnew diff --git a/shen/src/sys.shen b/shen/src/sys.shen index 357ef18..590f8e7 100644 --- a/shen/src/sys.shen +++ b/shen/src/sys.shen @@ -374,7 +374,7 @@ (define subst X Y Y -> X - X Y [W | Z] -> [(subst X Y W) | (subst X Y Z)] + X Y Z -> (map (/. W (subst X Y W)) Z) where (cons? Z) _ _ Z -> Z) (define explode diff --git a/shen/src/t-star.shen b/shen/src/t-star.shen index 13a3c50..56d1319 100644 --- a/shen/src/t-star.shen +++ b/shen/src/t-star.shen @@ -125,16 +125,9 @@ (mode [type X A] -) B Hyp <-- ! (unify A B) (th* X A Hyp); (mode [input+ A Stream] -) B Hyp <-- (bind C (demodulate A)) (unify B C) (th* Stream [stream in] Hyp); (mode [set Var Val] -) A Hyp <-- ! (th* Var symbol Hyp) ! (th* [value Var] A Hyp) (th* Val A Hyp); - (mode [<-sem F] -) C Hyp <-- ! - (th* F [A ==> B] Hyp) - ! - (bind F&& (concat && F)) - ! - (th* F&& C [[F&& : B] | Hyp]); (mode [fail] -) symbol _ <--; X A Hyp <-- (t*-hyps Hyp NewHyp) (th* X A NewHyp); (mode [define F | X] -) A Hyp <-- ! (t*-def [define F | X] A Hyp); - (mode [defcc F | X] -) A Hyp <-- ! (t*-defcc [defcc F | X] A Hyp); (mode [defmacro | _] -) unit Hyp <-- !; (mode [process-datatype | _] -) symbol _ <--; (mode [synonyms-help | _] -) symbol _ <--; @@ -172,7 +165,7 @@ (define show-p [X : A] -> (output "~R : ~R" X A) P -> (output "~R" P)) - + \* Enumerate assumptions. *\ (define show-assumptions [] _ -> skip @@ -291,89 +284,6 @@ _ _ X A <-- (bind X (value A));) (defprolog remember - A Pattern <-- (is B (set A [Pattern | (value A)]));) - -(defprolog t*-defcc - (mode [defcc F { [list A] ==> B } | Rest] -) C Hyp - <-- (t*-defcc-h [defcc F (ue (demodulate [[list A] ==> B])) - | (ue (split_cc_rules false (plug-wildcards Rest) []))] - C - Hyp);) - -(define plug-wildcards - [X | Y] -> (map (function plug-wildcards) [X | Y]) - X -> (gensym (intern "X")) where (= X _) - X -> X) - -(defprolog t*-defcc-h - (mode [defcc F [[list A] ==> B] | Rules] -) C Hyp - <-- ! - (tc-rules F Rules [list A] B [[F : [[list A] ==> B]] | Hyp] 1) - (unify C [[list A] ==> B]) - (bind Declare (declare F [[list A] ==> B]));) - -(defprolog tc-rules - _ (mode [] -) _ _ _ _ <--; - F (mode [Rule | Rules] -) (mode [list A] -) B Hyps N - <-- (tc-rule F Rule A B Hyps N) - (is M (+ N 1)) - ! - (tc-rules F Rules [list A] B Hyps M);) - -(defprolog tc-rule - _ Rule A B Hyps _ <-- (check-defcc-rule Rule A B Hyps); - F _ _ _ _ N <-- (bind Err (error "type error in rule ~A of ~A" N F));) - -(defprolog check-defcc-rule - (mode [Syntax Semantics] -) A B Hyps <-- (syntax-hyps Syntax Hyps SynHyps A) - ! - (syntax-check Syntax A SynHyps) - ! - (semantics-check Semantics B SynHyps);) - -(defprolog syntax-hyps - (mode [] -) SynHyps SynHyps A <--; - (mode [X | Y] -) Hyps [[X : A] | SynHyps] A <-- (when (ue? X)) - ! - (syntax-hyps Y Hyps SynHyps A); - (mode [_ | Y] -) Hyps SynHyps A <-- (syntax-hyps Y Hyps SynHyps A);) - - -(defprolog syntax-check - (mode [] -) _ _ <--; - (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) - ! - (t* [X : [[list A] ==> C]] Hyps) - ! - (syntax-check Syntax A Hyps); - (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) - ! - (syntax-check Syntax A Hyps);) + A Pattern <-- (is B (set A [Pattern | (value A)]));) ) -(defprolog semantics-check - (mode [where P Q] -) B Hyps <-- ! - (t* [(curry P) : boolean] Hyps) - (t* [(curry Q) : B] Hyps); - Semantics B Hyps <-- (is Semantics* (curry (rename-semantics Semantics))) - (t* [Semantics* : B] Hyps);) - -(define rename-semantics - [X | Y] -> [(rename-semantics X) | (rename-semantics Y)] - X -> [<-sem X] where (grammar_symbol? X) - X -> X) - ) - -"(defprolog syntax-check - (mode [] -) _ _ <--; - (mode [X | Syntax] -) A Hyps <-- (fwhen (grammar_symbol? X)) - ! - (t* [X : [[list B] ==> C]] Hyps) - ! - (bind X&& (concat && X)) - ! - (t* [X&& : [list A]] [[X&& : [list B]] | Hyps]) - ! - (syntax-check Syntax A Hyps); - (mode [X | Syntax] -) A Hyps <-- (t* [X : A] Hyps) - ! - (syntax-check Syntax A Hyps);)" \ No newline at end of file + \ No newline at end of file diff --git a/shen/src/toplevel.shen b/shen/src/toplevel.shen index 54ba6b8..a13ecce 100644 --- a/shen/src/toplevel.shen +++ b/shen/src/toplevel.shen @@ -124,7 +124,7 @@ (define toplineread_loop Byte _ -> (error "line read aborted") where (= Byte (hat)) - Byte Bytes -> (let Line (compile (function ) Bytes (/. E nextline)) + Byte Bytes -> (let Line (compile (function ) (record-it Bytes) (/. E nextline)) (if (or (= Line nextline) (empty? Line)) (toplineread_loop (read-byte (stinput)) (append Bytes [Byte])) (@p Line Bytes))) diff --git a/shen/src/track.shen b/shen/src/track.shen index 7c5ee17..809b3db 100644 --- a/shen/src/track.shen +++ b/shen/src/track.shen @@ -72,7 +72,7 @@ (define track-function [defun F Params Body] -> (let KL [defun F Params (insert-tracking-code F Params Body)] - Ob (eval KL) + Ob (eval-kl KL) Tr (set *tracking* [Ob | (value *tracking*)]) Ob)) diff --git a/shen/src/types.shen b/shen/src/types.shen index 53563ba..2a43d7b 100644 --- a/shen/src/types.shen +++ b/shen/src/types.shen @@ -101,7 +101,7 @@ (declare cd [string --> string]) (declare close [[stream A] --> [list B]]) (declare cn [string --> [string --> string]]) -(declare compile [[[list A] ==> B] --> [[list A] --> [[[list A] --> B] --> B]]]) +(declare compile [[A ==> B] --> [A --> [[A --> B] --> B]]]) (declare cons? [A --> boolean]) (declare destroy [[A --> B] --> symbol]) (declare difference [[list A] --> [[list A] --> [list A]]]) @@ -128,6 +128,7 @@ (declare hdv [[vector A] --> A]) (declare hdstr [string --> string]) (declare if [boolean --> [A --> [A --> A]]]) +(declare it [--> string]) (declare implementation [--> string]) (declare include [[list symbol] --> [list symbol]]) (declare include-all-but [[list symbol] --> [list symbol]]) @@ -135,6 +136,7 @@ (declare insert [A --> [string --> string]]) (declare integer? [A --> boolean]) (declare intersection [[list A] --> [[list A] --> [list A]]]) +(declare kill [--> A]) (declare language [--> string]) (declare length [[list A] --> number]) (declare limit [[vector A] --> number]) @@ -216,7 +218,10 @@ (declare / [number --> [number --> number]]) (declare - [number --> [number --> number]]) (declare * [number --> [number --> number]]) -(declare == [A --> [B --> boolean]]) ) +(declare == [A --> [B --> boolean]]) +(declare in-> [[A ==> B] --> A]) +(declare <-out [[A ==> B] --> B]) +)