Maxima:随机排列列表中元素的顺序?

问题描述

问题

给定一个列表 L:[a,b,c,d,e,f] 是否有一种内置的方式随机排列列表的元素?类似于:

M:random_order(L);
    > [ b,a,f]

我查看了 Functions and Variables for Lists 的文档,了解用于调整列表中元素顺序的任何内置选项,但没有看到任何明显的内容


上下文

我正在尝试生成最大和为 xs 项列表。现在,我通过创建一个列表来执行此操作,其中每个项都是 1 和最大值之间的随机数,以确保如果剩余项的最小值为 1,则总和最多为 { {1}}:

s

但是,这会生成列表,其中较早的术语( 较低的索引)具有较高值的​​可能性较高;而我想要更均匀的值分布。

我能想到的最简单的解决方案就是将 /* `x` is the total number of terms; `s` is the max sum */ gen_val(x,s):=block([x:x,s:s,vals:makelist(nul,i,x) ],/* the first value is a random integer in [1,(s-x)],if vals[1] = (s-x),then all remaining terms have to be equal to 1 */ vals[1]: 1 + random(s-x),/* subsequent terms are assigned in the same way,subtracting the sum of prevIoUsly assigned values,as well as reserving at least 1 unit for each remaining term */ for i:2 thru x do vals[i]:1 + random(s-sum(vals[k],k,1,i-1)-(x-i+1)),/* return the list */ vals ); 列表的元素打乱;但是,我对任何其他实现此预期结果的方法同样感兴趣(vals 项的列表,其总和最多为 x)。

更广泛的上下文是将数轴的区间划分为子区间的问题。我决定将间隔的长度和分区的数量作为构建子间隔的变量,因此达到了上述目标。如果 s 是完整区间,那么对于任何 I = [a,b],c 使得 d 我们可以定义子区间 c+d =< b-a,[a,a+c],{ {1}}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...