标签: lazy-evaluation

在C#中计算值数组(从Excel转换公式)

我目前正在构建一个半复杂的计算器,它基本上是我提供的Excel电子表格的转换.

我已经把大部分内容钉在了但是在Excel电子表格中有一个部分,其中在6行和7列之间进行了多次计算,但问题在于计算没有按照特定的顺序发生.

因此,例如,Row0[Column1]使用计算,并使用(Row2[Column4] * Row2[Column5])Row1[Column4]计算(Row4[Column2] / Row5[Column1])..你得到了想法.

我曾考虑使用2D数组,但我担心这些值会按特定顺序计算,因此在达到它们时没有任何价值.据我所知,ROW1将首先计算,然后行2,ROW3,等等.

因此,如果没有为我的Excel电子表格中的每个单元格创建变量(并对其进行适当排序),有没有办法可以使用C#计算出来?

我真的很感激任何帮助,建议,指针,无论你认为什么都可能 - 我很乐意听到它!

编辑实现@dtb提供的Lazy类之后,我得到了以下代码.它是我提供的Excel电子表格中的内容的直接副本,包括指针和计算.

var sr = new Lazy<decimal>[6, 6];
sr[0, 0] = new Lazy<decimal>(() => sr[1, 0].Value - eNumber);
sr[0, 3] = new Lazy<decimal>(() => sr[0, 4].Value - sr[1, 0].Value - sr[1, 4].Value);
sr[0, 4] = new Lazy<decimal>(() => sr[0, 0].Value * edD);
sr[0, 5] = new Lazy<decimal>(() => sr[0, 0].Value); …
Run Code Online (Sandbox Code Playgroud)

c# excel calculated-columns lazy-evaluation multidimensional-array

1
推荐指数
1
解决办法
1788
查看次数

Haskell - 如何在尾递归函数中更新参数时绕过延迟求值

这是一个Haskell函数,它接受一个数字n并返回第n个斐波纳契数.(我使用了索引方案,使得第0个数字为0,第1个数字为1,第2个数字为1,第3个数字为2,依此类推.)

fib :: (Integral a) => a -> a
fib 0 = 0
fib n = fibhelper n 0 1

fibhelper :: (Integral a) => a -> a -> a -> a
fibhelper 1 x y = y
fibhelper n x y = fibhelper (n-1) y (x+y)
Run Code Online (Sandbox Code Playgroud)

现在,假设为了效率,我想绕过Haskell的懒惰评估并强制评估更新的参数(例如使用$!运算符?)最优雅/惯用的方法是什么?

haskell tail-recursion pattern-matching fibonacci lazy-evaluation

1
推荐指数
1
解决办法
358
查看次数

如何避免评估所有'iif'表达式?

是VB.NET 2005,有没有办法在没有抛出invalid cast exception尝试将空字符串转换为整数的情况下执行以下操作?

Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
Run Code Online (Sandbox Code Playgroud)

.net vb.net casting lazy-evaluation iif

1
推荐指数
1
解决办法
1259
查看次数

懒惰评估和严格评估Haskell

我理解懒惰评估是什么,它是如何工作的以及它具有的优势,但是你能解释一下Haskell的严格评估是什么吗?我似乎无法找到关于它的更多信息,因为懒惰评估是最知名的.

他们每个人的好处是什么.什么时候严格评估实际使用?

evaluation haskell strict lazy-evaluation

1
推荐指数
1
解决办法
444
查看次数

如何使f#查询表达式可重用?

我试图习惯f#查询表达式.

首先,他们绝对渴望,因为:

let arr = [1; 2; 3]
let q = query { for item in arr do select item; count };;

val arr : int list = [1; 2; 3]
val q : int = 3
Run Code Online (Sandbox Code Playgroud)

我想重用该查询,所以我尝试延迟计算:

let arr = ref [1; 2; 3]
let q = lazy query { for item in !arr do select item; count }
q.Value;;

val arr : int list ref = {contents = [1; 2; 3];}
val q : Lazy<int> = 3
val …
Run Code Online (Sandbox Code Playgroud)

