PefungeでGを使わずに階乗を書いてみる

なんかλ計算みたいになってきた…

   &\v
   v$|&&4:!
            ;; [G] G=(stdio, print_int, fact, 4)

     ==============================================
               print_int n r
     ==============================================
  v|>&\:?v          ;; [G', G, stdio, print_int, fact, 4]
       !:|$$:?v     ;; [G', G, stdio, print_int, n r]
    ^   $\$$$$|\:_v$\$"0"\2!   ;; [G', G, stdio, "0", r, 2]!
                  >6v         ;; [G', G, stdio, print_int, r, n, 6]
                  !:|$$$$$$::?v    ;; [G', G', <G'>]  G'=(G, stdio, print_int, r, n, 6)
                            !:|$$$$\$\:?v      ;; [G', stdio, G', <G'>]
                            v?:\$\$\$\$$|:!    ;; [G', stdio, r, G', <G'>]
                          !:|$$$\$\$\:?v       ;; [G', stdio, r, print_int, G', <G'>]
                          v&$\$\$\$\$\$|:!   ;; [G', stdio, r, print_int, n, r']
              !2\!#_:/*25\|?52*%"0"+\$\2!

     ==============================================
               fact n r
     ==============================================
 v|>&\:?v           ;; [G', G, stdio, print_int, fact, 4]
      !:|$\$\$:?v   ;; [G', G, fact, n, r]
   ^       $\$$$|\:_v$11!  ;; [G', G, fact, r, 1, 1]!
                    5
                  !:|$$$$$::?v    ;; [G', G', <G'>] G'=(G, fact, r, n, 5)
                   v?:\$\$\$$|:!  ;; [G', r, <G'>]
                 !:|$$$\$\:?v     ;; [G', r, fact, <G'>]
             v&\-1:$\$\$\$\$|:!   ;; [G', r, fact, n-1, n, r']
         !2$\|?*\$\$1!
 
     ==============================================
               print (fact ?)
     ==============================================

    >:! 
 >:?|   >2!
    >$5&|      >2!
        >?\$\$&|
               >?$$01-&2!