? main6
ModularInterpreter
author: Luc Duponcheel
all comments are welcome (luc@cs.ruu.nl)

6> LETV fac = \V x -> IF (x==0) THEN 1 ELSE (x*fac@(fac arg@(x-1))) IN (fac 10)
   after parse:
   LETV fac = \V x -> IF (x==0) THEN 1 ELSE (x*fac@(fac arg@(x-1))) IN (fac 10)
   after inter:
   [
    enter fac
     enter arg
     leave arg with 9
     enter fac
      enter arg
      leave arg with 8
      enter fac
       enter arg
       leave arg with 7
       enter fac
        enter arg
        leave arg with 6
        enter fac
         enter arg
         leave arg with 5
         enter fac
          enter arg
          leave arg with 4
          enter fac
           enter arg
           leave arg with 3
           enter fac
            enter arg
            leave arg with 2
            enter fac
             enter arg
             leave arg with 1
             enter fac
              enter arg
              leave arg with 0
             leave fac with 1
            leave fac with 1
           leave fac with 2
          leave fac with 6
         leave fac with 24
        leave fac with 120
       leave fac with 720
      leave fac with 5040
     leave fac with 40320
    leave fac with 362880
    --> result 3628800
   ]
6> LETV fac = \V x -> IF (x==0) THEN 1 ELSE (x*fac@(fac (x-1))) IN (fac [2,3,4])
   after parse:
   LETV fac = \V x -> IF (x==0) THEN 1 ELSE (x*fac@(fac (x-1))) IN (fac [2,3,4])
   after interpret:
   [
    enter fac : 0
      enter fac : 1
      leave fac : 1
    leave fac : 0
    --> result 2
   ,
    enter fac : 0
      enter fac : 1
        enter fac : 2
        leave fac : 2
      leave fac : 1
    leave fac : 0
    --> result 6
   ,
    enter fac : 0
      enter fac : 1
        enter fac : 2
          enter fac : 3
          leave fac : 3
        leave fac : 2
      leave fac : 1
    leave fac : 0
    --> result 24
   ]
6> 








