A Lazy K


Work in progress here.

Meanwhile,

	length l is if ~#l then 0 else 1+length 1 _ l;
	length 1 2 3
      3

	fac n is if n=0 then 1 else n*fac n-1
	fac 5
      120

The execution-tree:

   fac
({@}
 `Y
 ({@}
  ({@}
   ({@}
    `B_
    ({@}
     `S
     ({@}
      ({@}
       ({@};`C_;{?})
       ({@}
        ({@}
         `C
         ({@};{:};=))
        0))
      1)))
   ({@}
    `S
    ({@};{:};*)))
  ({@}
   ({@};`C;`B)
   ({@}
    ({@}
     `C
     ({@};{:};-))
    1))))

i.e.,

   disp fac
 +---------------¯---------------+
 ¦                               ¦
`Y                   +-----------¯-----------+
                     ¦                       ¦
         +-----------¯------------+      +---¯----+
         ¦                        ¦      ¦        ¦
    +----¯-----+                +-¯-+   +¯+     +-¯--+
    ¦          ¦                ¦   ¦   ¦ ¦     ¦    ¦
   `B_  +------¯-------+       `S  +¯+ `C `B  +-¯-+  1
        ¦              ¦           ¦ ¦        ¦   ¦
       `S         +----¯-----+    :: *       `C  +¯+
                  ¦          ¦                   ¦ ¦
             +----¯-----+    1                  :: -
             ¦          ¦
           +-¯-+      +-¯--+
           ¦   ¦      ¦    ¦
          `C_ cond  +-¯-+  0
                    ¦   ¦
                   `C  +¯+
                       ¦ ¦
                      :: =

The execution-trace:

 
                                      [] `Y(`B_(`S(`C_ cond(`C(=)0)1))(`S(*))(`C
                                      [] `C(=)0 5
                                      [] 5
                                       5 []
                                      [] 0
                                       0 []
                                       0 []
                                      [] 5
                                       5 []
                                      [] `C `B(`C(-)1)(`Y(`B_(`S(`C_ cond(`C(=)0
                                      [] `C(=)0(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 0
                                       0 []
                                       0 []
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] `C `B(`C(-)1)(`Y(`B_(`S(`C_ cond(`C(=)0
                                      [] `C(=)0(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 0
                                       0 []
                                       0 []
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] `C `B(`C(-)1)(`Y(`B_(`S(`C_ cond(`C(=)0
                                      [] `C(=)0(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 1
                                       1 []
                                       2 []
                                      [] 0
                                       0 []
                                       0 []
                                      [] `C(-)1(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 1
                                       1 []
                                       2 []
                                      [] `C `B(`C(-)1)(`Y(`B_(`S(`C_ cond(`C(=)0
                                      [] `C(=)0(`C(-)1(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 1
                                       1 []
                                       2 []
                                      [] 1
                                       1 []
                                       1 []
                                      [] 0
                                       0 []
                                       0 []
                                      [] `C(-)1(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 1
                                       1 []
                                       2 []
                                      [] 1
                                       1 []
                                       1 []
                                      [] `C `B(`C(-)1)(`Y(`B_(`S(`C_ cond(`C(=)0
                                      [] `C(=)0(`C(-)1(`C(-)1(`C(-)1(`C(-)1(`C(-
                                      [] `C(-)1(`C(-)1(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1(`C(-)1 5)))
                                      [] `C(-)1(`C(-)1(`C(-)1 5))
                                      [] `C(-)1(`C(-)1 5)
                                      [] `C(-)1 5
                                      [] 5
                                       5 []
                                      [] 1
                                       1 []
                                       4 []
                                      [] 1
                                       1 []
                                       3 []
                                      [] 1
                                       1 []
                                       2 []
                                      [] 1
                                       1 []
                                       1 []
                                      [] 1
                                       1 []
                                       0 []
                                      [] 0
                                       0 []
                                       1 []
                                       1 []
                                       1 []
                                       2 []
                                       6 []
                                      24 []
                                     120 []
120