内容简介:翻译自:https://stackoverflow.com/questions/17101329/f-sequence-comparison
我已经实现了如下的Fibonacci序列生成器
let getNext upperLimit current=
let (e1, e2) = current
let next = e1 + e2
if next > upperLimit then None
else Some (next, (e2,next))
let fib upperLimit = (0,1) |> Seq.unfold (getNext upperLimit) |> Seq.append [0;1]
我的测试代码是
[<Test>]
member Spec.``fib not exeeding 20 should be 0,1,1,2,3,5,8,13``()=
let expected = seq [0;1;1;2;3;5;8;13]
let result = fib 20
let expectedSameAsResult = (expected = result)
printfn "Expected: %A Result: %A result length: %d" expected result (Seq.length result)
Assert.That expectedSameAsResult
测试失败,打印结果为
预期:[0; 1; 1; 2; 3; 5; 8; 13]结果:seq [0; 1; 1; 2; …]结果长度:8
当我使用for循环打印结果中的每个元素时,我在预期的序列中得到了完全相同的元素.
那么,预期序列和结果序列之间有什么区别?
编辑:我的实现可以在 https://github.com/weima/EulerProblems/tree/master/EulerProblems 找到
编辑:回答John Palmer的回答
我刚刚在F#交互式窗口中编写了一个测试
let a = seq[1;2;3] let b = seq[1;2;3] let c = a = b;;
我得到的结果是
val a:seq = [1; 2; 3]
val b:seq = [1; 2; 3]
val c:bool = true
所以F#也可以对序列进行结构比较.
编辑以反映Gene Belitski的答案
我已将测试更改为
[<Test>]
member Spec.``fib not exeeding 20 should be 0,1,1,2,3,5,8,13``()=
let expected = seq [0;1;1;2;3;5;8;13]
let result = Problem2.fib 20
let comparedResult = Seq.compareWith (fun a b -> a - b) expected result
let expectedSameAsResult = (comparedResult = 0)
Assert.That expectedSameAsResult
它现在起作用了.谢谢!但我仍然不明白为什么一个简单的seq [1; 2; 3] = seq [1; 2; 3]有效,但我的测试用例没有.
虽然你可能期望a = b会比较序列的元素,但实际上a = b会计算参考相等性.
你可以用类似的东西看到这个
seq {1..3} = seq {1..3}
返回false.
但是,在某些情况下,当您使用常量时,您会得到令人困惑的结果
seq [1;2;3] = seq [1;2;3]
返回true,这很令人困惑.
要避免此问题,您需要执行类似的操作
let test a b = Seq.fold (&&) true (Seq.zip a b |> Seq.map (fun (aa,bb) -> aa=bb))
比较元素.
或者,您可以使用Gene的答案中概述的Seq.compareWith.然而,这要求元素也实现比较运算符以及相等性,对于诸如实现=但不进行比较的区分联合的某些事情可能不是这种情况.
翻译自:https://stackoverflow.com/questions/17101329/f-sequence-comparison
以上所述就是小编给大家介绍的《F#序列比较》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【剖析 | SOFARPC 框架】系列之 SOFARPC 序列化比较
- React与Vue模板使用比较(一、vue模板与React JSX比较)
- 从全方位为你比较3种数据科学工具的比较:Python、R和SAS(附链接)
- (翻译)前端构建工具的比较
- 0615 - 没有比较,就没有伤害
- 精读《如何比较 Object 对象》
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Kubernetes权威指南
龚正、吴治辉、王伟、崔秀龙、闫健勇、崔晓宁、刘晓红 / 电子工业出版社 / 2016-10 / 99
Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版)》从一个开发者的角度去理解、分析和解决问题,囊括了Kubernetes入门、核心原理、实践指南、开发指导、高级案例、运维指南及源码分析等方面的内容,图文并茂、内容丰富、由浅入......一起来看看 《Kubernetes权威指南》 这本书的介绍吧!