例如,输入(4
是最大长度):
(my-partition-randomly '(a b c d e f g h i j k l) 4)
输出:
'((a b c) (d) (e f g h) (i j k) (l))
该代码应在Emacs Lisp解释器中运行。
答案 0 :(得分:2)
我的elisp-fu很弱,但是我能够编写以下函数:
(defun my-partition-randomly (list max-length) ""
(let ((result '()))
(while list
(push (seq-take-while (lambda (x) x)
(map 'list
(lambda (x) (pop list))
(number-sequence 1 (+ 1 (random max-length)))))
result))
(reverse result)))
它提取输入列表的随机初始序列并将其添加到结果中(当最后一个子序列要比其余列表长时,seq-take-while
不必包含nil
)。 push
在左侧添加了元素,因此结果必须颠倒。