linq f# lazy-evaluation computation-expression

1
推荐指数
1
解决办法
153
查看次数

Clojure的.落每?

Clojure库是否具有"drop-every"类型的功能?什么需要一个懒惰的列表并返回一个列表与每第n项删除?

不能弄清楚如何做到这一点.

干杯

菲尔

functional-programming clojure lazy-evaluation

1
推荐指数
1
解决办法
198
查看次数

Haskell的hGetContents没有返回任何内容,即使我知道该文件包含文本

我有一小部分代码表现不像我预期的那样:

tempTest = do
    (_,tHand) <- openTempFile "." "tempTest.txt"
    hPutStr tHand "Test!"
    read <- hGetContents tHand
    putStrLn read
Run Code Online (Sandbox Code Playgroud)

它正确地写入文件,但当被要求将内容显示到屏幕时,它只显示一个新行(没有任何引号).鉴于这是多么简单,我假设我误解了getContents的工作原理.根据我的理解,它以块的形式读取文件,而不是一次读取所有文件; 这可以防止内存被正在读取的大量文件填满.为什么"阅读"没有从hGetContents接收任何内容?这里的任何帮助都将不胜感激.

haskell lazy-evaluation

1
推荐指数
1
解决办法
106
查看次数

根据所有先前的术语计算列表的术语

我有以下标识,它(隐式)定义正整数的分区数(即,您可以将整数写为有序正非零整数之和的方式):

一些说明:

  1. 这在Flajolet和Sedjewick的Analytic Combinatorics一书中进行了研究,并且该公式的图像来自那里,因为stackoverflow不支持LaTeX.

  2. sigma是一个数的除数的总和

我想编写一个计算带有P系数的列表的haskell程序.第i个术语取决于所有先前的术语(是压缩sigma和之前的Ps导致的列表的总和).这个问题就是如何从规范中"计算"程序的一个很好的例子,就像Gibbons在他的论文中写道的那样.

问题是:是否存在捕获此类计算的已知递归方案?列表中的每个术语都取决于所有先前术语的计算(并且结果与之前的术语无关,我的意思是,您必须为每个术语执行新的遍历)

recursion haskell formal-methods functional-programming lazy-evaluation

1
推荐指数
2
解决办法
531
查看次数

为什么懒惰的val在枚举中表现得如此神秘,Scala?

我想懒得找到所有已定义的枚举值名称的最大值.执行时下面的代码片段会反复进行无限循环打印InvocationTargetException.

object Enum extends Enumeration with App {
  val A, B = new Val
  lazy val foo = values.maxBy(_.toString)

  println(Enum.foo)
}
Run Code Online (Sandbox Code Playgroud)

当该问题不会出现foo是一个def.

为什么它会像这样?不lazy val应该只是一个记忆def

奇怪的是,下面的代码确实按预期工作:

object Enum extends Enumeration with App {
  val A, B = new Val
  lazy val foo = values.foldLeft(""){(a, b) => a + b}

  println(Enum.foo)
}
Run Code Online (Sandbox Code Playgroud)

我正在使用scala 2.11.7.

// ---解决方案

问题是foo是Value类型的,因此被解释为枚举值.解决问题的方法是创建一个代理def,lazy val如下面的代码:

object Enum extends Enumeration with App {
  val …
Run Code Online (Sandbox Code Playgroud)

enums scala lazy-evaluation

1
推荐指数
1
解决办法
101
查看次数

承诺是否懒惰评估?

以下代码是否保证输出HERE

var p = new Promise(() => console.log("HERE"))
Run Code Online (Sandbox Code Playgroud)

(也就是说,如果永远不会被调用来对结果做某事,那么var p = new Promise(fn)总会执行吗?)fnp.then(…)

更具体地说,在服务工作者的上下文中,如果我调用Cache.delete()但从不调用.then()返回值(或者我扔掉返回值),是否保证缓存条目被删除?

javascript lazy-evaluation promise service-worker

1
推荐指数
1
解决办法
541
查看次数