diff options
Diffstat (limited to 'util.tl')
-rw-r--r-- | util.tl | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -0,0 +1,23 @@ +(defun move-impl (items keys ins-pos) + (let ((key-items (mapcar (op find @1 items) keys)) + (rm-items [set-diff items keys equal])) + (append [rm-items 0..ins-pos] + key-items + [rm-items ins-pos..:]))) + +(defun minpos (items keys) + [reduce-left min (mapcar (op posqual @1 items) keys) (length items)]) + +(defun move-up (items keys) + (move-impl items keys + (max 0 (pred (minpos items keys))))) + +(defun move-down (items keys) + (move-impl items keys + (succ (minpos items keys)))) + +(defun move-front (items keys) + (move-impl items keys 0)) + +(defun move-tail (items keys) + (move-impl items keys (length items))) |