JOY - compiled at 14:53:58 on Mar 14 2003 (NOBDW) Copyright 2001 by Manfred von Thun usrlib is loaded inilib is loaded numlib is loaded agglib is loaded seqlib is loaded agglib is loaded DEFINE P0 == []; # empty code P1 == [2 3 + dup *]; # non-empty code P2 == [[1 2 3] [dup *] map]; # nest data & code P3 == [ [[1 2][3 4][5] []] [[dup *] map] map ]. # double nesting DEFINE c == concat; j2f-f == [ list ] [ [[[]] concat] dip [j2f-f] step [[] cons c] concat ] [ [] cons [c] cons concat ] ifte; j2f-forwards == [[]] swap [j2f-f] step. P0 . [] P0 j2f-forwards . [[]] P0 j2f-forwards i . [] P1 . [2 3 + dup *] P1 j2f-forwards . [[] [2] c [3] c [+] c [dup] c [*] c] P1 j2f-forwards i . [2 3 + dup *] P1 j2f-forwards i i . 25 P2 . [[1 2 3] [dup *] map] P2 j2f-forwards . [[] [] [1] c [2] c [3] c [] cons c [] [dup] c [*] c [] cons c [map] c] P2 j2f-forwards i . [[1 2 3] [dup *] map] P2 j2f-forwards i i . [1 4 9] P3 . [[[1 2] [3 4] [5] []] [[dup *] map] map] P3 j2f-forwards . [[] [] [] [1] c [2] c [] cons c [] [3] c [4] c [] cons c [] [5] c [] cons c [] [] cons c [] cons c [] [] [dup] c [*] c [] cons c [map] c [] cons c [map] c] P3 j2f-forwards i . [[[1 2] [3 4] [5] []] [[dup *] map] map] P3 j2f-forwards i i . [[1 4] [9 16] [25] []] DEFINE s == swoncat; j2f-r == [ list ] [ [[swons] swoncat] dip [j2f-r] step [] swons ] [ [] cons [s] cons swoncat ] ifte; j2f-reverse == [] swap [j2f-r] step [] swons. P0 . [] P0 j2f-reverse . [[]] P0 j2f-reverse i . [] P1 . [2 3 + dup *] P1 j2f-reverse . [[] [*] s [dup] s [+] s [3] s [2] s] P1 j2f-reverse i . [2 3 + dup *] P1 j2f-reverse i i . 25 P2 . [[1 2 3] [dup *] map] P2 j2f-reverse . [[] [map] s [] [*] s [dup] s swons [] [3] s [2] s [1] s swons] P2 j2f-reverse i . [[1 2 3] [dup *] map] P2 j2f-reverse i i . [1 4 9] P3 . [[[1 2] [3 4] [5] []] [[dup *] map] map] P3 j2f-reverse . [[] [map] s [] [map] s [] [*] s [dup] s swons swons [] [] swons [] [5] s swons [] [4] s [3] s swons [] [2] s [1] s swons swons] P3 j2f-reverse i . [[[1 2] [3 4] [5] []] [[dup *] map] map] P3 j2f-reverse i i . [[1 4] [9 16] [25] []] # Double flattening - an exercise in Joy obfuscation: P3 j2f-forwards j2f-reverse . [[] [c] s [] [map] s swons [c] s [cons] s [] swons [c] s [] [map] s swons [c] s [cons] s [] swons [c] s [] [*] s swons [c] s [] [dup] s swons [] swons [] swons [c] s [cons] s [] swons [c] s [cons] s [] swons [] swons [c] s [cons] s [] swons [c] s [] [5] s swons [] swons [c] s [cons] s [] swons [c] s [] [4] s swons [c] s [] [3] s swons [] swons [c] s [cons] s [] swons [c] s [] [2] s swons [c] s [] [1] s swons [] swons [] swons [] swons] # partial de-obfuscation - by Joy itself: P3 j2f-forwards j2f-reverse i . [[] [] [] [1] c [2] c [] cons c [] [3] c [4] c [] cons c [] [5] c [] cons c [] [] cons c [] cons c [] [] [dup] c [*] c [] cons c [map] c [] cons c [map] c] # full de-obfuscation - again by Joy: P3 j2f-forwards j2f-reverse i i . gc - 191 nodes inspected, 126 nodes copied, clock: 1 [[[1 2] [3 4] [5] []] [[dup *] map] map] # final run of de-obfuscated original: P3 j2f-forwards j2f-reverse i i i . [[1 4] [9 16] [25] []] ÿ (* END usrlib.joy *)