首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Ocaml中的数组操作

Ocaml中的数组操作
EN

Stack Overflow用户
提问于 2016-11-11 06:24:12
回答 2查看 804关注 0票数 2

我试图在Ocaml中完成数组的所有组合。我正在尝试执行一个递归函数,它接收一个数组,它的初始状态需要是let a = [|0;0;0|],我需要递归地更改它,就像在第一次迭代中,需要是a = [|1;0;0|],下一个a = [|0;1;0|]等等,直到它到达a = [|1;1;1|],完成所有可能的组合,所以在本例中需要做2^3的更改。我知道我不是很明确,但我有点难以解释,但如果有人能帮助我,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-11 11:31:21

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let combinaison f n =
  let rec aux acc n =  
    if n=0 then List.iter f acc
    else (
      aux (List.map (fun l -> 0::l  ) acc) (n-1);  
      aux (List.map (fun l -> 1::l  ) acc) (n-1);  
    )
  in
  aux [[]] n
;; 

测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
combinaison ( fun lx -> 
  let a=Array.of_list lx in
  Array.iter ( fun x ->
    Printf.printf "%d " x
  ) a ;
  Printf.printf "\n"
) 3;;

0 0 0 
1 0 0 
0 1 0 
1 1 0 
0 0 1 
1 0 1 
0 1 1 
1 1 1 
票数 0
EN

Stack Overflow用户

发布于 2016-11-11 07:49:50

数组是一个可变的数据结构,所以如果您要在每个递归调用中对它进行变异,那么就会进行突变。基本上,这意味着,在2^3调用之后,数组的状态将是最后的组合。所以,这样做是没有意义的。一个有效的解决方案是创建一个函数,该函数将接受一个初始数组,并返回所有组合的列表。一个更有效的解决方案是编写一个函数,该函数将接受另一个函数,并将其应用于所有组合(或折叠所有组合)。这将允许您节省内存,因为您不需要存储所有的组合。

大纲将实现以下接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type state
val zero : state
val next : state -> state option
val value : state -> int array

其中状态将是一个游标,它将在组合空间中移动。它可以是整数数组,也可以是整数数组,也可以是任何其他数组。一旦实现了这些功能,您就可以轻松地实现以下功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let fold_combinations f init = 
  let rec fold state x = 
     let x = f (value state) x in
     match next state with
     | None -> x
     | Some state -> fold state x in
  fold zero init

最后,您的示例显示的不是所有可能的组合或排列,而是所有可能的位宽二进制值,等于输入数组的长度。如果这确实是您要解决的任务,那么您只需将一个整数转换为二进制表示即可。在这种情况下,state最好的选择是int,然后next函数是一个增量,它将停止在2^k-1,其中k是初始状态的长度。value函数只将一个整数转换为位数组,其中n-th位(元素)可以被确定为state land (1 lsl n)。您可以每次使用Array.init来创建一个新的数组,或者,只需在现有数组上迭代即可。这将更有效率,但容易出错。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40550000

