我目前正在构建一个半复杂的计算器,它基本上是我提供的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
这是一个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
是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) 我理解懒惰评估是什么,它是如何工作的以及它具有的优势,但是你能解释一下Haskell的严格评估是什么吗?我似乎无法找到关于它的更多信息,因为懒惰评估是最知名的.
他们每个人的好处是什么.什么时候严格评估实际使用?
我试图习惯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) Clojure库是否具有"drop-every"类型的功能?什么需要一个懒惰的列表并返回一个列表与每第n项删除?
不能弄清楚如何做到这一点.
干杯
菲尔
我有一小部分代码表现不像我预期的那样:
tempTest = do
(_,tHand) <- openTempFile "." "tempTest.txt"
hPutStr tHand "Test!"
read <- hGetContents tHand
putStrLn read
Run Code Online (Sandbox Code Playgroud)
它正确地写入文件,但当被要求将内容显示到屏幕时,它只显示一个新行(没有任何引号).鉴于这是多么简单,我假设我误解了getContents的工作原理.根据我的理解,它以块的形式读取文件,而不是一次读取所有文件; 这可以防止内存被正在读取的大量文件填满.为什么"阅读"没有从hGetContents接收任何内容?这里的任何帮助都将不胜感激.
我有以下标识,它(隐式)定义正整数的分区数(即,您可以将整数写为有序正非零整数之和的方式):

一些说明:
这在Flajolet和Sedjewick的Analytic Combinatorics一书中进行了研究,并且该公式的图像来自那里,因为stackoverflow不支持LaTeX.
sigma是一个数的除数的总和
我想编写一个计算带有P系数的列表的haskell程序.第i个术语取决于所有先前的术语(是压缩sigma和之前的Ps导致的列表的总和).这个问题就是如何从规范中"计算"程序的一个很好的例子,就像Gibbons在他的论文中写道的那样.
问题是:是否存在捕获此类计算的已知递归方案?列表中的每个术语都取决于所有先前术语的计算(并且结果与之前的术语无关,我的意思是,您必须为每个术语执行新的遍历)
recursion haskell formal-methods functional-programming lazy-evaluation
我想懒得找到所有已定义的枚举值名称的最大值.执行时下面的代码片段会反复进行无限循环打印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) 以下代码是否保证输出HERE?
var p = new Promise(() => console.log("HERE"))
Run Code Online (Sandbox Code Playgroud)
(也就是说,如果永远不会被调用来对结果做某事,那么var p = new Promise(fn)总会执行吗?)fnp.then(…)
更具体地说,在服务工作者的上下文中,如果我调用Cache.delete()但从不调用.then()返回值(或者我扔掉返回值),是否保证缓存条目被删除?