我正在阅读由Chris编写的纯功能数据结构。
在第六章中,这本书向我们介绍了懒惰评估,我比较了这两种版本。
(*
https://github.com/mmottl/pure-fun/blob/master/chp5.ml#L47
*)
module BatchedQueue : QUEUE = struct
type 'a queue = 'a list * 'a list
let empty = [], []
let is_empty (f, _) = f = []
let checkf (f, r as q) = if f = [] then
我用的是Python里的Gurobi。我在一组节点上进行迭代,每次迭代时,我都要添加一个要解决的约束。求解后,它生成Gurobi日志如下:
Optimize a model with 6 rows, 36 columns and 41 nonzeros
Variable types: 0 continuous, 36 integer (36 binary)
Coefficient statistics:
Matrix range [1e+00, 1e+00]
Objective range [2e+01, 9e+01]
Bounds range [1e+00, 1
当我学习迅速的时候,我发现懒散的概念有点混乱。
Lazy属性在类实例需要或访问它时初始化。
class Employee
{
var name : String
lazy var salary = Salary(Basic : 25000 ,HRA : 3000 , DA : 4000)
lazy var minExperience = 0
init(nameValue :String)
{
name = nameValue
我正在尝试低头处理固定点和递归定义。
这是可行的:
>>> take 10 $ let x = (0:x) in x
[0,0,0,0,0,0,0,0,0,0]
这做了同样的事情,考虑到fix的定义,这是有意义的
>>> take 10 $ fix (\x -> (0:x))
[0,0,0,0,0,0,0,0,0,0]
现在假设我开始处理递归定义的对:
>>> take 10 $ fst $ let (u,v) = (0:v,1:u) in (u,v)
[0,1,0,1,0,1,0,1,0,1]
好的,我应该也能用fix写出来,对吧?
我读过一篇文章,声称foldl可能很容易发生堆栈溢出。发布示例代码为:
maximum [1..1000000]
代码不会在我的机器上溢出。但是,它可能会因环境而异。我像这样增加了数字:
maximum [1..1000000000]
它导致了硬盘交换,所以我不得不停止评估。示例代码并不重要。堆栈溢出真的发生了吗?或者仅仅是一个过去的故事?