复制
相关文章
format python保留小数点后几位_python四舍五入保留两位小数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169805.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
1.2K0
format python保留小数点后几位_python四舍五入保留两位小数
java 四舍五入保留小数的几种方式
(new BigDecimal()).setScale()方法用于格式化小数点,有多种小数保留模式,如下:
全栈程序员站长
2022/08/31
2.4K0
【Java】Java四舍五入保留1位小数、2位小数…
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143140.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/25
2.8K0
java四舍五入保留小数「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139172.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
3780
java float四舍五入保留两位小数,java四舍五入float保留两位小数
摘要 腾兴网为您分享:java四舍五入float保留两位小数,远离手机,相机美颜,未来屋,微视等软件知识,以及流光,证券从业随身学,老a工具箱,polarr,特斯拉app,ae插件合集,福奈特,app名称,哈士奇表情,电视台直播源,思兔,门海,电子台账软件,3c电池,smartflashrecovery等软件it资讯,欢迎关注腾兴网。四舍五入我们大家都知道是什么但在java中四舍五入函数是什么如何实现float保留指定位数?具体我们来看小编整理的一些例子。 例子1 float f = 34.237323f; BigDecimal b = new BigDecimal(f); float f…
全栈程序员站长
2022/08/31
8330
MySQL对小数进行四舍五入等操作
FLOOR(X) 返回不大于X的最大整数。 CEIL(X)、CEILING(X) 返回不小于X的最小整数。
翎野君
2023/08/25
5480
java四舍五入(保留两位小数)[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145899.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/29
5950
java四舍五入取整算法(小数四舍五入取整公式)
static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储)。
全栈程序员站长
2022/07/31
2.2K0
java四舍五入取整算法(小数四舍五入取整公式)
Java四舍五入保留两位小数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143295.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
1.1K1
sql 四舍五入 保留两位小数
数据库里的 float momey 类型,都会精确到多位小数。但有时候 我们不需要那么精确,例如,只精确到两位有效数字。
全栈程序员站长
2022/09/06
5.3K0
js保留两位小数四舍五入_parsefloat保留两位小数
如果大家想对javascript有系统深入的学习,可以参阅 JavaScript启示录 PDF原书完整版 这本经典书籍
全栈程序员站长
2022/09/23
5.1K0
bigdecimal保留最多小数位_bigdecimal四舍五入保留两位小数
参考:https://www.cnblogs.com/jpfss/p/8072379.html
全栈程序员站长
2022/11/09
9030
Python3 四舍五入问题详解
“就本质来说,浮点算术是不精确的,而且程序员们很容易滥用它,从而使计算的结果几乎全部由噪声组成”
用户9077582
2021/10/11
3.5K0
Java四舍五入保留小数点后几位
银行家算法: 四舍:舍弃的数值:0.000、0.001、0.002、0.003、0.004,因为是舍弃的,对银行家来说,就不用付款给储户了,那每舍弃一个数字就会赚取相应的金额:0.000、0.001、0.002、0.003、0.004。 五入:进位的数值:0.005、0.006、0.007、0.008、0.009,因为是进位,对银行家来说,每进一位就会多付款给储户,也就是亏损了,那亏损部分就是其对应的10进制补数:0.005、0.004、0.003、0.002、0.001。 因为舍弃和进位的数字是在0到9之间均匀分布的,所以对于银行家来说,每10笔存款的利息因采用四舍五入而获得的盈利是:
全栈程序员站长
2022/08/31
1.4K0
Java四舍五入保留小数点后几位
php 保留两位小数,不四舍五入
高久峰
2023/06/03
1.7K0
java保留两位小数不四舍五入_java截取两位小数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
1.3K0
JAVA保留两位小数(四舍五入)「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.7K0
JAVA保留两位小数(四舍五入)「建议收藏」
Java之float取2位小数,末位四舍五入
JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数. 以前以为很容易,一直没在意,今天突然用到了,才发现,系统没有这样的函数.狂晕,同事们用的方法为,先转成String,再取其中几位,再转成float型,(如:String.valueOf(c).substring(0,String.valueOf(c).indexOf(".") + 3)):
IT工作者
2022/03/30
2K0
恶心的0.5四舍五入问题
四舍五入是财务类应用中常见的需求,按中国人的财务习惯,遇到0.5统一向上进位,但是c#与java中默认的却不是这样。 见c#代码: 1 static void Main(string[] args) 2 { 3 Decimal d = 301353.05M; 4 Console.WriteLine(d);//301353.05 5 Console.WriteLine(Math.Round(d, 1));/
菩提树下的杨过
2018/01/19
1.3K0
Python保留小数的方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169776.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
2.6K0

相似问题

python小数四舍五入问题

114

Python大小数四舍五入问题

19

小数四舍五入的问题

12

MySQL小数四舍五入问题

20

KendoNumericTextBox小数四舍五入问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文