4 <ENTRY LSHUFFLE LSORT LREVERSE>
7 "OPTIONAL" (N <FIX <+ 1 </ <LOG <LENGTH .LST>> <LOG 2>>>>)
8 "AUX" (A (())) (B (())) (AP .A) (BP .B) (TMP ()))
9 #DECL ((LST A B AP BP TMP VALUE) LIST (N) FIX)
11 <COND (<L? <SET N <- .N 1>> 0> <RETURN .LST>)>
14 <PUTREST .AP <REST .B>>
24 <CHTYPE <XORB <CHTYPE <TIME> FIX> <RANDOM>> FIX> 2>>
25 <SET AP <REST <PUTREST .AP .LST>>>)
26 (<SET BP <REST <PUTREST .BP .LST>>>)>
30 "OPTIONAL" (CMPRSN <>) (ELIM-DUP <>)
31 "AUX" (M ()) (B ()) (TMP ()) (IT ()) (N 0))
32 #DECL ((L M B TMP IT VALUE) LIST (N) FIX (CMPRSN) <OR FALSE APPLICABLE>)
34 <COND (<L? <SET N <LENGTH .L>> 2> <RETURN .L>)>
35 <SET B <REST <SET TMP <REST .L <- </ .N 2> 1>>>>>
37 <SET L <LSORT .L .CMPRSN .ELIM-DUP>>
38 <SET B <LSORT .B .CMPRSN .ELIM-DUP>>
42 <COND (<EMPTY? .TMP> <RETURN .B>)
43 (T <PUTREST .TMP .B> <RETURN .M>)>)
45 <COND (<EMPTY? .TMP> <RETURN .L>)
46 (T <PUTREST .TMP .L> <RETURN .M>)>)
47 (<AND .ELIM-DUP <=? <1 .L> <1 .B>>>
51 <APPLY .CMPRSN <1 .L> <1 .B>>)
52 (T <L? <STRCOMP <1 .L> <1 .B>> 0>)>
53 <SET L <REST <SET IT .L>>>)
54 (T <SET B <REST <SET IT .B>>>)>
56 <COND (<EMPTY? .M> <SET M <SET TMP .IT>>)
57 (T <SET TMP <REST <PUTREST .TMP .IT>>>)>)>>>>
60 <DEFINE LREVERSE (LST "AUX" (VAL ()) TMP)
61 #DECL ((LST VAL TMP VALUE) LIST)
63 <COND (<EMPTY? .LST> <RETURN .VAL>)>
65 <SET VAL <PUTREST .LST .VAL>>